k8s的Pod控制器
pod的配置清单常见选项:
1 apiVersion,kind,metadata,spec,status(只读)
2 spec:
3 containers:
4 nodeSelector:
5 nodeName:
6 restartPolicy:
7 Always,Never, OnFailure
8 containers:
9 name
10 image
11 imagePullPolicy: Always,Never,IfNotPresent
12 ports:
13 name:
14 containerPort
15 livenessProbe
16 readinessProbe
17 lifecycle
18 ExecAction: exec
19 TCPSocketAction: tcpSocket
20 HTTPGetAction:httpGet
pod控制器:
ReplicaSet:通常管理无状态pod,带用户创建指定数量的pod副本,并确保pod副本一直处于满足用户期望数量的状态。 多退少补,并且支持扩缩容
ReplicaSet:常用的3个组件;1,用户期望的副本数。2,标签选择器,以便选择自己管控的pod副本。3,pod资源模板,通过标签选择器选定的pod副本数少于用户所期望,则引用pod的资源模板来创建。
Deployment:Deployment-->ReplicaSet-->pod
DaemonSet:可以保证每一个node节点上只运行指定的某1个pod,例如:日志收集器,filebeat,没必要运行多个agant副本。通常运行一些系统级的pod任务。
Job:临时一次性作业,可以用户指定的数量启动指定数量的pod副本,pod是否重启取决于job任务是否完成
Cronjob:周期性计划作业
StartfulSet:有状态的任务,通常用来做存储。极其困难的。
TPR:Third Party Resources,1.2+,1.7
CDR:Custom Defined Resources,1.8+
kubectl explain deploy.spec.strategy.rollingUpdate.maxSurge :用来滚动更新,更新过程中最多可以超出默认副本数的几个
kubectl explain deploy.spec.strategy.rollingUpdate.maxUnavailable :最多可以几个不可用
kubectl explain deploy.spec.revisionHistoryLimit :我们再更新后,最多保留多少个历史版本。
deployment会自动创建replicaSet,replicaSet创建pod
deployment的升级:
1.直接修改deployment的yaml文件,然后apply
2.使用kubectl patch deploy/myapp-deploy -p '{""}' json格式给yaml文件打补丁。
3.使用kubectl edit deploy/myapp-deploy
4.kubectl set image deploy/myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deploy/myapp-deploy 使用kubectl get pods -w可以监视过程
4.上面是金丝雀发布,测试可以的话可以继续更新:kubectl rollout resume deploy/myapp-deploy 使用:kubectl rollout status deploy/myapp-deploy 也可以监控更新过程
5.kubectl rollout undo deploy/myapp-deploy可以回滚到上个版本。
例:
kubectl patch deploy/myapp-deploy -p '{"spec":{"replicas":5}}'
kubectl patch deploy/myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
deployment的yaml文件例子:
1 apiVersion: apps/v1
2 kind: Deployment
3 metadata:
4 name: myapp-deploy
5 namespace: default
6 spec:
7 replicas: 3
8 selector:
9 matchLabels:
10 app: myapp
11 release: canary
12 template:
13 metadata:
14 labels:
15 app: myapp
16 release: canary
17 spec:
18 containers:
19 - name: myapp
20 image: ikubernetes/myapp:v2
21 ports:
22 - name: http
23 containerPort: 80