01.常用负载控制器
# 01.工作负载控制器是什么
工作负载控制器(Workload Controllers)是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。
常用工作负载控制器:
Deployment : 无状态应用部署
- deployment认为所有的pod都是一样的,不用考虑顺序的要求
- 不用考虑在哪个node节点上运行,可以随意扩容和缩容
StatefulSet : 有状态应用部署
- 稳定,唯一的网络标识符,持久存储(例如: etcd 配置文件,节点地址发生变化,将无法使用)
- 有序,优雅的部署和扩展、删除和终止(例如: mysql 主从关系,先启动主,再启动从)
DaemonSet : 确保所有Node运行同一个Pod
- 在每一个Node上运行一个Pod,新加入的Node也同样会自动运行一个Pod
- 比如:用DaemonSet 控制器类型创建nginx pod资源
- 没有指定副本replicats,它会根据node节点的个数创建
- 如果再新加一个node节点,也会给新node节点创建pod
Job : 一次性任务
Cronjob : 定时任务
控制器的作用:
- 管理Pod对象
- 使用标签与Pod关联
- 控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等。
# 02.Deployment
# 2.1 Deployment功能介绍
本质:在升级时,杀掉旧的镜像,部署新镜像
Deployment的功能:
- 管理Pod和ReplicaSet
- 具有上线部署、副本6设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:网站、API、微服务
项目生命周期
# 2.2 部署nginx 1.15版本
[root@k8s-master ~]# vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: web
image: nginx:1.15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@k8s-master ~]# kubectl delete -f . # 一键卸载所有部署的服务(当前文件夹下所有部署文件)
[root@k8s-master ~]# kubectl apply -f deployment.yaml
[root@k8s-master ~]# kubectl get pods -o wide # 确定pod是否被正确部署
[root@k8s-master ~]# kubectl expose deployment web --port=80 --target-port=80 --type=NodePort
http://192.168.56.62:30610/
1
2
3
4
5
2
3
4
5
# 2.3 Deployment:滚动升级
[root@k8s-master ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.56.61:6443 2d2h
nginx 10.244.169.129:80,10.244.169.130:80,10.244.36.66:80 2d
web 10.244.169.129:80,10.244.169.130:80,10.244.36.66:80 4m32s
1
2
3
4
5
2
3
4
5
# 2.3.1 修改.yaml文件升级
- 直接修改deployment.yaml文件中 image: nginx:1.15修改成image: nginx:1.18
# 1.3.2 kubectl set命令行升级
[root@k8s-master ~]# kubectl set image deployment/web web=nginx:1.16
[root@k8s-master ~]# kubectl describe deployment web # 确定是否已经升级为 nginx:1.16
1
2
2
# 2.4 Deployment:水平扩缩容
# 2.5 Deployment:回滚
'''1.查看当前pod升级历史记录 '''
[root@k8s-master ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
[root@k8s-master ~]# kubectl rollout undo deployment/web # 回滚上一个版本
[root@k8s-master ~]# kubectl rollout undo deployment/web --to-revision=2 # 回滚历史指定版
'''2.可以看到pod回滚到了 nginx:1.5版本'''
[root@k8s-master ~]# kubectl describe deployment web
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 2.6 下线
[root@k8s-master ~]# kubectl delete deploy/web
[root@k8s-master ~]# kubectl delete svc/web
1
2
2
# 03.DaemonSet
- 在每一个Node上运行一个Pod
- 新加入的Node也同样会自动运行一个Pod
- 应用场景:网络插件(kube-proxy、calico)、其他Agent
# 04.Job
# 05.CronJob
上次更新: 2024/3/13 15:35:10