文章目录
工作负载控制器(Wordload Controllers)
工作负载控制器:用于更高层次对象,部署和管理Pod。
常见的工作负载控制器:
- Deployment:无状态应用部署
- StatefulSet:有状态应用部署
- DaemonSet:确保所有Node运行同一个Pod
- Job:一次性任务
- Cronjob:定时任务
控制器作用:
- 管理Pod对象
- 使用标签与Pod关联
- 控制器实现了Pod的运维,如滚动更新、管理副本、维护Pod状态等。
一、创建一个deployment
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test
name: test
spec:
replicas: 3
selector:
matchLabels:
app: test
strategy: {}
template:
metadata:
labels:
app: test
spec:
containers:
- image: nginx:1.16
name: nginx
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 10
二、创建一个service,将80端口暴露出去
vim server.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: test
name: test
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: test
type: NodePort
status:
创建deployment和server
[root@k8s-master ~]# kubectl apply -f deployment.yaml
[root@k8s-master ~]# kubectl apply -f server.yaml
[root@k8s-master ~]# kubectl get pod,service #查看pod和sservice信息,通过浏览器访问node节点+端口就可以访问nginx页面
三、应用升级
更新镜像三种方式,自动触发滚动升级:
- kubectl apply -f xxx.yaml
spec:
containers:
- image: nginx:1.16 #将nginx:1.16替换成nginx:1.19.6
name: nginx
livenessProbe:
# 最后执行apply
-
kubectl set image deployment nginx=nginx:1.18
#第一种和第二种升级过程是一致的,升级过程中会先启动一个最新的,然后杀掉一个旧的,这样对用户体验影响最小,处于平滑升级 -
kubectl edit deployment test # 使用编辑器打开
滚动升级:滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中全部旧版本升级到新版本。
升级检测
for i in {1..1000};do curl -I 10.105.75.166;sleep 1;done
四、水平扩容和缩容(启动多实例,提高并发)
- 修改yaml中replicas值,在执行apply (第一种方法)
- kubectl scale deployment test --replicas=5 (第二种方法)
[root@k8s-master ~]# kubectl scale deployment test --replicas=5
NAME READY STATUS RESTARTS AGE
test-58bf6f65c8-2nt6t 1/1 Running 0 5m20s
test-58bf6f65c8-2tgh2 1/1 Running 0 21m
test-58bf6f65c8-hrpl8 1/1 Running 0 21m
test-58bf6f65c8-jscnh 1/1 Running 0 20m
test-58bf6f65c8-vk8rs 1/1 Running 0 5m20s
五、应用回滚
kubectl rollout history deployment test # 查看历史发布版本
kubectl rollout undo deployment test # 回滚上一个版本
kubectl rollout undo deployment test --to-revision=2 # 指定历史回滚的版本
kubectl describe rs | egrep "revision:|Name:|Image:" #获取对应发布版本号和镜像版本
kubectl rollout undo deployment test --to-revision=1 #指定回滚的历史版本
六、应用下线
[root@k8s-master ~]# kubectl delete deployment test
[root@k8s-master ~]# kubectl delete service test