【K8s】K8s控制器——复制集和deployment
高效、可靠地管理多个相同的容器应用,实现应用的自动扩缩容、故障恢复和版本升级
1、复制集
如果某个 Pod 挂了(比如容器崩溃、节点宕机),ReplicaSet 会自动创建一个新的 Pod 替补,始终确保 Pod 数量 = 你定义的 replicas 值。
2、deployment
通过管理 ReplicaSet 来间接控制 Pod(你一般不直接操作 ReplicaSet,而是通过 Deployment 来操作);
支持滚动更新(平滑升级镜像版本,不停机)
支持回滚(升级失败时快速回到旧版本)
支持扩缩容(一键调整 Pod 数量)
支持版本历史记录(查看每次变更,方便审计和回退)
#- 8.1 # 创建复制集
定义yaml文件,这是一种声明式编程
cat > rs.yml <<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: nginxrstestlabels:app: nginxrstest
spec:replicas: 3selector:matchLabels:app: nginxrstesttemplate:metadata:labels:app: nginxrstestspec:containers:- name: nginximage: nginxports:- name: httpcontainerPort: 80imagePullPolicy: IfNotPresent
EOF
创建复制集
kubectl create -f rs.yml
查看复制集
kubectl get replicasets.apps,pods -o wide
删除复制集
kubectl delete replicasets nginxrstest
#- 8.2 #创建deployment
cat > deployment.yml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF
kubectl create -f deployment.yml
kubectl get deployments.apps,replicasets.apps,pods -l app=nginx
#- 8.3 # 升级
kubectl set image deployments/nginx-deployment nginx=nginx:1.16.1 --record
kubectl rollout status deployment/nginx-deployment
kubectl get deployments.apps,replicasets.apps,pods -l app=nginx
#- 8.4 # 回滚
kubectl set image deployments/nginx-deployment nginx=nginx:1.161 --record
kubectl rollout status deployment/nginx-deployment
kubectl rollout history deployments/nginx-deployment
kubectl rollout history deployment.v1.apps/nginx-deployment --revision=3
kubectl rollout undo deployments/nginx-deployment --to-revision=2
kubectl rollout status deployment/nginx-deployment
kubectl get deployments.apps,replicasets.apps,pods -l app=nginx
#- 8.5 # 扩容
kubectl scale deployments/nginx-deployment --replicas=5
kubectl get deployments.apps,replicasets.apps,pods -l app=nginx
kubectl delete deployments.apps nginx-deployment
kubectl get deployments.apps,replicasets.apps,pods -l app=nginx