在 Debian 11 上,我正在尝试使用 Kubernetes 进行部署,从我使用 Docker compose 到现在,安装一个 PostGIS 实例。
我的集群是带有 CRIO 的 Minikube。我基本上是按照我在互联网上找到的东西做的。
最终,一切看起来都在运行,但是使用
psql
的连接测试失败了。apiVersion: v1
kind: Namespace
metadata:
name: ecoemploi
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
namespace: ecoemploi
labels:
app: sources
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
namespace: ecoemploi
labels:
type: local
app: sources
spec:
storageClassName: manual
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
namespace: ecoemploi
labels:
app: sources
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
使用的图像,
postgis/postgis:14-3.3
,是我在 Dockerfile 上使用的图像。
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
namespace: ecoemploi
spec:
replicas: 1
selector:
matchLabels:
app: sources
template:
metadata:
labels:
app: sources
spec:
containers:
- name: sources
image: postgis/postgis:14-3.3
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5435
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: ecoemploigis
volumes:
- name: ecoemploigis
persistentVolumeClaim:
claimName: postgres-pv-claim
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: ecoemploi
labels:
app: sources
spec:
type: NodePort
ports:
- port: 5435
selector:
app: sources
这是 Minikube 对
kubectl get all --namespace=ecoemploi
的回应:
kubectl get all --namespace=ecoemploi
NAME READY STATUS RESTARTS AGE
pod/postgres-687c6f59f6-8fkb4 1/1 Running 2 (10h ago) 15h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/postgres NodePort 10.98.16.113 <none> 5435:31956/TCP 15h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/postgres 1/1 1 1 15h
NAME DESIRED CURRENT READY AGE
replicaset.apps/postgres-687c6f59f6 1 1 1 15h
根据我在互联网上关注的示例,我所拥有的应该允许我对正在运行的 pod 执行
psql
命令,带有:
kubectl exec -it pod/postgres-687c6f59f6-8fkb4 --namespace ecoemploi -- psql -h localhost -U postgres --password -p 5435 ecoemploigis
但是
psql
失败,并显示以下消息:
psql: error: connection to server at "localhost" (127.0.0.1), port 5435 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (::1), port 5435 failed: Cannot assign requested address
Is the server running on that host and accepting TCP/IP connections?
command terminated with exit code 2
改为执行
kubectl exec -it pod/postgres-687c6f59f6-8fkb4 --namespace ecoemploi -- bash
,将我带到 pod 的内部,其中存在这些文件夹:
bin boot dev docker-entrypoint-initdb.d etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
但是
/var/log
内容没有解释任何东西:
-rw-r--r-- 1 root root 8436 Mar 18 16:59 alternatives.log
drwxr-xr-x 1 root root 4096 Mar 18 16:59 apt
-rw-rw---- 1 root utmp 0 Feb 27 00:00 btmp
-rw-r--r-- 1 root root 70686 Mar 18 16:59 dpkg.log
-rw-r--r-- 1 root root 32000 Mar 1 13:53 faillog
-rw-rw-r-- 1 root utmp 292000 Mar 1 13:53 lastlog
drwxrwxr-t 2 root postgres 4096 Feb 9 10:28 postgresql
-rw-rw-r-- 1 root utmp 0 Feb 27 00:00 wtmp
(只有
dpkg.log
和alternatives.log
真的变了)
我有:
ls -l /var/log/postgresql/
total 0
事情看起来像 Kubernetes 并没有真正尝试运行我的
ecoemploi
“子系统”。
这是我的第一个 Kubernetes 部署。我错过了什么重要的东西吗?
错误可能是由于您的系统意外关闭。
尝试运行以下命令:
postgres -D /usr/local/var/postgres
你会得到以下输出:
FATAL: lock file "postmaster.pid" already exists HINT: Is another postmaster (PID 449) running in data directory "/usr/local/var/postgres"?
然后
kill -9 PID
,应该可以正常启动postgres了。
另一个解决方法是下载官方 postgresqlapp 并启动它。它将强制服务器启动。