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 的详细信息。
- https://stackgres.io/doc/latest/administration/cluster/connection/pgutil/
- https://stackgres.io/doc/latest/administration/cluster/connection/
通过 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/
清理
要卸载这个演示生成的所有资源,你可以运行:
kubectl delete --ignore-not-found -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml
有关更多详细信息,请查看 卸载 部分。
此外,请参阅 通过 helm 安装 部分,以改变这些。