Điều kiện tiên quyết
Vui lòng đảm bảo máy chủ của bạn đã cài đặt các công cụ sau:
kubectlgit
Cài đặt
Bước 1: Tải xuống ví dụ
Đầu tiên, hãy truy cập vào GitHub và fork repository ví dụ Postgres Operator:
Sau khi bạn fork repo này, bạn có thể sử dụng lệnh tương tự như sau để tải nó về môi trường làm việc của mình:
TEN_DANG_NHAP_GITHUB="<tên người dùng GitHub của bạn>"
git clone --depth 1 "git@github.com:${TEN_DANG_NHAP_GITHUB}/postgres-operator-examples.git"
cd postgres-operator-examples
Bước 2: Cài đặt PGO, tức là Postgres Operator
Bạn có thể sử dụng lệnh sau để cài đặt PGO, tức là Postgres Operator từ Crunchy Data:
kubectl apply -k kustomize/install
Điều này sẽ tạo một không gian tên có tên postgres-operator và tạo tất cả các đối tượng cần thiết để triển khai PGO.
Để kiểm tra trạng thái cài đặt, bạn có thể chạy lệnh sau:
kubectl -n postgres-operator get pods \
--selector=postgres-operator.crunchydata.com/control-plane=postgres-operator \
--field-selector=status.phase=Running
Nếu Pod PGO chạy tốt, bạn sẽ thấy đầu ra tương tự như sau:
NAME READY STATUS RESTARTS AGE
postgres-operator-9dd545d64-t4h8d 1/1 Running 0 3s
Tạo cụm Postgres
Hãy tạo một cụm Postgres đơn giản. Bạn có thể thực hiện việc này bằng cách thực thi lệnh sau:
kubectl apply -k kustomize/postgres
Lưu ý:
- Lưu ý rằng cụm của bạn đã có một
Storage Classmặc định
Điều này sẽ tạo một cụm Postgres có tên hippo trong không gian tên postgres-operator. Bạn có thể sử dụng lệnh sau để theo dõi tiến độ của cụm:
kubectl -n postgres-operator describe postgresclusters.postgres-operator.crunchydata.com hippo
Kết nối với cụm Postgres
Là một phần của việc tạo cụm Postgres, Postgres Operator tạo một tài khoản người dùng PostgreSQL. Thông tin đăng nhập của tài khoản này được lưu trữ trong một Secret có tên <clusterName>-pguser-<userName>.
Các thuộc tính trong Secret này cung cấp thông tin để bạn đăng nhập vào cụm PostgreSQL. Chúng bao gồm:
user: Tên của tài khoản người dùng.password: Mật khẩu của tài khoản người dùng.dbname: Tên cơ sở dữ liệu mà người dùng có quyền truy cập theo mặc định.host: Tên máy chủ của cơ sở dữ liệu. Điều này tham chiếu đến dịch vụ của instancePostgreschính.port: Cổng mà cơ sở dữ liệu đang lắng nghe.uri: Một URI kết nối PostgreSQL cung cấp tất cả thông tin cần thiết để đăng nhập vào cơ sở dữ liệuPostgres.jdbc-uri: Một URI kết nối JDBC PostgreSQL cung cấp tất cả thông tin cần thiết để đăng nhập vào cơ sở dữ liệuPostgresbằng driver JDBC.
Nếu bạn triển khai cụm Postgres với bộ đệm kết nối PgBouncer, các giá trị khác sẽ được điền vào Secret của người dùng, bao gồm:
pgbouncer-host: Tên máy chủ của bộ đệm kết nối PgBouncer. Điều này tham chiếu đến dịch vụ của bộ đệm kết nối PgBouncer.pgbouncer-port: Cổng mà bộ đệm kết nối PgBouncer đang lắng nghe.pgbouncer-uri: Một URI kết nối PostgreSQL cung cấp tất cả thông tin cần thiết để đăng nhập vào cơ sở dữ liệu qua bộ đệm kết nối PgBouncer.pgbouncer-jdbc-uri: Một URI kết nối JDBC PostgreSQL cung cấp tất cả thông tin cần thiết để đăng nhập vào cơ sở dữ liệu bằng driver JDBC qua bộ đệm kết nối PgBouncer.
Lưu ý rằng tất cả các kết nối đều sử dụng TLS. PGO thiết lập PKI cho cụm Postgres của bạn. Bạn cũng có thể chọn mang theo PKI/certificate authority của riêng mình; điều này sẽ được đề cập trong tài liệu sau.
PgBouncer
Kết nối qua psql trong terminal
Kết nối trực tiếp
Nếu bạn ở trong cùng một mạng với cụm PostgreSQL, bạn có thể sử dụng lệnh sau để kết nối trực tiếp với nó:
psql $(kubectl -n postgres-operator get secrets hippo-pguser-hippo -o go-template='{{.data.uri | base64decode}}')
Kết nối bằng chuyển tiếp cổng
Trong terminal mới, tạo một chuyển tiếp cổng:
POD_CHINH=$(kubectl get pod -n postgres-operator -o name \
-l postgres-operator.crunchydata.com/cluster=hippo,postgres-operator.crunchydata.com/role=master)
kubectl -n postgres-operator port-forward "${POD_CHINH}" 5432:5432
Thiết lập kết nối với cụm PostgreSQL.
TEN_SECRET_NGUOI_DUNG=hippo-pguser-hippo
MAT_KHAU=$(kubectl get secrets -n postgres-operator "${TEN_SECRET_NGUOI_DUNG}" -o go-template='{{.data.password | base64decode}}') \
TEN_NGUOI_DUNG=$(kubectl get secrets -n postgres-operator "${TEN_SECRET_NGUOI_DUNG}" -o go-template='{{.data.user | base64decode}}') \
CO_SO_DU_LIEU=$(kubectl get secrets -n postgres-operator "${TEN_SECRET_NGUOI_DUNG}" -o go-template='{{.data.dbname | base64decode}}') \
psql -h localhost
Thực hành kết nối cụm PostgreSQL với Keycloak
Thông tin được cung cấp trong Secret của người dùng sẽ cho phép bạn kết nối ứng dụng của mình trực tiếp với cơ sở dữ liệu PostgreSQL của bạn.
Ví dụ, hãy kết nối với Keycloak. Keycloak là một công cụ quản lý danh tính nguồn mở phổ biến được hỗ trợ bởi cơ sở dữ liệu PostgreSQL. Sử dụng cụm hippo mà chúng ta đã tạo, chúng ta có thể triển khai tệp kê khai sau:
Keycloak
cat <<EOF >> keycloak.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
namespace: postgres-operator
labels:
app.kubernetes.io/name: keycloak
spec:
selector:
matchLabels:
app.kubernetes.io/name: keycloak
template:
metadata:
labels:
app.kubernetes.io/name: keycloak
spec:
containers:
- image: quay.io/keycloak/keycloak:latest
name: keycloak
args: ["start-dev"]
env:
- name: DB_VENDOR
value: "postgres"
- name: DB_ADDR
valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: host } }
- name: DB_PORT
valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: port } }
- name: DB_DATABASE
valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: dbname } }
- name: DB_USER
valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: user } }
- name: DB_PASSWORD
valueFrom: { secretKeyRef: { name: hippo-pguser-hippo, key: password } }
- name: KEYCLOAK_ADMIN
value: "admin"
- name: KEYCLOAK_ADMIN_PASSWORD
value: "admin"
- name: PROXY_ADDRESS_FORWARDING
value: "true"
ports:
- name: http
containerPort: 8080
- name: https
containerPort: 8443
restartPolicy: Always
EOF
kubectl apply -f keycloak.yaml
POD_KEYCLOAK=$(kubectl get pod -n postgres-operator -l app.kubernetes.io/name=keycloak -o name)
kubectl -n postgres-operator port-forward ${POD_KEYCLOAK} 8086:8080 --address='0.0.0.0'
# Forwarding from 0.0.0.0:8086 -> 8080
Truy cập http://127.0.0.1:8086
Trong thư mục kustomize/keycloak có một ví dụ đầy đủ về cách triển khai Keycloak bằng Postgres Operator.
Lưu ý:
quay.io/keycloak/keycloak:latest, khoa học kéo hình ảnh- Đã thực hiện các sửa đổi trên
keycloak.yamlnhư trên
Chúc mừng, cụm Postgres của bạn đã sẵn sàng và đang chạy, và còn có một ứng dụng được kết nối! 👏 👏 👏
Bạn có thể tìm hiểu thêm về postgresclusters tùy chỉnh resource definition qua tài liệu và kubectl explain, tức là:
kubectl explain postgresclusters
postgresclusters tùy chỉnh resource definition