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