今天我把Deployment控制器和DaemonSet控制器的怎么编写清单列表好好看了一遍,还学会了几种快速修改运行中Deployment&DaemonSet的方法,镜像版本升级和回滚也有新的见解。
Deployment资源清单编写:
例子:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ds
namespace: defult
spec:
replicas: 3
rollingUpdate:
maxSurge: 1 #滚动更新会先创建1个Pod
maxUnavailable: 1 #滚动更新最多不可以用Pod数量
selector:
matchLabels:
app: nginx
version: v1.1
template:
mentdata:
labels:
app: nginx
version: v1.1
spec:
containers:
name: nginx
image: nginx
ports:
- name: nginx
containerPort: 80
启动deployment:
kubectl apply -f nginx-dy.yaml
#apply:他和run效果一样,只是他可以能对已经启动对象进行重新加载
patch:
给已启动的资源对象打上补丁,以实现更改资源的目的(yaml文件不会被修改)。
kubel patch deployment nginx-dy -p '{"spec":"replicas": 5}'
#修改成启动Pod的数量为5
Deployment实现金丝雀部署:
金丝雀部署流程:只更新一个最新的Pod并把部分流量导入,如果在过去几个小时内没有出问题就可以大范围更新Pod。
命令实现:
kubectl set image deployment nginx-dy nginx=ik8s/nginx:v2.1 && kubectl rollout pause Deployment nginx-dy
#把nginx-dy中的nginx镜像更新至ik8s/nginx:v2.1,执行成功一次后暂停更新。
#新版本测试没问题可以通过以下命令实现大范围更新:
kubectl rollout resume deployment nginx-dy
回滚到指定版本:
kubectl rollout history deployment nginx-dy
#查看nginx-dy的历史版本情况
kubeclt rollout undo deployment nginx-dy --to-revision=1
#回滚到版本1
DaemonSet资源清单编写:
例子:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-dm
namespace: defult
spce:
selector:
matchLabels:
app: log
tmeplates:
metadata:
labels:
app: log
spec:
- name: log
image: ik8s/log:v1.2