在图像中需要一个有效的 Kubectl 二进制文件

Need a working Kubectl binary inside an image

我的目标是拥有一个内部包含工作 Kubectl 二进制文件的 pod。

不幸的是,我使用基本 yaml 启动的 docker 集线器中的每个 kubectl 映像都会导致 CrashLoopbackOff 或其他。

有没有人有一些 yaml(部署、pod 等)可以让我得到我的 kubectl?


我用这个基本的 yaml 尝试了一堆图像:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubectl-demo
  labels:
    app: deploy
    role: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deploy
      role: backend
  template:
    metadata:
      labels:
        app: deploy
        role: backend
    spec:
      containers:
      - name: kubectl-demo
        image: <SOME_IMAGE>
        ports:
        - containerPort: 80

感谢

正如 Suren 已经在评论中解释的那样 kubectl 不是守护进程,因此 kubectl 将 运行 退出并导致容器重新启动。

对此有几个解决方法。其中之一是使用带有 infinity 参数的 sleep 命令。这将使 Pod 保持活动状态,防止它重新启动并允许您执行它。

这是一个如何做到这一点的例子:

spec:
 containers:
 - image: bitnami/kubectl
   command:
   - sleep 
   - "infinity"
   name: kctl

如果这有帮助,请告诉我。

或者,您可以这样做。它在我的上下文中工作,在 VM 上使用 kubernetes,我知道 kubeconfig 文件在哪里。您需要进行必要的更改,以使其在您的环境中运行。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubectl
spec:
  replicas: 1
  selector:
    matchLabels:
      role: kubectl
  template:
    metadata:
      labels:
        role: kubectl
    spec:
      containers:
      - image: viejo/kubectl
        name: kubelet
        tty: true
        securityContext:
          privileged: true
        volumeMounts:
        - name: kube-config
          mountPath: /root/.kube/
      volumes:
      - name: kube-config
        hostPath:
          path: /home/$USER/.kube/
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
        operator: Exists

这是结果:

$ kubectl get po
NAME                      READY   STATUS    RESTARTS   AGE
kubectl-cb8bfc6dd-nv6ht   1/1     Running   0          70s
$ kubectl exec kubectl-cb8bfc6dd-nv6ht -- kubectl get no
NAME                     STATUS   ROLES    AGE   VERSION
kubernetes-1-17-master   Ready    master   16h   v1.17.3
kubernetes-1-17-worker   Ready    <none>   16h   v1.17.3