文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

k8s单机部署mysql

2023-09-04 16:16

关注

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

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

图片

一、一步一步来规划

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

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

kubectl create namespace dev

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

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

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

mkdir -p /nfs/data/01

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

如果要挂载在本地:

nfs:

        path: /nfs/data/01

改成

hostPath:

        path: /nfs/data/01

# 定义持久卷信息apiVersion: v1kind: PersistentVolumemetadata:  # pv是没有namespace属性的,它是一种跨namespace的共享资源  name: pv-1gispec:  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

(4)查看创建结果

图片

3.创建持久卷声明PVC

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

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

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

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

(2)创建该PVC对象

kubectl create -f mysql-pvc.yaml

(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

(2)查看创建结果

图片

5.创建Deployment和Service

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

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

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

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

# 定义mysql的DeploymentapiVersion: apps/v1kind: Deploymentmetadata:  labels:    app: mysql  name: mysql  namespace: devspec:  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的ServiceapiVersion: v1kind: Servicemetadata:  labels:    app: svc-mysql  name: svc-mysql  namespace: devspec:  selector:    app: mysql  type: NodePort  ports:  - port: 3306    protocol: TCP    targetPort: 3306    nodePort: 31234

(2)执行创建命令

kubectl create -f mysql-svc.yaml

(3)查看创建结果

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

图片

二、测试

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

1.连接数据库服务

图片

2.创建数据库与表数据

图片

3.查看nfs目录

图片

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

图片

图片

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

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

来源地址:https://blog.csdn.net/tankpanv/article/details/131757884

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