Kubernetes - запись данных в том StatefulSet

Я пытаюсь создать StatefulSet. Я хочу создать файл на прикрепленном томе, поэтому использую эту команду touch /data/test.txt, но похоже, что из-за этого происходит сбой контейнера. Зачем ему это делать? Если я не использую команду, все работает нормально. Каковы свойства каталога / data, подключенного к тому? Как и разрешения на чтение / запись.

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /data
        args:
          - /bin/sh
          - -c
          - touch /data/test.txt
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

person Arpan Solanki    schedule 21.05.2020    source источник
comment
В каком состоянии, по вашему мнению, будет находиться капсула? (touch не будет продолжать работать и не будет прослушивать порт 80, поэтому, когда основной процесс контейнера завершится, Kubernetes перезапустит его, а когда потребуется перезапустить его несколько раз, модуль в конечном итоге окажется в состоянии CrashLoopBackOff.)   -  person David Maze    schedule 22.05.2020
comment
Он не вылетает из-за самой команды. Он дает сбой, потому что вы перезаписываете команду по умолчанию nginx -g daemon off; на ощупь, и хотя другая команда предназначена для запуска и запуска nginx, ваша команда только что создала этот файл и останавливается. После прикосновения вы можете добавить команду nginx. Должно сработать.   -  person suren    schedule 22.05.2020
comment
Вы можете использовать подход, упомянутый здесь: stackoverflow.com/a/61928828/1753098   -  person hdhruna    schedule 22.05.2020


Ответы (1)


Поскольку по умолчанию ENTRYPOINT для k8s.gcr.io/nginx -slim: 0,8 будет nginx start или что-то в этом роде.

Итак, если вы хотите ввести изображение, вам нужно установить команду

        command: ["/bin/sh","-c"]
        args:
          - |
            touch /data/test.txt

И вы можете kubectl describe или kubectl logs увидеть, что не так с вашим модулем / развертыванием.

person RammusXu    schedule 22.05.2020