Kubernetes Init Containers 的概念及实例教程

330 阅读3分钟

Kubernetes Init Containers

各位读者,大家好。这篇文章详细讲述了Kubernetes Init容器的概念。

那么,让我们开始吧!! 🙂


了解Kubernetes Init容器的概念

Kubernetes Init容器是一个专门的、定制的容器,在任何应用pod/container启动和运行之前运行。它实际上包含了一些定制的设置脚本或实用程序,人们可能不希望将其推送到特定的应用程序镜像中。

这些init容器可以和其他容器规格一起在pod/部署定义YAML文件中指定。

每一个pod可以有多个应用容器同时运行。同时,它也可以有多个init容器。这些init容器运行命令并在特定应用容器开始运行之前完成执行。

对于init容器来说,成功完成它们的执行对其他应用容器的启动是非常重要的。是的,在理想情况下,init容器总是朝着成功完成的方向发展。在任何情况下,如果pod的init容器失败,kubelet会尝试重新启动init容器,直到它变得成功。

如果一个pod的重启策略被设置为 "从不",而初始容器失败了,那么整个pod就是失败的。

在了解了init容器之后,现在让我们来了解一下普通容器和init容器之间的区别。


初始容器与普通容器的区别

普通容器有各种字段,如活度探测、生命周期、启动探测等。但Init容器不支持这些字段,因为它必须成功运行才能启动常规容器。

另外,如果我们指定了多个init容器,kubelet将按顺序运行每个init容器。在下一个容器开始运行之前,之前的每个init容器都必须完成其执行。一旦所有的init容器都成功了,kubelet就会启动应用容器。


初始化容器的优势

  • 由于init容器运行自定义的设置脚本和工具,我们没有必要为执行建立一个镜像。
  • Init 容器可以访问普通容器无法访问的应用秘密。
  • 成功执行init容器是任何应用容器启动的一个必要条件。初始化容器有能力阻止应用容器的执行,直到所有的工具都被成功执行。
  • 在一个应用镜像中保留过多的工具和软件工具会使它变得不安全,更容易发生危险。因此,我们可以将这些软件工具放在初始容器中,从而提高真正的应用镜像的安全性。

在Kubernetes部署中使用初始容器--实际执行

现在让我们看一下下面的例子,以了解包括init容器的方式

例子 -

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
  labels:
    app: myapp01
spec:
  containers:
  - name: app-container
    image: nginx
  initContainers:
  - name: init-utilities
    image: busybox:1.21
    command: ['sh', '-c', "echo App has been initialized"]

这里,我们配置了两个容器:一个是运行Nginx镜像的普通容器,另一个是init容器。init容器是建立在busybox镜像之上的,它执行命令。


总结

到此为止,我们已经接近了本主题的终点。如果你遇到任何问题,请随时在下面发表评论。

在那之前,祝你学习愉快! 🙂