基于k3s集群学习Deployment和ReplicaSet
2022-12-19 11:01:24
Deployment是对ReplicaSet和Pod更高级的抽象。
它使Pod拥有多副本,自愈,扩缩容、滚动升级等能力
ReplicaSet(副本集)是一个Pod的集合。
它可以设置运行Pod的数量,确保任何时间都有指定数量的 Pod 副本在运行。
通常我们不直接使用ReplicaSet,而是在Deployment中声明。
创建Deployment
- 第一种方法是通过命令行创建
1
2
3创建deployment,部署3个运行nginx的Pod
nginx-deployment是deployment的name --image是指定容器镜像
kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3 - 第二种方法是通过yaml文件创建,示例文件如下:执行命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21apiVersion: apps/v1
kind: Deployment # 类型deployment
metadata:
name: nginx-deployment # deployment的name
labels: # lables标签 键值对
app: nginx
spec:
replicas: 3 # 副本数量 创建三个pod副本
selector: # 定义 Deployment 如何查找要管理的 Pod
matchLabels: # 匹配lables标签 :app=nginx的pod
app: nginx
template:
metadata:
labels:
app: nginx # 声明lables标签
spec:
containers:
- name: nginx # 容器名称
image: nginx:1.22 #容器镜像
ports:
- containerPort: 801
kubectl apply -f deployment-nginx.yaml
管理Deployement
- 查看deployment在检查集群中的 Deployment 时,所显示的字段有:
1
2
3kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 14h
NAME
列出了namespace中 Deployment 的名称。READY
显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”。UP-TO-DATE
显示为了达到期望状态已经更新的副本数。AVAILABLE
显示应用可供用户使用的副本数。AGE
显示应用程序运行的时间
查看指定deployment
1
kubectl get deployment/nginx-deployment [-owide]
查看 Deployment 上线状态
1
2
3kubectl rollout status deployment/nginx-deployment
输出
deployment "nginx-deployment" successfully rolled out查看 Deployment 创建的 ReplicaSet
1
2
3kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-79b458c974 3 3 3 14hReplicaSet 输出中包含以下字段:
NAME
列出namespace中 ReplicaSet 的名称;DESIRED
显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态CURRENT
显示当前运行状态中的副本个数;READY
显示应用中有多少副本可以为用户提供服务;AGE
显示应用已经运行的时间长度。
- 查看每个pod生成的标签
1
2
3
4
5kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deployment-79b458c974-6drv6 1/1 Running 0 14h app=nginx-deployment,pod-template-hash=79b458c974
nginx-deployment-79b458c974-l4b6s 1/1 Running 0 11h app=nginx-deployment,pod-template-hash=79b458c974
nginx-deployment-79b458c974-4jbn2 1/1 Running 0 7h15m app=nginx-deployment,pod-template-hash=79b458c974
扩容缩放
手动缩放
1
2将副本数量调整为5
kubectl scale deployment/nginx-deployment --replicas=5自动缩放
自动缩放通过增加和减少副本的数量,以保持所有 Pod 的平均 CPU 利用率不超过 75%。
自动伸缩需要声明Pod的资源限制,同时使用 Metrics Server 服务(K3s默认已安装)。
1 | 自动缩放 |
滚动更新
- 更新nginx镜像
1
2更新容器镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.23 - 查看更新过程
1
2查看过程
kubectl get rs --watch
版本回滚
查看历史版本
1
2查看历史版本
kubectl rollout history deployment/nginx-deployment查看指定版本的信息
1
kubectl rollout history deployment/nginx-deployment --revision=2
回滚到历史版本
1
kubectl rollout undo deployment/nginx-deployment --to-revision=2