<1>使用环境变量传递参数
在.yaml文件的container部分使用
env:- name: DEMO_PARAM1 value: "Parameter from the environment"
设置参数
podenv.yaml内容如下
apiVersion: v1kind: Podmetadata: name: podenv-demo labels: purpose: demo-podenvspec: containers: - name: podenv-demo-container image: busybox env: - name: DEMO_PARAM1 value: "Parameter from the environment" command: ["/bin/sh"] args: ["-c", "while true; do echo $(DEMO_PARAM1); sleep 10; done"]
执行命令
kubectl apply -f podenv.yaml
进入pod
kubectl -it exec podenv-demo /bin/sh
查看参数
printenv
可看到传入的参数
...DEMO_PARAM1=Parameter from the environment...
<2>使用Secret
创建Secret
kubectl create secret generic test-secret --from-literal=username='admin' --from-literal=password='testsecret123'
将secret数据作为文件在pod中通过volume访问
secretpod-volume.yaml内容如下
apiVersion: v1kind: Podmetadata: name: secret-test-podspec: containers: - name: test-container image: nginx volumeMounts: - name: secret-volume mountPath: /etc/secret-volume volumes: - name: secret-volume secret: secretName: test-secret
生成pod执行命令
kubectl apply -f secretpod-volume.yaml
进入pod查看
kubectl -it exec secret-test-pod /bin/sh
在/etc/secret-volume下有对应的secret数据
password username
通过创建环境变量的方式访问secret数据
secretpod-keyref.yaml内容如下
apiVersion: v1kind: Podmetadata: name: secret-envars-test-podspec: containers: - name: envars-test-container image: nginx env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: test-secret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: test-secret key: password
创建Pod
kubectl apply -f secretpod-keyref.yaml
进入Pod
kubectl -it exec secret-envars-test-pod /bin/sh
显示环境变量
执行命令
printenv
...SECRET_USERNAME=adminSECRET_PASSWORD=testsecret123...
取得Pod配置信息
取得Pod的信息挂载的volume
podvolumelabel.yaml内容如下
apiVersion: v1kind: Podmetadata: name: kubernetes-downwardapi-volume-example labels: zone: ue-est-coast cluster: test-cluster1 rack: rack-22 annotations: build: two builder: john-doespec: containers: - name: client-container image: busybox command: ["sh", "-c"] args: - while true: do if [[ -e /etc/podinfo/labels ]]; then echo -en '\n\n'; cat /etc/podinfo/labels; fi; if [[ -e /etc/podinfo/annotations ]]; then echo -en '\n\n'; cat /etc/podinfo/annotations; fi; sleep 5; done; volumeMounts: - name: podinfo mountPath: /etc/podinfo readOnly: false volumes: - name: podinfo downwardAPI: items: - path: "labels" fieldRef: fieldPath: metadata.labels - path: "annotations" fieldRef: fieldPath: metadata.annotations
创建Pod
kubectl apply -f getpodinf.yaml
进入Pod
kubectl -it exec k8s-downwardapi-demo /bin/sh
查看/etc/podinfo下有如下文件
annotations labels
取得容器配置信息
取得容器的配置信息如请求内存,CPU资源,内存,CPU限定资源等
podvolumeresourceref.yaml内容如下
apiVersion: v1kind: Podmetadata: name: k8s-downwardapi-volume-resourcerefspec: containers: - name: resourceref-container image: busybox command: ["sh", "-c"] args: - while true; do echo -en '\n'; if [[ -e /etc/podinfo/cpu_limit ]]; then echo -en '\n'; cat /etc/podinfo/cpu_limit; fi; if [[ -e /etc/podinfo/cpu_request ]]; then echo -en '\n'; cat /etc/podinfo/cpu_request; fi; if [[ -e /etc/podinfo/mem_limit ]]; then echo -en '\n'; cat /etc/podinfo/mem_limit; fi; if [[ -e /etc/podinfo/mem_request ]]; then echo -en '\n'; cat /etc/podinfo/mem_request; fi; sleep 5; done; resources: requests: memory: "32Mi" cpu: "125m" limits: memory: "64Mi" cpu: "250m" volumeMounts: - name: podinfo mountPath: /etc/podinfo readOnly: false volumes: - name: podinfo downwardAPI: items: - path: "cpu_limit" resourceFieldRef: containerName: resourceref-container resource: limits.cpu divisor: 1m - path: "cpu_request" resourceFieldRef: containerName: resourceref-container resource: requests.cpu divisor: 1m - path: "mem_limit" resourceFieldRef: containerName: resourceref-container resource: limits.memory divisor: 1Mi - path: "mem_request" resourceFieldRef: containerName: resourceref-container resource: requests.memory divisor: 1Mi
创建Pod
kubectl apply -f podvolumeresourceref.yaml
进入Pod
kubectl -it exec k8s-downwardapi-volume-resourceref /bin/sh
查看/etc/podinfo下有如下文件
cpu_limit cpu_request mem_limit mem_request
用Pod字段作为环境变量
在实际应用中Pod的name,IP等都需要在程序中取得,可以通过将Pod的这些值设为环境变量来获取
podvaluesenv.yaml内容如下
apiVersion: v1kind: Podmetadata: name: podvalue-env-fieldrefspec: containers: - name: podvalue-demo-container image: busybox command: [ "sh", "-c" ] args: - while true; do echo -en '\n'; printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE; printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT; sleep 10; done; env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: MY_POD_SERVICE_ACCOUNT valueFrom: fieldRef: fieldPath: spec.serviceAccountName restartPolicy: Never
创建Pod
kubectl apply -f podvalueasenv.yaml
进入Pod
kubectl -it exec podvalue-env-fieldref /bin/sh
执行命令printenv查看环境变量
...MY_POD_SERVICE_ACCOUNT=defaultMY_POD_NAMESPACE=defaultMY_POD_IP=172.20.2.93MY_NODE_NAME=xxxxxMY_POD_NAME=podvalue-env-fieldref...