Kubernetes环境PostgreSQL部署与应用

发布于最后编辑于全文约755字,阅读时间约为2分钟。

Kubernetes Helm Database PostgreSQL Bitnami
更新记录
  • 2022-09-17

    • PostgreSQL Helm Chart by Bitnami版本由v11.8.1更新至v11.8.2

  • 2022-10-14

    • PostgreSQL Helm Chart by Bitnami版本由v11.8.2更新至v11.9.8

  • 2022-10-20

    • PostgreSQL Helm Chart by Bitnami版本由v11.9.8更新至v11.9.11

  • 2022-11-13

    • PostgreSQL Helm Chart by Bitnami版本由v11.9.11更新至v11.9.13

  • 2023-06-07

    • PostgreSQL版本由v14.5.0更新至v15.3.0

    • PostgreSQL Helm Chart by Bitnami版本由v11.9.13更新至v12.5.6

  • 2023-07-24

    • PostgreSQL Helm Chart by Bitnami版本由v12.5.6更新至v12.6.8

  • 2023-08-08

    • PostgreSQL Helm Chart by Bitnami版本由v12.6.8更新至v12.8.0

  • 2023-08-17

    • PostgreSQL版本由v15.3.0更新至v15.4.0

    • PostgreSQL Helm Chart by Bitnami版本由v12.8.0更新至v12.8.2

  • 2023-09-01

    • PostgreSQL Helm Chart by Bitnami版本由v12.8.2更新至v12.10.0

  • 2024-01-01

    • PostgreSQL版本由v15.4.0更新至v16.1.0

    • PostgreSQL Helm Chart by Bitnami版本由v12.10.0更新至v13.2.27

  • 2024-03-31

    • PostgreSQL版本由v16.1.0更新至v16.2.0

    • PostgreSQL Helm Chart by Bitnami版本由v13.2.27更新至v15.1.4

  • 2024-08-27

    • PostgreSQL版本由v16.2.0更新至v16.4.0

    • PostgreSQL Helm Chart by Bitnami版本由v15.1.4更新至v15.5.24

  • 2024-09-30

    • PostgreSQL Helm Chart by Bitnami版本由v15.5.24更新至v15.5.36

  • 2025-05-01

    • PostgreSQL版本由v16.4.0更新至v17.4.0

    • PostgreSQL Helm Chart by Bitnami版本由v15.5.36更新至v16.6.6

概述

本文用于整理基于Kubernetes环境的PostgreSQL部署与应用,作为后续演练项目的前置环境准备。

随着各相关组件版本的更新,笔者将在验证通过后对本文进行补充和更新,请参考更新记录

本次演练环境为Kubernetes集群环境,环境配置可参考笔者另一篇笔记《Kubernetes集群部署笔记》。

注意:本文部署的PostgreSQL实例仅用于演练环境,不可用于生产环境

组件版本

配置过程

安装PostgreSQL

本次演练中将PostgreSQL安装至data-postgresql命名空间,可根据需要替换。

  • 创建命名空间

    kubectl create namespace data-postgresql
  • 创建密码配置文件

    # 创建一个Secret对象,其中`postgres-password`的值将被设置为`postgres`用户的密码
    kubectl create secret --namespace data-postgresql generic postgresql-secret \
      --from-literal=postgres-password=jSTugla950BMlUFuqgXeKWg0
    
    # 或者可以按指定的规则随机生成密码,例如:
    kubectl create secret --namespace data-postgresql generic postgresql-secret \
      --from-literal=postgres-password=$(openssl rand -base64 18)
  • 安装PostgreSQL

    # architecture=standalone                      部署架构(本文演练环境中使用独立架构)
    # auth.existingSecret=postgresql-secret        包含密码的Secret对象名称
    # primary.persistence.enabled=true             启用持久卷
    # primary.persistence.size=8Gi                 持久化卷大小
    # primary.persistence.storageClass=local-path  存储类名称
    # primary.service.type=LoadBalancer            服务类型(本文演练环境中使用`LoadBalancer`访问PostgreSQL服务)
    helm upgrade --install --namespace data-postgresql \
      --set architecture=standalone \
      --set auth.existingSecret=postgresql-secret \
      --set primary.persistence.enabled=true \
      --set primary.persistence.size=8Gi \
      --set primary.persistence.storageClass=local-path \
      --set primary.service.type=LoadBalancer \
      postgresql oci://registry-1.docker.io/bitnamicharts/postgresql --version 16.6.6

访问PostgreSQL

  • 集群外部访问PostgreSQL服务

    # --watch  等待集群分配LoadBalancer地址
    kubectl get svc --namespace data-postgresql --watch postgresql

    上面的命令会输出类似下面的内容。

    NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    postgresql   LoadBalancer   10.108.10.147   10.0.0.203    5432:30823/TCP   35s
  • 使用psql工具访问PostgreSQL服务

    获取postgres用户的密码,并打开一个psql命令行界面。

    # 获取`postgres`用户的密码,保存在变量`POSTGRES_PASSWORD`中
    export POSTGRES_PASSWORD=$(kubectl get secret --namespace data-postgresql postgresql-secret -o jsonpath="{.data.postgres-password}" | base64 -d)
    
    # 打开一个`psql`命令行界面
    kubectl run postgresql-client --rm -it --restart Never --namespace data-postgresql \
      --image docker.io/bitnami/postgresql:17.4.0 \
      --env "PGPASSWORD=$POSTGRES_PASSWORD" \
      --command -- psql --host postgresql -U postgres -d postgres -p 5432
    # If you don't see a command prompt, try pressing enter.
    # 如果没有看到命令提示符,请尝试按回车键。

    执行以下的命令,验证PostgreSQL服务可用。

    -- 创建一个示例数据库
    CREATE DATABASE demo;
    
    -- \l       列出所有数据库
    -- \c demo  切换到`demo`数据库
    
    -- 创建一张示例表`users`
    CREATE TABLE public.users (id int8 NOT NULL, username varchar(128) NOT NULL, PRIMARY KEY (id));
    
    -- 向`users`表中插入示例数据
    INSERT INTO public.users (id, username) VALUES(1, 'galen.suen');
    
    -- 查询上一步中插入的数据
    SELECT id, username FROM public.users WHERE id = 1;
    
    -- 删除`users`表中的示例数据
    DELETE FROM public.users WHERE id = 1;
    
    -- 删除示例表`users`
    DROP TABLE public.users;
    
    -- \c postgres  切换到`postgres`数据库
    
    -- 删除示例数据库
    DROP DATABASE demo WITH (FORCE);

参考资料