首页 > 解决方案 > 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

标签: kubernetespersistent-volumeskubernetes-statefulset

解决方案


因为 k8s.gcr.io/nginx-slim:0.8 的默认ENTRYPOINT或可能的。nginx start

所以,如果你想注入图像,你需要设置命令

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

您可以kubectl describekubectl logs查看您的 pod/部署有什么问题。


推荐阅读