StackGres 数据库平台工程快速入门

在本篇中,您将学习如何开始使用 StackGres。
我们将在 Kubernetes 集群上安装 StackGres,并创建一个 Postgres 实例。

NOTE: 要运行此 demo,您需要一个已经在 kubectl 中配置的 K8s environment

安装 Operator

为了便于演示,我们提供了一些 Kubernetes 资源文件,以便安装 StackGres operator。
假设您已经安装了 kubectl CLI, 您可以使用以下命令安装 operator:

kubectl apply -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

这将安装所有必需的资源,并将 StackGres operator 添加到新的命名空间 stackgres 中。

stackgres-operator-demo.yml 将使用 LoadBalancer 暴露 UI。
请注意,使用此功能可能会给您的主机提供商带来额外的成本(例如,EKS、GKE 和 AKS 就是这种情况)。

等待 Operator 启动

一旦它准备好了,你会看到 operator pods 的状态是 Running:

kubectl get pods -n stackgres
# 正常会有如下输出
NAME                                  READY   STATUS    RESTARTS   AGE
stackgres-operator-668bf7586d-krh7f   1/1     Running   0          28h
stackgres-restapi-d7f9bd787-dh6tr     2/2     Running   0          28h

创建集群

要创建第一个 StackGres 集群,必须创建一个包含集群配置的简单自定义资源。
下面的命令,使用命令行执行此操作:

cat << 'EOF' | kubectl create -f -
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:
  name: simple
spec:
  instances: 1
  postgres:
    version: 'latest'
  pods:
    persistentVolume: 
      size: '5Gi'
EOF

# 正常会有如下输出
sgcluster.stackgres.io/simple created

这将使用最新的 PostgreSQL 版本创建一个集群,一个节点,一个 5Gi 的磁盘,使用默认的存储类。
它使用 StackGres 对 PostgreSQL、连接池和资源配置文件的默认配置。

验证已创建的集群

一个名为 simple 的集群将部署在环境中配置的默认名称空间中(通常是名称空间 default)。

查看创建状态:

kubectl get pods --watch

最后,你应该看到这样的东西:

NAME       READY   STATUS    RESTARTS      AGE
simple-0   6/6     Running   1 (41s ago)   68s

通过 psql 访问 Postgres

要打开 psql 控制台并管理 PostgreSQL 集群,你可以连接到主实例(标签为 role: master 的 pod )的 postgres-util 容器。
在这个快速入门中,我们只有一个 pod,您可以简单地提供它的名称,但是无论您有多少实例,以下命令都可以工作:

kubectl exec -ti "$(kubectl get pod --selector app=StackGresCluster,stackgres.io/cluster=true,role=master -o name)" -c postgres-util -- psql

# 正常会有如下输出
psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help.

postgres=#

Note: 直接通过 postgres-util sidecar 连接将授予您使用 postgres 用户的访问权限。它类似于 sudo -i postgres -c psql

请阅读有关 postgres-util side car 以及 how to connect to the Postgres cluster 的详细信息。

通过 Kubernetes Services 访问 Postgres

虽然通过 psql 访问集群是一个很好的快速测试,但应用程序通常使用 Kubernetes 服务连接到我们的实例。
为此,需要对访问进行身份验证,这可以通过添加专用的 postgres 用户来实现,或者,对于这个快速入门,通过使用 postgres 用户( Postgres 中的超级用户)来实现。postgres 用户的密码是创建集群时随机生成的。您可以通过获取 key "superuser-password" 从一个名为 cluster 的 secret 中检索它:

kubectl get secret simple --template '{{ printf "%s" (index .data "superuser-password" | base64decode) }}'

# 正常会有如下输出
397a-7aaf-49e3-80d

现在我们可以使用用户 postgres 和刚刚返回的密码进行身份验证。为此,我们已经可以使用一个应用程序,或者,出于测试目的,再次使用 psql,但是从通过 Kubernetes 服务名称连接到 Postgres 的不同容器中:

kubectl run psql --rm -it --image ongres/postgres-util --restart=Never -- psql -h simple postgres postgres
If you don't see a command prompt, try pressing enter.


# 397a-7aaf-49e3-80d 此处输入密码即可
# 成功会有如下输出

psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help.

postgres=#

这一次,psql 命令将要求输入密码,这是超级用户的密码。

连接到 UI

现在您对 StackGres 有了更多的了解,您可以轻松地从 UI 管理所有集群了。UI 将要求输入用户名和密码。默认情况下,这些是 admin 和随机生成的密码。您可以运行以下命令获取用户和自动生成的密码:

kubectl get secret -n stackgres stackgres-restapi-admin --template '{{ printf "username = %s\npassword = %s\n" (.data.k8sUsername | base64decode) ( .data.clearPassword | base64decode) }}'

# 正常会有如下输出
username = admin
password = 1ba7-235c-4563-8fc

有了凭据,让我们连接到 operator web UI。为此,您可以转发 operator pod 的 HTTPS 端口:

POD_NAME=$(kubectl get pods --namespace stackgres -l "stackgres.io/restapi=true" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward "$POD_NAME" 8443:9443 --namespace stackgres

# 正常会有如下输出
Forwarding from 127.0.0.1:8443 -> 9443
Forwarding from [::1]:8443 -> 9443
Handling connection for 8443

然后,您可以在以下地址打开浏览器 localhost:8443/admin/

0.png

1.png

清理

要卸载这个演示生成的所有资源,你可以运行:

kubectl delete --ignore-not-found -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

有关更多详细信息,请查看 卸载 部分。

此外,请参阅 通过 helm 安装 部分,以改变这些。

更多