kubernetes pod 在安装之前使用 configmap

kubernets pod using configmap before it's mounted

我的代码连同所有日志都在下面。简而言之,我的 init pod 似乎在将其安装到 init pod 之前尝试 运行 我的 setup.sh 文件,该文件位于 configmap 中。有没有人对可能出现的问题有任何指导?

部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: two-containers
  labels:
    app: stockai
spec:
  selector:
    matchLabels:
      app: stockai
  template:
    metadata:
      labels:
        app: stockai
    spec:
      volumes:
        - name: shared-data
          emptyDir: {}
      initContainers:
      - name: init-myservice
        image: alpine
        command:
          - "sh -c 'sleep 60; /app/setup.sh'"
        volumeMounts:
          - name: shared-data
            mountPath: /pod-data

配置图

apiVersion: v1
kind: ConfigMap
metadata:
  annotations:
    name: stock-ai-init-config
  name: stock-ai-init-config
  namespace: trading
data:
  setup.sh: |
    apk update
    apk upgrade
    apk add git
    git clone git@github.com:****/****/****

广告连播预设

apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
  name: stock-ai-init
spec:
  selector:
    matchLabels:
      app: stockai
  volumeMounts:
    - name: setup
      mountPath: "/app/setup.sh"
      subPath: "setup.sh"
  volumes:
    - name: setup
      configMap:
        name: stock-ai-init-config
        defaultMode: 0777

kubctl 日志

$ kubectl describe po two-containers-6d5f4b4d85-blxqj

Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  5m22s                  default-scheduler  Successfully assigned trading/two-containers-6d5f4b4d85-blxqj to minikube
  Normal   Created    4m32s (x4 over 5m19s)  kubelet, minikube  Created container init-myservice
  Warning  Failed     4m32s (x4 over 5m19s)  kubelet, minikube  Error: failed to start container "init-myservice": Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"sh -c 'sleep 60; /app/setup.sh'\": stat sh -c 'sleep 60; /app/setup.sh': no such file or directory": unknown
  Normal   Pulling    3m41s (x5 over 5m21s)  kubelet, minikube  Pulling image "alpine"
  Normal   Pulled     3m40s (x5 over 5m19s)  kubelet, minikube  Successfully pulled image "alpine"
  Warning  BackOff    10s (x23 over 5m1s)    kubelet, minikube  Back-off restarting failed container

command: 不像 docker run 那样工作,它是 Dockerfile 中 CMD ["", ""] 的 kubernetes 等价物,并被提供给 exec , 而不是 sh;因此你想要的是:

        command:
          - sh
          - -c
          - 'sleep 60; /app/setup.sh'