給小白的 PostgreSQL 容器化部署教程(上)

来源:https://www.cnblogs.com/radondb/archive/2022/05/30/16326524.html
-Advertisement-
Play Games

作者:王志斌 編輯:鐘華龍 本文來自社區小伙伴 王志斌 的投稿。從小白的角度,帶你一步步實現將 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

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 開源社區向本文的投稿作者表示感謝!也期待更多的社區小伙伴的投稿~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 痞子衡嵌入式半月刊: 第 55 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 一、PL/SQL簡介 1)SQL是一種標準化的結構化查詢語言,在資料庫領域有著廣泛的應用和重大影響。但是SQL並不能完成一個過程所能完成的任務,如某一個條件成立進行數據插入,否則不進行數據插入。 2)PL/SQL是Oracle公司對SQL語言的擴展,全面支持所有的SQL操作與數據類型。 3)PL/S ...
  • ClickHouse的由來 ClickHouse是什麼資料庫?ClickHouse速度有多快?應用場景是怎麼樣的?ClickHouse是關係型資料庫嗎?ClickHouse目前是很火爆的一款面向OLAP的數據,可以提供秒級的大數據查詢。 Google於2003~2006年相繼發表了三篇論文“Goog ...
  • - Jedis - 優點:以 Redis 命令作為方法名稱,學習成本低廉,簡單且實用 - 缺點:Jedis 的實例是線程不安全的,在多線程的環境下需要基於線程池來使用 - lettuce(spring 官方預設) - 基於 Netty 實現的,支持同步、非同步和響應式編程方式,並且是線程安... ...
  • redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交... ...
  • 一、初識HBase HBase 是一個面向列式存儲的分散式資料庫,其設計思想來源於 Google 的 BigTable 論文。HBase 底層存儲基於 HDFS 實現,集群的管理基於 ZooKeeper 實現。HBase 良好的分散式架構設計為海量數據的快速存儲、隨機訪問提供了可能,基於數據副本機制 ...
  • UniqueMergeTree 開發的業務背景 首先,我們看一下哪些場景需要用到實時更新。 我們總結了三類場景: 第一類是業務需要對它的交易類數據進行實時分析,需要把數據流同步到 ClickHouse 這類 OLAP 資料庫中。大家知道,業務數據諸如訂單數據天生是存在更新的,所以需要 OLAP 數據 ...
  • SELECT 查詢 101 Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug's Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...