云原生 PostgreSQL 集群 - PGO:五分钟快速上手

云原生 PostgreSQL 集群 - PGO:五分钟快速上手
2022年02月24日 09:54 TechWeb

前提条件

请确保您的主机上安装了以下实用程序:

kubectlgit安装第 1 步:下载示例

首先,转到 GitHub 并 fork Postgres Operator 示例存储库:

https://github.com/CrunchyData/postgres-operator-examples/fork

一旦你分叉了这个 repo,你可以使用类似下面的命令将它下载到你的工作环境中:

YOUR_GITHUB_UN=""

git clone --depth 1 "git@github.com:${YOUR_GITHUB_UN}/postgres-operator-examples.git"

cd postgres-operator-examples

第 2 步:安装 PGO,即 Postgres Operator

您可以使用以下命令安装 PGO,即来自 Crunchy Data 的 Postgres Operator:

kubectl apply -k kustomize/install

这将创建一个名为 postgres-operator 的命名空间,并创建部署 PGO 所需的所有对象。

要检查安装状态,可以运行以下命令:

kubectl -n postgres-operator get pods

--selector=postgres-operator.crunchydata.com/control-plane=postgres-operator

--field-selector=status.phase=Running

如果 PGO Pod 运行良好,您应该会看到类似于以下内容的输出:

NAME READY STATUS RESTARTS AGE

postgres-operator-9dd545d64-t4h8d 1/1 Running 0 3s创建 Postgres 集群

让我们创建一个简单的 Postgres 集群。您可以通过执行以下命令来执行此操作:

kubectl apply -k kustomize/postgres

注意:

注意,你的集群已经有一个默认的 Storage Class

这将在 postgres-operator 命名空间中创建一个名为 hippo 的 Postgres 集群。您可以使用以下命令跟踪集群的进度:

kubectl -n postgres-operator describe postgresclusters.postgres-operator.crunchydata.com hippo连接到 Postgres 集群

作为创建 Postgres 集群的一部分,Postgres Operator 创建一个 PostgreSQL 用户帐户。此帐户的凭据存储在名为 -pguser- 的 Secret 中。

此 Secret 中的属性提供了让您登录 PostgreSQL 集群的信息。这些包括:

user: 用户帐户的名称。password: 用户帐户的密码。dbname: 默认情况下用户有权访问的数据库的名称。host: 数据库主机的名称。这引用了主 Postgres 实例的 Service。port: 数据库正在侦听的端口。uri: 一个 PostgreSQL 连接 URI,它提供了登录 Postgres 数据库的所有信息。jdbc-uri: 一个 PostgreSQL JDBC 连接 URI,它提供了通过 JDBC driver 登录到 Postgres 数据库的所有信息。

如果您使用 PgBouncer 连接池部署 Postgres 集群,则用户 Secret 中会填充其他值,包括:

pgbouncer-host: PgBouncer 连接池的主机名。这引用了 PgBouncer 连接池的 Service。pgbouncer-port: PgBouncer 连接池正在侦听的端口。pgbouncer-uri: 一个 PostgreSQL 连接 URI,它提供了通过 PgBouncer 连接池登录到 Postgres 数据库的所有信息。pgbouncer-jdbc-uri: 一个 PostgreSQL JDBC 连接 URI,它提供了使用 JDBC driver 通过 PgBouncer 连接池登录到 Postgres 数据库的所有信息。

请注意,所有连接都使用 TLS。PGO 为您的 Postgres 集群设置 PKI。您也可以选择自带 PKI / certificate authority;这将在文档后面介绍。

PgBouncer

https://www.pgbouncer.org/

通过终端中的 psql 连接

直接连接

如果您与 PostgreSQL 集群位于同一网络上,则可以使用以下命令直接连接到它:

psql $(kubectl -n postgres-operator get secrets hippo-pguser-hippo -o go-template='{{.data.uri | base64decode}}')

使用端口转发连接

在新终端中,创建一个端口转发:

PG_CLUSTER_PRIMARY_POD=$(kubectl get pod -n postgres-operator -o name

-l postgres-operator.crunchydata.com/cluster=hippo,postgres-operator.crunchydata.com/role=master)

kubectl -n postgres-operator port-forward "${PG_CLUSTER_PRIMARY_POD}" 5432:5432

建立与 PostgreSQL 集群的连接。

PG_CLUSTER_USER_SECRET_NAME=hippo-pguser-hippo

PGPASSWORD=$(kubectl get secrets -n postgres-operator "${PG_CLUSTER_USER_SECRET_NAME}" -o go-template='{{.data.password | base64decode}}')

PGUSER=$(kubectl get secrets -n postgres-operator "${PG_CLUSTER_USER_SECRET_NAME}" -o go-template='{{.data.user | base64decode}}')

PGDATABASE=$(kubectl get secrets -n postgres-operator "${PG_CLUSTER_USER_SECRET_NAME}" -o go-template='{{.data.dbname | base64decode}}')

psql -h localhost实战 Keycloak 连接 PostgreSQL 集群

用户 Secret 中提供的信息将允许您将应用程序直接连接到您的 PostgreSQL 数据库。

例如,让我们连接 Keycloak。Keycloak 是一种流行的开源身份管理工具,由 PostgreSQL 数据库支持。使用我们创建的 hippo 集群,我们可以部署以下清单文件:

Keycloak

https://www.keycloak.org/cat <> keycloak.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: keycloak

namespace: postgres-operator

labels:

app.kubernetes.io/name: keycloak

spec:

selector:

matchLabels:

app.kubernetes.io/name: keycloak

template:

metadata:

labels:

app.kubernetes.io/name: keycloak

spec:

containers:

- image: quay.io/keycloak/keycloak:latest

name: keycloak

args: ["start-dev"]

env:

- name: DB_VENDOR

value: "postgres"

- name: DB_ADDR

valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: host } }

- name: DB_PORT

valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: port } }

- name: DB_DATABASE

valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: dbname } }

- name: DB_USER

valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: user } }

- name: DB_PASSWORD

valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: password } }

- name: KEYCLOAK_ADMIN

value: "admin"

- name: KEYCLOAK_ADMIN_PASSWORD

value: "admin"

- name: PROXY_ADDRESS_FORWARDING

value: "true"

ports:

- name: http

containerPort: 8080

- name: https

containerPort: 8443

restartPolicy: Always

EOF

kubectl apply -f keycloak.yaml

kubectl -n postgres-operator port-forward ${KEYCLOAK_POD} 8086:8080 --address='0.0.0.0'

# Forwarding from 0.0.0.0:8086 -> 8080

转到 http://127.0.0.1:8086

在 kustomize/keycloak 文件夹中有一个关于如何使用 Postgres Operator 部署 Keycloak 的完整示例。

注意:

quay.io/keycloak/keycloak:latest,科学拉取镜像对 keycloak.yaml 进行了上述修改

恭喜,您的 Postgres 集群已启动并运行,还连接了一个应用程序!

新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片