آنچه در این مقاله میخوانید
- پیشنیازهای راه اندازی PostgreSQL در کوبرنتیز
- مزایای نصب و راه اندازی PostgreSQL در کوبرنتیز
- ایجاد ConfigMap برای دیتابیس PostgreSQL
- ایجاد یک PersistentVolume و PersistentVolumeClaim در کوبرنتیز
- دیپلوی PostgreSQL در کوبرنتیز
- ایجاد سرویس برای PostgreSQL در کوبرنتیز
- اتصال به PostgreSQL با kubectl در کوبرنتیز
- مقیاسبندی PostgreSQL در کوبرنتیز
- بکاپ گیری و بازیابی PostgreSQL در کوبرنتیز
- جمعبندی
- سوالات متداول
نصب و راهاندازی دیتابیس PostgreSQL روی کلاستر Kubernetes
۲۸ اردیبهشت ۱۴۰۴
راهاندازی دیتابیس PostgreSQL در یک محیط مقیاسپذیر و منعطف مانند Kubernetes، به شما اجازه میدهد تا دیتابیسهای خود را بهطور خودکار مدیریت کنید. زمانی که PostgreSQL را در یک کلاستر کوبرنتیز دیپلوی میکنید، نه تنها دیتابیس همیشه در دسترس باقی میماند، بلکه در برابر خرابیها مقاوم است و بهطور خودکار مقیاسپذیر میشود تا بارهای کاری مختلف را بهراحتی مدیریت کند.
این ویژگیها باعث میشود که نیازی به نگرانی در مورد مشکلات معمول در مدیریت دیتابیس نداشته باشید و بتوانید تمرکز خود را روی توسعه و بهینهسازی سیستمهایتان بگذارید.
در این آموزش از لیارا به شما نشان خواهیم داد که چگونه میتوانید یک دیتابیس PostgreSQL را روی کلاستر Kubernetes راهاندازی کنید.
آنچه در ادامه میخوانید:
- پیشنیازهای راه اندازی PostgreSQL در کوبرنتیز
- مزایای نصب و راه اندازی PostgreSQL در کوبرنتیز
- ایجاد ConfigMap برای دیتابیس PostgreSQL
- ایجاد یک PersistentVolume و PersistentVolumeClaim در کوبرنتیز
- دیپلوی PostgreSQL در کوبرنتیز
- ایجاد سرویس برای PostgreSQL در کوبرنتیز
- اتصال به PostgreSQL با kubectl در کوبرنتیز
- مقیاسبندی PostgreSQL در کوبرنتیز
- بکاپ گیری و بازیابی PostgreSQL در کوبرنتیز
- جمعبندی
- سوالات متداول

