前面我们学习了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: 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
- 1
(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
- 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的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
- 1
(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