我正在尝试使用 init 容器在主容器启动之前准备一些文件。在 init 容器中,我想挂载一个hostPath卷,以便我可以共享为主容器准备一些文件。
我的集群使用 1.6 版之前的 kubernetes,所以我使用的meta.annotation语法是:
pod.beta.kubernetes.io/init-containers: '[
{
"name": "init-myservice",
"image": "busybox",
"command": ["sh", "-c", "mkdir /tmp/jack/ && touch cd /tmp/jack && touch a b c"],
"volumeMounts": [{
"mountPath": "/tmp/jack",
"name": "confdir"
}]
}
]'
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。添加volumeMounts导致容器init-myserver进入 CrashLoop。没有它,pod 会成功创建,但它没有实现我想要的。
在 <1.5 中不可能在 init 容器中安装卷吗?1.6+呢?
你不需要做hostPathvolume来与Pod的容器共享init-container生成的数据。您可以使用emptyDir来实现相同的结果。使用的好处emptyDir是您不需要在主机上做任何事情,即使您无权访问该集群上的节点,这也适用于任何类型的集群。
使用的另一组问题hostPath是在主机上的该文件夹上设置适当的权限,如果您使用任何启用 SELinux 的发行版,则必须在该目录上设置正确的上下文。
apiVersion: v1
kind: Pod
metadata:
name: init
labels:
app: init
annotations:
pod.beta.kubernetes.io/init-containers: '[
{
"name": "download",
"image": "axeclbr/git",
"command": [
"git",
"clone",
"https://github.com/mdn/beginner-html-site-scripted",
"/var/lib/data"
],
"volumeMounts": [
{
"mountPath": "/var/lib/data",
"name": "git"
}
]
}
]'
spec:
containers:
- name: run
image: docker.io/centos/httpd
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/www/html
name: git
volumes:
- emptyDir: {}
name: git
Run Code Online (Sandbox Code Playgroud)
查看上面的示例,其中 init-container 和 pod 中的容器共享同一个名为git. 卷的类型是emptyDir。我只希望 init-container 在每次这个 pod 出现时提取数据,然后从httpdpod的容器中提供数据。
哈。
| 归档时间: |
|
| 查看次数: |
11593 次 |
| 最近记录: |