miaodi
发布于 2023-03-08 / 139 阅读
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"
  
<p> </p>
<h1 id="创建namespace">创建namespace</h1>
<p>[root@k8s-n1 ~]# kubectl create ns mysql</p>
<h1 id="部署">部署</h1>
<p>[root@k8s-n1 ~]# helm install mysql-33061  bitnami/mysql -n mysql --values mysql33061.values.conf
​</p>
<p>​

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

# 获取自定义values
[root@k8s-n1 ~]# helm show values bitnami/mysql > mysql-cluster1.values.conf
​</p>
<h1 id="修改内容">修改内容</h1><h1 id="修改默认root密码">修改默认root密码</h1>
<p>auth:
rootPassword: "root账号的密码"
     </p>
<h2 id="磁盘持久化方式,这里使用上面部署的nfs存储类">磁盘持久化方式,这里使用上面部署的nfs存储类</h2>
<p>primary:      
persistence:
   storageClass: "nas-nfs"
   
   </p>
<h1 id="创建namespace">创建namespace</h1>
<p>[root@k8s-n1 ~]# kubectl create ns mysql</p>
<h1 id="部署">部署</h1>
<p>[root@k8s-n1 ~]# helm install mysql-cluster1  bitnami/mysql -n mysql --values mysql-cluster1.values.conf
​</p>
<h1 id="集群内访问该实例的域名: mysql-cluster1.mysql.svc.cluster.local</code></pre><p></p><p></p><h3 style="text-align: start" id="heading-2"><strong>2. postgresql</strong></h3><p style="text-align: start">前置环境:</p><ul><li><p>k8s集群</p></li><li><p>nfs存储类 <a target="_blank" rel="noopener noreferrer nofollow" href="https://www.bfmiaodi.cn/archives/k8s%E9%83%A8%E7%BD%B2nfs%E5%AD%98%E5%82%A8%E7%B1%BB">k8s部署nfs存储类 - 喵小弟 (</a><a target="_blank" rel="noopener noreferrer nofollow" href="http://bfmiaodi.cn">bfmiaodi.cn</a><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.bfmiaodi.cn/archives/k8s%E9%83%A8%E7%BD%B2nfs%E5%AD%98%E5%82%A8%E7%B1%BB">)</a></p></li></ul><p style="text-align: start">这里安装 的是9.6版本。因为后面想要部署kong 和konga,这两个服务都不兼容高版本的postgresql。</p><p style="text-align: start">编辑清单:</p><p style="text-align: start"><code>vim pgsql.yaml</code></p><pre><code>apiVersion: v1">集群内访问该实例的域名: mysql-cluster1.mysql.svc.cluster.local

2. postgresql

前置环境:

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

编辑清单:

vim pgsql.yaml

apiVersion: v1</h1><h2 id="kind: PersistentVolumeClaim
metadata:
name: pgsql
namespace: kong
spec:
storageClassName: nas-nfs
accessModes:
   - ReadWriteOnce
resources:
   requests:
    storage: 8Gi">kind: PersistentVolumeClaim
metadata:
name: pgsql
namespace: kong
spec:
storageClassName: nas-nfs
accessModes:
   - ReadWriteOnce
resources:
   requests:
    storage: 8Gi</h2><h2 id="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: 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</h2>
<p>apiVersion: v1
kind: Service
metadata:
name: pgsql-kong-svc
namespace: kong
labels:
   app: pgsql-kong-svc
spec:
ports:</p>
<ul>
<li>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
?
​</li>
</ul>
<h1 id="列出所有的数据库">列出所有的数据库</h1>
<p>\l
​</p>
<h1 id="进入数据库">进入数据库</h1>
<p>\c +数据库名
​</p>
<h1 id="查看数据库下的所有表">查看数据库下的所有表</h1>
<p>\d
​</p>
<h1 id="退出">退出</h1>
<p>\q