Невозможно получить снаряд в контейнер цитадели в Куберне - PullRequest
0 голосов
/ 05 ноября 2018

У меня работает Istio (включая цитадель) в мини-кубе, используя инструкции на https://istio.io/docs/setup/kubernetes/helm-install.

$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml
$ kubectl create namespace istio-system
$ kubectl apply -f $HOME/istio.yaml

Когда я пытаюсь вставить оболочку в контейнер цитадели, я получаю сообщение об ошибке:

$ kubectl exec -it istio-citadel-6d7f9c545b-bkvnx  -- /bin/bash
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown
command terminated with exit code 126

Тем не менее, я могу выполнить в других контейнерах, как пилотный штраф.

Это мои стручки и контейнеры, если это поможет.

shell-demo:                             nginx,
istio-citadel-6d7f9c545b-bkvnx:         docker.io/istio/citadel:1.0.3,
istio-cleanup-secrets-rp4wv:            quay.io/coreos/hyperkube:v1.7.6_coreos.0,
istio-egressgateway-866885bb49-6jz9q:   docker.io/istio/proxyv2:1.0.3,
istio-galley-6d74549bb9-7nhcl:          docker.io/istio/galley:1.0.3,
istio-ingressgateway-6c6ffb7dc8-bvp6b:  docker.io/istio/proxyv2:1.0.3,
istio-pilot-685fc95d96-fphc9:           docker.io/istio/pilot:1.0.3, docker.io/istio/proxyv2:1.0.3,
istio-policy-688f99c9c4-bpl9w:          docker.io/istio/mixer:1.0.3, docker.io/istio/proxyv2:1.0.3,
istio-security-post-install-s6dft:      quay.io/coreos/hyperkube:v1.7.6_coreos.0,
istio-sidecar-injector-74855c54b9-6v5xg:docker.io/istio/sidecar_injector:1.0.3,
istio-telemetry-69b794ff59-f7dv4:       docker.io/istio/mixer:1.0.3, docker.io/istio/proxyv2:1.0.3,
prometheus-f556886b8-lhdt8:             docker.io/prom/prometheus:v2.3.1,
coredns-c4cffd6dc-6xblf:                k8s.gcr.io/coredns:1.2.2,
etcd-minikube:                          k8s.gcr.io/etcd-amd64:3.1.12,
kube-addon-manager-minikube:            k8s.gcr.io/kube-addon-manager:v8.6,
kube-apiserver-minikube:                k8s.gcr.io/kube-apiserver-amd64:v1.10.0,
kube-controller-manager-minikube:       k8s.gcr.io/kube-controller-manager-amd64:v1.10.0,
kube-dns-86f4d74b45-bjk54:              k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8, k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8, k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8,
kube-proxy-mqfb9:                       k8s.gcr.io/kube-proxy-amd64:v1.10.0,
kube-scheduler-minikube:                k8s.gcr.io/kube-scheduler-amd64:v1.10.0,
kubernetes-dashboard-6f4cfc5d87-zwk2c:  k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0,
storage-provisioner:                    gcr.io/k8s-minikube/storage-provisioner:v1.8.1,

Когда я выполняю minikube ssh, а затем пытаюсь выполнить exec в контейнере цитадели, я получаю похожую ошибку:

$ docker ps | grep citadel
f173453f843c        istio/citadel                              "/usr/local/bin/isti…"   3 hours ago         Up 3 hours                              k8s_citadel_istio-citadel-6d7f9c545b-bkvnx_istio-system_3d7b4f08-e120-11e8-bc40-ee7dbbb8f91b_0
7e96617d81ff        k8s.gcr.io/pause-amd64:3.1                 "/pause"                 3 hours ago         Up 3 hours                              k8s_POD_istio-citadel-6d7f9c545b-bkvnx_istio-system_3d7b4f08-e120-11e8-bc40-ee7dbbb8f91b_0

$ docker exec -it f173453f843c sh
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown

$ docker exec -it f173453f843c /bin/sh
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown

$ docker exec -it f173453f843c ls
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"ls\": executable file not found in $PATH": unknown

Я хорошо вижу логи контейнеров цитадели. Журналы доступны на https://pastebin.com/xTy9vSz2

Знаете ли вы, почему мы не можем выполнить контейнер цитадели?

Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

Вы знаете, почему мы не можем выполнить контейнер цитадели?

Начиная со следующего выпуска Kubernetes (1.16+, Q3 2019), вы можете.

См. kubernetes/kubernetes PR 59416 (PR = "запрос на извлечение"): " Добавить эфемерные контейнеры в основной API Kubernetes " ( commit 7e6b70f ) .
С PR 79614 для документации.

Это сделано для решения проблемы 27140 : « Поддержка для устранения неполадок в контейнерах без перебоев ».

(pnnl-miscscripts/miscscripts/bin - это обходной путь)

EphemeralContainer - это временный контейнер, который можно добавить в существующий модуль для инициируемые пользователем действия, такие как отладка. Эфемерные контейнеры не имеют никаких ресурсов или гарантий планирования, и они не будут перезапущены, когда они выходят или когда модуль удален или перезапущен.

0 голосов
/ 05 ноября 2018

Вы не можете войти, потому что ни sh, ни bash недоступны в контейнере. Много раз они удаляются ради эффективности и имеют минимальное изображение контейнера.

Если вы хотите вставить оболочку в контейнер, я рекомендую вам создать свой собственный образ, включив в него bash или sh.

Здесь вы можете видеть, что Dockerfile создает образ, в котором нет ничего, кроме статического двоичного файла. Для этого вы хотите изменить базовый образ. Например:

FROM alpine

вместо:

FROM scratch

Надеюсь, это поможет.

...