miaodi
发布于 2023-03-08 / 87 阅读 / 0 评论 / 0 点赞

k8s集群部署mysql postgresql 等常用数据库

1. mysql

前置环境:

使用helm安装。

# 获取自定义values
[root@k8s-n1 ~]# helm show values bitnami/mysql > mysql33061.values.conf
​
# 修改mysql33061.values.conf
# 修改默认root密码
auth:
  rootPassword: "root账号的密码"
  
​
## 修改端口映射方式,这个是暴露在集群外,33061端口
primary:
  service:
     type: NodePort
     nodePorts:
      mysql: "33061"
      
## 磁盘持久化方式,这里使用上面部署的nfs存储类
primary:      
  persistence:
    storageClass: "nas-nfs"
  

  
# 创建namespace
[root@k8s-n1 ~]# kubectl create ns mysql
# 部署
[root@k8s-n1 ~]# helm install mysql-33061  bitnami/mysql -n mysql --values mysql33061.values.conf
​

​

再部署一个仅供集群内访问的mysql,在端口映射那里使用默认values参数就是仅供集群内访问的方式,可以使用集群内dns访问。

# 获取自定义values
[root@k8s-n1 ~]# helm show values bitnami/mysql > mysql-cluster1.values.conf
​
# 修改内容
# 修改默认root密码
auth:
  rootPassword: "root账号的密码"
      
## 磁盘持久化方式,这里使用上面部署的nfs存储类
primary:      
  persistence:
    storageClass: "nas-nfs"
    
    
# 创建namespace
[root@k8s-n1 ~]# kubectl create ns mysql
# 部署
[root@k8s-n1 ~]# helm install mysql-cluster1  bitnami/mysql -n mysql --values mysql-cluster1.values.conf
​
# 集群内访问该实例的域名: mysql-cluster1.mysql.svc.cluster.local

2. postgresql

前置环境:

这里安装 的是9.6版本。因为后面想要部署kong 和konga,这两个服务都不兼容高版本的postgresql。

编辑清单:

vim pgsql.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pgsql
  namespace: kong
spec:
  storageClassName: nas-nfs
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
     storage: 8Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pgsql-kong
  namespace: kong
spec:
  serviceName: "postgres"
  replicas: 1
  selector:
    matchLabels:
      app: postgresql
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      containers:
      - name: postgresql
        image: postgres:9.6
        imagePullPolicy: IfNotPresent
        env:
        - name: POSTGRES_PASSWORD
          value: kong
        - name: PGDATA
          value: /var/lib/postgresql/data/pgdata
        ports:
        - containerPort: 5432
          protocol: TCP
          name: postgresql-port
        volumeMounts:
        - name: postgresql-data
          mountPath: /var/lib/postgresql/data
          subPath: kong-pgsql
      volumes:
        - name: postgresql-data
          persistentVolumeClaim:
            claimName: pgsql
      securityContext:
        runAsUser: 1001
        fsGroup: 1001
---
apiVersion: v1
kind: Service
metadata:
  name: pgsql-kong-svc
  namespace: kong
  labels:
    app: pgsql-kong-svc
spec:
  ports:
  - name: postgresql-port
    port: 5432
    protocol: TCP
  type: ClusterIP
  selector:
    app: postgresql

创建pgsql.yaml

  • 第一部分是申请8g空间nfs做持久存储

  • 第二部分需要注意下securityContext这个地方,这里如果是nfs之类的外置存储的话,不加这一段默认会报错挂载目录权限不足:

    chown: changing ownership of '/var/lib/postgresql/data': Operation not permitted

  • POSTGRES_PASSWORD的value是设置的管理员密码

    env:

    name: POSTGRES_PASSWORD ​ value: kong # 数据库密码

  • 第三部分是创建端口映射,ClusterIP代表不开放集群外访问,集群内可以根据dns或者ip访问。

这里顺便记录下pgsql的简单操作:

# help
\?
​
# 列出所有的数据库
\l
​
# 进入数据库
\c +数据库名
​
# 查看数据库下的所有表
\d
​
# 退出
\q


评论