Kubernetes 库伯内特斯的短暂容器
我创建了一个标准的nginx pod,我想运行一个sidecar容器,但在Kubernetes 1.18-1.20中它对我不起作用Kubernetes 库伯内特斯的短暂容器,kubernetes,sidecar,Kubernetes,Sidecar,我创建了一个标准的nginx pod,我想运行一个sidecar容器,但在Kubernetes 1.18-1.20中它对我不起作用 # kubectl alpha debug nginx --image=busybox --target=nginx Defaulting debug container name to debugger-6wlb5. # kubectl attach nginx -c debugger-6wlb5 If you don't see a command promp
# kubectl alpha debug nginx --image=busybox --target=nginx
Defaulting debug container name to debugger-6wlb5.
# kubectl attach nginx -c debugger-6wlb5
If you don't see a command prompt, try pressing enter.
error: unable to upgrade connection: container debugger-6wlb5 not found in pod nginx_default
我在apiserver、调度器和控制器管理器中启用了门功能。pod上的描述未显示错误或其他内容:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-4jhz2 (ro)
Ephemeral Containers:
debugger-6wlb5:
Image: busybox
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Conditions:
Type Status
挂载:
/来自default-token-4jhz2(ro)的var/run/secrets/kubernetes.io/serviceCount
临时容器:
调试器-6wlb5:
图片:busybox
端口:
主机端口:
环境:
挂载:
条件:
类型状态
我在这里错过了什么?背景
不幸的是,这仍然是alfa功能,不适合生产。如文件所述
本页概述了临时容器:一种特殊类型的容器,在现有Pod中临时运行,以完成用户启动的操作,如故障排除。您使用临时容器来检查服务,而不是构建应用程序
警告:临时容器处于早期α状态,不适合生产集群
测验
我已经用Kubernetes 1.19在Kubeadm上测试了这一点。在配置文件中设置了标志,如apiserver
、scheduler
和controller manager
---feature gates=EphemeralContainers=true
。也修改了kubelet
。
由于这是alpha
,因此需要特定的步骤才能使其正常工作
选项1
中描述了此方法
描述pod
在上面的示例中,attach
是通过使用-i
标志进行的。这是在一份声明中说的
默认情况下,-i标志导致kubectl调试附加到新容器。可以通过指定--attach=false来防止这种情况
旁注
引用的第二部分是如果会话断开连接,可以使用kubectl attach重新连接。
但是它适用于另一种方法,而不是临时容器
选项2
此选项和所有先决条件在本文中进行了描述。我使用了nginx
pod,而不是Deployment
$kubectl运行nginx--image=nginx
接下来,您必须使用以下配置创建.json
文件。请将元数据.name
更改为您的pod名称
{
"apiVersion": "v1",
"kind": "EphemeralContainers",
"metadata": {
"name": "nginx"
},
"ephemeralContainers": [{
"command": [
"sh"
],
"image": "busybox:latest",
"imagePullPolicy": "IfNotPresent",
"name": "debugger",
"stdin": true,
"tty": true,
"terminationMessagePolicy": "File"
}]
}
重要
必须使用kubectl replace--raw
$ kubectl replace --raw /api/v1/namespaces/default/pods/<podName>/ephemeralcontainers -f <jsonFileName>.json
在应用正确的命令后:
$ kubectl replace --raw /api/v1/namespaces/default/pods/nginx/ephemeralcontainers -f debug.json
{"kind":"EphemeralContainers","apiVersion":"v1","metadata":{"name":"nginx","namespace":"default","selfLink":"/api/v1/namespaces/default/pods/nginx/ephemeralcontainers","uid":"...}
使用kubectl description
验证是否创建了EphemeralContainer
$ kubectl describe po | grep 'Container ID' -B 2
Containers:
nginx:
Container ID: docker://a410b326cdc3b95abb2edff8cdb4d7edca9498ba44b54ca6a448967596391813
--
Ephemeral Containers:
debugger:
Container ID: docker://a1357c0daed0ad5664b8c838183a3eb0716339020e829077c14e7438fa5e1cf5
使用此方法,您将能够使用kubectl attach
$ kubectl attach -it nginx -c debugger
If you don't see a command prompt, try pressing enter.
/ #
结论
临时容器
是一种特殊类型的容器,在现有Pod中临时运行,以完成用户启动的操作,如故障排除。一旦终止会话,您将无法再次连接
您将得到以下错误:
kubectl apply -f debug.json
error: unable to recognize "debug.json": no matches for kind "EphemeralContainers" in version "v1"
$ kubectl attach -it nginx -c debugger
If you don't see a command prompt, try pressing enter.
error: unable to upgrade connection: container debugger not found in pod nginx_default
它将来可能会更改,但根据我的测试,您只能连接到此容器一次。Background
不幸的是,这仍然是alfa功能,不适合生产。如文件所述
本页概述了临时容器:一种特殊类型的容器,在现有Pod中临时运行,以完成用户启动的操作,如故障排除。您使用临时容器来检查服务,而不是构建应用程序
警告:临时容器处于早期α状态,不适合生产集群
测验
我已经用Kubernetes 1.19在Kubeadm上测试了这一点。在配置文件中设置了标志,如apiserver
、scheduler
和controller manager
---feature gates=EphemeralContainers=true
。也修改了kubelet
。
由于这是alpha
,因此需要特定的步骤才能使其正常工作
选项1
中描述了此方法
描述pod
在上面的示例中,attach
是通过使用-i
标志进行的。这是在一份声明中说的
默认情况下,-i标志导致kubectl调试附加到新容器。可以通过指定--attach=false来防止这种情况
旁注
引用的第二部分是如果会话断开连接,可以使用kubectl attach重新连接。
但是它适用于另一种方法,而不是临时容器
选项2
此选项和所有先决条件在本文中进行了描述。我使用了nginx
pod,而不是Deployment
$kubectl运行nginx--image=nginx
接下来,您必须使用以下配置创建.json
文件。请将元数据.name
更改为您的pod名称
{
"apiVersion": "v1",
"kind": "EphemeralContainers",
"metadata": {
"name": "nginx"
},
"ephemeralContainers": [{
"command": [
"sh"
],
"image": "busybox:latest",
"imagePullPolicy": "IfNotPresent",
"name": "debugger",
"stdin": true,
"tty": true,
"terminationMessagePolicy": "File"
}]
}
重要
必须使用kubectl replace--raw
$ kubectl replace --raw /api/v1/namespaces/default/pods/<podName>/ephemeralcontainers -f <jsonFileName>.json
在应用正确的命令后:
$ kubectl replace --raw /api/v1/namespaces/default/pods/nginx/ephemeralcontainers -f debug.json
{"kind":"EphemeralContainers","apiVersion":"v1","metadata":{"name":"nginx","namespace":"default","selfLink":"/api/v1/namespaces/default/pods/nginx/ephemeralcontainers","uid":"...}
使用kubectl description
验证是否创建了EphemeralContainer
$ kubectl describe po | grep 'Container ID' -B 2
Containers:
nginx:
Container ID: docker://a410b326cdc3b95abb2edff8cdb4d7edca9498ba44b54ca6a448967596391813
--
Ephemeral Containers:
debugger:
Container ID: docker://a1357c0daed0ad5664b8c838183a3eb0716339020e829077c14e7438fa5e1cf5
使用此方法,您将能够使用kubectl attach
$ kubectl attach -it nginx -c debugger
If you don't see a command prompt, try pressing enter.
/ #
结论
临时容器
是一种特殊类型的容器,在现有Pod中临时运行,以完成用户启动的操作,如故障排除。一旦终止会话,您将无法再次连接
您将得到以下错误:
kubectl apply -f debug.json
error: unable to recognize "debug.json": no matches for kind "EphemeralContainers" in version "v1"
$ kubectl attach -it nginx -c debugger
If you don't see a command prompt, try pressing enter.
error: unable to upgrade connection: container debugger not found in pod nginx_default
它将来可能会更改,但根据我的测试,您只能连接到此容器一次。嗨,PjoterS!谢谢有没有其他方法可以将侧车添加到正在运行的吊舱中?如果吊舱正在运行,您只能使用短暂的侧车。如果您想将pod与另一个容器作为侧车,您可以
复制现有容器并添加新容器作为侧车