Kubernetes - 实战:ConfigMap - Secret

在 Kubernetes 中,ConfigMap 和 Secret 是两种用于存储和管理应用配置信息的重要资源对象。实战中,我们会创建、使用并更新这些资源以向集群中的 Pod 提供配置数据或敏感信息。

创建 ConfigMap

  1. 从文件创建 ConfigMap
    假设我们有两个配置文件 config.propertieslogback.xml,我们可以这样创建 ConfigMap:

    kubectl create configmap my-config --from-file=config.properties --from-file=logback.xml
    
  2. 从字面量创建 ConfigMap
    如果你想要直接在命令行中创建键值对,可以这样做:

    kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
    
  3. YAML 文件创建 ConfigMap
    也可以通过 YAML 文件定义并创建 ConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-config
    data:
      config.properties: |
        property1=value1
        property2=value2
      logback.xml: |
        <?xml version="1.0"?>
        <!-- Logback configuration -->
        ...
    

    然后应用 YAML 文件:

    kubectl apply -f configmap.yaml
    

使用 ConfigMap

在 Pod 中使用 ConfigMap,可以将其作为环境变量、命令行参数或者挂载到 Pod 的文件系统中。

  • 作为环境变量
    在 Pod 的容器定义中,可以引用 ConfigMap 中的键作为环境变量:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: my-container
        image: my-image
        envFrom:
        - configMapRef:
            name: my-config
        # 或者单独设置环境变量
        env:
        - name: PROPERTY_1
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: property1
    
  • 作为文件挂载
    将 ConfigMap 挂载到容器的文件系统中:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: my-container
        image: my-image
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
          readOnly: true
      volumes:
      - name: config-volume
        configMap:
          name: my-config
    

创建和使用 Secret

Secret 的创建和使用与 ConfigMap 类似,但主要用于存储敏感信息,如密码、密钥等。

  1. 创建 Secret

    # 从文件创建 Secret
    kubectl create secret generic my-secret --from-file=password.txt --from-file=private.key
    
    # 从字面量创建 Secret
    kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=supersecret
    
    # 通过 YAML 文件创建 Secret
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      password: c3VwZXJzZWNyZXQ= # 这里的数据是 base64 编码后的字符串
    
  2. 在 Pod 中使用 Secret

    • 作为环境变量

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: my-container
          image: my-image
          env:
          - name: PASSWORD
            valueFrom:
              secretKeyRef:
                name: my-secret
                key: password
      
    • 作为文件挂载

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: my-container
          image: my-image
          volumeMounts:
          - name: secret-volume
            mountPath: /etc/secrets
            readOnly: true
        volumes:
        - name: secret-volume
          secret:
            secretName: my-secret
      

更新和管理 ConfigMap 和 Secret

要更新 ConfigMap 或 Secret,只需重新创建或应用更改过的 YAML 文件即可。Kubernetes 会自动触发受影响的 Pod 重新加载配置或秘密信息(对于 ConfigMap,取决于应用如何监听配置变化;对于 Secret,容器会立即重新挂载更新的 Secret 数据)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值