代码之家  ›  专栏  ›  技术社区  ›  user674669

无法将炮弹放入库伯内特斯的城堡容器中

  •  2
  • user674669  · 技术社区  · 7 年前

    我在minikube运行Istio(包括citadel),使用 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,然后尝试执行citadel容器时,我会遇到类似的错误:

    $ 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

    你知道为什么我们不能进入城堡集装箱吗?

    谢谢你的阅读。

    1 回复  |  直到 7 年前
        1
  •  5
  •   Rico    7 年前

    你不能屈服,因为两者都不是 sh 也不是 bash 在容器中提供。很多时候,为了提高效率和最小化容器图像,这些内容会被删除。

    如果你想壳到容器中,我建议你建立自己的形象包括 猛击 在里面。

    Dockerfile 生成一个只有静态二进制的图像。为此,您需要更改基础图像。例如:

    FROM alpine
    

    而不是:

    FROM scratch
    

    希望有帮助。

        2
  •  1
  •   VonC    7 年前

    你知道为什么我们不能进入城堡集装箱吗?

    kubernetes/kubernetes PR 59416 (PR=“拉取请求”): 向Kubernetes核心API添加临时容器 " ( commit 7e6b70f ).
    PR 79614

    这是为了解决 issue 27140 ".

    ( pnnl-miscscripts/miscscripts/bin 是一种解决方法)

    用户启动的活动,如调试。临时容器没有资源或调度保证,它们在退出或移除或重新启动pod时不会重新启动。