使用客户端 Postico 2 连接到 GKE POD 运行 Postgres
Connecting to GKE POD running Postgres with client Postico 2
我想连接到 GKE 中 pod 中的 Postgres 实例。
我认为可以通过 kubectl 端口转发实现这一目标。
在我的本地我有“Docker for desktop”,当我应用 yamls 文件时,我能够连接到数据库。我在 GKE 中使用的 yaml 几乎相同
secrets.yaml
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
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
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: staging
name: db-data-pvc
spec:
storageClassName: generic
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Mi
deployment.yaml
# 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
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
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/
资源都被删除了。但是,当我再次创建资源时,我在上一步创建的数据并没有被清除。
我删除了集群并创建了一个新集群,一切正常。我需要检查是否有办法清理 kubernetes 卷中的数据。
在部署的 env
规范中,您为 POSTGRES_USER
分配了错误的值。您已分配值 POSTGRES_USER = MYAPPAPI_DATABASE_NAME
.
但我认为应该是 POSTGRES_USER = MYAPPAPI_DATABASE_USERNAME
.
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-secrets
key: MYAPPAPI_DATABASE_NAME #<<<this is the value need to change>>>
请试试这个
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-secrets
key: MYAPPAPI_DATABASE_USERNAME
我想连接到 GKE 中 pod 中的 Postgres 实例。
我认为可以通过 kubectl 端口转发实现这一目标。
在我的本地我有“Docker for desktop”,当我应用 yamls 文件时,我能够连接到数据库。我在 GKE 中使用的 yaml 几乎相同
secrets.yaml
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
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
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: staging
name: db-data-pvc
spec:
storageClassName: generic
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Mi
deployment.yaml
# 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
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
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/
资源都被删除了。但是,当我再次创建资源时,我在上一步创建的数据并没有被清除。
我删除了集群并创建了一个新集群,一切正常。我需要检查是否有办法清理 kubernetes 卷中的数据。
在部署的 env
规范中,您为 POSTGRES_USER
分配了错误的值。您已分配值 POSTGRES_USER = MYAPPAPI_DATABASE_NAME
.
但我认为应该是 POSTGRES_USER = MYAPPAPI_DATABASE_USERNAME
.
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-secrets
key: MYAPPAPI_DATABASE_NAME #<<<this is the value need to change>>>
请试试这个
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-secrets
key: MYAPPAPI_DATABASE_USERNAME