Minikube 上的 Postgis 部署使 pod 看起来正在运行,但拒绝 psql 命令,并且内部日志很少

问题描述 投票:0回答:1

Debian 11 上,我正在尝试使用 Kubernetes 进行部署,从我使用 Docker compose 到现在,安装一个 PostGIS 实例。
我的集群是带有 CRIOMinikube。我基本上是按照我在互联网上找到的东西做的。

最终,一切看起来都在运行,但是使用

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 sgbd:

使用的图像,

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 部署。我错过了什么重要的东西吗?

postgresql kubernetes postgis
1个回答
0
投票

错误可能是由于您的系统意外关闭。

尝试运行以下命令:

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 并启动它。它将强制服务器启动。

© www.soinside.com 2019 - 2024. All rights reserved.