在这篇文章中,我将展示一些步骤,以便在OKE的K8S集群中部署和运行PostgreSQL数据库。
部署将基于postgres:11.1 Docker映像,该映像需要配置一些环境变量:POSTGRES_DB(数据库名称),POSTGRES_USER和POSTGRES_PASSWORD。 我将这些变量的值存储在K8S ConfigMap和Secret中:
apiVersion: v1 kind: ConfigMap metadata:
name: postgre-db-config data:
db-name: flexdeploy
apiVersion: v1 kind: Secret metadata:
name: postgre-db-secret stringData:
username: creator
password: c67
这些配置K8S资源由StatefulSet引用,该实例实际上照顾了带有postgres-db容器的Pod的寿命:
apiVersion: apps/v1beta2 kind: StatefulSet metadata:
name: postgre-db
labels:
run: postgre-db spec:
selector:
matchLabels:
run: postgre-db
serviceName: "postgre-db-svc"
replicas: 1
template:
metadata:
labels:
run: postgre-db
spec:
containers:
- image: postgres: 11.1
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: db
env:
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: postgre-db-config
key: db-name
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgre-db-secret
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgre-db-secret
key: password
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
name: postgre-db
ports:
5432 - containerPort: 5432
volumeClaimTemplates:
- metadata:
name: db
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 3Gi
StatefulSet K8S资源是专为有状态应用程序(如数据库)设计的,这些应用程序将其数据保存到持久性存储中。 为了为数据库定义持久性存储,我们使用了另一个K8s资源持久性卷 ,在清单文件中,我们定义了创建名称为db的3Gi 持久性卷的声明 。 该卷之所以称为持久卷,是因为其寿命不是由容器维护的,甚至不是由吊舱维护的,而是由K8s集群维护的。 因此,它可以超过任何容器和Pod并保存数据。 这意味着,如果我们杀死或重新创建一个容器,一个容器或什至整个StatefulSet,则数据将仍然存在。 我们在容器定义中指的是该持久性卷,它在/ var / lib / postgresql / data路径上安装了一个卷。 这是PostgreSQL容器存储其数据的地方。
为了访问数据库,我们将创建一个服务 :
apiVersion: v1 kind: Service metadata:
name: postgre-db-svc spec:
selector:
run: postgre-db
ports:
- port: 5432
targetPort: 5432
type: LoadBalancer
这是一个LoadBalancer服务,可从K8S群集外部访问:
$ kubectl get svc postgre-db-svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE postgre-db-svc LoadBalancer 10.96 . 177.34 129.146 . 211.77 5432 : 32498 /TCP 39m
假设我们已经在OKE上创建了一个K8s集群,并且我们的kubectl已配置为与其通信,我们可以将清单文件应用于该集群:
kubectl apply -f postgre-db-config.yaml kubectl apply -f postgre-db-secret.yaml kubectl apply -f postgre-db-pv.yaml kubectl apply -f postgre-db-service.yaml
完成此操作后,我们可以从笔记本电脑上最喜欢的IDE连接到数据库
GitHub上提供了此文章的清单文件。
而已!
翻译自: https://www.javacodegeeks.com/2019/05/postgresql-cloud-oracle-containers-engine-kubernetes.html