PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sử dụng Kubernetes để triển khai PostgreSQL

Giới thiệu

Kubernetes là một hệ thống điều phối vùng chứa mã nguồn mở để tự động hóa việc triển khai, mở rộng quy mô và quản lý các ứng dụng được chứa trong vùng chứa. Chạy cơ sở dữ liệu PostgreSQL trên Kubernetes là một chủ đề thảo luận ngày nay vì Kubernetes cung cấp các cách cung cấp vùng chứa trạng thái bằng cách sử dụng khối lượng liên tục, tập hợp trạng thái, v.v.

Blog này nhằm cung cấp các bước để chạy cơ sở dữ liệu PostgreSQL trên cụm Kubernetes. Nó không đề cập đến cài đặt hoặc cấu hình của cụm Kubernetes, mặc dù trước đây chúng tôi đã viết về nó trong blog này trên MySQL Galera Cluster trên Kubernetes.

Điều kiện tiên quyết

  • Cụm Kubernetes đang hoạt động
  • Hiểu biết cơ bản về Docker

Bạn có thể cung cấp cụm Kubernetes trên bất kỳ nhà cung cấp đám mây công cộng nào như AWS, Azure hoặc Google cloud, v.v. Tham khảo các bước cài đặt và cấu hình cụm Kubernetes cho CentOS tại đây. Bạn cũng có thể kiểm tra bài đăng trên blog trước đó để biết thông tin cơ bản về Triển khai PostgreSQL trên vùng chứa Docker.

Để triển khai PostgreSQL trên Kubernetes, chúng ta cần làm theo các bước sau:

  • Hình ảnh Postgres Docker
  • Bản đồ cấu hình để lưu trữ cấu hình Postgres
  • Khối lượng lưu trữ liên tục
  • Triển khai PostgreSQL
  • Dịch vụ PostgreSQL

Hình ảnh Docker PostgreSQL

Chúng tôi đang sử dụng PostgreSQL 10.4 Hình ảnh Docker từ sổ đăng ký công cộng. Hình ảnh này sẽ cung cấp chức năng cung cấp các cấu hình / biến môi trường tùy chỉnh của PostgreSQL như tên người dùng, mật khẩu, tên cơ sở dữ liệu và đường dẫn, v.v.

Bản đồ cấu hình cho cấu hình PostgreSQL

Chúng tôi sẽ sử dụng bản đồ cấu hình để lưu trữ thông tin liên quan đến PostgreSQL. Ở đây, chúng tôi đang sử dụng cơ sở dữ liệu, người dùng và mật khẩu trong bản đồ cấu hình sẽ được nhóm PostgreSQL sử dụng trong mẫu triển khai.

Tệp:postgres-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: postgresdb
  POSTGRES_USER: postgresadmin
  POSTGRES_PASSWORD: admin123

Tạo tài nguyên bản đồ cấu hình Postgres

$ kubectl create -f postgres-configmap.yaml 
configmap "postgres-config" created

Khối lượng lưu trữ liên tục

Như các bạn đều biết rằng Docker container có bản chất là phù du. Tất cả dữ liệu được tạo bởi hoặc trong vùng chứa sẽ bị mất sau khi chấm dứt phiên bản vùng chứa.

Để lưu dữ liệu, chúng tôi sẽ sử dụng Ổ đĩa liên tục và tài nguyên yêu cầu ổ đĩa liên tục trong Kubernetes để lưu trữ dữ liệu trên các kho lưu trữ liên tục.

Ở đây, chúng tôi đang sử dụng thư mục / đường dẫn cục bộ làm tài nguyên lưu trữ liên tục (/ mnt / data)

Tệp:postgres-storage.yaml

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

Tạo các triển khai liên quan đến bộ nhớ

Đã tạo
$ kubectl create -f postgres-storage.yaml 
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created

Triển khai PostgreSQL

