k8s单机部署mysql

前面我们学习了k8s入门系列文章,了解了k8s的一些基础概念以及怎么使用。本篇文章将进行一个小小的实战,使用k8s来部署单机版的mysql数据库,基本涵盖到前面讲到的Namespace、Pod、Deployment、Service、PV、PVC、Secret等资源对象。

我们先画一张结构图来表示整个部署的逻辑流程,如图所示:

图片

一、一步一步来规划

1.创建namespace,把mysql部署在单独的名称空间中

名称空间的用法可以参考文章:k8s入门之namespace(三)

kubectl create namespace dev
  • 1

2.创建持久卷PV,用来存储mysql数据文件

PV的用法可以参考文章:k8s入门之PV&PVC(八)

(1)定义一个容量大小为1GB的PV,挂载到/nfs/data/01目录,需手动创建该目录

mkdir -p /nfs/data/01
  • 1

(2)编写mysql-pv.yaml文件内容,要创建的pv对象名称:pv-1gi

如果要挂载在本地:

nfs:

        path: /nfs/data/01

改成

hostPath:

        path: /nfs/data/01

# 定义持久卷信息
apiVersion: v1
kind: PersistentVolume
metadata:
  # pv是没有namespace属性的,它是一种跨namespace的共享资源
  name: pv-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  # 存储类,具有相同存储类名称的pv和pvc才能进行绑定
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 192.168.59.110

(3)创建该PV对象

kubectl create -f mysql-pv.yaml
  • 1

(4)查看创建结果

图片

3.创建持久卷声明PVC

PVC的用法可以参考文章:k8s入门之PV&PVC(八)

声明存储大小为1Gb的PVC资源,k8s会根据storageClassName存储类名称找到匹配的PV对象进行绑定。

(1)编写mysql-pvc.yaml文件内容,要创建的pvc对象名称是:mysql-pvc

# 定义mysql的持久卷声明信息
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: dev
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  # 存储类,具有相同存储类名称的pv和pvc才能进行绑定
  storageClassName: nfs

(2)创建该PVC对象

kubectl create -f mysql-pvc.yaml
  • 1

(3)查看创建结果

可以看到mysql-pvc对象已经和pv-1gi对象绑定上了。

图片

4.创建Secret对象用来保存mysql的root用户密码

Secret的用法可以参考文章:k8s入门之Secret(十)

(1)设置密码为123456,执行创建命令

kubectl create secret generic mysql-root-password --from-literal=password=123456 -n dev
  • 1

(2)查看创建结果

图片

5.创建Deployment和Service

Deployment的用法可以参考文章:k8s入门之Deployment(五)

Service的用法可以参考文章:k8s入门之Service(六)

(1)编辑mysql-svc.yaml文件内容

service使用NodePort类型,指定暴露的nodePort端口为31234,我们会在宿主机使用navicat客户端对mysql进行访问

# 定义mysql的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: dev
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-root-password
              key: password
          # 如果你不想使用secret对象保存mysql登录密码,可以直接使用下面的方式指定,简单粗暴未尝不可    
          #value: "123456"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysqlvolume
          mountPath: /var/lib/mysql
      volumes:
      - name: mysqlvolume
        # 使用pvc
        persistentVolumeClaim:
          claimName: mysql-pvc
---
#定义mysql的Service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-mysql
  name: svc-mysql
  namespace: dev
spec:
  selector:
    app: mysql
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    nodePort: 31234

(2)执行创建命令

kubectl create -f mysql-svc.yaml
  • 1

(3)查看创建结果

可以看到mysql的pod已处于运行状态

图片

二、测试

在宿主机通过Navicat客户端来连接部署好的mysql服务,IP是三台虚拟节点的任意一台IP,端口是在创建Service时手动指定的31234。

1.连接数据库服务

图片

2.创建数据库与表数据

图片

3.查看nfs目录

图片

4.你可以删掉服务,然后重新创建,之前的mysql数据并不会丢失

图片

图片

文章知识点与官方知识档案匹配,可进一步学习相关知识

云原生入门技能树容器编排(生产环境 k8s)kubelet,kubectl,kubeadm三件套13920 人正在系统学习中

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s部署单机版的MySQL数据库需要使用一系列资源对象,如Namespace、Pod、Deployment、Service、PV、PVC、Secret等。首先,需要了解k8s的基础概念和使用方法。在部署MySQL之前,需要提供数据持久化存储,即volume。接下来,按照以下步骤进行部署: 1. 创建持久化卷(PV)和持久化卷声明(PVC)资源,可以使用命令 `k apply -f pv_mysql.yaml` 和 `k apply -f pvc_mysql.yaml`。 2. 创建Deployment资源,指定MySQL容器的镜像、环境变量、挂载卷等配置,可以使用命令 `k apply -f deploy_mysql.yaml`。 3. 创建Service资源,用于暴露MySQL容器的网络端口,可以使用命令 `k apply -f svc_mysql.yaml`。 执行以上步骤后,k8s会自动创建并部署MySQL数据库。请确保按照指定的顺序执行命令。通过以上步骤,你可以在k8s中成功部署单机版的MySQL数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [k8s实战之MySQL单实例部署](https://blog.csdn.net/tianxingzhe37/article/details/124652286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [k8s集群安装部署单机MySQL(使用StorageClass作为后端存储)](https://blog.csdn.net/alwaysbefine/article/details/125633538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值