比如说ReplicaSet控制5个pod副本,pod的期望值是5个,但是升级的时候需要额外多几个pod,那么我们控制器可以控制在5个pod副本之外还能再增加几个pod副本;
比方说能多一个,但是不能少,那么升级的时候就是先增加一个,再删除一个,再增加一个删除一个,始终保持pod副本数是5个,但是有个别交叉之间是6个;
比方说最多允许多一个,最少允许少一个,也就是最多6个,最少4个,第一次加一个,删除两个,第二次加两个,删除1个,依次类推,可以自己控制更新方式
案例1,案例2 说的就是滚动更新,需要加readinessProbe和livenessProbe探测,确保pod中容器里的应用都正常启动了才删除之前的pod;
启动的第一步,刚更新第一批pod就暂停;假如目标是5个,允许一个也不能少,允许最多可以10个,那一次加5个即可;这就是我们可以自己控制节奏来控制更新的方法
# 查看 deployment 的定义
kubectl explain deployment
# 查看 spec 的定义
kubectl explain deployment.spec
# 查看 template 的定义
kubectl explain deployment.spec.template
# 查看 template.spec 的定义
kubectl explain deployment.spec.template.spec
[root@master1 ~]# kubectl explain deployment
KIND: Deployment
VERSION: apps/v1
DESCRIPTION:
Deployment enables declarative updates forPodsand ReplicaSets.
FIELDS:
apiVersion
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind
Kind is a string value representing the REST resource this object
represents. Servers may infer this from the endpoint the client submits
requests to. Cannot be updated. In CamelCase. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata
# 定义
kubectl explain deployment.spec.template
# 定义
kubectl explain deployment.spec.template.spec.restartPolicy
# 定义
kubectl explain deployment.spec.selector
不应直接通过创建另一个Deployment或创建另一个控制器(例如ReplicaSet或ReplicationController)来创建其标签与该选择器匹配的其他Pod。如果这样做,则第一个Deployment会认为它创建了其他Pod。如果你有多个具有重叠选择器的控制器,则这些控制器将相互竞争,并且无法正常运行
# 定义
kubectl explain deployment.spec.replicas
# 定义
kubectl explain deployment.spec.strategy
指定用新Pods替换旧Pods的策略。
# 定义
kubectl explain deployment.spec.strategy.type
# 定义
kubectl explain deployment.spec.strategy.rollingUpdate.maxUnavailable
# 定义
kubectl explain deployment.spec.strategy.rollingUpdate.maxSurge
# 定义
kubectl explain deployment.spec.progressDeadlineSecond
# 定义
kubectl explain deployment.spec.minReadySeconds
# 定义
kubectl explain deployment.spec.revisionHistoryLimit
# 定义
kubectl explain deployment.spec.paused
vim /root/test/deployment_nginx.yaml
内容
apiVersion: apps/v1
kind: Deployment
metadata:
# Deployment 的名称
name: deployment-nginx
# Deployment 的标签
labels:
k1: k1_la
k2: k2_la
spec:
# 副本数目
replicas: 3
# 选择器
selector:
# 选择器匹配的标签
matchLabels:
nginx_pod: nginx_pod_la
# Pod 模板
template:
metadata:
# Pod的标签
labels:
nginx_pod: nginx_pod_la
spec:
containers:
# 容器名称
- name: nginx
# 镜像
image: nginx
# 镜像策略
imagePullPolicy: IfNotPresent
# 容器端口
ports:
- containerPort: 80
kubectl apply -f /root/test/deployment_nginx.yaml
kubectl get deployment
NAM: deployment的名称。
READY:deployment有多少副本数。它遵循ready/desired的模式。
UP-TO-DATE:显示已更新到所需状态的副本数。
AVAILABLE:显示你的可以使用多少个应用程序副本。
AGE:显示应用程序已运行的时间。
因为创建deployment的时候会创建一个replicaset,replicaset会在后台创建pod,所以我们查看下
kubectl get rs
NAME:ReplicaSet的名称。
DESIRED:显示应用程序的所需副本数,这些副本数是在创建时定义的。这是所需的状态。
CURRENT:显示当前正在运行多少个副本。
READY:显示你的用户可以使用多少个应用程序副本。
AGE:显示应用程序已运行的时间。
ReplicaSet的名称规则: DEPLOYMENT-NAME-随机生成字符串
kubectl get pods | grep deployment-nginx
名称为:ReplicaSet的名称+随机数
kubectl describe deployment deployment-nginx
kubectl get pods -l nginx_pod=nginx_pod_la
编辑配置文件,将nginx版本改为1.8
vim /root/test/deployment_nginx.yaml
执行
kubectl apply -f /root/test/deployment_nginx.yaml
查看该deployment创建的pods,可发现创建新的pod的同时删除了旧的pods
kubectl get pods -l nginx_pod=nginx_pod_la
编辑配置文件,修改副本数为4
vim /root/test/deployment_nginx.yaml
执行
kubectl apply -f /root/test/deployment_nginx.yaml
kubectl rollout history deployment deployment-nginx
kubectl rollout undo deployment/deployment-nginx --to-revision=1
kubectl get pods -l nginx_pod=nginx_pod_la
kubectl delete deployment deployment-nginx
kubectl get rs
kubectl get pods -l nginx_pod=nginx_pod_la