Tệp kê khai PostgreSQL để triển khai vùng chứa PostgreSQL sử dụng hình ảnh PostgreSQL 10.4. Nó đang sử dụng cấu hình PostgreSQL như tên người dùng, mật khẩu, tên cơ sở dữ liệu từ bản đồ cấu hình mà chúng tôi đã tạo trước đó. Nó cũng gắn kết khối lượng được tạo từ các khối liên tục và tuyên bố làm cho dữ liệu của vùng chứa PostgreSQL vẫn tồn tại.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          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

Tạo triển khai Postgres

$ kubectl create -f postgres-deployment.yaml 
deployment "postgres" created
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

Dịch vụ PostgreSQL

Để truy cập vào triển khai hoặc vùng chứa, chúng ta cần hiển thị dịch vụ PostgreSQL. Kubernetes cung cấp các loại dịch vụ khác nhau như ClusterIP, NodePort và LoadBalancer.

Với ClusterIP, chúng ta có thể truy cập dịch vụ PostgreSQL trong Kubernetes. NodePort cung cấp khả năng hiển thị điểm cuối dịch vụ trên các nút Kubernetes. Để truy cập PostgreSQL bên ngoài, chúng ta cần sử dụng loại dịch vụ Load Balancer để hiển thị dịch vụ ra bên ngoài.

Tệp:postgres-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  type: NodePort
  ports:
   - port: 5432
  selector:
   app: postgres

Tạo dịch vụ Postgres

$ kubectl create -f postgres-service.yaml 
service "postgres" created

Kết nối với PostgreSQL

Để kết nối PostgreSQL, chúng ta cần lấy cổng Node từ việc triển khai dịch vụ.

$ kubectl get svc postgres
NAME       TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
postgres   NodePort   10.107.71.253   <none>        5432:31070/TCP   5m

Chúng tôi cần sử dụng cổng 31070 để kết nối với PostgreSQL từ máy / nút có trong cụm kubernetes với thông tin xác thực được cung cấp trong sơ đồ cấu hình trước đó.

$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1: 
psql (10.4)
Type "help" for help.
 
postgresdb=#

Xóa các triển khai PostgreSQL

Để xóa tài nguyên PostgreSQL, chúng ta cần sử dụng các lệnh dưới đây.

# kubectl delete service postgres 
# kubectl delete deployment postgres
# kubectl delete configmap postgres-config
# kubectl delete persistentvolumeclaim postgres-pv-claim
# kubectl delete persistentvolume postgres-pv-volume

Hy vọng rằng bằng cách sử dụng các bước trên, bạn có thể cung cấp một phiên bản PostgreSQL độc lập trên Kubernetes Cluster.

Kết luận

Chạy PostgreSQL trên Kubernetes giúp sử dụng tài nguyên theo cách tốt hơn so với khi chỉ sử dụng máy ảo. Kubernetes cũng cung cấp cách ly các ứng dụng khác bằng PostgreSQL trong cùng một máy ảo hoặc cụm Kubernetes.

Bài viết này cung cấp một cái nhìn tổng quan về cách chúng ta có thể sử dụng PostgreSQL trên Kubernetes cho môi trường phát triển / POC. Bạn có thể khám phá / thiết lập cụm PostgreSQL bằng cách sử dụng bộ trạng thái của Kubernetes.

Yêu cầu StatefulSets?

Trong Kubernetes, StatefulSets được yêu cầu để mở rộng các ứng dụng trạng thái. PostgreSQL có thể dễ dàng mở rộng quy mô bằng StatefulSets với một lệnh duy nhất.

Tài liệu tham khảo

  • Cài đặt Kubernetes trên CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
  • Thiết lập Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
  • PostgreSQL Sử dụng Docker:https://severalnines.com/blog/deploy-postgresql-docker-container
  • Kubernetes:https://kubernetes.io
  • Cụm PostgreSQL sử dụng statefulsets https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương đương PostgreSQL cho ISNULL () là gì

  2. Postgres:chọn tổng các giá trị rồi tính tổng lại

  3. Các biến do người dùng xác định trong PostgreSQL

  4. Dừng (lâu) chạy truy vấn SQL trong PostgreSQL khi phiên hoặc yêu cầu không còn tồn tại?

  5. Làm cách nào để tạo tiện ích mở rộng postgres bên trong vùng chứa?