K8S使用ConfigMap管理应用配置

K8S使用ConfigMap管理应用配置

前言

ConfigMap可以明文存放应用配置文件,支持多种创建模式,可以使配置文件和镜像解耦,提高镜像的复用性,同时更加灵活的更新配置文件而不需要重构镜像。

1.创建ConfigMap

1.1通过yaml文件创建ConfigMap(常用)

cat > nginx-cm.yaml << EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: config       #定义ConfigMap的名称,用于绑定到pod使用
data:
  nginx.conf: |-     #配置文件的名字和内容,|- 是固定格式,不能省略
    server {
        listen 80;
        server_name baidu.com;
        root /home;
        index.html index.htm;
 
  nginx2.conf: |-    #有多个配置文件按格式添加即可,也可写多个yaml文件定义
    server {
        listen 80;
        server_name jindong.com;
        root /nginx;
        index.html index.htm;   #配置文件缩减需要统一,不然会报错
EOF
kubectl apply -f nginx-cm.yaml

1.2通过 –from-file 参数创建ConfigMap(常用)

cat > nginx.conf << EOF
server {
        listen 80;
        server_name baidu.com;
        root /home;
        index.html index.htm;
EOF

cat > nginx2.conf << EOF
server {
        listen 80;
        server_name baidu.com;
        root /home;
        index.html index.htm;
EOF
kubectl create configmap nginx-cm --from-file=./nginx.conf --from-file=./nginx2.conf  #nginx-cm为cm的名称

1.3查看configmap

kubectl get cm            #查看所有configmap
kubectl get cm nginx-cm   #查看指定configmap

2.ConfigMap绑定到pod

使用 Volume 的方式将ConfigMap绑定到pod

cat nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blog-nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: blog-nginx
      tier: frontend
  template:
    metadata:
      labels:
        app: blog-nginx
        tier: frontend
    spec:
      nodeSelector:
        nginxssr: ssr
      containers:
      - name: nginx
        image: nginx:v2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: nginx
        volumeMounts:
        - name: config                     #名称,与volumes的name相对应
          mountPath: /etc/nginx/conf.d/    #指定configmap作为配置文件在pod容器中路径
      volumes:
      - name: config                       #名称,与volumeMounts的name相对应
        configMap:
          name: nginx-wp-config            #填写定义的configmap的名称,即可绑定

3.动态修改configmap

configmap支持动态修改,不需要重建configmap

查看configmap属性

kubectl describe cm nginx-cm  #查看configmap属性

动态修改configmap

kubectl  edit cm nginx-cm    #进入configmap进行修改,操作与 vim 一样

修改完configmap之后重启pod即可加载配置,热加载配置的方法未收录 😃。

Kubernetes (k8s) 中,当你使用ConfigMap作为应用配置源,并将其挂载到Pod的卷中时,默认ConfigMap会被设置为只读(Read-Only)。如果你希望容器内的应用程序能够直接修改配置文件,你需要采取一些策略: 1. **创建可写的临时目录**:你可以创建一个新的 ConfigMap,将配置文件的内容存储在一个临时目录下,然后通过 Volume Mount 指定这个可写的目录给容器。容器可以在这个目录内编辑配置,更改后会生效。 ```yaml apiVersion: v1 kind: ConfigMap metadata: name: my-config data: config.yaml: |- # 配置内容 --- apiVersion: apps/v1 kind: Deployment metadata: name: my- name: my-container volumeMounts: - name: config-volume mountPath: /tmp/config volumes: - name: config-volume configMap: name: my-config ``` 2. **使用 downwardAPI**:如果允许的话,你可以利用Kubernetes的downward API特性,让容器可以直接访问环境变量,而不是配置文件。但这通常适用于简单的键值对配置。 3. **卷持久化存储**:如果需要长期修改,可以考虑使用持久卷(PersistentVolume and PersistentVolumeClaim),比如空日志卷,容器可以写入数据,然后通过Controller自动管理更新。 4. **配置管理系统**:如Helm charts或Operator等工具,它们提供更高级别的管理和更新机制,使得配置变更更为方便和安全。 请注意,直接在Pod内修改ConfigMap可能导致数据丢失或一致性问题,因此建议设计时考虑到配置版本控制和备份策略。同时,根据应用程序的安全需求和集群策略,确保操作的合规性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值