k8s中pod的环境变量,InitContainer初始化容器
1、pod环境变量k8s在容器创建时,有些容器会有需要使用变量的情况,常见的例如mysql这类容器可以通过创建的变量来修改用户名密码等。而在创建 Pod 时,可以为其下的容器设置环境变量。应用场景:• 容器内应用程序希望获取Pod信息• 容器内应用程序希望通过用户定义的变量改变默认行为变量值几种定义方式:• 自定义变量值 • 变量值从Pod属性获取• 变量值从Secret、ConfigMap获取测
·
目录
1、pod环境变量
k8s在容器创建时,有些容器会有需要使用变量的情况,常见的例如mysql这类容器可以通过创建的变量来修改用户名密码等。而在
创建 Pod 时,可以为其下的容器设置环境变量。
应用场景:
• 容器内应用程序希望获取Pod信息
• 容器内应用程序希望通过用户定义的变量改变默认行为
变量值几种定义方式:
• 自定义变量值 • 变量值从Pod属性获取
• 变量值从Secret、ConfigMap获取
测试
写一个测试yaml(在官网找到的示例)
apiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: pod1name: pod-envspec:containers:- image: nginx # 主容器name: webenv:- 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.serviceAccountName- name: ABCvalue: "123456"
执行成功
进入此容器
kubectl exec -it pod-env -- bash
使用env可以列出容器所有变量,可以看到刚刚加的变量在里面
输出可以看见刚刚设置的变量
2、InitContainer
initContainer我们理解为是创建一个初始容器,与主容器和辅助容器不同,他不是一个持续运行的容器,只在创建之初为主容器做初始化操作
一般初始容器可以用作当主容器启动需要一些配置文件的时候,初始容器可以先去为主容器拉取镜像,主容器与初始化容器都是复用程度很高的容器
测试
写一个测试yaml
需求:部署一个web网站,网站程序没有打到镜像中,而是希望从代码 仓库中动态拉取放到应用容器中。
上面是初始化容器,下面是主容器,初始化容器做的操作是下载一个网站首页到/opt下并同步到nginx容器之中,其中初始化容器/opt与/usr/share/nginx/html做了存储共享
apiVersion: v1kind: Podmetadata:name: init-demospec:initContainers:- name: downloadimage: busyboxcommand:- wget- "-O"- "/opt/index.html"- http://www.aliangedu.cnvolumeMounts:- name: wwwrootmountPath: "/opt"containers:- name: nginximage: nginxports:- containerPort: 80volumeMounts:- name: wwwrootmountPath: /usr/share/nginx/htmlvolumes:- name: wwwrootemptyDir: {}
执行后可以看见,nginx的首页已经变了
kubectl get pods -o wide
curl 10.244.36.75:80
即证明初始化容器初始化成功
注:初始容器会在主容器前运行,是做主容器启动之前的前置工作(依赖)
pod一共有三种类型容器
• Infrastructure Container:基础容器
• 维护整个Pod网络空间
• InitContainers:初始化容器
• 先于业务容器开始执行
• Containers:业务容器
• 并行启动
更多推荐
已为社区贡献13条内容
所有评论(0)