kubernetes Pod控制器
- 回顾 管理Pod资源,采用资源清单的方式
- apiVersion
- kind
- metadata
- spec
- containers
- name
- image
- imagePullPolicy:Always、Never、IfNotPresent
- ports:
- livenessProbe
- readinessProbe
- liftcycle
- nodeSelector
- nodeName
- restartPolicy:Always,Never,OnFailure
- status(只读)
Pod控制器:
- ReplicaSet(不建议直接使用):
1、用户期望的副本数
2、标签选择器,如果pod不满足用户期望
3、pod资源模板来完成pod资源的新建 - Deployment: 管理无状态应用的控制器,运行在ReplicaSet上,控制ReplicaSet以实现pod的管理,支持扩缩容和滚动性更新
- DaemonSet:用于确保集群中的每个节点只运行一个特定的pod副本,实现系统级的后台任务,服务无状态、守护进程类
- Job:
- StatefulSet
kubectl explain rs ##查看replicaset说明
kubectl explain rs.spec
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
name: myapp-pd
labels:
app: myapp
release: canary
environment: qa
spec:
containers:
- name: myapp-container
image: myapp:v1
ports:
- name: http
containerPort: 80
kubectl explain deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp
image: myapp:v1
prots:
- name: http
containerPort: 80
kubectl apply -f deploy-demo.yaml
滚动更新式创建
kubectl describe deploy myapp-deploy
查看滚动历史
kubectl rollout history deployment myapp-deploy
打补丁的方式修改配置文件,创建5个pod
kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'
查看创建了5个pod
kubectl get pods
打补丁的方式更改yaml文件中spec字段
kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxSurge":1,"maxUnavailable":0}}}}'
更改镜像版本,并且暂停更新过程
kubectl set image deployment myapp-deploy myapp=myapp:v3 && kubectl rollout pause deployment myapp-deploy
kubectl get nods -l app-myapp -w
继续更新
kubectl rollout resume deployment myapp-deploy
回滚镜像版本,不指定就是回滚到最近一版
kubectl rollout undo --to-revision=2
查看deploy的所有版本
kubectl rollout history deployment myapp-deploy
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp-ds
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: redis-ds
role: logstor
release: stable
template:
metadata:
labels:
app: redis-ds
role: logstor
release: stable
spec:
containers:
- name: redis
image: redis:latest
ports:
- name: redis
containerPort: 6379
kubectl apply -f ds-demo.yaml
kubectl expose deploymnet redis --port=6379