Въведение
Kubernetes е система за оркестриране на контейнери с отворен код за автоматизиране на внедряването, мащабирането и управлението на контейнерни приложения. Изпълнението на PostgreSQL база данни на Kubernetes е тема за обсъждане в днешно време, тъй като Kubernetes предоставя начини за предоставяне на контейнер с състояние, използвайки постоянни томове, набори за състояние и т.н.
Този блог има за цел да предостави стъпки за стартиране на PostgreSQL база данни в клъстер Kubernetes. Той не обхваща инсталирането или конфигурацията на клъстер Kubernetes, въпреки че по-рано писахме за това в този блог на MySQL Galera Cluster на Kubernetes.
Предварителни условия
- Работен клъстер Kubernetes
- Основно разбиране на Docker
Можете да осигурите клъстера Kubernetes на всеки доставчик на публичен облак като AWS, Azure или Google облак и др. Вижте стъпките за инсталиране и конфигуриране на Kubernetes за CentOS тук. Можете също да проверите по-ранната публикация в блога за основите на внедряването на PostgreSQL в Docker контейнера.
За да разположим PostgreSQL на Kubernetes, трябва да изпълним следните стъпки:
- Изображение на Postgres Docker
- Конфигурационни карти за съхранение на конфигурации на Postgres
- Постоянен обем на съхранение
- Внедряване на PostgreSQL
- Услуга PostgreSQL
Изображение на PostgreSQL Docker
Използваме PostgreSQL 10.4 Docker изображение от публичния регистър. Това изображение ще осигури функционалността за предоставяне на персонализирани конфигурации/променливи на средата на PostgreSQL като потребителско име, парола, име и път на базата данни и т.н.
Конфигурационни карти за PostgreSQL конфигурации
Ще използваме конфигурационни карти за съхраняване на информация, свързана с PostgreSQL. Тук използваме базата данни, потребителя и паролата в конфигурационната карта, която ще се използва от модула PostgreSQL в шаблона за внедряване.
Файл:postgres-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: admin123
Създайте ресурс за конфигурационни карти на Postgres
$ kubectl create -f postgres-configmap.yaml
configmap "postgres-config" created
Постоянен обем на съхранение
Както всички знаете, контейнерите на Docker са ефимерни по природа. Всички данни, генерирани от или в контейнера, ще бъдат загубени след прекратяване на екземпляра на контейнера.
За да запазим данните, ще използваме постоянни томове и ресурс за искане за постоянен обем в Kubernetes, за да съхраняваме данните в постоянни хранилища.
Тук използваме локална директория/път като постоянен ресурс за съхранение (/mnt/data)
Файл: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
Създайте внедрявания, свързани със съхранение
$ kubectl create -f postgres-storage.yaml
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created
Внедряване на PostgreSQL
PostgreSQL манифест за внедряване на PostgreSQL контейнер използва PostgreSQL 10.4 изображение. Използва конфигурация на PostgreSQL като потребителско име, парола, име на база данни от configmap, която създадохме по-рано. Той също така монтира тома, създаден от постоянните томове, и твърди, че запазва данните на контейнера на PostgreSQL.
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
Създаване на внедряване на Postgres
$ kubectl create -f postgres-deployment.yaml
deployment "postgres" created
Изтеглете Бялата книга днес Управление и автоматизация на PostgreSQL с ClusterControl Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате PostgreSQLD Изтеглете Бялата книга Услуга PostgreSQL
За достъп до внедряването или контейнера трябва да изложим услугата PostgreSQL. Kubernetes предоставя различни видове услуги като ClusterIP, NodePort и LoadBalancer.
С ClusterIP имаме достъп до услугата PostgreSQL в Kubernetes. NodePort дава възможност за излагане на крайната точка на услугата на възлите на Kubernetes. За външен достъп до PostgreSQL трябва да използваме тип услуга Load Balancer, която излага услугата външно.
Файл:postgres-service.yaml
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
Създайте услуга Postgres
$ kubectl create -f postgres-service.yaml
service "postgres" created
Свържете се с PostgreSQL
За да свържем PostgreSQL, трябва да получим порта Node от внедряването на услугата.
$ kubectl get svc postgres
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
postgres NodePort 10.107.71.253 <none> 5432:31070/TCP 5m
Трябва да използваме порт 31070, за да се свържем с PostgreSQL от машина/възел, присъстващ в клъстера kubernetes с идентификационни данни, дадени в конфигурационната карта по-рано.
$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1:
psql (10.4)
Type "help" for help.
postgresdb=#
Изтриване на внедряванията на PostgreSQL
За изтриване на PostgreSQL ресурси трябва да използваме команди по-долу.
# 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
Надяваме се, че като използвате горните стъпки, можете да предоставите самостоятелен екземпляр на PostgreSQL на Kubernetes клъстер.
Заключение
Изпълнението на PostgreSQL на Kubernetes помага да се използват ресурсите по по-добър начин, отколкото когато се използват само виртуални машини. Kubernetes също така осигурява изолация на други приложения, използващи PostgreSQL в рамките на същата виртуална машина или Kubernetes клъстер.
Тази статия предоставя общ преглед на това как можем да използваме PostgreSQL в Kubernetes за среда за разработка/POC. Можете да изследвате/настройвате PostgreSQL клъстер, като използвате набори от състояния на Kubernetes.
Необходими са StatefulSets?
В Kubernetes StatefulSets са необходими за мащабиране на приложения с състояние. PostgreSQL може лесно да се мащабира с помощта на StatefulSets с една команда.
Препратки
- Инсталиране на Kubernetes на CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
- Настройка на Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
- PostgreSQL с помощта на Docker:https://severalnines.com/blog/deploying-postgresql-docker-container
- Kubernetes:https://kubernetes.io
- PostgreSQL клъстер, използващ statefulsets https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets