Kubernetes(k8s)-Reloader介绍&使用

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们上一小节介绍了注解(Annotations)的功能可以用于标注各种资源的属性,其实它不仅仅可以标注资源属性,还可以作为某些资源功能的开关。然后我们在Kubernets(k8s)-ConfigMap的时候介绍过,更新ConfigMap并会触发业务重启,而我们今天要讲解的Reloader就可以利用注解(Annotations)把业务的自动更新实现。

Reloader 是一个Kubernetes控制器,它可以监控配置文件(ConfigMap)或秘密(Secrets)的变化,并在这些资源发生变化时重新启动或重新加载相应的Pod。这在配置文件或证书等敏感信息更新时非常有用,因为它可以确保Pod使用了最新的配置或证书。

主要功能

  • 监控Kubernetes ConfigMap和Secrets的变化。

  • 当检测到变化时,触发Pod的重启或发送HTTP请求来触发配置的重新加载。

  • 支持自定义重新加载策略,例如,只重启特定的容器或发送特定的HTTP请求。

如何使用

1. 安装Reloader

bash 复制代码
#使用helm安装,具体ns可以调整和修改
#添加仓库helm repo add stakater https://stakater.github.io/stakater-charts
#安装reloader
helm install reloader stakater/reloader --namespace kube-system

#直接使用yaml文件
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml

我们这里使用yaml文件安装,我们可以看见它创建了什么资源可以更容易理解里面的逻辑,这个逻辑和我们讲ServiceAccount的逻辑是一样的,也可以进去看看它具体是申请了哪些权限。当Pod正常拉起以后,我们就可以

2. 配置资源

在部署你的应用程序时,你需要在工作负载中添加相应的注解(Annotations),以指示Reloader如何处理配置更新。

例如,以下是一个具有ConfigMap和Secret监视的Deployment的示例:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: myapp
  annotations:
    reloader.stakater.com/auto: "true"  # 启用Reloader自动重载
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: nginx
        image: 192.168.31.43:5000/nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-conf-volume
          mountPath: /etc/nginx/conf.d  # 假设这是Nginx配置文件的位置
      volumes:
      - name: nginx-conf-volume
        configMap:
          name: nginx-config  # 引用的ConfigMap名称
bash 复制代码
#下面的事件就是该Deploy因为更新了cm,而触发Pod更新
Normal  Reloaded           87s (x2 over 2m57s)  reloader-configMaps    Changes detected in 'nginx-config' of type 'CONFIGMAP' in namespace 'default', Updated 'nginx-deployment' of type 'Deployment' in namespace 'default'
Normal  ScalingReplicaSet  87s                  deployment-controller  Scaled up replica set nginx-deployment-5c78d84c48 to 1
Normal  ScalingReplicaSet  86s                  deployment-controller  Scaled down replica set nginx-deployment-5dcf45bb6b to 0

3. 配置重新加载策略

reloader还支持更复杂的重新加载策略,例如:

注解

描述

reloader.stakater.com/auto: "true"

自动监控所有关联的ConfigMap和Secret的变化,并在发生变化时触发Pod的滚动更新。

reloader.stakater.com/only: "true"

仅当特定资源发生变化时才重启Pod。通常需要结合reloader.stakater.com/match注解使用。

reloader.stakater.com/ignore: "true"

忽略某些资源的变化,即使这些资源发生了变化也不会触发Pod的滚动更新。通常需要结合reloader.stakater.com/match注解使用。

reloader.stakater.com/container-name: "my-container"

仅重启特定名称的容器,适用于多容器Pod。

注意事项

  • 确保reloader控制器有足够的权限来监视和重启你的Pod,所以可以查看集群角色的权限是怎么申请的。

  • 考虑到重启Pod可能会造成服务中断,请确保你的应用程序能够优雅地处理重启。

  • 在生产环境中使用之前,应该在测试环境中充分测试reloader的配置。

reloader是一个非常有用的工具,特别是在需要动态更新应用程序配置的场景中。通过自动化配置更新后的Pod重启,它可以大大简化Kubernetes集群的管理工作。

但是我们也在生产环境遇到过大面积的Pod意外重启的情况,虽然并没有发生故障,但是这也是一个不太好的情况。一般而言就是集群部署的时候会打开这个功能,当集群运行以后就会给关闭这个功能。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
zyx没烦恼7 分钟前
Linux 下 日志系统搭建全攻略
linux·服务器·开发语言·c++
Tee xm30 分钟前
清晰易懂的 Flutter 开发环境搭建教程
linux·windows·flutter·macos·安装
不摆烂选手30 分钟前
Ubuntu之Makefile入门
linux·ubuntu·makefile·正点原子imx6ull学习笔记
可观测性用观测云1 小时前
Kube Scheduler 可观测性最佳实践
kubernetes
半新半旧1 小时前
Nginx 负载均衡案例配置
运维·nginx·负载均衡
码上飞扬1 小时前
深入探索 Linux Top 命令:15 个实用示例
linux·运维·服务器
灰色人生qwer1 小时前
内网服务器centos7安装jdk17
java·运维·服务器
念心科道尊1 小时前
【Csharp】Winform客户端与服务器,局域网加密字符串与文件通信
运维·服务器·c#
zkyqss2 小时前
OpenStack Yoga版安装笔记(十七)安全组笔记
linux·笔记·openstack
愚润求学3 小时前
Linux开发工具——gcc
linux·服务器·开发语言