pod控制器类型
- ReplicaSet (副本数 标签选择器 pod资源模板)
- Deployment (通过控制ReplicaSet来控制pod)
- DaemonSet (确保集群中的每个节点都仅运行一个特定pod)
- Job (任务完成即退出)
- Cronjob
- StatefulSet (有状态)
- CDR (自定义)
ReplicaSet
rs-daemo.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
name: myapp-pod
labels:
app: myapp
release: canary
environment: qa
spec:
containers:
- name: myapp-container
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
kubectl describe pods myapp-hm7kk
Deployment
建立再ReplicaSet之上
deploy-demo.yaml
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: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
kubectl apply -f deploy-demo.yaml
kubectl get pods -l app=myapp -w
kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
myapp-deploy-65df64765c 0 0 0 12m myapp ikubernetes/myapp:v1 app=myapp,pod-template-hash=65df64765c,release=canary
myapp-deploy-6b56d98b6b 3 3 3 2m5s myapp ikubernetes/myapp:v2 app=myapp,pod-template-hash=6b56d98b6b,release=canary
查看滚动历史
kubectl rollout history deployment myapp-deploy
补丁方式操作
kubectl patch deployments myapp-deploy -p '{"spec":{"replicas":5}}'
kubectl patch deployments myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-deployment
spec:
replicas: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 4
maxSurge: 1
更新一个暂停
kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy
继续更新
kubectl rollout resume deployment myapp-deploy
查看滚动状态
kubectl rollout status deployment myapp-deploy
kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
myapp-deploy-548f47d899 5 5 5 10m myapp ikubernetes/myapp:v3 app=myapp,pod-template-hash=548f47d899,release=canary
myapp-deploy-65df64765c 0 0 0 41m myapp ikubernetes/myapp:v1 app=myapp,pod-template-hash=65df64765c,release=canary
myapp-deploy-6b56d98b6b 0 0 0 31m myapp ikubernetes/myapp:v2 app=myapp,pod-template-hash=6b56d98b6b,release=canary
重启
kubectl rollout restart deployment myapp-deploy
回滚
kubectl rollout undo deployment myapp-deploy --to-revision=1
扩缩容
kubectl -n infra scale --replicas=0 deployment grafana
kubectl -n infra scale --replicas=0 deployment prometheus
kubectl -n test scale --replicas=1 deployment vcloud-xxl-job-api
#批量设置副本数为0
kubectl -n test scale --replicas=0 deployment `kubectl -n test get deployments.apps |awk '{print $1}' |grep -v "NAME"`
DaemonSet
指定的节点每个节点只运行一个,默认是所有节点每个节点只运行一个
ds-demo.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp-ds
namespace: default
spec:
selector:
matchLabels:
app: filebeat
release: stable
template:
metadata:
labels:
app: filebeat
release: stable
spec:
containers:
- name: filebeat
image: ikubernetes/filebeat:5.6.5-alpine
env:
- name: REDIS_HOST
value: redis.default.svc.cluster.local
- name: REDIS_LOG_LEVEL
value: info
ds-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: redis
role: logstor
template:
metadata:
labels:
app: redis
role: logstor
spec:
containers:
- name: redis
image: redis:4.0-alpine
ports:
- name: redis
containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat-ds
namespace: default
spec:
selector:
matchLabels:
app: filebeat
release: stable
template:
metadata:
labels:
app: filebeat
release: stable
spec:
containers:
- name: filebeat
image: ikubernetes/filebeat:5.6.5-alpine
env:
- name: REDIS_HOST
value: redis.default.svc.cluster.local
- name: REDIS_LOG_LEVEL
value: info
kubectl expose deployment redis --port=6379
附
kubectl 登录多容器的pod
kubectl -n 名称空间 describe pod pod名称
kubectl -n 名称空间 exec -it pod名称 -c 容器名称 -- /bin/bash