专栏首页云原生生态圈实践 | Kubernetes守护进程集之DaemonSet

实践 | 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选项带上,这样变更的命令将会记录在Annotationskubernetes.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

本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem),作者:Marionxue

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 6张图循序渐进讲透Kubernetes Ingress资源对象

    Kubernetes Ingress 只是 Kubernetes 中的一个普通资源对象,需要一个对应的 Ingress 控制器来解析 Ingress 的规则,暴...

    公众号: 云原生生态圈
  • 微软出品·kubernetes最新学习指南 v3.0

    Kubernetes正在席卷应用开发世界。到2022年,全球超过75%的组织将在生产环境中运行容器化应用程序。Kubernetes正在塑造应用程序开发和管理的未...

    公众号: 云原生生态圈
  • Nginx专辑|05 -如何使用Nginx配置正向代理

    在之前的编译nginx的基础上,我们对nginx二进制增加新的模块ngx_http_proxy_connect_module[1]

    公众号: 云原生生态圈
  • 【趣学程序】Linux安装Tengine

    安装:yum install gcc openssl-devel pcre-devel zlib-devel-y

    趣学程序-shaofeer
  • nginx代理其他端口到80端口-低调小熊猫的技术小黑屋

    我最近遇到微信授权认证回调的一个坑,本地测试的时候,我是用的内网穿透+端口,一切ok。等我配置公众号平台时,才发现微信那边只支持80端口,公司项目80端口已经被...

    低调小熊猫
  • Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书

    Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书 安装 Nginx 安装依赖 $ apt-get update $ apt...

    搜云库
  • [CentOS 7] 安装nginx

    下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/centos/7/noarch/RP...

    庞小明
  • 在CentOS 7上安装Nginx服务器

    下面我就我在CentOS上安装Nginx经验做简单的记录,以备后查。 1、下载nginx-release包 以CentOS 7为例,下载nginx软件包:htt...

    庞小明
  • Contos7安装Nginx就是这么简单

    最近隔壁部门接到一个微服务的项目,但是rpc框架采用的淘宝的hfs,做了几个demo,然后他们开始进行开发了。但是因为前端不好调试接口,所以又需要搭建一个ngi...

    程序员_备忘录
  • Linux系统下Nginx支持ipv6配置的办法

    需要执行以下命令,查看现有nginx是否支持ipv6,如果参数中具有–with-ipv6,则支持,如 果没有,则不支持,需要重新编译nginx。

    砸漏

扫码关注云+社区

领取腾讯云代金券