Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes StatefulSet-在pod重新启动时不重新存储数据_Kubernetes - Fatal编程技术网

Kubernetes StatefulSet-在pod重新启动时不重新存储数据

Kubernetes StatefulSet-在pod重新启动时不重新存储数据,kubernetes,Kubernetes,Kubernetes版本-1.8 使用pvc为postgres数据库创建状态集 在数据库中添加了一些表 通过将statefulset缩放为0,然后再次缩放为1,重新启动pod 步骤2中创建的表不再可用 在docker上为桌面群集k8s 1.10版尝试了另一个带有步骤的scnario 使用pvc为postgres数据库创建状态集 在数据库中添加了一些表 重新启动桌面docker 步骤2中创建的表不再可用 k8s舱单 apiVersion: v1 kind: ConfigMap metada

Kubernetes版本-1.8

  • 使用pvc为postgres数据库创建状态集
  • 在数据库中添加了一些表
  • 通过将statefulset缩放为0,然后再次缩放为1,重新启动pod
  • 步骤2中创建的表不再可用
  • 在docker上为桌面群集k8s 1.10版尝试了另一个带有步骤的scnario

  • 使用pvc为postgres数据库创建状态集
  • 在数据库中添加了一些表
  • 重新启动桌面docker
  • 步骤2中创建的表不再可用
  • k8s舱单

        apiVersion: v1
    kind: ConfigMap
    metadata:
      name: postgres-config
      labels:
        app: postgres
    data:
      POSTGRES_DB: kong
      POSTGRES_USER: kong
      POSTGRES_PASSWORD: kong
      PGDATA: /var/lib/postgresql/data/pgdata
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: postgres-pv
      labels:
        app: postgres
    spec:
      storageClassName: manual
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/postgresql/data"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: postgres-pvc
      labels:
        app: postgres
    spec:
      storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: postgres
      app: postgres
    spec:
      ports:
      - name: pgql
        port: 5432
        targetPort: 5432
        protocol: TCP
      selector:
        app: postgres
    ---
    apiVersion: apps/v1beta2 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: StatefulSet
    metadata:
      name: postgres
    spec:
      serviceName: "postgres"
      replicas: 1
      selector:
        matchLabels:
          app: postgres
      template:
        metadata:
          labels:
            app: postgres
        spec:
          containers:
            - name: postgres
              image: postgres:9.6
              imagePullPolicy: "IfNotPresent"
              ports:
                - containerPort: 5432
              envFrom:
                - configMapRef:
                    name: postgres-config
              volumeMounts:
                - mountPath: /var/lib/postgresql/data
                  name: postgredb
          volumes:
            - name: postgredb
              persistentVolumeClaim:
                claimName: postgres-pvc
    ---
    

    如果您有多个节点,那么您看到的问题完全是意料之中的。因此,如果您想在多节点集群中将hostPath用作持久卷,则必须使用一些共享文件系统,如Glusterfs或Ceph,并将/mnt/postgresql/data文件夹放在该共享文件系统上。

    考虑添加用于创建环境的清单。如果没有这一点,我们根本不知道您正在使用什么类型的资源(例如,问题将是
    hostPath
    Persistent Volume,它在使用多个节点时不起作用…)。请参阅:。添加了我正在使用的k8s清单您是使用单节点群集(如Minikube)还是使用具有多个节点的Kubernetes群集?如果使用多个节点,问题在于将目录从主机节点的文件系统装载到Pod中的
    主机路径
    卷。重新创建pod时,可能会将其安排在另一个节点中,从而导致卷数据丢失。尝试重新创建步骤,检查这次pod分配给哪个节点
    kubectl get po-o wide
    好吧,因为这是一个猜测,这应该是一个注释提示,而不是一个确定的答案。。。问题的注释中甚至已经说明了主机路径的问题。