Kubernetes部署Postgresql

环境:

Postgresql的Docker镜像 ->参考Docker安装部署Postgresql

Centos7.x + kubernetes1.23.7 + docker1.13.1 + postgres12.7

pg的docker镜像已经上传到云平台。

Kubernetes参考:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap

基本命令

命令

作用

create

创建资源

kubectl get xx/pod/svc

查询资源

kubectl delete -f xx.yaml

删除资源

运行/调试命令

run

容器运行

logs

查看容器日志

describe

显示资源内部信息

attach

进入容器,建议用exec

exec

进入容器命令行

资源分类

集群资源

node

node节点

集群组成部分

namespace

命名空间

隔离pod

pod资源

pod

pod容器

装载容器的最小单元

服务资源

service

服务

pod对外端口

资源管理

命令式方法

kubectl run postgres-deployment --image=postgres:12.7 --port=5432

文件式配置方法

kubectl apply -f postgres.yaml

使用apply创建资源,

  • 如果资源不存在,就创建,相当于执行kubectl create -f nginx-pod.yaml

  • 如果资源存在,就修改,相当于执行kubectl patch -f nginx-pod.yaml

node

查询全部节点

kubectl get node

删除节点

kuberctl delete node
#work节点清空ini配置
kubeadm reset

namespace

查询全部namespace

kubectl get namespace

#default 未指定namespace的对象被分配再这
#kube-public 可以被所有人访问
#kube-system k8s系统空间,存储k8s资源
#kube-node-lease 集群节点之间心跳

获取namespace某个空间的描述

[root@node9 yaml]# kubectl describe namespace kube-public
Name:         kube-public
Labels:       kubernetes.io/metadata.name=kube-public
Annotations:  
Status:       Active
No resource quota.
No LimitRange resource.

资源管理方法见命令式和文件式方法

pod

获取全部pod

kubectl get pod
#指定namespace
kubectl get pod -n kube-public 

创建pod

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:  
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: postgres
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeName: node9
      containers:
        - name: postgres
          image: 10.0.127.9:30012/library/pg127:1.0 #云平台上传镜像地址
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - mountPath: /var/lib/postgresql/data #容器内pgdata
              name: pgdata
      volumes:
        - name: pgdata
          hostPath:
            path: /root/yaml/pgdata-test #与本地磁盘对应
--- 
apiVersion: v1
kind: Service
metadata:
  name: postgres-service
  labels:
    app: postgres
spec:
  type: NodePort
  selector:
   app: postgres
  ports:
  - port: 5432
    targetPort: 5432
    protocol: TCP
    nodePort: 21119  #对外映射端口
    name: postgres

ConfigMap

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/

Deployment

一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/

Service

将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。

https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/

应用部署实例

  1. 上传镜像到仓库

  1. 编写yaml文件

  1. 执行kubectl apply -f xxx.yaml部署应用

  1. 查看pod是否成功运行

[root@node9 yaml]# kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
postgres-deployment-794d979c9d-hnwzw   1/1     Running   0          6h19m
  1. 查看应用对应的service

[root@node9 yaml]# kubectl get service
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes         ClusterIP   x0.xxx.xxx.xx              443/TCP          57d
postgres-service   NodePort    x0.xxx.xxx.xx           5432:21119/TCP   6h19m
  1. 尝试外部访问,测试是否能对外部提供服务

Kubernetes部署Postgresql_第1张图片

你可能感兴趣的:(#,PostgreSQL,kubernetes,postgresql,docker)