目录

1、pod环境变量

测试

2、InitContainer

测试

pod一共有三种类型容器


1、pod环境变量

k8s在容器创建时,有些容器会有需要使用变量的情况,常见的例如mysql这类容器可以通过创建的变量来修改用户名密码等。而在 创建 Pod 时,可以为其下的容器设置环境变量。
应用场景:
 • 容器内应用程序希望获取Pod信息 
 • 容器内应用程序希望通过用户定义的变量改变默认行为
 变量值几种定义方式:
  • 自定义变量值 • 变量值从Pod属性获取 
  • 变量值从Secret、ConfigMap获取

测试

写一个测试yaml(在官网找到的示例)
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1
  name: pod-env
spec:
  containers:
  - image: nginx  # 主容器
    name: web
    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
      - name: ABC
        value: "123456"
执行成功
进入此容器
kubectl exec -it pod-env -- bash
使用env可以列出容器所有变量,可以看到刚刚加的变量在里面
输出可以看见刚刚设置的变量

2、InitContainer

initContainer我们理解为是创建一个初始容器,与主容器和辅助容器不同,他不是一个持续运行的容器,只在创建之初为主容器做初始化操作
一般初始容器可以用作当主容器启动需要一些配置文件的时候,初始容器可以先去为主容器拉取镜像,主容器与初始化容器都是复用程度很高的容器

测试

写一个测试yaml
需求:部署一个web网站,网站程序没有打到镜像中,而是希望从代码 仓库中动态拉取放到应用容器中。
上面是初始化容器,下面是主容器,初始化容器做的操作是下载一个网站首页到/opt下并同步到nginx容器之中,其中初始化容器/opt与/usr/share/nginx/html做了存储共享
apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  initContainers:
  - name: download
    image: busybox
    command:
    - wget
    - "-O"
    - "/opt/index.html"
    - http://www.aliangedu.cn
    volumeMounts:
    - name: wwwroot
      mountPath: "/opt"
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: wwwroot
      mountPath: /usr/share/nginx/html
  volumes:
  - name: wwwroot
    emptyDir: {}
执行后可以看见,nginx的首页已经变了
kubectl get pods -o wide
curl 10.244.36.75:80
即证明初始化容器初始化成功
注:初始容器会在主容器前运行,是做主容器启动之前的前置工作(依赖)

pod一共有三种类型容器

• Infrastructure Container:基础容器
 • 维护整个Pod网络空间 
• InitContainers:初始化容器 
• 先于业务容器开始执行 
• Containers:业务容器 
• 并行启动
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