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

简介: 云原生 PostgreSQL 集群 - PGO:5分钟快速上手

前提条件




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

  • kubectl
  • git


安装


第 1 步:下载示例


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

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


YOUR_GITHUB_UN="<your GitHub username>"
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 用户帐户。此帐户的凭据存储在名为 <clusterName>-pguser-<userName> 的 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


通过终端中的 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


cat <<EOF >> 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


image.png


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


注意:

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

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

您可以通过文档和 kubectl explain 了解有关 postgresclusters 自定义资源定义的更多信息,即:


kubectl explain postgresclusters


postgresclusters 自定义资源定义

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
安全 Oracle 关系型数据库
【赵渝强老师】基于PostgreSQL的MPP集群:Greenplum
Greenplum是基于PostgreSQL的MPP架构分布式数据库,由Master、Segment和Interconnect组成,支持海量数据并行处理。本文介绍其架构及集群安装配置全过程。
959 1
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
Cloud Native 关系型数据库 分布式数据库
客户说|知乎基于阿里云PolarDB,实现最大数据库集群云原生升级
近日,知乎最大的风控业务数据库集群,基于阿里云瑶池数据库完成了云原生技术架构的升级。此次升级不仅显著提升了系统的高可用性和性能上限,还大幅降低了底层资源成本。
|
人工智能 关系型数据库 MySQL
AnalyticDB MySQL版:云原生离在线一体化数据仓库支持实时业务决策
AnalyticDB MySQL版是阿里云推出的云原生离在线一体化数据仓库,支持实时业务决策。产品定位为兼具数据库应用性和大数据处理能力的数仓,适用于大规模数据分析场景。核心技术包括混合负载、异构加速、智能弹性与硬件优化及AI集成,支持流批一体架构和物化视图等功能,帮助用户实现高效、低成本的数据处理与分析。通过存算分离和智能调度,AnalyticDB MySQL可在复杂查询和突发流量下提供卓越性能,并结合AI技术提升数据价值挖掘能力。
651 16
|
运维 Cloud Native 开发工具
智能运维:云原生大规模集群GitOps实践
智能运维:云原生大规模集群GitOps实践,由阿里云运维专家钟炯恩分享。内容涵盖云原生运维挑战、管理实践、GitOps实践及智能运维体系。通过OAM模型和GitOps优化方案,解决大规模集群的发布效率与稳定性问题,推动智能运维工程演进。适用于云原生环境下的高效运维管理。
722 8
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
444 3

推荐镜像

更多