笔记摘自视频章节:第四章-p25
主题
实践rs和deployment
- rs期望控制
- deployment版本控制+动态扩缩容
操作
ReplicaSet
- rs中嵌套了一个pod的模板,yaml字段含义如下
- replicas: 期望数
- matchLabels:匹配标签
- key: value
- template: pod的模板
- env: 环境变量
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: wangyanglinux/myapp:v1
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
- 创建
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl create -f p24_rs_demo.yaml
replicaset.apps/frontend created
- 查看rs信息
kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 3 3 3 2m58s
- 查看Pod lables
kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
frontend-7kjrb 1/1 Running 0 2m9s tier=frontend
frontend-dmlhf 1/1 Running 0 2m9s tier=frontend
frontend-fbk5f 1/1 Running 0 2m9s tier=frontend
- 删除pod,查看重建情况
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-9l6zq 1/1 Running 0 55s
frontend-h2fwx 1/1 Running 0 55s
frontend-zkqfr 1/1 Running 0 55s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl delete pod --all &
[1] 2346466
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# pod "frontend-9l6zq" deleted
pod "frontend-h2fwx" deleted
pod "frontend-zkqfr" deleted
[1]+ Done kubectl delete pod --all
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-7kjrb 1/1 Running 0 23s
frontend-dmlhf 1/1 Running 0 23s
frontend-fbk5f 1/1 Running 0 23s
- 修改pod标签,查看期望数
- 可以看到label变化后,新建了一个tier为frontend的pod,原来被修改的那个pod就变成了孤儿pod,没有rs去继续做管理
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl label pod frontend-7kjrb tier=hahahah --overwrite=true
pod/frontend-7kjrb unlabeled
frontend-t4h6r 1/1 Running 0 6s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
frontend-7kjrb 1/1 Running 0 4m27s tier=hahahah
frontend-dmlhf 1/1 Running 0 4m27s tier=frontend
frontend-fbk5f 1/1 Running 0 4m27s tier=frontend
frontend-t4h6r 1/1 Running 0 13s tier=frontend
- 删除孤儿。label被修改的pod,不再被控制器管理,因此成为了孤儿。
kubectl delete pod frontend-7kjrb
pod "frontend-7kjrb" deleted
Deployment
- 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
- apply创建deployment
kubectl apply -f p24_deployment_demo.yaml
deployment.apps/nginx-deployment created
- 查看状态,running
- 查看deployment和rs,均存在。可以看出deployment是通过rs来进行pod管理的
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-5b5c675446 3 3 3 4m52s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 4m55s
- 修改期望为5
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl scale deployment nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-5b5c675446-5j99s 1/1 Running 0 95s
nginx-deployment-5b5c675446-bgw64 1/1 Running 0 9m32s
nginx-deployment-5b5c675446-mldk9 1/1 Running 0 95s
nginx-deployment-5b5c675446-p6zj5 1/1 Running 0 9m32s
nginx-deployment-5b5c675446-z5t2q 1/1 Running 0 9m32s
deployment 滚动升级+回退
- 修改属性后,查看rs,发现nginx-deployment出现两个版本的rs,这就是滚动升级的过程
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl set image deployment/nginx-deployment nginx=wangyanglinux/myapp:v2
deployment.apps/nginx-deployment image updated
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-5b5c675446 2 2 2 13m
nginx-deployment-85b9d5d475 5 5 2 12s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 4/5 5 4 13m
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-85b9d5d475-5vgc2 1/1 Running 0 10s
nginx-deployment-85b9d5d475-7crrb 1/1 Running 0 21s
nginx-deployment-85b9d5d475-bkg2z 1/1 Running 0 12s
nginx-deployment-85b9d5d475-kbnxq 1/1 Running 0 22s
nginx-deployment-85b9d5d475-vrc8t 1/1 Running 0 21s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu#
- 回退:监控pods状态。过程中 5b5c675446 为旧的rs,85b9d5d475为新的rs。可以看到old rs先创建pod,创建完成一定数量pod后,new rs销毁对应数量的pod,依次操作完成滚动
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl rollout undo deployment/nginx-deployment
deployment.apps/nginx-deployment rolled back
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-deployment-5b5c675446-ct6vj 0/1 ContainerCreating 0 2s
nginx-deployment-5b5c675446-txpgt 0/1 ContainerCreating 0 2s
nginx-deployment-5b5c675446-v2grt 0/1 ContainerCreating 0 2s
nginx-deployment-85b9d5d475-8vf7c 1/1 Running 0 48s
nginx-deployment-85b9d5d475-g8kxx 1/1 Running 0 48s
nginx-deployment-85b9d5d475-rclvz 1/1 Running 0 48s
nginx-deployment-85b9d5d475-s6dvd 1/1 Running 0 47s
nginx-deployment-5b5c675446-txpgt 1/1 Running 0 2s
nginx-deployment-5b5c675446-v2grt 1/1 Running 0 2s
nginx-deployment-5b5c675446-ct6vj 1/1 Running 0 2s
nginx-deployment-85b9d5d475-rclvz 1/1 Terminating 0 48s
nginx-deployment-5b5c675446-vj7hb 0/1 Pending 0 0s
nginx-deployment-5b5c675446-vj7hb 0/1 Pending 0 0s
nginx-deployment-85b9d5d475-s6dvd 1/1 Terminating 0 47s
nginx-deployment-5b5c675446-b429w 0/1 Pending 0 0s
nginx-deployment-5b5c675446-b429w 0/1 Pending 0 0s
nginx-deployment-85b9d5d475-8vf7c 1/1 Terminating 0 48s
nginx-deployment-5b5c675446-vj7hb 0/1 ContainerCreating 0 0s
nginx-deployment-5b5c675446-b429w 0/1 ContainerCreating 0 1s
nginx-deployment-85b9d5d475-rclvz 0/1 Terminating 0 50s
nginx-deployment-85b9d5d475-rclvz 0/1 Terminating 0 50s
nginx-deployment-85b9d5d475-rclvz 0/1 Terminating 0 50s
nginx-deployment-85b9d5d475-s6dvd 0/1 Terminating 0 50s
nginx-deployment-85b9d5d475-s6dvd 0/1 Terminating 0 50s
nginx-deployment-85b9d5d475-s6dvd 0/1 Terminating 0 50s
nginx-deployment-85b9d5d475-8vf7c 0/1 Terminating 0 51s
nginx-deployment-85b9d5d475-8vf7c 0/1 Terminating 0 51s
nginx-deployment-85b9d5d475-8vf7c 0/1 Terminating 0 51s
nginx-deployment-5b5c675446-vj7hb 1/1 Running 0 4s
nginx-deployment-85b9d5d475-g8kxx 1/1 Terminating 0 52s
nginx-deployment-5b5c675446-b429w 1/1 Running 0 5s
nginx-deployment-85b9d5d475-g8kxx 0/1 Terminating 0 53s
nginx-deployment-85b9d5d475-g8kxx 0/1 Terminating 0 53s
nginx-deployment-85b9d5d475-g8kxx 0/1 Terminating 0 53s
命令记录
-
修改镜像:
kubectl set image deployment/nginx-deployment nginx=nginx:1.91 -
回退:
kubectl rollout deployments nginx-deployment -
查看回退状态码 :
kubectl rollout status deployments nginx-deployment -
回退记录显示:
kubectl rollout history deployment/nginx-deployment -
回退到上一个版本:
kubectl rollout undo deployment/nginx-deployment -
回退到固定version:
kubectl rollout undo deployment/nginx-deployment --to-revision=2 -
暂停回退:
kubectl rollout pause deployment/nginx-deployment deployment -
修改版本保留数目:
spec.revisonHistoryLimit