kubernetes之创建初始化容器

简介

此文讲述在应用容器运行之前如何使用初始化容器。

备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。

创建一个有初始化容器的Pod

创将一个Pod,该Pod中包含一个应用容器和初始化容器。在应用容器开始之前,初始化容器的初始化任务已经完成。文件名:init-containers.yaml

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: workdir
      mountPath: /usr/share/nginx/html
  # These containers are run during pod initialization
  initContainers:
  - name: install
    image: busybox
    command:
    - wget
    - "-O"
    - "/work-dir/index.html"
    - http://kubernetes.io
    volumeMounts:
    - name: workdir
      mountPath: "/work-dir"
  dnsPolicy: Default
  volumes:
  - name: workdir
    emptyDir: {}

在配置文件中,可以看出创建的Pod包含一个初始化容器和应用容器共享的Volume

初始化容器挂载了一个共享的Volume即:/work-dir,应用容器挂载的共享Volume/usr/share/nginx/html目录下。初始化容器运行如下的命令

wget -O /work-dir/index.html http://kubernetes.io

初始化容器早 nginx server 的根目录下写入index.html文件。

创建Pod:

# kubectl apply -f /root/k8s-example/pods/init-containers.yaml

确认初始化容器已经运行:

# kubectl get pod init-demo

输出结果显示 nginx 容器已经正在运行

NAME        READY   STATUS    RESTARTS   AGE
init-demo   1/1     Running   0          17s

进入init-demoPod中正在运行的nginx容器的shell内:

# kubectl exec -it init-demo -- /bin/bash

在shell中发出GET请求:

root@nginx:~# apt-get update
root@nginx:~# apt-get install curl
root@nginx:~# curl localhost

输出显示nginx正在运行由init容器编写的网页:

<!Doctype html>
<html id="home">

<head>
...
"url": "http://kubernetes.io/"}</script>
</head>
<body>
  ...
  <p>Kubernetes is open source giving you the freedom to take advantage ...</p>
  ...

删除Pod资源:

# kubectl delete pods init-demo
posted @ 2020-01-22 08:37  McSiberiaWolf  阅读(1144)  评论(0编辑  收藏  举报