临时容器Kubernetes是用于调试容器中问题
的有趣方法,除了可执行二进制文件外,容器中不包含任何内容。
一些信息可以在Kubernetes网站上找到,并且可以在广泛的地方找到几个示例。
该功能是实验性的,在对立方的alpha-beta版本的描述不甚了解时。
在Kubernetes v1.16.3上测试
为了能够在炉膛中运行临时容器,您需要激活相应的功能/并通过
feature-gates激活。
在一般情况下,feature-gates是一个选项,通过它可以启动多维数据集的必要组件(我们通过ps查看正在运行的进程的参数),即 仅使用此参数启动的Cublet可能不够用,或者需要在多维数据集的相应组件上激活不同的功能。
根据多维数据集的使用方式,有以下选项
1。
minikube start --feature-gates="EphemeralContainers=true"
2.通过添加到部分来扩展集群
apiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration localAPIEndpoint: {} nodeRegistration: kubeletExtraArgs: "feature-gates": "EphemeralContainers=true" --- apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration apiServer: extraArgs: "feature-gates": "EphemeralContainers=true" scheduler: extraArgs: "feature-gates": "EphemeralContainers=true" controllerManager: extraArgs: "feature-gates": "EphemeralContainers=true"
3.在活动集群上
/var/lib/kubelet/kubeadm-flags.env
添加到参数
--feature-gates=EphemeralContainers=true
使它看起来像
KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --feature-gates=EphemeralContainers=true --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1"
重新启动服务kubelet重新启动
/etc/kubernetes/manifests/kube-apiserver.yaml
将以下变量添加到cmd列表的末尾:
spec: containers: - command: - --feature-gates=EphemeralContainers=true
同样,我们裁定
kube-scheduler.yaml kube-controller-manager.yaml
之后
kubectl get pods -A
在名称空间kube-system中,我们寻找包含名称的pod
kube-apiserver kube-scheduler kube-controller-manager
让我们通过kubectl delete pod删除这些pod
使用更正后的文件中的参数重新创建它们。
4.从理论上讲,还有另一种选择,但这对我不起作用
kubeadm upgrade plan --feature-gates EphemeralContainers=true
我们尝试连接到Pod容器。
Coober网站的一本小本。
我们创建一个ec.json文件,其中将example-pod替换为它轻轻连接的Pod的名称,在镜像中,我们编写了一个带有调试工具的容器(例如ubuntu):
{ "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "example-pod" }, "ephemeralContainers": [{ "command": [ "sh" ], "image": "busybox", "imagePullPolicy": "IfNotPresent", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }] }
修补我们将要连接的计数器的属性,不要忘记名称空间
kubectl replace --raw /api/v1/namespaces/<b>default</b>/pods/<b>example-pod</b>/ephemeralcontainers -f ec.json
将外壳连接并运行在容器中:
kubectl attach -it example-pod -c debugger
如果您制作“ ps auxww”,那么它将不会有什么有趣的事情。 需要支持共享进程命名空间。