K8sCKA认证kubernetes

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

2022-02-28  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读