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