涨薪技术|Kubernetes(k8s)之Pod环境变量

01Pod设置环境变量

在创建pod时,可以为其下的容器设置环境变量,通过配置文件的env或envForm字段来设置环境变量。

编写pod_env.yaml文件,内容如下,通过env关键字来定义环境变量,环境变量通过name,value对来设置,如下:

复制代码
apiVersion: v1kind: Namespacemetadata:name: dev---apiVersion: v1kind: Podmetadata:name: pod-envnamespace: devlabels:user: redrose2100spec:containers:- name: nginximage: nginx:1.17.1env:- name: "username"value: "admin"- name: "password"value: "admin123"

使用如下命令创建资源​​​​​​​

复制代码
[root@master pod]# kubectl apply -f pod_env.yamlnamespace/dev createdpod/pod-env created[root@master pod]#

进入容器查看环境变量​​​​​​​

复制代码
[root@master pod]# kubectl get pod -n devNAME READY STATUS RESTARTS AGEpod-env 1/1 Running 0 3m[root@master pod]# kubectl exec pod-env -n dev -it -c nginx /bin/bashkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a futureversion. Use kubectl exec [POD] -- [COMMAND] instead.root@pod-env:/# echo $usernameadminroot@pod-env:/# echo $passwordadmin123root@pod-env:/#

02使用pod字段作为环境变量的值

创建一个yaml文件,文件名为dapi-envars-pod.yaml,并填入以下内容:​​​​​​​

复制代码
apiVersion: v1kind: Podmetadata:name: dapi-envars-fieldrefspec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "sh", "-c"]args:- while true; doecho -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_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: MY_POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: MY_POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MY_POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: MY_POD_SERVICE_ACCOUNTvalueFrom:fieldRef:fieldPath: spec.serviceAccountNamerestartPolicy: 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

输出显示选定的环境变量的值:​​​​​​​

复制代码
minikubedapi-envars-fieldrefdefault172.17.0.4default

想要知道为什么这些值会打印在日志中,请查看配置文件的 command 和 args 字段。当容器启动时,它将 5 个环境变量的值写到标准输出中,每十秒钟重复一次。

接下来,将一个 shell 放入正在您的 Pod 中运行的容器里面:

复制代码
kubectl exec -it dapi-envars-fieldref -- sh

在 shell 中,查看环境变量:

复制代码
/# printenv

输出结果显示,某些环境变量已被指定为 Pod 字段的值:​​​​​​​

复制代码
MY_POD_SERVICE_ACCOUNT=default...MY_POD_NAMESPACE=defaultMY_POD_IP=172.17.0.4...MY_NODE_NAME=minikube...MY_POD_NAME=dapi-envars-fieldref

03使用容器字段作为环境变量的值

创建dapi-envars-container.yaml文件,用于将容器字段作为环境变量的值。​​​​​​​

复制代码
apiVersion: v1kind: Podmetadata:name: dapi-envars-resourcefieldrefspec:containers:- name: test-containerimage: k8s.gcr.io/busybox:1.24command: [ "sh", "-c"]args:- while true; doecho -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_REQUESTvalueFrom:resourceFieldRef:containerName: test-containerresource: requests.cpu- name: MY_CPU_LIMITvalueFrom:resourceFieldRef:containerName: test-containerresource: limits.cpu- name: MY_MEM_REQUESTvalueFrom:resourceFieldRef:containerName: test-containerresource: requests.memory- name: MY_MEM_LIMITvalueFrom:resourceFieldRef:containerName: test-containerresource: limits.memoryrestartPolicy: 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

输出展示了选定环境变量的值:​​​​​​​

复制代码
113355443267108864
相关推荐
勿忘,瞬间1 天前
Maven
java·maven
一 乐1 天前
高校教务|教务管理|基于springboot+vue的高校教务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·教务管理
数字冰雹1 天前
重塑城市公共安全管理的“智慧之眼”
java·大数据·数据库
August_._1 天前
【MySQL】触发器、日志、锁机制 深度解析
java·大数据·数据库·人工智能·后端·mysql·青少年编程
Halo_tjn1 天前
基于 Object 类及包装类的专项实验
java·开发语言·计算机
百锦再1 天前
第10章 错误处理
java·git·ai·rust·go·错误·pathon
拾忆,想起1 天前
超时重传 vs 快速重传:TCP双保险如何拯救网络丢包?
java·开发语言·网络·数据库·网络协议·tcp/ip·php
從南走到北1 天前
JAVA国际版同城外卖跑腿团购到店跑腿多合一APP系统源码支持Android+IOS+H5
android·java·ios·微信小程序·小程序
budingxiaomoli1 天前
多线程(一)
java·开发语言·jvm·java-ee
skyeeeeee1 天前
kubeadm安装k8s集群
后端·kubernetes