首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与客户端Postico 2连接到GKE POD运行Postgres

与客户端Postico 2连接到GKE POD运行Postgres
EN

Stack Overflow用户
提问于 2021-02-09 20:15:02
回答 1查看 210关注 0票数 0

我想连接到一个Postgres实例,它位于GKE中的一个吊舱中。

我认为实现这一目标的一种方法是使用kubectl端口转发。

在我的本地,我有“Dockerfor桌面”,当我应用yamls文件时,我能够连接到数据库。我在GKE中使用的山雀几乎是一样的。

secrets.yaml

代码语言:javascript
复制
    apiVersion: v1
    kind: Secret
    metadata:
      namespace: staging
      name: postgres-secrets
    type: Opaque
    data:
      MYAPPAPI_DATABASE_NAME: XXXENCODEDXXX
      MYAPPAPI_DATABASE_USERNAME: XXXENCODEDXXX
      MYAPPAPI_DATABASE_PASSWORD: XXXENCODEDXXX

pv.yaml

代码语言:javascript
复制
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      namespace: staging
      name: db-data-pv
      labels:
        type: local
    spec:
      storageClassName: generic
      capacity: 
        storage: 1Gi
      accessModes:
        - ReadWriteMany
      hostPath:
        path: "/var/lib/postgresql/data"

pvc.yaml

代码语言:javascript
复制
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      namespace: staging
      name: db-data-pvc
    spec:
      storageClassName: generic
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 500Mi

deployment.yaml

代码语言:javascript
复制
    # Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: staging
      labels:
        app: postgres-db
      name: postgres-db
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: postgres-db
      template:
        metadata:
          labels:
            app: postgres-db
        spec:
          containers:
            - name: postgres-db
              image: postgres:12.4
              ports:
                - containerPort: 5432
              volumeMounts:
                - mountPath: /var/lib/postgresql/data
                  name: postgres-db
              env:
                - name: POSTGRES_USER
                  valueFrom:
                    secretKeyRef:
                      name: postgres-secrets
                      key: MYAPPAPI_DATABASE_USERNAME

                - name: POSTGRES_DB
                  valueFrom:
                    secretKeyRef:
                      name: postgres-secrets
                      key: MYAPPAPI_DATABASE_NAME

                - name: POSTGRES_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: postgres-secrets
                      key: MYAPPAPI_DATABASE_PASSWORD
          volumes:
            - name: postgres-db
              persistentVolumeClaim:
                claimName: db-data-pvc

svc.yaml

代码语言:javascript
复制
    apiVersion: v1
    kind: Service
    metadata:
      namespace: staging
      labels:
        app: postgres-db
      name: postgresdb-service
    spec:
      type: ClusterIP
      selector:
        app: postgres-db
      ports:
        - port: 5432

看起来一切都很正常

然后我执行kubectl port-forward postgres-db-podname 5433:5432 -n staging,当我试图连接它时,它会抛出

FATAL: role "myappuserdb" does not exist

更新1

这是GKE YAML公司的

代码语言:javascript
复制
spec:
      containers:
      - env:
        - name: POSTGRES_DB
          valueFrom:
            secretKeyRef:
              key: MYAPPAPI_DATABASE_NAME
              name: postgres-secrets
        - name: POSTGRES_USER
          valueFrom:
            secretKeyRef:
              key: MYAPPAPI_DATABASE_USERNAME
              name: postgres-secrets
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              key: MYAPPAPI_DATABASE_PASSWORD
              name: postgres-secrets

更新2

我会解释发生了什么以及我是如何解决这个问题的。

我第一次在部署中应用kubectl apply -f k8s/文件时,环境变量POSTGRES_USER引用了一个错误的秘密,MYAPPAPI_DATABASE_NAME,它应该引用MYAPPAPI_DATABASE_USERNAME。

在这之后,每次我做kubectl delete -f k8s/,资源都被删除了。但是,当我再次创建资源时,我在前一步中创建的数据没有被清除。

我删除了这个集群,创建了一个新的集群,一切都正常运行。我需要检查是否有一种方法来清理库伯奈特卷中的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 20:33:32

在部署的env规范中,您为POSTGRES_USER分配了错误的值。您已经分配了值POSTGRES_USER = MYAPPAPI_DATABASE_NAME

但我认为应该是POSTGRES_USER = MYAPPAPI_DATABASE_USERNAME

代码语言:javascript
复制
              env:
                - name: POSTGRES_USER
                  valueFrom:
                    secretKeyRef:
                      name: postgres-secrets
                      key: MYAPPAPI_DATABASE_NAME #<<<this is the value need to change>>>

请试试这个

代码语言:javascript
复制
              env:
                - name: POSTGRES_USER
                  valueFrom:
                    secretKeyRef:
                      name: postgres-secrets
                      key: MYAPPAPI_DATABASE_USERNAME
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66126442

复制
相关文章

相似问题

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