临时容器Kubernetes的第一步

临时容器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”,那么它将不会有什么有趣的事情。 需要支持共享进程命名空间。

Source: https://habr.com/ru/post/zh-CN479304/


All Articles