پیشنیازهای راه اندازی PostgreSQL در کوبرنتیز
قبل از شروع نصب باید پیش نیازهای زیر را تهیه کنید:
- یک سرور مجازی اوبونتو که با دنبال کردن آموزش راهاندازی اولیه سرور برای Ubuntu، راهاندازی شده باشد و شامل یک کاربر غیر root با دسترسی sudo و یک فایروال فعال باشد؛ برای این کار، میتوانید از سرور مجازی اوبونتو، استفاده کنید.
- نصب ابزار خط فرمان kubectl در سرور مجازی. اگر نصب نکردهاید میتوانید از مستندات رسمی کوبرنتیز کمک بگیرید.
- یک کلاستر کوبرنتیز فعال.
همچنین برای درک کامل این آموزش، توصیه میشود در ابتدا، به مطالعه و بررسی مقالههای زیر، بپردازید:
سرور مجازی یا VPS چیست؟
راهاندازی کلاستر K3s Kubernetes در اوبونتو
مزایای نصب و راه اندازی PostgreSQL در کوبرنتیز
قبل از شروع مراحل نصب، بهتر است در قالب یک جدول با مزایای راهاندازی دیتابیس PostgreSQL در کوبرنتیز آشنا شوید.
ویژگیها | بدون کلاستر کوبرنتیز (روش سنتی) | با کلاستنر کوبرنتیز (ابری) |
---|---|---|
مقیاسپذیری | دستی، همراه با downtime و تنظیمات پیچیده | خودکار، سریع و بدون توقف |
دسترسپذیری (High Availability) | نیاز به تنظیمات اضافی (مثل replication یا HAProxy) | بهصورت پیشفرض با ReplicaSet و Health Check |
مدیریت خطا و بازیابی | دستی، وابسته به ادمین سیستم | Self-healing با جایگزینی خودکار پادها |
بکاپگیری و بازیابی | نیازمند ابزارهای خارجی و اسکریپتنویسی | امکان استفاده از Volume Snapshot و CronJob |
آپدیت و دیپلوی نسخه جدید | زمانبر، با احتمال ایجاد اختلال | Rolling Update با حداقل downtime |
امنیت و ایزولاسیون | محدود به پیکربندی سطح سیستمعامل | با استفاده از Namespace، RBAC و Secret مدیریت میشود |
استفاده از منابع سختافزاری | استفاده غیربهینه، کنترل دستی | بهینهسازی مصرف منابع با Resource Limit/Request |
اتوماسیون و CI/CD | دشوار و مستلزم کار زیاد | ادغام آسان با GitOps و DevOps Pipeline ها |
راهاندازی PostgreSQL به روش سنتی یعنی نصب مستقیم آن بر روی یک سرور فیزیکی یا مجازی! این مدل در پروژههای کوچک قابل استفاده است، اما هرچه سیستم رشد میکند و ترافیک افزایش آن زیاد میشود، مدیریت منابع، مقیاسپذیری و بکاپگیری بهمرور زمان به یک چالش جدی تبدیل میشود. بهخصوص زمانیکه یک سرور از دسترس خارج شود یا نیاز به بهروزرسانی پایگاه داده داشته باشد.
اما زمانیکه PostgreSQL بر روی Kubernetes اجرا میشود، شرایط کاملاً متفاوت خواهد بود. در اینجا با یک معماری جدید مواجه هستیم که ابزارهایی مانند StatefulSet
برای مدیریت دیتابیسهای stateful، PersistentVolume
برای حفظ دادهها حتی پس از ریاستارت شدن پادها، و ConfigMap
برای تنظیمات، همه چیز را ساختارمند و قابلاعتماد میسازند.
از جمله مزایای مهم این مدل میتوان به self-healing اشاره کرد؛ به این معنا که اگر یک پاد دچار مشکل شود، بهصورت خودکار جایگزین میشود. همچنین قابلیت Rolling Update این امکان را میدهد که بدون قطع سرویس، نسخه جدید بهروزرسانی شود.
برای آشنایی با کوبرنتیز (Kubernetes) و چگونگی کارکرد آن، مقاله زیر را میتوانید مطالعه کنید.
کوبرنتیز(Kubernetes) چیست؟
ایجاد ConfigMap برای دیتابیس PostgreSQL
در Kubernetes، یک ConfigMap نوعی آبجکت API است که دادههای پیکربندی را به صورت جفت کلیدهای مقدار ذخیره میکند و این دادهها توسط پادها یا کانتینرهای موجود در کلاستر استفاده میشوند.
ConfigMap با جدا کردن جزئیات پیکربندی از کد برنامه، فرآیند مدیریت و بهروزرسانی تنظیمات را بدون نیاز به تغییر کد برنامه آسانتر میکند.
در این مرحله به شما آموزش میدهیم که چگونه میتوان یک فایل ConfigMap برای ذخیره جزئیات اتصال PostgreSQL، مانند نام میزبان، نام پایگاه داده، نام کاربری و سایر تنظیمات ایجاد کرد.
یک فایل YAML به نام postgresql-configmap.yaml
را با دستور زیر ایجاد کنید:
nano postgres-configmap.yaml
برای تنظیمات پیشفرض شامل نام دیتابیس، نام کاربری و رمز عبور، فایل YAML مربوط به ConfigMap، کد زیر را به آن اضافه کنید:
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-secret
labels:
app: postgres
data:
POSTGRES_DB: ps_db
POSTGRES_USER: ps_user
POSTGRES_PASSWORD: SecurePassword
پس از ذخیره و بستن فایل، تنظیمات مربوط به ConfigMap را با استفاده از دستور زیر در کلاستر Kubernetes اعمال کنید:
kubectl apply -f postgres-configmap.yaml
برای اینکه مطمئن شوید ConfigMap درست در کلاستر کوبرنتیز ساخته شده، کافی است دستور زیر را بزنید:
kubectl get configmap
خروجی:
NAME DATA AGE
kube-root-ca.crt 1 116s
postgres-secret 3 12s
خروجی بالا نشان میدهد چه ConfigMapهایی در namespace فعلی کلاستر وجود دارد.
نحوه بکاپ گیری کامل از PostgreSQL در اوبونتو 24.04 را در مقاله زیر بخوانید.
نحوه بکاپ گیری از PostgreSQL
ایجاد یک PersistentVolume و PersistentVolumeClaim در کوبرنتیز
در معماری کوبرنتیز، برای مدیریت فضای ذخیرهسازی پایدار (persistent storage)، از دو منبع کلیدی استفاده میشود:
PersistentVolume (PV) و PersistentVolumeClaim (PVC).
- PersistentVolume یک منبع ذخیرهسازی از پیش تعریفشده در کلاستر است که توسط ادمین یا سیستم فراهم میشود. این منبع میتواند روی یک دیسک محلی، NFS، یا حتی فضای ذخیرهسازی ابری قرار داشته باشد.
- در مقابل، PersistentVolumeClaim به پادها این امکان را میدهد که مقدار مشخصی از فضای ذخیرهسازی را درخواست کنند.
استفاده از این ساختار به شما کمک میکند تا دادههای مهم (مثل اطلاعات دیتابیس) حتی در صورت ریاستارت پادها یا جابهجایی آنها بین نودها، حفظ شوند و از بین نروند.
ابتدا، با دستور زیر یک فایل YAML برای PersistentVolume (PV) ایجاد کنید:
nano psql-pv.yaml
سپس تنظیمات زیر را به فایل اضافه کنید:
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-volume
labels:
type: local
app: postgres
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
hostPath:
path: /data/postgresql
در ادامه، فایل را ذخیره کرده و برای اعمال تغییرات بالا در کوبرنتیز، کد زیر را اجرا کنید:
kubectl apply -f psql-pv.yaml
بعد از آن، یک فایل YAML برای PersistentVolumeClaim نیز ایجاد کنید:
nano psql-claim.yaml
کدهای زیر را به فایل اضافه کنید:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-volume-claim
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
در اینجا نیز فایل را ذخیره کنید و برای اعمال تغییرات بالا در کوبرنتیز، کد زیر را اجرا کنید:
kubectl apply -f psql-claim.yaml
حالا، برای مشاهده لیست تمام PersistentVolumeها (PV) که در کلاستر کوبرنتیز شما ایجاد شدهاند، از دستور زیر استفاده کنید:
kubectl get pv
این دستور، جزئیات مربوط به هر PersistentVolume را نمایش میدهد، که شامل موارد زیر است:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
postgres-volume 10Gi RWX Retain Bound default/postgres-volume-claim manual 34s
- Name: نام PersistentVolume.
- Capacity: ظرفیت ذخیرهسازی اختصاص داده شده به PersistentVolume.
- Access Modes: وضعیتهای دسترسی که این PersistentVolume پشتیبانی میکند (مثل ReadWriteOnce، ReadOnlyMany، و غیره).
- Status: وضعیت فعلی PersistentVolume (مثل Available یا Bound).
- Reclaim Policy: سیاست بازگشت، که مشخص میکند که پس از آزاد شدن فضای ذخیرهسازی چه اتفاقی میافتد (مثل Retain یا Delete).
- Storage Class: کلاس ذخیرهسازی که برای PersistentVolume تعریف شده است.
پس از آن، برای مشاهده لیست تمام PersistentVolumeClaimها (PVC) که در کلاستر کوبرنتیز شما ایجاد شدهاند، دستور زیر را اجرا کنید:
kubectl get pvc
همانطور که در خروجی پائین میبینید، این دستور اطلاعات مربوط به PersistentVolumeClaimها را نمایش میدهد، از جمله نامها، وضعیتها، ظرفیت درخواستشده، حجمهای مرتبط و اگر آنها به یک PersistentVolume متصل باشند، اطلاعات مربوط به آن PersistentVolume را نیز نشان میدهد.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
postgres-volume-claim Bound postgres-volume 10Gi RWX manual 22s
آموزش کامل نصب و استفاده از PostgreSQL در سرور مجازی اوبونتو 22.04 را در مقاله زیر بخوانید.
نصب PostgreSQL
دیپلوی PostgreSQL در کوبرنتیز
برای راهاندازی PostgreSQL در کوبرنتیز، باید یک فایل YAML بسازید که مشخص کند کوبرنتیز چگونه باید پادهای (pod) PostgreSQL را مدیریت کند. نگران نباشید این کار بسیار ساده است.
ابتدا یک فایل جدید به نام ps-deployment.yaml
بسازید:
nano ps-deployment.yaml
سپس کدهای زیر را به آن اضافه کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 3
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: 'postgres:14'
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-secret
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgresdata
volumes:
- name: postgresdata
persistentVolumeClaim:
claimName: postgres-volume-claim
فایل را ذخیره کنید، سپس با دستور زیر، تغییرات را روی کلاستر کوبرنتیز اعمال کنید:
kubectl apply -f ps-deployment.yaml
دستور بالا، استقرار PostgreSQL را براساس مشخصات ارائهشده در فایل YAML ایجاد میکند.
همچنین، برای بررسی وضعیت دیپلوی ایجاد شده، دستور زیر را اجرا کنید:
kubectl get deployments
خروجی زیر تأیید میکند که دیپلوی PostgreSQL با موفقیت انجام شده است:)
NAME READY UP-TO-DATE AVAILABLE AGE
postgres 3/3 3 3 17s
برای بررسی پادهای در حال اجرا، دستور زیر را تایپ کنید:
kubectl get pods
در خروجی زیر، پادهای در حال اجرا را میبینید:
NAME READY STATUS RESTARTS AGE
postgres-665b7554dc-cddgq 1/1 Running 0 28s
postgres-665b7554dc-kh4tr 1/1 Running 0 28s
postgres-665b7554dc-mgprp 1/1 Running 1 (11s ago) 28s
ایجاد سرویس برای PostgreSQL در کوبرنتیز
در کوبرنتیز، سرویس بهعنوان ابزاری برای تعریف یک مجموعه منطقی از پادها عمل میکند که این امکان را برای پادهای دیگر در کلاستر فراهم میآورد تا بدون نیاز به دانستن آدرسهای IP خاص، با این مجموعه پادها ارتباط برقرار کنند.
حالا بیایید یک فایل مانیفست سرویس (Service Manifest) بسازیم تا PostgreSQL را بهطور داخلی در کلاستر کوبرنتیز قابل دسترس کنیم:
nano ps-service.yaml
اکنون، تنظیمات زیر را به فایل اضافه کنید:
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
در آخر فایل را ذخیره کنید و برای اعمال تغییرات روی کوبرنتیز، دستور زیر را اجرا کنید:
kubectl apply -f ps-service.yaml
پس از ایجاد سرویس، سایر اپلیکیشنها یا سرویسها در کلاستر کوبرنتیز میتوانند از طریق نام PostgreSQL و پورت 5432
به دیتابیس PostgreSQL متصل شوند.
برای بررسی وضعیت استقرار سرویس، دستور زیر را بزنید:
kubectl get svc
خروجی نمونه:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6m6s
postgres NodePort 10.98.119.102 <none> 5432:30344/TCP 6s
برای آشنایی با نحوه راهاندازی کلاستر K3s Kubernetes در اوبونتو 22.04، مقاله زیر را مطالعه کنید.
راهاندازی کلاستر K3s Kubernetes
اتصال به PostgreSQL با kubectl در کوبرنتیز
در شروع، پادهای موجود در namespace خود را بهصورت زیر لیست کنید تا پاد مربوط به PostgreSQL را پیدا کنید:
kubectl get pods
در خروجی زیر، پادهای در حال اجرا را مشاهده خواهید کرد:
NAME READY STATUS RESTARTS AGE
postgres-665b7554dc-cddgq 1/1 Running 0 28s
postgres-665b7554dc-kh4tr 1/1 Running 0 28s
postgres-665b7554dc-mgprp 1/1 Running 1 (11s ago) 28s
حالا، نام پاد PostgreSQL را در خروجی پیدا کنید.
پس از شناسایی پاد PostgreSQL، از دستور kubectl exec
برای اتصال به پاد PostgreSQL استفاده کنید:
kubectl exec -it postgres-665b7554dc-cddgq -- psql -h localhost -U ps_user --password -p 5432 ps_db
پس از آنکه رمز عبور برای کاربران PostgreSQL را به صورت درست وارد کردید، وارد شل PostgreSQL خواهید شد.
Password:
psql (14.10 (Debian 14.10-1.pgdg120+1))
Type "help" for help.
ps_db=#
در ادامه، برای بررسی اتصال PostgreSQL، از دستور زیر استفاده کنید:
ps_db=# \conninfo
خروجی دریافتی:
You are connected to database "ps_db" as user "ps_user" on host "localhost" (address "::1") at port "5432".
در نهایت، برای خروج از شل PostgreSQL، دستور زیر را بزنید:
exit
نحوه استفاده از Fast API با دیتابیس رابطه ای در سرور مجازی اوبونتو Ubuntu را در مقاله زیر بخوانید.
نحوه استفاده از Fast API
مقیاسبندی PostgreSQL در کوبرنتیز
مقیاسبندی یک دیپلوی PostgreSQL در کوبرنتیز شامل تنظیم تعداد نسخهها (replicas) در Deployment یا StatefulSet است که پادهای PostgreSQL را مدیریت میکند.
ابتدا، وضعیت فعلی دیپلوی PostgreSQL خود را با دستور زیر بررسی کنید:
kubectl get pods -l app=postgres
خروجی:
postgres-665b7554dc-cddgq 1/1 Running 0 2m12s
postgres-665b7554dc-kh4tr 1/1 Running 0 2m12s
postgres-665b7554dc-mgprp 1/1 Running 1 (115s ago) 2m12s
همچنین، برای مقیاسبندی دیپلوی PostgreSQL به ۵ نسخه، دستور زیر را اجرا کنید:
kubectl scale deployment --replicas=5 postgres
حالا وضعیت دیپلوی خود را دوباره چک کنید تا مطمئن شوید، عملیات مقیاسبندی با موفقیت انجام شده است:
kubectl get pods -l app=postgres
در خروجی، خواهید دید که تعداد پادها ۵ عدد بالا رفته است:
NAME READY STATUS RESTARTS AGE
postgres-665b7554dc-cddgq 1/1 Running 0 3m56s
postgres-665b7554dc-ftxbl 1/1 Running 0 10s
postgres-665b7554dc-g2nh6 1/1 Running 0 10s
postgres-665b7554dc-kh4tr 1/1 Running 0 3m56s
postgres-665b7554dc-mgprp 1/1 Running 1 (3m39s ago) 3m56s
با سرور اوبونتو لیارا، سرور خود را با هزینه بهصرفه و بالاترین کارایی مدیریت کنید.
✅ استقرار سریع ✅ منابع بهینه ✅ امنیت پیشرفته
خرید سرور مجازی اوبونتو ساعتی لیارا
بکاپ گیری و بازیابی PostgreSQL در کوبرنتیز
برای بکاپگیری از دیتابیس PostgreSQL که داخل یکی از پادهای کوبرنتیز در حال اجراست، میتوانید از دستور kubectl exec
همراه با ابزار pg_dump
استفاده کنید تا بهطور مستقیم از داخل پاد، دیتابیس را بکاپ بگیرید.
در قدم اول، با دستور زیر لیست پادهای موجود در فضای نام فعلی را بررسی کنید تا بتوانید نام پاد مربوط به PostgreSQL را پیدا کنید:
kubectl get pods
بعد از اینکه نام پاد PostgreSQL را شناسایی کردید، با استفاده از دستور زیر میتوانید از دیتابیس داخل پاد بکاپ بگیرید. این کار را با اجرای ابزار pg_dump
و با استفاده از kubectl exec
انجام دهید:
kubectl exec -it postgres-665b7554dc-cddgq -- pg_dump -U ps_user -d ps_db > db_backup.sql
دستور بالا، خروجی دیتابیس را در قالب یک فایل SQL به نام db_backup.sql
در مسیر فعلی سیستمتان ذخیره میکند. حالا اگه قصد دارید این بکاپ را به پاد PostgreSQL برگردانید، لازم است فایل SQL را داشته باشید و از ابزار psql
برای اجرای بکاپگیری استفاده کنید.
kubectl cp db_backup.sql postgres-665b7554dc-cddgq:/tmp/db_backup.sql
حالا برای اتصال به پاد PostgreSQL و ورود به محیط شل آن، دستور زیر را اجرا کنید:
kubectl exec -it postgres-665b7554dc-cddgq -- /bin/bash
پس از آن، برای ریاستور کردن بکاپ از فایل dump، بعد از اینکه وارد محیط Bash داخل پاد شدید، دستور زیر را اجرا کنید:
psql -U ps_user -d ps_db -f /tmp/db_backup.sql
با پایگاه داده PostgreSQL لیارا، در کمترین زمان، یک دیتابیس قدرتمند، پرسرعت و امن راهاندازی کنید.
✅ پشتیبانگیری خودکار ✅ امنیت بالا ✅ عملکرد بهینه
خرید هاست ابری PostgreSQL لیارا
جمعبندی
اگر بخواهید یک پایگاه داده قابل مدیریت در فضای ابری داشته باشید، ترکیب PostgreSQL و Kubernetes انتخاب مناسبی است. مدیریت PostgreSQL روی Kubernetes این مزیتها را به همراه دارد:
- مقیاسپذیری سریع و آسان با چند خط دستور ساده.
- بکاپگیری و ریستور مطمئن از طریق
pg_dump
وpsql
. - دسترسی داخلی ایمن بین سرویسها بدون نیاز به دانستن IP.
- انعطاف بالا در مدیریت منابع ذخیرهسازی با استفاده از PV و PVC.
این معماری نهتنها برای محیطهای production مناسب است، بلکه برای تیمهای DevOps، توسعهدهندهها و حتی استارتآپهایی که دنبال ساخت یک زیرساخت پایدار هستند، کاربردی است.
سوالات متداول
چرا باید PostgreSQL را در کوبرنتیز پیادهسازی کنم؟
برای اینکه بتوانیم، دیتابیس را بصورت خودکار در محیط کلاستر مدیریت کنیم.
چطور میتوانم از PostgreSQL در کوبرنتیز بکاپگیری کنم؟
با استفاده از ابزار pg_dump
و دستورات kubectl exec
میتوانید از پایگاه داده PostgreSQL پشتیبان بگیرید.
آیا میتوان در کوبرنتیز PostgreSQL را در حالت High Availability پیادهسازی کرد؟
بله، در کوبرنتیز میتوان PostgreSQL را در حالت High Availability (HA) پیادهسازی کرد.
چطور میتوانم اتصال ایمن به PostgreSQL در کوبرنتیز برقرار کنم؟
چندین روش برای اینکار وجود دارد از جمله: فعالسازی SSL در PostgreSQL، استفاده از Kubernetes Secrets، استفاده از Network Policies.