1. 环境准备

    • 安装 Rancher:在控制平面服务器上安装 Rancher,可以通过容器方式安装。例如,使用 Docker 运行 Rancher 服务器容器,运行命令如下:
docker run -d --restart=unless -stopped -p 80:80 -p 443:443 rancher/rancher:latest
  • 配置 Kubernetes 集群接入 Rancher:对于要管理的每个 Kubernetes 集群,获取集群的 Kube - config 文件等信息,然后在 Rancher 界面中将集群添加进来。
  • 安装 Helm 3:在可以访问 Kubernetes 集群的机器上安装 Helm 3,具体安装步骤根据操作系统不同而不同。例如,在 Linux 系统上,可以使用官方提供的脚本安装:
     curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get -helm -3.sh
     chmod 700 get_helm.sh
    ./get_helm.sh
  1. 使用 Helm 3 部署应用并关联 ConfigMap(以一个简单的 Web 应用为例)

  • 创建 Helm Chart:
    • 首先创建一个新的 Helm Chart 目录结构。可以使用helm create my - web - app命令来创建一个名为my - web - app的基本 Chart 模板。
    • values.yaml文件中定义应用的配置参数,例如:
       app:
         config:
           port: 8080
           db - connection - string: "jdbc:mysql://localhost:3306/mydb"
  • templates目录下创建configmap.yaml文件来定义 ConfigMap,内容如下:
       apiVersion: v1
       kind: ConfigMap
       metadata:
         name: {{.Release.Name}} - config - map
       data:
         app - port: "{{.Values.app.config.port}}"
         db - connection - string: "{{.Values.app.config.db - connection - string}}"
  • templates目录下的deployment.yaml文件中,挂载 ConfigMap 到容器中。修改volumesvolumeMounts部分,示例如下:
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: {{.Release.Name}} - deployment
       spec:
         replicas: 1
         selector:
           matchLabels:
             app: {{.Release.Name}}
         template:
           metadata:
             labels:
               app: {{.Release.Name}}
           spec:
             containers:
             - name: my - web - app - container
               image: my - web - app - image:latest
               ports:
               - containerPort: {{.Values.app.config.port}}
               volumeMounts:
               - name: config - volume
                 mountPath: /app/config
             volumes:
             - name: config - volume
               configMap:
                 name: {{.Release.Name}} - config - map
  • 部署应用到多集群:
    • 使用 Helm 3 将应用部署到 Rancher 管理的多个 Kubernetes 集群。例如,在每个集群对应的上下文中,运行以下命令:
       helm install my - web - app my - web - app - chart - path -n my - namespace
  • 这样就将应用部署到了多个集群中,并且每个集群中的应用都关联了一个 ConfigMap,其中包含应用的配置信息。
  1. 实现 ConfigMap 热更新

  • 更新 ConfigMap 内容:

    • 在 Rancher 界面中,找到对应的 ConfigMap 资源(可以通过命名空间和名称来查找),或者通过 Kubernetes 命令行kubectl edit configmap my - web - app - config - map -n my - namespace来编辑 ConfigMap 的内容。例如,修改app - port的值为8081
  • 使应用感知 ConfigMap 更新(以支持热重载的应用为例):

    • 对于支持热重载配置文件的应用,应用内部需要有相应的机制来监听配置文件的变化。例如,一些基于 Spring Boot 的 Java 应用,可以通过配置spring - cloud - config - monitor来实现配置文件的热重载。在应用代码中,需要读取挂载的 ConfigMap 中的配置文件路径下的配置内容,并且在文件变化时重新加载配置。
  • 对于不支持热重载的应用:

    • 可以通过更新应用的 Deployment 来触发容器的重新创建。例如,通过修改 Deployment 的annotations或者labels等元数据信息,使得 Deployment 触发滚动更新。可以使用kubectl patch deployment my - web - app - deployment -n my - namespace -p '{"spec":{"template":{"metadata":{"annotations":{"date":"'$(date +%s)'"}}}}}'命令来更新 Deployment 的元数据,从而触发滚动更新,让容器重新加载新的 ConfigMap 配置。
  1. 跨集群同步和监控更新过程

  • 在 Rancher 中同步更新:

    • Rancher 提供了集群组和全局资源的功能。可以将多个集群组成一个集群组,然后通过集群组来同步某些资源的更新。对于 ConfigMap,可以尝试将其定义为集群组的共享资源(部分高级版本功能支持),这样在一个集群中更新 ConfigMap 后,Rancher 可以辅助将更新同步到其他集群。
  • 监控更新状态:

    • 在 Rancher 界面中,利用其内置的监控和告警功能,监控应用在各个集群中的更新过程。可以查看应用的 Pod 状态、资源使用情况等指标。同时,设置告警规则,例如当应用的更新失败或者出现大量 Pod 异常时,及时收到通知。也可以通过 Kubernetes 原生的监控工具(如 Prometheus 集成到 Rancher)来深入监控应用的更新过程和配置生效情况。