本文描述了如何为Pod配置初始化容器InitContainer。

    本例中,您将创建一个Pod,该Pod包含一个应用程序容器(工作容器)和一个初始化容器(Init Container)。初始化容器执行结束之后,应用程序容器(工作容器)才开始启动。

    Pod 的配置文件如下:

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: init-demo
    5. spec:
    6. containers:
    7. - name: nginx
    8. image: nginx
    9. ports:
    10. - containerPort: 80
    11. volumeMounts:
    12. - name: workdir
    13. mountPath: /usr/share/nginx/html
    14. # These containers are run during pod initialization
    15. initContainers:
    16. - name: install
    17. image: busybox
    18. command:
    19. - wget
    20. - "-O"
    21. - "/work-dir/index.html"
    22. - https://kuboard.cn
    23. volumeMounts:
    24. - name: workdir
    25. mountPath: "/work-dir"
    26. dnsPolicy: Default
    27. volumes:
    28. - name: workdir
    29. emptyDir: {}

    从配置文件可以看出,Pod 中初始化容器和应用程序共享了同一个数据卷。初始化容器将该共享数据卷挂载到 /work-dir 路径,应用程序容器将共享数据卷挂载到 /usr/share/nginx/html 路径。初始化容器执行如下命令后,就退出执行:

    1. wget -O /work-dir/index.html https://kuboard.cn

    执行该命令时,初始化容器将结果写入了应用程序容器 nginx 服务器对应的 html 根路径下的 index.html。

    1. - <br />
    2. - 验证nginx容器已经运行
    3. ```bash
    4. kubectl get pod init-demo


    输出结果如下所示:

    1. NAME READY STATUS RESTARTS AGE
    2. init-demo 1/1 Running 0 1m
    • 获得 nginx 容器的命令行终端: ```bash kubectl exec -it init-demo — /bin/bash
    1. <br /> 在命令行终端中执行向 nginx 发送一个 GET 请求:
    2. ```bash
    3. apt-get update
    4. apt-get install curl
    5. curl localhost


    输出结果将显示nginx根目录下的 index.html 文件(该文件由初始化容器写入到共享数据卷):

    1. <!DOCTYPE html>
    2. <html lang="en" style="margin-right: 0px;"><head>
    3. <meta charset="utf-8">
    4. <title>Kuboard_Kubernetes教程_管理界面</title>
    5. ...