准备k8s集群

image.png

准备local pv

local pv前提条件

  • 节点上需要打上调度需要的label
  • 节点上手动创建目录
    1. mkdir -p /data/pg_data
    1. kubectl label nodes t-k8s-node1 pg=true
    创建db名称空间
    1. kubectl create ns db
    编写local-pv yaml ``` cat > local-pv.yaml << EOF kind: StorageClass apiVersion: storage.k8s.io/v1
    metadata: name: local-storage namespace: db provisioner: kubernetes.io/no-provisioner

apiVersion: v1 kind: PersistentVolume metadata: name: local-pv namespace: db spec: capacity: storage: 20Gi accessModes:

  • ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage local: path: /data/pg_data nodeAffinity: required: nodeSelectorTerms:
    • matchExpressions:
      • key: pg operator: Exists EOF
        1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1176682/1599017346900-215935a2-15aa-485b-8b01-a5bb41be7e61.png#align=left&display=inline&height=163&margin=%5Bobject%20Object%5D&name=image.png&originHeight=163&originWidth=769&size=15736&status=done&style=none&width=769)
        2. <a name="fiNMH"></a>
        3. ## 部署pg
        4. 创建docker私有库的secret
        kubectl create secret docker-registry hz-registry-secret —namespace=db —docker-server=registry.cn-hangzhou.aliyuncs.com —docker-username=杭州艾麦科技 —docker-password=xxxxxxx cat > pg-statefulset.yaml << EOF apiVersion: apps/v1 kind: StatefulSet metadata: name: pg namespace: db spec: serviceName: “pg” replicas: 1 selector: matchLabels: app: pg template: metadata: labels: app: pg spec: terminationGracePeriodSeconds: 10 imagePullSecrets:
      • name: hz-registry-secret containers:
      • name: pg image: registry.cn-hangzhou.aliyuncs.com/hz-imile/hz:pg-12.4 imagePullPolicy: IfNotPresent readinessProbe: tcpSocket:
        1. port: 5432
        initialDelaySeconds: 20 timeoutSeconds: 5 periodSeconds: 3 livenessProbe: tcpSocket:
        1. port: 5432
        initialDelaySeconds: 30 timeoutSeconds: 5 periodSeconds: 3 env:
        • name: POSTGRES_PASSWORD value: pgsql@123 ports:
        • containerPort: 5432 volumeMounts:
        • name: datadir mountPath: /var/lib/postgresql/data volumeClaimTemplates:
  • metadata: name: datadir spec: accessModes: [ “ReadWriteOnce” ] storageClassName: local-storage resources:
    1. requests:
    2. storage: 20Gi

apiVersion: v1 kind: Service metadata: name: pg namespace: db spec: type: NodePort ports:

  • port: 5432 targetPort: 5432 nodePort: 30002 selector: app: pg EOF ```
  1. kubectl apply -f pg-statefulset.yaml

image.png

访问pg

安装pg客户端

  1. yum install postgresql -y

利用service连接pg

  1. psql -U postgres -h xxxxx -p 5432

image.png

利用nodeport访问

  1. psql -U postgres -h 10.10.0.4 -p 30002

image.png