-
环境准备#
- 安装 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
-
使用 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 到容器中。修改volumes
和volumeMounts
部分,示例如下:
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,其中包含应用的配置信息。
-
实现 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 配置。
-
跨集群同步和监控更新过程#
-
在 Rancher 中同步更新:#
- Rancher 提供了集群组和全局资源的功能。可以将多个集群组成一个集群组,然后通过集群组来同步某些资源的更新。对于 ConfigMap,可以尝试将其定义为集群组的共享资源(部分高级版本功能支持),这样在一个集群中更新 ConfigMap 后,Rancher 可以辅助将更新同步到其他集群。
-
监控更新状态:#
- 在 Rancher 界面中,利用其内置的监控和告警功能,监控应用在各个集群中的更新过程。可以查看应用的 Pod 状态、资源使用情况等指标。同时,设置告警规则,例如当应用的更新失败或者出现大量 Pod 异常时,及时收到通知。也可以通过 Kubernetes 原生的监控工具(如 Prometheus 集成到 Rancher)来深入监控应用的更新过程和配置生效情况。
...