Kubernetes Pod卷 - Pod镜像的升级和回滚 - 探针

目录

扩展:

Pod创建的拓扑图:

提出的问题:

Pod 卷的使用:Pod的数据持久化问题

配置 Pod 以使用卷进行存储

参考文档:配置 Pod 以使用卷进行存储 | Kubernetes

有状态应用和无状态应用:

Pod 配置卷

 1、创建 Pod:

2、验证 Pod 中的容器是否正在运行,然后留意 Pod 的更改:

3、因为我们选择的创建卷的类型是emptyDir

4、如果我们在创建卷的时候使用的类型是hostPath:

Pod里的镜像的升级和回滚

参考网址:Deployments | Kubernetes

1、创建 Deployment

2、创建 Pod:

3、对nginx镜像进行升级(原nginx:1.14.2  升级后 nginx:1.16.1)

方法一:

方法二:直接修改deploy_nginx.yaml 文件中的nginx镜像版本,再重新运行该文件

发布的策略

参考文档:https://www.cnblogs.com/nulige/articles/10929182.html

回滚:就是我们可以将nginx的版本降低 ,从而形成Deployment的回滚

K8s的探针(probe)

kubelet的3种探针

参考文档:配置存活、就绪和启动探针 | Kubernetes

3种探针类型:存活探针(livenessProbe)、就绪探针(readinessProbe)、启动探针(startupProbe)

检查机制:使用探针来检查容器有四种不同的方法

添加存活、就绪和启动探针

实验:


扩展:

容器服务 ACK  --》阿里云提供支持的

容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理;2021年成为国内唯一连续三年入选Gartner公共云容器报告的产品,2022年国内唯一进入Forrester领导者象限。其整合了阿里云虚拟化、存储、网络和安全能力,助力企业高效运行云端Kubernetes容器化应用。

Pod创建的拓扑图:

提出的问题:

问题1:taints和 toleration是怎样查看的?如何知道那些机器上由污点,哪些Pod可以容忍?

查看某个节点详细信息(kubectl describe node表示所有节点的详细信息)

[root@master pod]# kubectl describe node master

查看master是否打过污点taints:(证明master打过污点taints)

[root@master pod]# kubectl describe node master | grep -i taints
Taints:             node-role.kubernetes.io/master:NoSchedule
[root@master pod]# grep -i 表示不区分大小写啦

查看Pod是否存在容忍度:

[root@master pod]# kubectl describe pod etcd-master -n kube-system | grep -i tolerations
Tolerations:       :NoExecute op=Exists
[root@master pod]# 

问题2:deployment:全自动调度:根据node的算力 --》它到底是如何跟node评分的(最底层的机制)

问题3:Pod亲和性调度算法,是否在你的工作中出现过导致某台node节点负载过高,从而出现故障

Pod 卷的使用:Pod的数据持久化问题

配置 Pod 以使用卷进行存储

参考文档:配置 Pod 以使用卷进行存储 | Kubernetes

只要容器存在,容器的文件系统就会存在,因此当一个容器终止并重新启动,对该容器的文件系统改动将丢失。 对于独立于容器的持久化存储你可以使用卷。 这对于有状态应用程序尤为重要,例如键值存储(如 Redis)和数据库。

有状态应用和无状态应用:

有状态应用:有状态服务 可以说是 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql数据库、kafka、zookeeper等)

每个实例都需要有自己独立的持久化存储

在创建、删除、扩容/缩容和更新 StatefulSets 的 Pods,是需要讲究顺序的

mysql: 有状态 : 启动的时候,必须按照顺序,并且pod是有固定的编号不允许随机分配
    master ,slave

    写数据--》master上写

特点:缩容的时候是顺序进行的,不是随机的

无状态应用:

(1)、是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。

(2)、多个实例可以共享相同的持久化数据。例如:nginx实例,tomcat实例等

(3)、相关的k8s资源有:ReplicaSet、ReplicationController、Deployment等,由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容的时候并不会明确缩容某一个pod,而是随机的,因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以。

特点:

随便访问那个pod都会得到一样的结果

pod的序号是随机的

缩容的时候是随机进行的,删除或者增加,顺序是随机的

nginx: 无状态 : 启动的时候,不必须按照顺序,并且pod是随机分配id
    web服务:  访问任意一个web服务器,得到结果都是一样的,而且网页数据也是从同一个地方获取

Pod 配置卷

在本练习中,你将创建一个运行 Pod,该 Pod 仅运行一个容器并拥有一个类型为 emptyDir 的卷, 在整个 Pod 生命周期中一直存在,即使 Pod 中的容器被终止和重启。以下是 Pod 的配置:

apiVersion: v1
kind: Pod
metadata:name: redis
spec:containers:- name: redisimage: redisvolumeMounts:- name: redis-storagemountPath: /data/redisvolumes:- name: redis-storageemptyDir: {}

 1、创建 Pod:

[root@master pod]# kubectl apply -f redis.yaml 
pod/redis created
[root@master pod]# 

