модуль kubernets использует configmap перед его монтированием

#kubernetes #kubernetes-pod

#kubernetes #kubernetes-pod

Вопрос:

Мой код приведен ниже вместе со всеми журналами. Короче говоря, мой модуль инициализации, похоже, пытается запустить мой setup.sh файл, который находится в конфигурационной карте, прежде чем он будет смонтирован в модуль инициализации. Есть ли у кого-нибудь какие-либо указания относительно того, в чем может быть проблема?

развертывание:

 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
 

configmap

 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
 

Ответ №1:

command: не работает docker run , это эквивалент kubernetes CMD ["", ""] в Dockerfile и передается в exec, а не в sh; таким образом, то, что вы хотите, это:

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

Комментарии:

1. это сработало как шарм, большое спасибо за объяснение, я действительно ценю это 🙂