侧边栏壁纸
博主头像
背锅小王子博主等级

我从事运维工作有十年之久,主要从事云原生相关的工作,对k8s、devops、servicemesh、可观察性等较为熟悉!

  • 累计撰写 59 篇文章
  • 累计创建 64 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
k8s

使用Reloader自动滚动更新Pod

背锅小王子
2022-08-19 / 0 评论 / 0 点赞 / 242 阅读 / 1,240 字
温馨提示:
本文最后更新于 2022-11-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、Reloader介绍

Reloader是一个可以观察ConfigMap和Secret变化,对其关联的Deployments、Daemonsets、Statefulsets和Rollouts进行滚动升级

兼容性:Reloader 兼容 kubernetes >= 1.9

2、特性

  • Reloader 还支持 seal -secrets。以下是使用带有重新加载器的密封秘密的步骤。
  • 对于推出,重新加载器只需触发更改,这取决于您如何配置推出策略。
  • reloader.stakater.com/auto: "true"只有在使用 configmap 或 secret(作为卷挂载或 env)时才会重新加载 podDeploymentConfigs/Deployment/Daemonsets/Statefulsets
  • secret.reloader.stakater.com/reloador configmap.reloader.stakater.com/reloadannotation 将在指定的 configmap 或 secret 发生更改时重新加载 pod,而与 configmap 或 secret 的使用无关。
  • –auto-annotation您可以使用标志覆盖自动注释
  • 您可以使用标志覆盖搜索注释并使用标志覆盖–auto-search-annotation匹配注释–search-match-annotation
  • –configmap-annotation您可以使用标志覆盖 configmap 注释
  • –secret-annotation您可以使用标志覆盖秘密注释
  • 您可能希望阻止使用–namespaces-to-ignore标志监视某些名称空间
  • 您可能希望使用该–resources-to-ignore标志防止观看某些资源
  • –log-format=json您可以使用选项配置 JSON 格式的日志记录
  • 您可以使用选项配置“重新加载策略” --reload-strategy=

3、重新加载

kind: Deployment
metadata:
  annotations:
    reloader.stakater.com/auto: "true"
spec:
  template: metadata:
  • 制定更新
    指定一个特定的configmap或者secret,只有在我们指定的配置图或秘密被改变时才会触发滚动升级,这样,它不会触发滚动升级所有配置图或秘密在部署,后台登录或状态设置中使用。

一个制定deployment资源对象,在引用的configmap或者secret时,只有reloader.stakater.com/match: “true” 才会出发更新,为false或者不进行标记,该资源对象都不会监视配置的变化而重启。

kind: Deployment
metadata:
  annotations:
    reloader.stakater.com/search: "true"
spec:
  template:

并且 Reloader 将在修改任何 ConfigMap或Secret注释如下时触发滚动升级:

kind: ConfigMap
metadata:
  annotations:
    reloader.stakater.com/match: "true"
data:
  key: value

说明:reloader.stakater.com/search不能和 reloader.stakater.com/auto一起工作

  • 指定configmap或者secret

如果一个deployment挂载有多个cm或者的场景下,我们只希望更新特定一个cm后,deploy发生滚动更新,更新其他的cm,deploy不更新,这种场景可以将cm在deploy中指定为单个或着列表实现。

# configmap对象
kind: Deployment
metadata:
  annotations:
    configmap.reloader.stakater.com/reload: "foo-configmap"
spec:
  template: metadata:
# secret对象
kind: Deployment
metadata:
  annotations:
    secret.reloader.stakater.com/reload: "foo-secret"
spec:
  template: metadata:

4、安装Reloader

kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml

查看部署结果

kubectl get pod 

NAME                                 READY   STATUS    RESTARTS   AGE
reloader-reloader-6fb7d74486-fqcng   1/1     Running   0          2m

说明:

默认情况下,Reloader 部署在default命名空间中并监视更改secrets以及configmaps所有命名空间

5、测试

本文测试通过annotations注解的方式,使用nginx作为测试对象,

创建nginx测试对象的yaml文件:nginx.yml

说明:configmap和secret的注解已经提前加上了,在第7、8行

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  annotations:
   # configmap和secret的注解已经提前加上了
    configmap.reloader.stakater.com/reload: nginx-html
    secret.reloader.stakater.com/reload: test-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
        - name: nginx-html
          configMap:
            name: nginx-html
            defaultMode: 420
      containers:
        - name: nginx
          image: nginx:alpine
          ports:
            - containerPort: 80
              protocol: TCP
          env:
            - name: test-nginx
              valueFrom:
                secretKeyRef:
                  name: test-nginx
                  key: hello
          volumeMounts:
            - name: nginx-html
              mountPath: /usr/share/nginx/html/index.html
              subPath: index.html
---             
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-html
data:
  index.html: |
    <h1>测试Reloader</h1>
---
apiVersion: v1
kind: Secret
metadata:
  name: test-nginx
type: Opaque
data:
  hello: d29ybGQ=

部署nginx:

kubectl apply -f nginx.yml

查看nginx:

kubectl get pod
  
NAME                                 READY   STATUS    RESTARTS   AGE
nginx-68b8cbf85b-5mnhl               1/1     Running   0          3m

更新ConfigMap,测试Reloader滚动更新

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-html
data:
  index.html: |
    <h1>测试Reloader</h1>
    <h1>hello world!</h1>

更新nginx

kubectl apply -f nginx.yml

查看nginx

kubectl get pod
  
NAME                                 READY   STATUS    RESTARTS   AGE
nginx-694d6b6d89-7t5kj               1/1     Running   0          6s

结果:更新ConfigMap,测试Reloader滚动更新,成功!

更新Secret,测试Reloader滚动更新

apiVersion: v1
kind: Secret
metadata:
  name: test-nginx
type: Opaque
data:
  hello: d29ybGQ=
  hi: d29ybGQ=

更新nginx

kubectl apply -f nginx.yml

查看nginx

kubectl get pod
  
NAME                                 READY   STATUS    RESTARTS   AGE
nginx-698fb967b9-87djx               1/1     Running   0          5s

结果:更新Secret,测试Reloader滚动更新,成功!

0

评论区