宝塔wordpress ip访问,全网最低价seo,合肥市网站建设公司,巩义网站推广怎么做1、标签和选择器
1.1 标签Label
配置文件#xff1a;在各类资源的sepc.metadata.label 中进行配置通过kubectl 命令行创建修改标签#xff0c;语法如下 创建临时label#xff1a;kubectl label po 资源名称 apphello -n 命令空间#xff08;可不加#xff0…1、标签和选择器
1.1 标签Label
配置文件在各类资源的sepc.metadata.label 中进行配置通过kubectl 命令行创建修改标签语法如下 创建临时labelkubectl label po 资源名称 apphello -n 命令空间可不加修改已经存在的label kubectl label po 资源名称 apphello -n 命令空间可不加 --overwrite通过查看lable的时候修改label selector 按照 label 单值查找节点 kubectl get po -A -l apphello查看所有节点的labels kubectl get po --show-labels
## 创建pod
[rootk8s-master ~]# kubectl create -f nginx-po.yml
pod/nginx-liveness-po created# 查看pod状态
[rootk8s-master ~]# kubectl get po nginx-liveness-po
NAME READY STATUS RESTARTS AGE
nginx-liveness-po 1/1 Running 0 51s# 查看pod状态显示label信息
[rootk8s-master ~]# kubectl get po nginx-liveness-po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-liveness-po 1/1 Running 0 68s testl.0.0,typeapp# 临时给pod添加label
[rootk8s-master ~]# kubectl label po nginx-liveness-po authxiaobai
pod/nginx-liveness-po labeled[rootk8s-master ~]# kubectl get po nginx-liveness-po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-liveness-po 1/1 Running 0 105s authxiaobai,testl.0.0,typeapp# 修改pod的label但是不加 --overwrite 会提示失败需要加 --overweite
[rootk8s-master ~]# kubectl label po nginx-liveness-po authxiaohong
error: auth already has a value (xiaobai), and --overwrite is false
[rootk8s-master ~]# kubectl label po nginx-liveness-po authxiaohong --overwrite
pod/nginx-liveness-po labeled# 修改label属性已经更改
[rootk8s-master ~]# kubectl get po nginx-liveness-po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-liveness-po 1/1 Running 0 2m3s authxiaohong,testl.0.0,typeapp# 通过单个labe信息查找pod
[rootk8s-master ~]# kubectl get po -A -l typeapp
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-liveness-po 1/1 Running 0 8m27s1.2 选择器Seletor
通过yaml配置文件在各对象的配置 spec.seletor 或其他可以写selector的属性中编写。通过命令行模式语法如下 匹配但个值查找apphello的podkubectl get po -A -I apphello匹配多个值kubectl get po -A -I ‘k8s-app in (metrics-server,kubernetes-dashboard)’查找version!1 and appnginx的pod信息kubectl get po -I version!1,appnginx # 单值匹配的时候
[rootk8s-master ~]# kubectl get po -A -l typeapp --show-labels
NAMESPACE NAME READY STATUS RESTARTS AGE LABELS
default nginx-liveness-po 1/1 Running 0 18m authxiaohong,testl.0.0,typeapp# 显示所有的pod的label信息
[rootk8s-master ~]# kubectl get po -A --show-labels
NAMESPACE NAME READY STATUS RESTARTS AGE LABELS
default nginx-liveness-po 1/1 Running 0 18m authxiaohong,testl.0.0,typeapp
kube-flannel kube-flannel-ds-glkkb 1/1 Running 4 (24h ago) 3d19h appflannel,controller-revision-hash7cfb6d964b,pod-template-generation1,tiernode
kube-flannel kube-flannel-ds-pdmtw 1/1 Running 1 (24h ago) 44h appflannel,controller-revision-hash7cfb6d964b,pod-template-generation1,tiernode
kube-flannel kube-flannel-ds-tpm8x 1/1 Running 2 (24h ago) 3d19h appflannel,controller-revision-hash7cfb6d964b,pod-template-generation1,tiernode
kube-system coredns-c676cc86f-pdsl6 1/1 Running 3 (24h ago) 2d7h k8s-appkube-dns,pod-template-hashc676cc86f
kube-system coredns-c676cc86f-q7hcw 1/1 Running 1 (24h ago) 2d7h k8s-appkube-dns,pod-template-hashc676cc86f
kube-system etcd-k8s-master 1/1 Running 2 (24h ago) 3d20h componentetcd,tiercontrol-plane
kube-system kube-apiserver-k8s-master 1/1 Running 3 (24h ago) 3d20h componentkube-apiserver,tiercontrol-plane
kube-system kube-controller-manager-k8s-master 1/1 Running 4 (24h ago) 3d20h componentkube-controller-manager,tiercontrol-plane
kube-system kube-proxy-n2w92 1/1 Running 4 (24h ago) 3d19h controller-revision-hashdd4c999cf,k8s-appkube-proxy,pod-template-generation1
kube-system kube-proxy-p8fhs 1/1 Running 1 (24h ago) 44h controller-revision-hashdd4c999cf,k8s-appkube-proxy,pod-template-generation1
kube-system kube-proxy-xtllb 1/1 Running 2 (24h ago) 3d20h controller-revision-hashdd4c999cf,k8s-appkube-proxy,pod-template-generation1
kube-system kube-scheduler-k8s-master 1/1 Running 4 (24h ago) 3d20h componentkube-scheduler,tiercontrol-plane# 匹配单个值 app!flannel
[rootk8s-master ~]# kubectl get po -A -l app!flannel
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-liveness-po 1/1 Running 0 19m
kube-system coredns-c676cc86f-pdsl6 1/1 Running 3 (24h ago) 2d7h
kube-system coredns-c676cc86f-q7hcw 1/1 Running 1 (24h ago) 2d7h
kube-system etcd-k8s-master 1/1 Running 2 (24h ago) 3d20h
kube-system kube-apiserver-k8s-master 1/1 Running 3 (24h ago) 3d20h
kube-system kube-controller-manager-k8s-master 1/1 Running 4 (24h ago) 3d20h
kube-system kube-proxy-n2w92 1/1 Running 4 (24h ago) 3d19h
kube-system kube-proxy-p8fhs 1/1 Running 1 (24h ago) 44h
kube-system kube-proxy-xtllb 1/1 Running 2 (24h ago) 3d20h
kube-system kube-scheduler-k8s-master 1/1 Running 4 (24h ago) 3d20h[rootk8s-master ~]# kubectl get po -A -l app!flannel --show-labels
NAMESPACE NAME READY STATUS RESTARTS AGE LABELS
default nginx-liveness-po 1/1 Running 0 19m authxiaohong,testl.0.0,typeapp
kube-system coredns-c676cc86f-pdsl6 1/1 Running 3 (24h ago) 2d7h k8s-appkube-dns,pod-template-hashc676cc86f
kube-system coredns-c676cc86f-q7hcw 1/1 Running 1 (24h ago) 2d7h k8s-appkube-dns,pod-template-hashc676cc86f
kube-system etcd-k8s-master 1/1 Running 2 (24h ago) 3d20h componentetcd,tiercontrol-plane
kube-system kube-apiserver-k8s-master 1/1 Running 3 (24h ago) 3d20h componentkube-apiserver,tiercontrol-plane
kube-system kube-controller-manager-k8s-master 1/1 Running 4 (24h ago) 3d20h componentkube-controller-manager,tiercontrol-plane
kube-system kube-proxy-n2w92 1/1 Running 4 (24h ago) 3d19h controller-revision-hashdd4c999cf,k8s-appkube-proxy,pod-template-generation1
kube-system kube-proxy-p8fhs 1/1 Running 1 (24h ago) 44h controller-revision-hashdd4c999cf,k8s-appkube-proxy,pod-template-generation1
kube-system kube-proxy-xtllb 1/1 Running 2 (24h ago) 3d20h controller-revision-hashdd4c999cf,k8s-appkube-proxy,pod-template-generation1
kube-system kube-scheduler-k8s-master 1/1 Running 4 (24h ago) 3d20h componentkube-scheduler,tiercontrol-plane# 多值匹配
[rootk8s-master ~]# kubectl get po -A -l app!flannel,test1.0.0 --show-labels
No resources found# 多值匹配多值匹配是“与”的关系不是“或”的关系
[rootk8s-master ~]# kubectl get po -A -l app!flannel,typeapp --show-labels
NAMESPACE NAME READY STATUS RESTARTS AGE LABELS
default nginx-liveness-po 1/1 Running 0 20m authxiaohong,testl.0.0,typeapp2、部署对象Deployment无状态应用 2.1 创建deploy
2.1.1 通过命令行创建一个deployment
# 创建一个deployment
[rootk8s-master ~]# kubectl create deploy nginx-deploy --imagenginx:1.20
deployment.apps/nginx-deploy created创建一个deployment 使用命令行模式kubectl create deploy nginx-deploy --imagenginx:1.20 或执行 kubectl create -f xxx.yaml --record -record会在annotation中记录当前命令创建或升级了资源后续可以查看做过哪变动操作。
2.1.2 查看deployment 信息
通过kubectl get 查看deployment可以使用deployment也可以用deploy
# 通过kubectl get 查看deployment可以使用deployment也可以用deploy
[rootk8s-master ~]# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 10s[rootk8s-master ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 14s2.1.3 查看replicasets 信息
由于创建的deployment资源包含 replicasets信息replicasets是可以自动扩容和缩容可以查看到 replicasets的名字中包含deploy资源的名字信息
# 由于deployment包含 replicasetsreplicasets是可以自动扩容和缩容可以查看到 replicasets的名字中包含deploy的名字信息
[rootk8s-master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-86b7d8c46d 1 1 1 18s[rootk8s-master ~]# kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
nginx-deploy-86b7d8c46d 1 1 1 38s2.1.4 查看pod 信息
可以查看到deployment创建的pod种包含 replicasets 资源的名字信息
# 下面的pod可以查看到pod的名字包含 replicasets 名字的信息
[rootk8s-master ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-deploy-86b7d8c46d-78rj9 1/1 Running 0 46s2.1.5 通过命令行模式创建的deployment 生成 yaml信息
# 通过创建好的deploy生成yaml文件
[rootk8s-master ~]# kubectl get deploy nginx-deploy -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: 1creationTimestamp: 2024-02-23T10:59:04Zgeneration: 1labels:app: nginx-deployname: nginx-deploynamespace: defaultresourceVersion: 235341uid: def47aae-13f7-415a-a9d1-18ef72e5a925
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: nginx-deploystrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: nginx-deployspec:containers:- image: nginx:1.20imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30
status:availableReplicas: 1conditions:- lastTransitionTime: 2024-02-23T10:59:05ZlastUpdateTime: 2024-02-23T10:59:05Zmessage: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: Truetype: Available- lastTransitionTime: 2024-02-23T10:59:04ZlastUpdateTime: 2024-02-23T10:59:05Zmessage: ReplicaSet nginx-deploy-86b7d8c46d has successfully progressed.reason: NewReplicaSetAvailablestatus: Truetype: ProgressingobservedGeneration: 1readyReplicas: 1replicas: 1updatedReplicas: 12.1.6 查看po、rs、deploy中所有的label信息
通过以下信息可以查看到 deploy、rs、pod种都包含同一个label信息appnginx-deploy rs和pod中同时还有一个相同的pod标签信息pod-template-hash86b7d8c46d这个标签信息就是为了我们能更方便的动态创建pod使用。
[rootk8s-master ~]# kubectl get po,rs,deploy --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod/nginx-deploy-86b7d8c46d-78rj9 1/1 Running 0 30m appnginx-deploy,pod-template-hash86b7d8c46dNAME DESIRED CURRENT READY AGE LABELS
replicaset.apps/nginx-deploy-86b7d8c46d 1 1 1 30m appnginx-deploy,pod-template-hash86b7d8c46dNAME READY UP-TO-DATE AVAILABLE AGE LABELS
deployment.apps/nginx-deploy 1/1 1 1 30m appnginx-deploy2.1.7 通过2.1.5中生成的yaml信息创建yaml文件
通过命令行创建的deployment信息生成yaml信息根据我们所需信息来创建yaml文件
apiVersion: apps/v1 # deployment api版本
kind: Deployment # 资源类型为 Deployment
metadata: # 原信息labels: # 标签app: nginx-deploy # 具体的标签信息appnginx-deploy key: value 配置形式name: nginx-deploy # deployment的名字namespace: default # 所在的命名空间
spec:replicas: 1 # 期望副本数revisionHistoryLimit: 10 # 进行滚动更新后保留的历史版本数量selector: # 选择器用于找到匹配的RSmatchLabels: # 按照标签匹配app: nginx-deploy # 匹配的标签strategy: #更新策略rollingUpdate: # 滚动更新配置maxSurge: 25% # 滚动更新时更新的个数最多超过多少个期望副本数或者比例maxUnavailable: 25% # 进行滚动更新时最大不可用比例更新比例表示在所有副本数中最多可以有多少个不更新成功type: RollingUpdate # 更新类型采用滚动更新template: # pod 模板metadata: # pod模板的元信息labels: # pod模板的标签app: nginx-deploy # pod模板的标签信息spec: # pod 期望信息containers: # pod 的容器信息- image: nginx:1.20 # 镜像信息imagePullPolicy: IfNotPresent # 镜像拉取策略name: nginx # 容器名字restartPolicy: Always # pod的重启策略terminationGracePeriodSeconds: 30 # pod的过期时间2.2 滚动更新 只有修改了deployment 配置文件文件中的template中的属性后才会触发滚动更新操作 2.2.1 修改deploy中的其他属性查看pod是否会更新
[rootk8s-master ~]# kubectl get deployments --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 1/1 1 1 44m appnginx-deploy[rootk8s-master ~]# kubectl edit deployments nginx-deploy
deployment.apps/nginx-deploy edited可以通过下面新的看到我们的deploy更新并没有导致pod更新只是把新加的标签给更新到了deploy上。
[rootk8s-master ~]# kubectl get deployments --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 1/1 1 1 49m appnginx-deploy,new-versiontest# rs和pod并没有这个标签信息
[rootk8s-master ~]# kubectl get deployments,rs,pod --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
deployment.apps/nginx-deploy 1/1 1 1 51m appnginx-deploy,new-versiontestNAME DESIRED CURRENT READY AGE LABELS
replicaset.apps/nginx-deploy-86b7d8c46d 1 1 1 51m appnginx-deploy,pod-template-hash86b7d8c46dNAME READY STATUS RESTARTS AGE LABELS
pod/nginx-deploy-86b7d8c46d-78rj9 1/1 Running 0 51m appnginx-deploy,pod-template-hash86b7d8c46d 2.2.2 修改这个deploy的副本数 [rootk8s-master ~]# kubectl get deploy nginx-deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx-deploy 3/3 3 3 55m appnginx-deploy,new-versiontest
[rootk8s-master ~]# kubectl describe deployments nginx-deploy
Name: nginx-deploy
Namespace: default
CreationTimestamp: Fri, 23 Feb 2024 18:59:04 0800
Labels: appnginx-deploynew-versiontest
Annotations: deployment.kubernetes.io/revision: 1
Selector: appnginx-deploy
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:Labels: appnginx-deployContainers:nginx:Image: nginx:1.20Port: noneHost Port: noneEnvironment: noneMounts: noneVolumes: none
Conditions:Type Status Reason---- ------ ------Progressing True NewReplicaSetAvailableAvailable True MinimumReplicasAvailable
OldReplicaSets: none
NewReplicaSet: nginx-deploy-86b7d8c46d (3/3 replicas created)
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 55m deployment-controller Scaled up replica set nginx-deploy-86b7d8c46d to 1Normal ScalingReplicaSet 27s deployment-controller Scaled up replica set nginx-deploy-86b7d8c46d to 3 from 1
[rootk8s-master ~]#通过增加副本数后我们可以看到deploy变为了3rs为1pod为3pod的模版使用的都是同一个模版。
[rootk8s-master ~]# kubectl get deployments,rs,po --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
deployment.apps/nginx-deploy 3/3 3 3 57m appnginx-deploy,new-versiontestNAME DESIRED CURRENT READY AGE LABELS
replicaset.apps/nginx-deploy-86b7d8c46d 3 3 3 57m appnginx-deploy,pod-template-hash86b7d8c46dNAME READY STATUS RESTARTS AGE LABELS
pod/nginx-deploy-86b7d8c46d-6cf95 1/1 Running 0 93s appnginx-deploy,pod-template-hash86b7d8c46d
pod/nginx-deploy-86b7d8c46d-78rj9 1/1 Running 0 57m appnginx-deploy,pod-template-hash86b7d8c46d
pod/nginx-deploy-86b7d8c46d-vjncw 1/1 Running 0 93s appnginx-deploy,pod-template-hash86b7d8c46d2.2.3 通过edit选项编辑template属性后我们看看会发生那些变化 通过实时监控deploy的时候可以看到deploy的变化
[rootk8s-master ~]# kubectl get deployments.apps nginx-deploy -w
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 3/3 3 3 61m
nginx-deploy 3/3 3 3 61m
nginx-deploy 3/3 3 3 61m
nginx-deploy 3/3 0 3 61m
nginx-deploy 3/3 1 3 61m
nginx-deploy 4/3 1 4 62m
nginx-deploy 3/3 1 3 62m
nginx-deploy 3/3 2 3 62m
nginx-deploy 4/3 2 4 62m
nginx-deploy 3/3 2 3 62m
nginx-deploy 3/3 3 3 62m
nginx-deploy 4/3 3 4 62m
nginx-deploy 3/3 3 3 62m# 通过这个命令可以看到更新的状态为成功了
[rootk8s-master ~]# kubectl rollout status deployment nginx-deploy
deployment nginx-deploy successfully rolled out2.2.4 修改set选项编辑刚才的镜像信息看看更新如何
[rootk8s-master ~]# kubectl set image deployment/nginx-deploy nginxnginx:1.20
deployment.apps/nginx-deploy image updated[rootk8s-master ~]# kubectl get deployments.apps nginx-deploy -w
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 3/3 3 3 72m
nginx-deploy 3/3 3 3 72m
nginx-deploy 3/3 3 3 72m
nginx-deploy 3/3 0 3 72m
nginx-deploy 3/3 1 3 72m
nginx-deploy 4/3 1 4 72m
nginx-deploy 3/3 1 3 72m
nginx-deploy 3/3 2 3 72m
nginx-deploy 4/3 2 4 72m
nginx-deploy 3/3 2 3 72m
nginx-deploy 3/3 3 3 72m
nginx-deploy 4/3 3 4 72m
nginx-deploy 3/3 3 3 72m 通过如下信息可以看到新的nginx pod信息可以看到他滚动更新到刚开始的rs信息
[rootk8s-master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-6bf65c4445 0 0 0 17m
nginx-deploy-86b7d8c46d 3 3 3 79m
[rootk8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-86b7d8c46d-4s98c 1/1 Running 0 7m17s
nginx-deploy-86b7d8c46d-7s9gz 1/1 Running 0 7m19s
nginx-deploy-86b7d8c46d-w8ljk 1/1 Running 0 7m15s2.3 回滚操作 有时候你可能想回退一个Deployment例如当Deployment不稳定时比如一直crash looping。 默认侍况下kubernetes会在系统中保存前两次的Deployment的rollout历史记录以便你可以随时会退你可以修改revisionhistory limit来更改保存的revision数) 2.3.1 通过set选项修改一个错误的images信息
[rootk8s-master ~]# kubectl set image deployment/nginx-deploy nginxnginx:1.200
deployment.apps/nginx-deploy image updated# 可以看到一个更新的这个nginx的状态是ImagePullBackOff
[rootk8s-master ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
nginx-deploy-85bc5c8fdb-h4rmn 0/1 ImagePullBackOff 0 83s
nginx-deploy-86b7d8c46d-4s98c 1/1 Running 0 25m
nginx-deploy-86b7d8c46d-7s9gz 1/1 Running 0 25m
nginx-deploy-86b7d8c46d-w8ljk 1/1 Running 0 25m使用命令kubectl describe pod nginx-deploy-85bc5c8fdb-h4rmn 可以查看到这个新的pod信息
2.3.2 通过edit选项查看这个deploy的信息 2.3.3 查看历史的版本信息
[rootk8s-master ~]# kubectl rollout history deployment/nginx-deploy --revision0
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
2 none
3 none
4 none2.3.4 查看历史更新的具体信息
[rootk8s-master ~]# kubectl rollout history deployment/nginx-deploy --revision4
deployment.apps/nginx-deploy with revision #4
Pod Template:Labels: appnginx-deploypod-template-hash85bc5c8fdbContainers:nginx:Image: nginx:1.200Port: noneHost Port: noneEnvironment: noneMounts: noneVolumes: none[rootk8s-master ~]# kubectl rollout history deployment/nginx-deploy --revision3
deployment.apps/nginx-deploy with revision #3
Pod Template:Labels: appnginx-deploypod-template-hash86b7d8c46dContainers:nginx:Image: nginx:1.20Port: noneHost Port: noneEnvironment: noneMounts: noneVolumes: none[rootk8s-master ~]# kubectl rollout history deployment/nginx-deploy --revision2
deployment.apps/nginx-deploy with revision #2
Pod Template:Labels: appnginx-deploypod-template-hash6bf65c4445Containers:nginx:Image: nginx:1.21Port: noneHost Port: noneEnvironment: noneMounts: noneVolumes: none
2.3.5 回滚为revision3的版本
[rootk8s-master ~]# kubectl rollout undo deployment/nginx-deploy --to-revision3
deployment.apps/nginx-deploy rolled back[rootk8s-master ~]# kubectl rollout status deployments.apps nginx-deploy
deployment nginx-deploy successfully rolled out如下已经回滚为了revision3的版本。
[rootk8s-master ~]# kubectl describe deployments nginx-deploy
Name: nginx-deploy
Namespace: default
CreationTimestamp: Fri, 23 Feb 2024 18:59:04 0800
Labels: appnginx-deploynew-versiontest
Annotations: deployment.kubernetes.io/revision: 5
Selector: appnginx-deploy
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:Labels: appnginx-deployContainers:nginx:Image: nginx:1.20Port: noneHost Port: noneEnvironment: noneMounts: noneVolumes: none
Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailable
OldReplicaSets: none
NewReplicaSet: nginx-deploy-86b7d8c46d (3/3 replicas created)
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 57m deployment-controller Scaled up replica set nginx-deploy-86b7d8c46d to 3 from 1Normal ScalingReplicaSet 51m deployment-controller Scaled up replica set nginx-deploy-6bf65c4445 to 1Normal ScalingReplicaSet 50m deployment-controller Scaled down replica set nginx-deploy-86b7d8c46d to 2 from 3Normal ScalingReplicaSet 50m deployment-controller Scaled up replica set nginx-deploy-6bf65c4445 to 2 from 1Normal ScalingReplicaSet 49m deployment-controller Scaled down replica set nginx-deploy-86b7d8c46d to 1 from 2Normal ScalingReplicaSet 49m deployment-controller Scaled up replica set nginx-deploy-6bf65c4445 to 3 from 2Normal ScalingReplicaSet 49m deployment-controller Scaled down replica set nginx-deploy-86b7d8c46d to 0 from 1Normal ScalingReplicaSet 40m deployment-controller Scaled up replica set nginx-deploy-86b7d8c46d to 1 from 0Normal ScalingReplicaSet 40m deployment-controller Scaled down replica set nginx-deploy-6bf65c4445 to 2 from 3Normal ScalingReplicaSet 40m (x4 over 40m) deployment-controller (combined from similar events): Scaled down replica set nginx-deploy-6bf65c4445 to 0 from 1Normal ScalingReplicaSet 16m deployment-controller Scaled up replica set nginx-deploy-85bc5c8fdb to 1Normal ScalingReplicaSet 116s deployment-controller Scaled down replica set nginx-deploy-85bc5c8fdb to 0 from 12.3.6 为啥可以回退为revision3呢
可以通过设置spec.revisonHistoryLimit来指定deployment保留多少revision。如果revisonHistoryLimit设置为0则不允许deployment回退了。
2.4 扩容和缩容
扩缩容命令 kubectl scale --replicas6 deployment nginx-deploy扩容和缩容一样只需要通过–replicas 指定数量即可
2.4.1 扩容
# 目前有3个pod扩容到6个
[rootk8s-master ~]# kubectl scale --replicas6 deployment nginx-deploy
deployment.apps/nginx-deploy scaled
[rootk8s-master ~]# kubectl get deployments nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 6/6 6 6 5h43m
[rootk8s-master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-6bf65c4445 0 0 0 4h42m
nginx-deploy-85bc5c8fdb 0 0 0 4h7m
nginx-deploy-86b7d8c46d 6 6 6 5h43m
[rootk8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-86b7d8c46d-4s98c 1/1 Running 0 4h31m
nginx-deploy-86b7d8c46d-7s9gz 1/1 Running 0 4h31m
nginx-deploy-86b7d8c46d-n2m6j 1/1 Running 0 33s
nginx-deploy-86b7d8c46d-w8ljk 1/1 Running 0 4h31m
nginx-deploy-86b7d8c46d-wgdnv 1/1 Running 0 33s
nginx-deploy-86b7d8c46d-z86rx 1/1 Running 0 33s2.4.1 缩容
# 缩容有6个pod现在缩容到4个pod
[rootk8s-master ~]# kubectl scale --replicas4 deployment nginx-deploy
deployment.apps/nginx-deploy scaled
[rootk8s-master ~]# kubectl get deployments nginx-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 4/4 4 4 5h45m
[rootk8s-master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-6bf65c4445 0 0 0 4h44m
nginx-deploy-85bc5c8fdb 0 0 0 4h9m
nginx-deploy-86b7d8c46d 4 4 4 5h45m
[rootk8s-master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-86b7d8c46d-4s98c 1/1 Running 0 4h33m 10.2.2.12 k8s-node-01 none none
nginx-deploy-86b7d8c46d-7s9gz 1/1 Running 0 4h33m 10.2.1.28 k8s-node-02 none none
nginx-deploy-86b7d8c46d-w8ljk 1/1 Running 0 4h33m 10.2.1.29 k8s-node-02 none none
nginx-deploy-86b7d8c46d-z86rx 1/1 Running 0 2m33s 10.2.2.14 k8s-node-01 none none2.5 暂停和恢复 由于每次对pod 的 template中的信息发生修改后都会触发更新deployment操作那么此时如果频繁修改信息就会产生多次更新而实际上只需要执行最后一次更新即可当出现此类情况时我们就可以暂停deployment的 rollout。 2.5.1 给template添加一个最小cpu和内存的参数 2.5.2 暂停deploy更新 通过kubectl rollout pause deployment name 就可以实现暂停直到你下次恢复后才会继续进行滚动更新。 # 暂时deploy更新
[rootk8s-master ~]# kubectl rollout pause deployment nginx-deploy
deployment.apps/nginx-deploy paused2.5.3 再次更新template给cpu和内存添加一个最大参数 这次更新过之后rs信息和pod信息都没有发生改变是由于我们暂停了deploy的更新 [rootk8s-master ~]# kubectl edit deploy nginx-deploy
deployment.apps/nginx-deploy edited[rootk8s-master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-6bf65c4445 0 0 0 5h7m
nginx-deploy-6dc7697cfb 3 3 3 8m33s
nginx-deploy-85bc5c8fdb 0 0 0 4h32m
nginx-deploy-86b7d8c46d 0 0 0 6h8m
[rootk8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-6dc7697cfb-6p9mj 1/1 Running 0 8m38s
nginx-deploy-6dc7697cfb-lc472 1/1 Running 0 8m37s
nginx-deploy-6dc7697cfb-w295s 1/1 Running 0 8m35s2.5.4 查看更新信息
通过下面的信息可以看到刚才添加cpu和内存参数在更新历史列表里面没有显示说明我们的deploy没有更新
[rootk8s-master ~]# kubectl rollout history deployment nginx-deploy --revision0
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
2 none
4 none
5 none
6 none[rootk8s-master ~]# kubectl rollout history deployment nginx-deploy --revision6
deployment.apps/nginx-deploy with revision #6
Pod Template:Labels: appnginx-deploypod-template-hash6dc7697cfbContainers:nginx:Image: nginx:1.20Port: noneHost Port: noneRequests:cpu: 100mmemory: 128MiEnvironment: noneMounts: noneVolumes: none
2.5.5 恢复deploy的更新 启动deploy的更新 [rootk8s-master ~]# kubectl rollout resume deployment nginx-deploy
deployment.apps/nginx-deploy resumed这里 rs 已经发生了改变 [rootk8s-master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-57bf686b9d 3 3 3 12s
nginx-deploy-6bf65c4445 0 0 0 5h15m
nginx-deploy-6dc7697cfb 0 0 0 17m
nginx-deploy-85bc5c8fdb 0 0 0 4h41m
nginx-deploy-86b7d8c46d 0 0 0 6h17m刚才查询的历史更新版本只有4个现在又多了一个 [rootk8s-master ~]# kubectl rollout history deployment nginx-deploy --revision0
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
2 none
4 none
5 none
6 none
7 none通过历史更新版本信息可以看到我们添加的最大cpu和内存参数都发生了改变。 [rootk8s-master ~]# kubectl rollout history deployment nginx-deploy --revision7
deployment.apps/nginx-deploy with revision #7
Pod Template:Labels: appnginx-deploypod-template-hash57bf686b9dContainers:nginx:Image: nginx:1.20Port: noneHost Port: noneLimits:cpu: 500mmemory: 512MiRequests:cpu: 100mmemory: 128MiEnvironment: noneMounts: noneVolumes: none2.6 配置文件部署无状态服务nginx的yaml文件
[rootk8s-master ~]# cat nginx-deploy.yaml
apiVersion: apps/v1 # deployment api版本
kind: Deployment # 资源类型为 Deployment
metadata: # 原信息labels: # 标签app: nginx-deploy # 具体的标签信息appnginx-deploy key: value 配置形式name: nginx-deploy # deployment的名字namespace: default # 所在的命名空间
spec:replicas: 1 # 期望副本数revisionHistoryLimit: 10 # 进行滚动更新后保留的历史版本数量selector: # 选择器用于找到匹配的RSmatchLabels: # 按照标签匹配app: nginx-deploy # 匹配的标签strategy: #更新策略rollingUpdate: # 滚动更新配置maxSurge: 25% # 滚动更新时更新的个数最多超过多少个期望副本数或者比例maxUnavailable: 25% # 进行滚动更新时最大不可用比例更新比例表示在所有副本数中最多可以有多少个不更新成功type: RollingUpdate # 更新类型采用滚动更新template: # pod 模板metadata: # pod模板的元信息labels: # pod模板的标签app: nginx-deploy # pod模板的标签信息spec: # pod 期望信息containers: # pod 的容器信息- image: nginx:1.20 # 镜像信息imagePullPolicy: IfNotPresent # 镜像拉取策略name: nginx # 容器名字restartPolicy: Always # pod的重启策略terminationGracePeriodSeconds: 30 # pod的过期时间