您的位置:首页 > 运维架构

Zalando Postgres Operator 快速上手

2022-04-08 10:32 711 查看

本指南旨在让您快速了解在本地

Kubernetes
环境中使用
Postgres Operator

前提条件

由于

Postgres Operator
是为
Kubernetes (K8s)
框架设计的,因此首先设置它。 对于本地测试,我们建议使用以下解决方案之一:

  • kindk3d, 允许创建在
    Docker
    上运行的多节点
    K8s
    集群(需要
    Docker

    要与

    K8s
    基础设施交互,请安装其
    CLI
    运行时 kubectl

    本快速入门假设您已经启动了

    minikube
    或创建了本地
    kind
    集群。 请注意,您还可以使用
    Docker Desktop for Mac
    中内置的
    K8s
    支持来遵循本教程的步骤。您必须将
    minikube start
    minikube delete
    替换为您的启动操作,以获得
    Docker
    内置的
    K8s
    支持。

    配置选项

    只能在部署新的

    Postgres
    集群之前配置
    Postgres Operator
    。这可以通过两种方式工作:通过
    ConfigMap
    或自定义
    OperatorConfiguration
    对象。有关配置的更多详细信息,请参见此处

    部署选项

    Postgres Operator
    可以通过以下方式部署:

    • Manual deployment
    • Kustomization
    • Helm chart

    Kubernetes 上的手动部署设置

    只需应用

    yaml
    清单即可安装
    Postgres Operator
    。注意,我们提供的
    /manifests
    目录仅作为示例;您应该考虑将清单调整为您的
    K8s
    环境(例如:命名空间)。

    # 首先,克隆存储库并切换到目录
    git clone https://github.com/zalando/postgres-operator.git
    cd postgres-operator
    
    # 按以下顺序应用清单
    kubectl create -f manifests/configmap.yaml  # 配置
    kubectl create -f manifests/operator-service-account-rbac.yaml  # 身份和权限
    kubectl create -f manifests/postgres-operator.yaml  # 部署
    kubectl create -f manifests/api-service.yaml  # 通过 UI 使用 operator API

    有一个 Kustomization manifest 结合了上述资源(CRD 除外)— 它可以与

    kubectl 1.14
    或更高版本一起使用,如下所示:

    kubectl apply -k github.com/zalando/postgres-operator/manifests

    为方便起见,我们使用

    run_operator_locally
    脚本通过
    minikube
    自动启动
    operator
    。 它应用
    acid-minimal-cluster
    。清单。

    ./run_operator_locally.sh

    OpenShift 上的手动部署设置

    要在

    OpenShift
    中安装
    Postgres Operator
    ,您必须将配置参数
    kubernetes_use_configmaps
    更改为
    "true"
    。否则,
    operator
    Patroni
    将在
    OpenShift
    不支持的
    Endpoints
    中存储
    leader
    和配置
    keys
    。对于
    postgres-operator
    postgres-pod
    集群角色,这还需要一组稍微不同的规则。

    oc create -f manifests/operator-service-account-rbac-openshift.yaml

    Helm chart

    或者,可以使用提供的 Helm

    chart
    安装
    operator
    ,从而为您节省手动步骤。克隆此
    repo
    并将目录更改为
    repo
    根目录。安装
    Helm v3
    后,您应该能够运行:

    helm install postgres-operator ./charts/postgres-operator

    chart
    适用于
    Helm 2
    Helm 3
    。使用
    v3
    时,将跳过
    v2
    中的
    crd-install
    hook 并发出警告。使用
    Helm 2
    安装应用程序的文档可以在 v2 文档中找到。

    chart
    还托管在:

    检查 Postgres Operator 是否正在运行

    启动

    operator
    可能需要几秒钟。在应用
    Postgres
    集群清单之前检查
    operator pod
    是否正在运行。

    # 如果您使用 yaml 清单创建了 operator
    kubectl get pod -l name=postgres-operator
    
    # 如果您使用 helm chart 创建了 operator
    kubectl get pod -l app.kubernetes.io/name=postgres-operator

    如果

    operator
    没有进入
    Running
    状态,请使用
    kubectl describe
    检查
    deployment
    pod
    的最新
    K8s
    事件或检查
    operator
    日志:

    kubectl logs "$(kubectl get pod -l name=postgres-operator --output='name')"

    部署 operator UI

    在以下段落中,我们将描述如何使用

    kubectl
    从命令行访问和管理
    PostgreSQL
    集群。 但也可以通过基于浏览器的 Postgres Operator UI 来完成。在部署
    UI
    之前,请确保
    operator
    正在运行,并且可以通过 K8s service 访问其
    REST API
    。此
    API
    URL
    必须在
    UI
    部署清单中配置。

    要部署

    UI
    ,只需应用其所有清单文件或使用
    UI helm chart

    # 手动部署
    kubectl apply -f ui/manifests/
    
    # 或 kustomization
    kubectl apply -k github.com/zalando/postgres-operator/ui/manifests
    
    # 或 helm chart
    helm install postgres-operator-ui ./charts/postgres-operator-ui

    operator
    一样,检查
    UI pod
    是否进入
    Running
    状态:

    # 如果您使用 yaml 清单创建了 operator
    kubectl get pod -l name=postgres-operator-ui
    
    # 如果您使用 helm chart 创建了 operator
    kubectl get pod -l app.kubernetes.io/name=postgres-operator-ui

    您现在可以通过端口转发 UI

    pod
    (注意
    label selector
    )访问
    Web
    界面,并在浏览器中输入
    localhost:8081

    kubectl port-forward svc/postgres-operator-ui 8081:80

    UI 文档中详细解释了可用选项。

    创建 Postgres cluster

    如果

    operator
    pod 正在运行,它会侦听有关
    postgresql
    资源的新事件。 现在,是时候提交您的第一个
    Postgres
    集群清单了。

    # 创建一个 Postgres cluster
    kubectl create -f manifests/minimal-postgres-manifest.yaml

    cluster
    清单提交并通过验证后,
    operator
    将创建
    Service
    Endpoint
    资源以及一个
    StatefulSet
    ,它根据清单中指定的实例数量启动新的
    Pod
    。所有资源都像
    cluster
    一样命名。 数据库
    pod
    可以通过它们的数字后缀来识别,从
    -0
    开始。他们运行
    Zalando
    Spilo 容器镜像。至于
    services
    endpoints
    ,将有一个用于
    master pod
    ,另一个用于所有副本(
    -repl
    后缀)。检查是否所有组件都出现了。使用标签
    application=spilo
    过滤并列出标签
    spilo-role
    以查看当前谁是
    master

    # 检查部署的 cluster
    kubectl get postgresql
    
    # 检查创建的 database pod
    kubectl get pods -l application=spilo -L spilo-role
    
    # 检查创建的 service 资源
    kubectl get svc -l application=spilo -L spilo-role

    通过 psql 连接到 Postgres cluster

    您可以在

    database pod
    上创建端口转发以连接到
    Postgres
    。有关说明,请参阅用户指南。使用
    minikube
    也很容易从指向
    master pod
    K8s service
    中检索连接字符串:

    export HOST_PORT=$(minikube service acid-minimal-cluster --url | sed 's,.*/,,')
    export PGHOST=$(echo $HOST_PORT | cut -d: -f 1)
    export PGPORT=$(echo $HOST_PORT | cut -d: -f 2)

    cluster
    中创建的
    K8s Secret
    中检索密码。默认情况下拒绝非加密连接,因此将
    SSL
    模式设置为
    require

    export PGPASSWORD=$(kubectl get secret postgres.acid-minimal-cluster.credentials -o 'jsonpath={.data.password}' | base64 -d)
    export PGSSLMODE=require
    psql -U postgres

    删除 Postgres cluster

    要删除

    Postgres
    集群,只需删除
    postgresql
    自定义资源。

    kubectl delete postgresql acid-minimal-cluster

    这应该删除关联的

    StatefulSet
    database Pods
    Services
    Endpoints
    PersistentVolume
    被释放,
    PodDisruptionBudget
    被删除。但是,
    Secrets
    不会被删除,并且备份将保留在原位。

    在集群仍在启动或在该阶段卡住时删除集群时,可能会删除

    postgresql
    资源,留下孤立的组件。 在创建新的
    Postgres
    集群时,这可能会导致麻烦。对于全新的设置,您可以删除本地
    minikube
    kind
    集群并重新开始。

    更多

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: