美文网首页K8sCKA认证kubernetes
【K8s 精选】CKA - 使用 Configmap 和 Sec

【K8s 精选】CKA - 使用 Configmap 和 Sec

作者: 熊本极客 | 来源:发表于2022-02-28 21:05 被阅读0次

    1.使用 Configmap 配置 Application

    1.2 创建 Configmap

    利用 kubectl apply -f game-demo.yaml 创建 configmap

    # game-demo.yaml 的内容如下
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: game-demo
    data:
      # 类属性键;每一个键都映射到一个简单的值
      player_initial_lives: "3"
      ui_properties_file_name: "user-interface.properties"
    
      # 类文件键
      game.properties: |
        enemy.types=aliens,monsters
        player.maximum-lives=5    
      user-interface.properties: |
        color.good=purple
        color.bad=yellow
        allow.textmode=true 
    

    1.3 Application 挂载 Configmap

    利用 kubectl apply -f test-pod.yaml 创建 Pod。

    # 方式 1:Configmap 数据定义 Pod 环境变量
    # 方式 2:Configmap 数据添加到卷中的特定路径
    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
    spec:
      containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env:
            # 方式 1:Configmap 数据定义 Pod 环境变量
            # 请注意这里和 ConfigMap 中的键名是不一样的
            - name: PLAYER_INITIAL_LIVES 
              valueFrom:
                configMapKeyRef:
                  name: game-demo           # 这个值来自 ConfigMap
                  key: player_initial_lives # 需要取值的键
            - name: UI_PROPERTIES_FILE_NAME
              valueFrom:
                configMapKeyRef:
                  name: game-demo
                  key: ui_properties_file_name
          volumeMounts:
          - name: config
            mountPath: "/opt/test/config"
            readOnly: true
      volumes:
        # 方式 2:Configmap 数据添加到卷中的特定路径
        - name: config
          configMap:
            # 挂载的 ConfigMap 的名字
            name: game-demo
            # 来自 ConfigMap 的一组键
            items:
            - key: "game.properties"
              path: "game.properties"
            - key: "user-interface.properties"
              path: "user-interface.properties"
    

    注意: 挂载 /opt/test/config 目录之前,会删除该目录下所有文件。

    挂载的 ConfigMap 将自动更新kubelet 在每次定期同步时都会检查已挂载的 configmap 是否是最新的。 因为使用基于本地 TTL 的缓存来获取 configmap 的当前值,所以更新 configmap 的周期等于 kubelet 同步周期 + TTL。说明: 如果以方式挂载 configMap,则不会自动更新 configMap

    2.使用 Secret 配置 Application

    2.1 创建 Secret

    secret 的使用场景是将敏感数据,例如密码、加密密钥,注入到容器中。

    # 步骤一:使用 Base64 编码转换明文的用户名和密码
    $echo -n 'my-app' | base64
    bXktYXBw
    $echo -n '39528$vdg7Jb' | base64
    Mzk1MjgkdmRnN0pi
    
    # 步骤二:创建 Secret
    
    # test-secret.yaml 的内容如下
    apiVersion: v1
    kind: Secret
    metadata:
      name: test-secret
    data:
      username: bXktYXBw
      password: Mzk1MjgkdmRnN0pi
    
    # 方式 1
    $kubectl apply -f test-secret.yaml
    # 方式 2
    $kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
    Name:       test-secret
    Namespace:  default
    Labels:     <none>
    Annotations:    <none>
    
    Type:   Opaque
    
    Data
    ====
    password:   13 bytes
    username:   7  bytes
    

    2.2 Application 挂载 Secret

    # 方式 1:Secret 数据定义 Pod 环境变量
    # 方式 2:Secret 数据添加到卷中的特定路径
    apiVersion: v1
    kind: Pod
    metadata:
      name: secret-test-pod
    spec:
      containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env:
          # 方式 1:Secret 数据定义 Pod 环境变量
           - name: SECRET_USERNAME
             valueFrom:
                secretKeyRef:
                    name: test-secret
                    key: username
           - name: SECRET_PASSWORD
             valueFrom:
                secretKeyRef:
                    name: test-secret
                    key: password
          volumeMounts:
            # 方式 2:Secret 数据添加到卷中的特定路径
            - name: secret-volume
              mountPath: /opt/test/secret
     Volume.
      volumes:
        - name: secret-volume
          secret:
            secretName: test-secret
    
    # 创建 Pod
    $kubectl create -f secret-pod.yaml
    
    # 确认 Pod 正在运行
    $kubectl get pod secret-test-pod
    NAME              READY     STATUS    RESTARTS   AGE
    secret-test-pod   1/1       Running   0          42m
    
    # 获取一个 shell 进入 Pod 中运行的容器
    $kubectl exec -it secret-test-pod bash
    $ls /etc/opt/secret
    password username
    $echo "$(cat /etc/opt/secret/username)"
    my-app
    $echo "$(cat /etc/opt/secret/password)"
    39528$vdg7Jb
    

    相关文章

      网友评论

        本文标题:【K8s 精选】CKA - 使用 Configmap 和 Sec

        本文链接:https://www.haomeiwen.com/subject/djllrrtx.html