在 Kubernetes 部署 PostgreSQL-單機
互聯網 2022/4/26 19:12:59
Kubernetes是一個開源容器編排系統,用于自動化容器化應用程序的部署,擴展和管理。 在 Kubernetes 上運行 PostgreSQL 數據庫是目前經常會討論到主題,因為 Kubernetes 提供了使用持久卷,有狀態集等來配置有狀態容器的方法。
本文旨在提供在 Kubernetes 集群上運行 PostgreSQL 數據庫的步驟。
準備工作
- 一個 Kubernetes 集群
- 理解 Docker 的基礎知識
你可以在任何公共云提供商(例如:AWS,Azure,Google云 或是 DigitalOcean 等)上配置Kubernetes集群。
要在 Kubernetes 上部署 PostgreSQL,我們需要執行以下步驟:
- Postgres Docker 鏡像
- 用于存儲 Postgres 配置的 ConfigMap
- 持久化卷 Persistent Volume
- PostgreSQL 的 k8s Deployment
- PostgreSQL 的 k8s Service
PostgreSQL Docker 鏡像
我們使用官方倉庫中的 PostgreSQL 11.7 Docker 鏡像。 該映像將提供提供PostgreSQL 自定義配置/環境變量的功能,例如:用戶名,密碼,數據庫名稱和路徑等。
配置 PostgreSQL 的 ConfigMap
我們將使用 ConfigMap 來存儲 PostgreSQL 相關信息。 在這里,我們在配置映射中使用數據庫,用戶和密碼,部署模板中的PostgreSQL pod將使用該數據庫,用戶和密碼。
postgres-configmap.yaml:
apiVersion: v1 kind: ConfigMap metadata: name: postgres-config labels: app: postgres namespace: dev data: POSTGRES_DB: postgresdb POSTGRES_USER: postgresadmin POSTGRES_PASSWORD: admin12345
創建 Postgres ConfigMap 資源
$ kubectl create -f postgres-configmap.yaml configmap "postgres-config" created
持久化卷 Persistent Storage Volume
眾所周知 Docker 容器本質上是臨時的。 容器實例終止后,由容器或容器中生成的所有數據都將丟失。
為了保存數據,我們將在 Kubernetes 中使用 Persistent Volume 和 Persistent Volume Claim 資源將數據存儲在持久存儲中。
在這里,我們使用本地目錄/路徑作為永久存儲資源(/mnt/data)
kind: PersistentVolume apiVersion: v1 metadata: name: postgres-pv-volume labels: type: local app: postgres spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/data" --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: postgres-pv-claim labels: app: postgres spec: storageClassName: manual accessModes: - ReadWriteMany resources: requests: storage: 5Gi
如果你在使用 DigitalOcean,那么你可能不需要 Persistent Volume,因為你的 k8s 中默認會有一個名為 do-block-storage 的 SC。
所以我們只需一個 PVC:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: do-block-storage
PostgreSQL Deployment
用于 Deployment 的 PostgreSQL 容器使用 PostgreSQL 11.7。 它使用 PostgreSQL 我們先前創建的configmap中的配置,例如:用戶名,密碼和數據庫名稱。 它還會掛載從持久卷創建的卷,并聲明使 PostgreSQL 容器的數據持久化。
apiVersion: apps/v1 kind: Deployment metadata: name: postgres-deployment spec: strategy: type: Recreate selector: matchLabels: app: postgres replicas: 1 template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:11.7 imagePullPolicy: "IfNotPresent" ports: - containerPort: 5432 envFrom: - configMapRef: name: postgres-config volumeMounts: - mountPath: /var/lib/postgresql/data name: postgredb volumes: - name: postgredb persistentVolumeClaim: claimName: postgres-pv-claim
PostgreSQL 版本選擇
對于 Postgres 的版本選擇,一般使用最新的大版本下面一號版本的最新 minor 版本。比如,目前本有:12.2、11.7、10.12 和 9.6.17。其中 9.6 的話還有一年就會停止維護,版本 10 將在 2022 年停止維護,以此類推。所以選擇目前最高版本 12 下面一號版本 11 或者 10 將是我們的首選。參考
創建 Postgres deployment:
$ kubectl create -f postgres-deployment.yaml deployment "postgres" created
PostgreSQL Service
要訪問部署或容器,我們需要暴露 PostgreSQL Deployment。 Kubernetes提供了不同類型的服務,例如 ClusterIP,NodePort 和 LoadBalancer。
使用 ClusterIP,我們可以在 Kubernetes 中訪問 PostgreSQL 服務。 NodePort 可以在 Kubernetes 節點上公開服務端點。 為了從外部訪問PostgreSQL,我們則需要使用一個 Load Balancer 服務類型,該服務類型可以在外部公開。
postgres-service.yaml:
apiVersion: v1 kind: Service metadata: name: postgres-service labels: app: postgres spec: type: NodePort ports: - port: 5432 targetPort: 5432 protocol: TCP selector: app: postgres
創建 Postgres Service:
$ kubectl create -f postgres-service.yaml service "postgres" created
查看運行結果
$ kubectl get svc postgres NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE postgres-service NodePort 10.245.62.239 <none> 5432:32312/TCP 6h10m
大功告成!
參考文檔:https://hanggi.me/post/kubernetes/k8s-postgresql/

關于找一找教程網
本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
[在 Kubernetes 部署 PostgreSQL-單機]http://www.yachtsalesaustralia.com/tech/detail-317266.html
- 2022-05-1938 k8s-19.Ingress入門使用
- 2022-05-18k8s系列--node(k8s節點介紹,新增節點,移除節點)
- 2022-05-15k8s源碼閱讀基礎 flag標準庫
- 2022-05-13k8s 使用ceph
- 2022-05-1338 k8s-18.service
- 2022-05-11k8s工作節點組件狀態報ContainerCreating,未獲取到ip地址
- 2022-05-05Kubernetes版本離線升級(服務器不能訪問互聯網)
- 2022-05-05二進制安裝k8s-1.20.4之搭建etcd集群
- 2022-05-0538 k8s-Deployment 20220505
- 2022-05-03ubuntu 二進制部署k8s