3.1 Kubenetes Controller
Controller&workload 是干什么
- controller又称为工作负载
- 在集群上管理和和运行容器的对象
- 确保pod副本的数量
- 确保所有node运行一个pod
- 一次性任务和定时任务
pod和controller的区别
Pod通过Controller实现应用的运维
通过label标签建立关系

deployment 应用场景
- 部署无状态应用
- 管理pod和ReplicaSet
- 上线部署滚动升级
- 一般用于web,微服务
yaml
-
创建初始yaml文件
kubectl create deployment web3 --image=nginx --dry-run -o yaml >web3.yaml

-
使用yaml文件
kubectl apply -f web3.yml

-
check

-
expose port
kubectl expose deployment web3 --port=80 --type=NodePort --target-port=9923 --name=expose_for_web3 -o yaml > expose_for_web3.yml
kind: Service
metadata:
creationTimestamp: "2023-06-05T13:21:04Z"
labels:
app: web3
name: exposeweb4
namespace: default
resourceVersion: "122125"
uid: 9c6d3f73-0ce2-439e-bbf8-5de68f6f04b2
spec:
clusterIP: 10.109.5.167
clusterIPs:
- 10.109.5.167
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 32453 #这是对外公开的port
port: 80
protocol: TCP
targetPort: 80 #特别重要,如果nginx只能监听80端口,这里目标port必须是80.目标port就是container里自带的port
selector:
app: web3
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
~
kubectl apply -f web4.yml

升级回滚
- 修改deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web3
name: web3
spec:
replicas: 2
selector:
matchLabels:
app: web3
strategy: {}
template: #templat is the pod template
metadata:
creationTimestamp: null
labels:
app: web3
spec:
containers:
- image: nginx:1.25 #这里修改就能做到 zero_down_time
name: nginx
resources: {}
status: {}
kubectl apply -f web3_deployment.yml

- check rollout status
``` kubectl rollout status deployment web3`` - 回滚
kubectl rollout history deployment web3
可以看到一共有5个版本

- 回滚到上一个版本
kubectl rollout undo deployment web3 - 回滚到指定版本
kubectl rollout undo deplyment web3 --to-reversion=1

弹性伸缩
kubectl scale deployment web3 --replicas=3