在Kubernetes官網裏,有這樣一篇文章,提到了Kubernetes裏的一個最佳實踐就是把應用代碼同配置信息分開,一種方式就是使用Kubernetes 1.2裏引入的configmap概念。git
https://kubernetes.io/blog/2016/04/configuration-management-with-containers/github
configmap實際上就是一系列鍵值對,存儲於etcd裏。etcd的官網有這樣一句話:docker
etcd is a distributed key-value store designed to reliably and quickly preserve and provide access to critical data.shell
https://github.com/etcd-io/etcd/blob/master/Documentation/docs.mdapi
etcd是一個高性能的分佈式鍵值對存儲庫,用於存儲和訪問關鍵數據。分佈式
使用下面的命令行建立一個Kubernetes config map:ide
kubectl create configmap test-config --from-literal=test.type=unit --from-literal=test.exec=always性能
建立一個名爲test-config的鍵值對,key爲test.type,值爲unit,key爲test.exec, 值爲always。ui
下面我打算建立一個pod,消費這個名爲test-config的configmap。命令行
建立一個內容以下的yaml文件:
apiVersion: v1 kind: Pod metadata: name: test-configmap spec: containers: - name: test-container image: alpine:3.8 command: [ "/bin/sh", "-c", "env" ] env: - name: TEST_TYPE valueFrom: configMapKeyRef: name: test-config key: test.type - name: TEST_EXEC valueFrom: configMapKeyRef: name: test-config key: test.exec restartPolicy: Never
這個yaml文件定義的pod基於docker鏡像alpine,執行shell命令/bin/sh -c env查看環境變量。
在env區域,我給該pod注入一個名爲TEST_TYPE的環境變量,值從configMap鍵值對的鍵名稱爲test.type的值中取。
kubectl create -f 建立這個pod:
使用命令kubectl logs test-configmap查看這個pod運行生成的日誌,發現輸出的環境變量列表中,出現了TEST_TYPE=unit,這個TEST_TYPE是我在yaml文件裏注入的環境變量名稱,而unit就來自configmap裏test-config的值unit。