首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Google云平台上的Kubernetes中创建持久卷

在Google云平台上的Kubernetes中创建持久卷
EN

Stack Overflow用户
提问于 2018-10-21 07:57:39
回答 3查看 1.2K关注 0票数 1

我正在尝试将postgres服务部署到google cloud kubernetes,并使用持久卷和持久卷声明为我的应用程序提供存储。

当我部署时,pod卡在CrashLoopBackOff中。

pod的一个事件失败,并显示以下消息:

Error: failed to start container "postgres": Error response from daemon: error while creating mount source path '/data/postgres-pv': mkdir /data: read-only file system

这是我尝试使用kubectl部署的yaml:

代码语言:javascript
复制
kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv
  labels:
    type: local
    app: postgres
spec:
  capacity:
    storage: 5Gi
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/postgres-pv
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pvc
  labels:
    type: local
    app: postgres
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  volumeName: postgres-pv
---
apiVersion: v1
kind: Secret
metadata:
  name: postgres-credentials
type: Opaque
data: 
  user: YWRtaW4=
  password: password==
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres-container
          image: postgres:9.6.6
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: user
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: password   
            - name: POSTGRES_DB
              value: kubernetes_django
          ports:
            - containerPort: 5432
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgres-volume-mount
      volumes:
        - name: postgres-volume-mount
          persistentVolumeClaim:
            claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
  selector:
   app: postgres

没有失败的部署,但pod卡在CrashLoopBackOff中。

谢谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2018-10-26 10:37:47

问题出在您的持久卷上。您正在使用的主机路径不受支持,according to the doc永远不会受支持

票数 1
EN

Stack Overflow用户

发布于 2019-02-22 07:04:55

我也有同样的问题。在GCP之后,我让它在minikube上工作,但它在GCP上给出了相同的错误。

正如帕特里克·W提到的,the docs说:

持久卷的

类型

  • ...
  • HostPath (仅限单节点测试-不以任何方式支持本地存储,并且在多节点cluster)
  • ...

中不起作用

为了解决这个问题,我在kubernetes docs中找到了一个解决方案。

您首先必须创建一个gcePersistentDisk

代码语言:javascript
复制
gcloud compute disks create --size=[SIZE] --zone=[ZONE] [DISK_NAME]

然后,链接中描述的配置应该可以做到这一点:

代码语言:javascript
复制
kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv
  labels:
    type: local
spec:
  capacity:
    storage: 4Gi
  storageClassName: standard
  accessModes:
    - ReadWriteMany
  gcePersistentDisk:
    pdName:data-disk
    fsType: ext4
    readOnly: true
票数 1
EN

Stack Overflow用户

发布于 2019-04-29 07:25:57

首先,您不应该在持久卷中使用主机路径。其次,我认为你在部署中遗漏了一部分,你应该指定一个PDATA目录。

为了简单起见,我分享了我的yml部署:

1.持久卷声明:

代码语言:javascript
复制
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pvc  
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

2.config映射到保持位置env :

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: profile
  POSTGRES_USER: postgresadmin
  POSTGRES_PASSWORD: othmane
  PGDATA: /var/lib/postgresql/data/pgdata

3. postgres部署:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
              name: postgres
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
           - name: postgres-db
             mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-db
        persistentVolumeClaim: 
          claimName: postgres-pvc


---

apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
    app: postgres
  ports:
   - protocol: "TCP"
     port: 5432
     targetPort: 5432
  type: ClusterIP
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52911037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档