实践 | Kubernetes守护进程集之DaemonSet
时间:2022-07-24
本文章向大家介绍实践 | Kubernetes守护进程集之DaemonSet,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
DaemonSet的滚动更新目前只在kubernetesv1.6+
版本集群支持
DaemonSet滚动更新策略
-
onDelete
: 使用该策略更新配置模板之后,只有在手动删除旧的DaemonSet Pod之后,才会创建新的DaemonSet Pod -
RollingUpdate
:默认策略,使用该策略更新配置模板之后,旧的Pod会被杀掉并且自动创建新的Pod,且整个更新过程中,每个节点上最多只有DaemonSet Pod.
启动滚动更新,必须设置DaemonSet的.spec.updateStrategy.type
属性为RollingUpdate
,也可以在.spec
中设置.spec.strategy.rollingUpdate.maxUnavailable
和.spec.minReadySeconds
。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx
namespace: kube-system
labels:
k8s-app: nginx-traffic
spec:
selector:
matchLabels:
name: nginx
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
name: nginx
spec:
tolerations:
# this toleration is to have the daemonset runnable on master nodes
# remove it if your masters can't run pods
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: nginx
image: nginx:1.18
ports:
- containerPort: 80
hostPort: 9090
terminationGracePeriodSeconds: 30
创建nginx服务的DaemonSet:
kubectl apply -f dnginx.yaml
检查运行状态:
☸️ vmware? default ~ ? ? k get daemonsets.apps -n kube-system -o wide |grep nginx
nginx 3 3 3 3 3 <none> 15s nginx nginx:1.18 name=nginx
☸️ vmware? default ~ ? ? curl -I http://192.168.99.134:9090
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 29 Aug 2020 11:45:18 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 12:43:12 GMT
Connection: keep-alive
ETag: "5e9eea60-264"
Accept-Ranges: bytes
☸️ vmware? default ~ ? ? curl -I http://192.168.99.133:9090
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 29 Aug 2020 11:45:21 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 12:43:12 GMT
Connection: keep-alive
ETag: "5e9eea60-264"
Accept-Ranges: bytes
☸️ vmware? default ~ ? ? curl -I http://192.168.99.128:9090
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 29 Aug 2020 11:45:24 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 12:43:12 GMT
Connection: keep-alive
ETag: "5e9eea60-264"
Accept-Ranges: bytes
检查DaemonSet的更新策略:
☸️ vmware? default ~ ? ? kubectl get ds/nginx -o go-template='{{.spec.updateStrategy.type}}{{"n"}}' -n kube-system
RollingUpdate
如果没有在系统内部署daemonSet,可以使用以下--dry-run=client
检查
k apply -f dnginx.yaml --dry-run=client -o go-template='{{.spec.updateStrategy.type}}{{"n"}}'
RollingUpdate # 如果报错不支持client值,请更新你的kubectl到最新版本。
此时通过更新daemonSet中的nginx的镜像版本,观察滚动更新的效果
# 此时可以分别开多个终端,查看每个节点的守护进程集运行状态
watch -n1 "curl -I http://192.168.99.128:9090"
watch -n1 "curl -I http://192.168.99.133:9090"
watch -n1 "curl -I http://192.168.99.134:9090"
☸️ vmware? default ~ ? ? kubectl set image ds/nginx nginx=nginx:1.18 -n kube-system
daemonset.apps/nginx image updated
☸️ vmware? default ~ ? ? kubectl rollout status ds/nginx -n kube-system
Waiting for daemon set "nginx" rollout to finish: 1 out of 3 new pods have been updated...
Waiting for daemon set "nginx" rollout to finish: 2 out of 3 new pods have been updated...
Waiting for daemon set "nginx" rollout to finish: 2 out of 3 new pods have been updated...
Waiting for daemon set "nginx" rollout to finish: 2 out of 3 new pods have been updated...
Waiting for daemon set "nginx" rollout to finish: 2 out of 3 new pods have been updated...
Waiting for daemon set "nginx" rollout to finish: 2 of 3 updated pods are available...
daemon set "nginx" successfully rolled out
# 此时查看到滚动更新日志与watch查看到的一致,先杀掉一个节点的nginx,然后启动一个新的,运行起来之后,继续更新下一个节点。
如果需要查看所有的更新变化,可以执行以下命令,但是CHANGE-CAUSE
有时看不到信息,需要在kubectl变更的时候通过--record=true
选项带上,这样变更的命令将会记录在Annotations
的kubernetes.io/change-cause
中,并且与对应的revision版本号对应。
kubectl rollout history daemonset nginx -n kube-system
回滚到指定的revision
# 如果不指定--to-revision将会回滚最近的revision
kubectl rollout undo daemonset nginx --to-revision=4 -n kube-system
daemonset.apps/nginx rolled back
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C#串口操作类,包括串口读写操作
- Go by Example 中文版: 时间
- Go by Example 中文版: 时间戳
- Day14.模块&包
- 关于 JavaScript 错误处理的最完整指南(下半部)
- 踩坑记录 | Android 逆向之如何处理 Kali Nat 模式无法上网?
- gson 替换 fastjson 引发的线上问题分析
- P1003 铺地毯
- 花10分钟写一个 Python 脚本,搞定了初中老师一个下午的工作
- 微信小程序导航栏页面滑动切换
- SwiftUI:本地通知
- 领导大怒:建表不加主键的都是耍流氓
- (美团)巧用数组下标,轻轻松松找出所有元素
- Docker容器网络-基础篇
- 【Java面试总结】常用框架之Spring