作者:王志斌 編輯:鐘華龍 本文來自社區小伙伴 王志斌 的投稿。從小白的角度,帶你一步步實現將 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分為上下兩部分,第一部分將為大家演示如何搭建一套 Kubernetes 環境,包括詳細的配置調優等。 什麼是 RadonDB ...
作者:王志斌
編輯:鐘華龍
本文來自社區小伙伴 王志斌 的投稿。從小白的角度,帶你一步步實現將 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
節點狀態正常。
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 開源社區向本文的投稿作者表示感謝!也期待更多的社區小伙伴的投稿~