K8S 部署 Mysql(NFS 持久化)

Symoon 一笔 本文由博客端 https://www.simplerfroze.com 主动推送
本贴最后更新于 199 天前,其中的信息可能已经时移世改

K8S

Kubernetes 就不多说了,之前也说过很多次了,作为目前大家都在谈论的东西,肯定是极好的。接下来直接上正文部署吧,接下来的几篇部署文档都很简单,直接上配置。

MySQL 部署

部署 MySQL 的前提是有 K8s 集群,之前有一篇已经详细写过如何测试部署 K8s 集群了,这里就不再多说。

NFS 服务创建

这里不说了,大家可以自行搜索一下创建 NFS 存储服务,这里依赖的持久化就是 NFS 服务。

MySQL PV/PVC 创建

Persistent Volume 和 Persistent Volume Claim,主要是管理服务持久化的存储资源 Volume。这里我们先创建 PV,再创建 PVC,将两者绑定。
首先是 mysql-pv.yaml

kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-pv
  namespace: database
spec:
  accessModes:
    - ReadWriteOnce      
  capacity:
    storage: 1Gi
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    path: /data/nfs/mysql
    server: nfs服务IP

配置中包含命名空间,模式 ReadWriteOnce,资源分配,名称对应,nfs 路径等等等。。
执行

kubectl apply -f mysql-pv.yaml

接下来是 mysql-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-pvc
  namespace: database
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs     

这里其他配置与 PV 保持一致,同一命名空间 database 下,同一个 storageClassName
执行

kubectl apply -f mysql-pvc.yaml

创建好后我们来看一下状态。

kubectl get pv -n database

正常的 PV 状态如下

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                               STORAGECLASS                   REASON   AGE
mysql-pv                                   1Gi        RWO            Retain           Bound    database/mysql-pvc                                                  nfs                                     4d3h

STATUS 是 BOUND 状态
接下来看一下 pvc

kubectl get pvc -n database

正常状态如下

NAME                                                       STATUS   VOLUME                CAPACITY   ACCESS MODES   STORAGECLASS                   AGE
mysql-pvc                                                  Bound    mysql-pv              1Gi        RWO            nfs                            4d3h

STATUS 依旧是 BOUND,我们的 PV/PVC 持久化搭建完毕

MySQL Deploy 创建

这里是我们服务的本体,关于 Deploy 就不多说了
这里我们创建 mysql-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: database
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:                        
        - name: MYSQL_ROOT_PASSWORD
          value: "password"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql         
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc      

这里我们配置的是 MySQL 服务相关信息,包括镜像的拉取,内部存储的映射。没有什么大问题等待服务部署成功就好了。

kubectl apply -f mysql-deploy.yaml

MySQL Service 创建

Deploy 部署我们服务的本体,接下来创建访问服务的通道。
创建 mysql-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: database
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 31111
  selector:
    app: mysql
  selector:
    app: mysql

这里我选择 NodePort 类型,是因为用 31111 端口将服务暴露出来,不过用于我们同一个命名空间下的服务,可以直接通过服务名字进行访问。

kubectl apply -f mysql-service.yaml

可以根据我们的 MySQL 所在 Node+31111 的形式进行访问了。nfs 服务器上已经创建了相关 MySQL 持久化文件。

  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    74 引用 • 39 回帖 • 1 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...