2、验证 Pod 中的容器是否正在运行,然后留意 Pod 的更改

[root@master pod]# kubectl get pod redis --watch
NAME    READY   STATUS    RESTARTS   AGE
redis   1/1     Running   0          46s
^C[root@master pod]# --watch  表示时时监控,一旦Pod发生改变,它就会显示出来

3、因为我们选择的创建卷的类型是emptyDir

[root@master pod]# kubectl get pod redis -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
redis   1/1     Running   0          9m25s   10.244.2.5   node2   <none>           <none>
[root@master pod]# 

那么k8s会在node2上的/var/lib/docker/volums/上随机创建一个空文件夹来存放数据

并且是用来临时存放数据       

[root@node2 redis]# pwd
/var/lib/docker/volumes/1e3244a4c734b42343ed1a8a4b3f4a06030cbe1266a58b34b7b6e7fb54af06c4/_data/redis
[root@node2 redis]# 

4、如果我们在创建卷的时候使用的类型是hostPath:

可以确定volume卷的位置了,因为是自己定义上去的。 

Pod里的镜像的升级和回滚

参考网址:Deployments | Kubernetes

1、创建 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80

2、创建 Pod:

[root@master pod]# kubectl apply -f deploy_nginx.yaml 
deployment.apps/nginx-deployment created
[root@master pod]# 

