涨薪技术|Kubernetes(k8s)之Pod环境变量
01Pod设置环境变量
在创建pod时,可以为其下的容器设置环境变量,通过配置文件的env或envForm字段来设置环境变量。
编写pod_env.yaml文件,内容如下,通过env关键字来定义环境变量,环境变量通过name,value对来设置,如下:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: pod-env
namespace: dev
labels:
user: redrose2100
spec:
containers:
- name: nginx
image: nginx:1.17.1
env:
- name: "username"
value: "admin"
- name: "password"
value: "admin123"
使用如下命令创建资源
[root@master pod]# kubectl apply -f pod_env.yaml
namespace/dev created
pod/pod-env created
[root@master pod]#
进入容器查看环境变量
[root@master pod]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-env 1/1 Running 0 3m
[root@master pod]# kubectl exec pod-env -n dev -it -c nginx /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future
version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod-env:/# echo $username
admin
root@pod-env:/# echo $password
admin123
root@pod-env:/#
02使用pod字段作为环境变量的值
创建一个yaml文件,文件名为dapi-envars-pod.yaml,并填入以下内容:
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/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
在配置文件中,您可以看到五个环境变量。env 字段是 EnvVars 的数组。数组中的第一个元素指定MY_NODE_NAME 环境变量从 Pod 的 spec.nodeName 字段中获取其值。其他环境变量也类似从Pod 字段中获取它们的名称。
注意:示例中的字段是 Pod 的字段,它们不是 Pod 中的容器的字段。
创建 Pod:
kubectl create -f https://k8s.io/docs/tasks/inject-data-application/dapi-envarspod.
yaml
验证 Pod 中的容器是 running 状态:
kubectl get pods
查看容器日志:
kubectl logs dapi-envars-fieldref
输出显示选定的环境变量的值:
minikube
dapi-envars-fieldref
default
172.17.0.4
default
想要知道为什么这些值会打印在日志中,请查看配置文件的 command 和 args 字段。当容器启动时,它将 5 个环境变量的值写到标准输出中,每十秒钟重复一次。
接下来,将一个 shell 放入正在您的 Pod 中运行的容器里面:
kubectl exec -it dapi-envars-fieldref -- sh
在 shell 中,查看环境变量:
/# printenv
输出结果显示,某些环境变量已被指定为 Pod 字段的值:
MY_POD_SERVICE_ACCOUNT=default
...
MY_POD_NAMESPACE=default
MY_POD_IP=172.17.0.4
...
MY_NODE_NAME=minikube
...
MY_POD_NAME=dapi-envars-fieldref
03使用容器字段作为环境变量的值
创建dapi-envars-container.yaml文件,用于将容器字段作为环境变量的值。
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-resourcefieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox:1.24
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_CPU_REQUEST MY_CPU_LIMIT;
printenv MY_MEM_REQUEST MY_MEM_LIMIT;
sleep 10;
done;
resources:
requests:
memory: "32Mi"
cpu: "125m"
limits:
memory: "64Mi"
cpu: "250m"
env:
- name: MY_CPU_REQUEST
valueFrom:
resourceFieldRef:
containerName: test-container
resource: requests.cpu
- name: MY_CPU_LIMIT
valueFrom:
resourceFieldRef:
containerName: test-container
resource: limits.cpu
- name: MY_MEM_REQUEST
valueFrom:
resourceFieldRef:
containerName: test-container
resource: requests.memory
- name: MY_MEM_LIMIT
valueFrom:
resourceFieldRef:
containerName: test-container
resource: limits.memory
restartPolicy: Never
配置文件中,您可以看到四个环境变量。env 字段是 EnvVars 的数组。数组中的第一个元素指定MY_CPU_REQUEST 环境变量从名为 test-container 的容器的 requests.cpu 字段中获取其值。其他环境变量也类似从容器字段中获取它们的值。
创建 Pod:
kubectl create -f dapi-envars-container.yaml
验证 Pod 中的容器是 running 状态:
kubectl get pods
查看容器日志:
kubectl logs dapi-envars-resourcefieldref
输出展示了选定环境变量的值:
1
1
33554432
67108864