T O P

[资源分享]     给小白的 PostgreSQL 容器化部署教程(上)

  • By - 楼主

  • 2022-05-30 14:02:04
  • 作者:王志斌

    编辑:钟华龙

    本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,第一部分将为大家演示如何搭建一套 Kubernetes 环境,包括详细的配置调优等。

    什么是 RadonDB PostgreSQL Operator?

    RadonDB PostgreSQL 是一款基于 PostgreSQL 使用 Operator 实现的数据库容器化项目。

    • 被广泛应用于地理空间和移动领域
    • 具备高可用、稳定性、数据完整性等性能
    • 支持在线水平扩展
    • 支持故障自动转移 ,提供 HA 功能
    • 提供 PostgreSQL 常用参数接口,方便调整参数
    • 提供 PostGIS 插件,具备存储、查询和修改空间关系的能力
    • 提供实时监控、健康检查、日志自动清理等功能

    RadonDB PostgreSQL Operator 可基于 KubeSphere、OpenShift、Rancher 等 Kubernetes 容器平台交付。可自动执行与运行 RadonDB PostgreSQL 集群有关的任务。

    RadonDB PostgreSQL Operator基于 https://github.com/CrunchyData/postgres-operator 项目实现,进行了改进优化,后续会持续回馈给社区。

    仓库地址:https://github.com/radondb/radondb-postgresql-operator

    部署目标

    目标:准备一套 Kubernetes 作为后续数据库部署环境。

    主机名 IP 角色 备注
    master 192.168.137.2 kubernetes master 去除污点
    node1 192.168.137.3 kubernetes node
    node2 192.168.137.4 kubernetes node

    配置操作系统

    操作系统:CentOS 7

    1、修改各自主机名并修改主机列表

    #192.168.137.2
    vi /etc/hostname
    master
    cat >> /etc/hosts << EOF
    192.168.137.2 master
    192.168.137.3 node1
    192.168.137.4 node2
    EOF
    
    #192.168.137.3
    vi /etc/hostname
    node1
    cat >> /etc/hosts << EOF
    192.168.137.2 master
    192.168.137.3 node1
    192.168.137.4 node2
    EOF
    
    #192.168.137.4
    vi /etc/hostname
    node2
    cat >> /etc/hosts << EOF
    192.168.137.2 master
    192.168.137.3 node1
    192.168.137.4 node2
    EOF
    

    2、其他配置

    关闭防火墙、关闭 SELinux、关闭 SWAP ,设置时间同步。

    systemctl stop firewalld && systemctl disable firewalld
    
    sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
    
    swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    yum install ntpdate -y && ntpdate time.windows.com
    

    3、配置内核参数

    将桥接的 IPv4 流量传递到 iptables 的链。

    cat > /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    sysctl --system
    

    准备 Docker

    1、 安装必要的一些系统工具

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    2、添加软件源信息

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    3、更新并安装 Docker-CE

    yum makecache fast
    yum -y install docker-ce
    

    4、开启 Docker 服务

    systemctl start docker && systemctl enable docker
    # 可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器
    
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
     "registry-mirrors": ["https://s2q9fn53.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload && sudo systemctl restart docker
    

    Kubernetes 准备

    1、初始化

    添加 Kubernetes 阿里云的 YUM 源。

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    yum install kubectl-1.20.0 kubelet-1.20.0 kubeadm-1.20.0
     && systemctl enable kubelet && systemctl start kubelet
    

    初始化集群。

    #master
    kubeadm init --kubernetes-version=1.20.0  \
    --apiserver-advertise-address=192.168.137.2  \
    --image-repository registry.aliyuncs.com/google_containers  \
    --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    
    

    其他节点加入集群。

    kubeadm join 192.168.137.2:6443 --token scw8xm.x5y7fck1via4mwc2 \
      --discovery-token-ca-cert-hash sha256:8944421887121b6a2ac32987d9d1c7786fe64316cebdf7a63b6048fba183cc67
    

    2、部署 CNI 网络插件

    安装 flannel 网络插件。

    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
    

    发送 admin.conf 到所有节点,可以在任何一个节点管理集群。

    scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/admin.conf
    scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes/admin.conf
    
    

    在 node 节点上加入环境变量。

    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
    source /etc/profile
    
    

    执行完成以后可以在任意 node 节点上管理集群,查看节点是否正常。

    kubectl get nodes
    

    file

    节点状态正常。

    3、查看节点

    [root@node2 images]# kubectl label node node1 node-role.kubernetes.io/worker=worker
    node/node1 labeled
    [root@node2 images]# kubectl label node node2 node-role.kubernetes.io/worker=worker
    node/node2 labeled
    

    4、创建默认 storageclass

    vi sc.yml
    
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
     name: fast-disks
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    
    [root@master ~]# kubectl apply -f sc.yml
    storageclass.storage.k8s.io/local-storage create
    

    设置为默认。

    kubectl patch storageclass fast-disks -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    

    5、去除污点

    添加 尽量不调度 PreferNoSchedule 。

    kubectl taint nodes master node-role.kubernetes.io/master:PreferNoSchedule
    

    去除污点 NoSchedule,最后一个 “-” 代表删除。

    kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-
    

    镜像的问题

    RadonDB PostgreSQL Opeartor 的安装需要准备一些镜像,但编译镜像的步骤可以省略,社区已经在 dockerhub 已经构建好了 RadonDB PostgreSQL 所有依赖的镜像,直接使用即可。

    至此,我们已经准备好了 Kuberentes 环境,下一期我们将带您进行 RadonDB PostgreSQL Operator 的部署。

    作者简介:

    王志斌,北京航空航天大学硕士,荣获PMP和NPDP专业认证,巨杉数据库认证讲师和PostgreSQL官方认证讲师,拥有PGCM、PCTP、SCDD、KCP、OBCA等相关认证。荣获工信部中国开源软件推进联盟PostgreSQL ACE以及PostgreSQL开源社区推动贡献奖,并参与编著《PostgreSQL高可用实战》。

    致谢
    RadonDB 开源社区向本文的投稿作者表示感谢!也期待更多的社区小伙伴的投稿~

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册