3、对nginx镜像进行升级(原nginx:1.14.2  升级后 nginx:1.16.1

方法一:

先来更新 nginx Pod 以使用 nginx:1.16.1 镜像,而不是 nginx:1.14.2 镜像。

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1

或者使用下面的命令:

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1

Deployment 可确保在更新时仅关闭一定数量的 Pod。默认情况下,它确保至少所需 Pod 的 75% 处于运行状态(最大不可用比例为 25%)。(滚动升级Deployment )

如果仔细查看上述 Deployment ,将看到它首先创建了一个新的 Pod,然后删除旧的 Pod, 并创建了新的 Pod。它不会杀死旧 Pod,直到有足够数量的新 Pod 已经出现。 在足够数量的旧 Pod 被杀死前并没有创建新 Pod。它确保至少 3 个 Pod 可用, 同时最多总共 4 个 Pod 可用。 当 Deployment 设置为 4 个副本时,Pod 的个数会介于 3 和 5 之间。

查看升级后的Deployment中的nginx版本

[root@master pod]# kubectl describe pod nginx-deployment-ff6655784-bh5t5|grep Image:Image:          nginx:1.16.1
[root@master pod]# 

方法二:直接修改deploy_nginx.yaml 文件中的nginx镜像版本,再重新运行该文件

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

重新运行一次deploy_nginx.yaml文件

[root@master pod]# kubectl apply -f deploy_nginx.yaml 
deployment.apps/nginx-deployment configured
[root@master pod]# kubectl get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
k8s-nginx-6d779d947c-f72hf         1/1     Running   0          22h     10.244.1.4   node1   <none>           <none>
k8s-nginx-6d779d947c-hnhf5         1/1     Running   0          22h     10.244.3.2   node3   <none>           <none>
k8s-nginx-6d779d947c-xgjzg         1/1     Running   0          22h     10.244.2.2   node2   <none>           <none>
my-nginx-cf54cdbf7-8sbns           1/1     Running   0          6h9m    10.244.1.5   node1   <none>           <none>
my-nginx-cf54cdbf7-ptjw7           1/1     Running   0          5h56m   10.244.3.5   node3   <none>           <none>
my-nginx-cf54cdbf7-wf48x           1/1     Running   0          6h9m    10.244.2.4   node2   <none>           <none>
nginx-deployment-67dffbbbb-9kzj8   1/1     Running   0          7s      10.244.1.8   node1   <none>           <none>
nginx-deployment-67dffbbbb-m6qm8   1/1     Running   0          4s      10.244.2.8   node2   <none>           <none>
nginx-deployment-67dffbbbb-qfb2m   1/1     Running   0          6s      10.244.3.8   node3   <none>           <none>
redis                              1/1     Running   0          3h14m   10.244.2.5   node2   <none>           <none>
scnginx                            1/1     Running   0          16h     10.244.2.3   node2   <none>           <none>
[root@master pod]# kubectl describe pod nginx-deployment-67dffbbbb-qfb2m|grep Image:Image:          nginx:latest
[root@master pod]# 

发布的策略

金丝雀发布
蓝绿发布
灰度发布
滚动发布 

参考文档:https://www.cnblogs.com/nulige/articles/10929182.html

回滚:就是我们可以将nginx的版本降低 ,从而形成Deployment的回滚

你可能想要回滚 Deployment;例如,当 Deployment 不稳定时(例如进入反复崩溃状态)。 默认情况下,Deployment 的所有上线记录都保留在系统中,以便可以随时回滚 (你可以通过修改修订历史记录限制来更改这一约束)。

K8s的探针(probe)

probe 是由 kubelet 对容器执行的定期诊断。 要执行诊断,kubelet 既可以在容器内执行代码,也可以发出一个网络请求。

使用探针去试探pod是否能正常提供服务

kubelet的3种探针

参考文档:配置存活、就绪和启动探针 | Kubernetes

3种探针类型:存活探针(livenessProbe)、就绪探针(readinessProbe)、启动探针(startupProbe)

检查机制:使用探针来检查容器有四种不同的方法

添加存活、就绪和启动探针

 

实验:

参考实验文档:配置存活、就绪和启动探针 | Kubernetes

1、定义存活命令

2、定义一个存活态 HTTP 请求接口

3、定义 TCP 的存活探测

4、定义 gRPC 存活探针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 系统errno 对应参考及代码

结论 linux下系统errno都有对应的说明描述&#xff0c;发生错误时获取errno即可知道具体问题描述 如下图 代码如下 golang版 package main import ("syscall""strings""fmt" ) func main() {for i : 0; i < 200; i {if !strings.HasPrefi…

uniapp 微信小程序导航功能(单个地址)

获取终点的坐标&#xff0c;根据终点的坐标&#xff0c;终点名称&#xff0c;终点详细地址&#xff0c;调起地图导航到第三方APP 1、针对单个地址导航 <template><view click"toGetLocation"></view><view click"toNavigation">&…

机器学习20:嵌入-Embeddings

嵌入&#xff08;Embeddings&#xff09;是一个相对低维的空间&#xff0c;我们可以将高维向量转换到其中。嵌入使得对大型输入&#xff08;例如表示单词的稀疏向量&#xff09;进行机器学习变得更加容易。理想情况下&#xff0c;嵌入通过将语义相似的输入紧密地放置在嵌入空间…

在SpringBoot中整合RabbitMQ(19版idea)

首先呢就需要我们在RabbitMQ的可视化端口创建一个虚拟机,我创建的为 xm 1.创建SpringBoot项目 到这里SpringBoot项目就创建成功了 2.创建测试类 Testpublic void testConnection() throws Exception {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory…

windows PE 指南(基础部分)(一)

windows PE 指南&#xff08;基础部分&#xff09;&#xff08;一&#xff09; 查找软件注册码64位汇编和编译连接PE和COFF文件简介PE和COFF文件布局简介源代码的作用obj的作用PE的作用 COFF格式文件布局概览PE格式文件布局概览COFF格式和PE格式的布局总结 COFF头COFF File Hea…

深入理解Linux内核网络——内核与用户进程协作之同步阻塞方案(BIO)

文章目录 一、相关实际问题二、socket的直接创建三、内核和用户进程协作之阻塞方式1&#xff09;等待接收消息2&#xff09;软中断模块3&#xff09;同步队列阻塞总结 在上一部分中讲述了网络包是如何从网卡送到协议栈的&#xff08;详见深入理解Linux网络——内核是如何接收到…

Wireshark简单使用教程

混合模式 混合模式就是在抓包的时候不轮是有线网络还是WIFI网络等都会将流量给打印出来 1.打开Wireshark抓包软件 2.点击捕获选择选项按钮 3.选中《在接口上使用混杂模式》 &#xff08;默认是开启的&#xff09; 过滤器 过滤器可以只筛选你要的数据包&#xff0c;下图箭…

网络化航天器弹性姿态跟踪控制

源自&#xff1a;指挥与控制学报 作者&#xff1a;于洋 陈哲 袁源 摘 要 针对网络化航天器姿态弹性跟踪控制问题,借鉴主动抗干扰控制思想,设计攻击检测机制对控制器端到执行器端网络攻击进行监测,利用网络通道传输信息设计两个自适应观测器,在抑制内部噪声的同时对外界扰…

2023年5月少儿编程 中国电子学会图形化编程等级考试Scratch编程二级真题解析(判断题)

2023年5月scratch编程等级考试二级真题 判断题(共10题,每题2分,共20分) 26、如下图所示,点击绿旗,运行程序后,舞台上会出现五个机器人 答案:对 考点分析:考查积木综合使用,重点考查图章积木的使用,本题还有一个关键是初始位置x坐标值是-150,所以到最后端的时候总…

大模型调用工具魔搭GPT——一键调用魔搭社区上百个AI模型的API

为了让模型开发变得更容易,阿里云在发布会现场推出了一款令开发者耳目一新的工具:ModelScopeGPT(魔搭GPT)。它能够通过担任“中枢模型”的大语言模型一键调用魔搭社区其他的AI模型,实现大模型和小模型协同完成复杂任务。 这类智能调用工具被业界普遍看好。ModelScopeGP…

自学网络安全究竟该从何学起?

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入行…

亚马逊哪些因素影响下单成功率

在亚马逊上下单时&#xff0c;下列因素可能影响下单的成功率&#xff1a; 1、账户信息准确性&#xff1a;确保您的亚马逊账户信息是准确的&#xff0c;包括配送地址、付款方式和联系方式等。错误或过期的信息可能导致下单失败。 2、库存和供应情况&#xff1a;某些商品可能由…