1. <dd id="erndk"></dd>
                1. 在 Kubernetes 部署 PostgreSQL-單機

                  互聯網 2022/4/26 19:12:59

                  Kubernetes是一個開源容器編排系統,用于自動化容器化應用程序的部署,擴展和管理。 在 Kubernetes 上運行 PostgreSQL 數據庫是目前經常會討論到主題,因為 Kubernetes 提供了使用持久卷,有狀態集等來配置有狀態容器的方法。 本文旨在提供在 Kubernetes 集群上運行 Post…

                  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

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>