ConfigMap
ConfigMap 是一種 API 對象淆衷,用來將非機(jī)密性的數(shù)據(jù)保存到鍵值對中。使用時可以用作環(huán)境變量培己、命令行參數(shù)或者存儲卷中的配置文件炕横。
可以使用四種方式來使用 ConfigMap 配置 Pod 中的容器:
- 容器 entrypoint 的命令行參數(shù)
- 容器的環(huán)境變量
- 在只讀卷里面添加一個文件,讓應(yīng)用來讀取
- 編寫代碼在 Pod 中運(yùn)行老厌,使用 kubernetes API 來讀取 ConfigMap
創(chuàng)建 ConfigMap
vim 9-1-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: appvar
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
kubectl create -f 9-1-configmap.yaml
kubectl get configmap
可以看到
NAME DATA AGE
appvar 4 6m42s
通過環(huán)境變量的方式使用 ConfigMap
kubernetes 在 1.6 版本引入新字段 envFrom瘟则,可以實現(xiàn)在 Pod 環(huán)境中將 ConfigMap 中定義的 key=value 自動生成為環(huán)境變量
創(chuàng)建 Pod
vim 9-1-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-test
spec:
containers:
- name: test
image: busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: appvar
restartPolicy: Never
kubectl create -f 9-1-pod.yaml
可以看到
pod/pod-test created
kubectl get po
可以看到
NAME READY STATUS RESTARTS AGE
pod-test 0/1 Completed 0 10s
kubectl describe configmap appvar
可以看到
Data
====
ui_properties_file_name:
----
user-interface.properties
user-interface.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
game.properties:
----
enemy.types=aliens,monsters
player.maximum-lives=5
player_initial_lives:
----
3
Events: <none>
kubectl logs pod-test
可以看到
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.1.0.1:443
HOSTNAME=pod-test
SHLVL=1
HOME=/root
game.properties=enemy.types=aliens,monsters
player.maximum-lives=5
user-interface.properties=color.good=purple
color.bad=yellow
allow.textmode=true
KUBERNETES_PORT_443_TCP_ADDR=10.1.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
ui_properties_file_name=user-interface.properties
KUBERNETES_PORT_443_TCP_PROTO=tcp
player_initial_lives=3
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.1.0.1:443
KUBERNETES_SERVICE_HOST=10.1.0.1
PWD=/
Secret
secret 對象用來保存敏感信息,例如密碼枝秤、OAuth 令牌和 SSH 秘鑰等醋拧。
Pod 可以通過三種方式使用 secret:
- 作為掛載到一個或多個容器上的卷中的文件
- 作為容器的環(huán)境變量
- 由 kubernetes 在為 Pod 拉取鏡像時使用
例子
創(chuàng)建數(shù)據(jù)文件
echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt
創(chuàng)建 secret
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
可以看到
secret/db-user-pass created
kubectl get secret
可以看到
NAME TYPE DATA AGE
db-user-pass Opaque 2 36s
kubectl describe secret db-user-pass
可以看到
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 12 bytes
username.txt: 5 bytes