Немного информации есть на сайте Kubernetes и несколько примеров можно найти на просторах.
Данная функция эксперементальная, в дебрях описания альф бет версий кубера не разобрался.
Проверялось на Kubernetes v1.16.3
Для того чтобы иметь возможность запустить эфемерный контейнер в поде нужно активировать соответвующие функцию/и через feature-gates.
В общем случае feature-gates это опция с которой должен быть запущен необходимый компонент кубера, ( смотрим в параметрах запущеных процессов через ps ) т.е. один лишь кубелет запущеный с этим параметром скорее всего будет недостаточен, вернее разные фичи требуют активации на соотввующих компонентах кубера.
В зависимости от режима использования кубера, есть следующие варианты
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"
Рестартуем service kubelet restart
/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
В namespace kube-system ищем поды содержащие в имени
kube-apiserver kube-scheduler kube-controller-manager
Удялем эти поды через kubectl delete pod
Они пересоздадутся с параметрами из поправленных файлов.
4. Теоретически есть еще один вариант, но он у меня не заработал
kubeadm upgrade plan --feature-gates EphemeralContainers=true
Пробуем подсоединиться к поду-контейнерам.
Небольшой копиаст с сайта кубера.
Делаем ec.json файл в котором example-pod заменяем на имя пода к которому нежно подключится, в image пишем контейнер с отладочными средствами (ubuntu например):
{ "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "example-pod" }, "ephemeralContainers": [{ "command": [ "sh" ], "image": "busybox", "imagePullPolicy": "IfNotPresent", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }] }
Патчим свойства контенера к которому будем подключаться, не забываем про namespace
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» то ничего интересного не получится т.к. нужна поддержка Share Process Namespace.
ссылка на оригинал статьи https://habr.com/ru/post/479304/
Добавить комментарий