在这篇文章中,我将展示一些步骤,以便在OKE的K8S集群中部署和运行PostgreSQL数据库。
部署将基于postgres:11.1 Docker映像,该映像需要配置一些环境变量:POSTGRES_DB(数据库名称),POSTGRES_USER和POSTGRES_PASSWORD。 我将这些变量的值存储在K8S ConfigMapSecret中:

 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连接到数据库

Oracle容器引擎


GitHub上提供了此文章的清单文件。

而已!

翻译自: https://www.javacodegeeks.com/2019/05/postgresql-cloud-oracle-containers-engine-kubernetes.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