k8s--部署单机版MySQL,并持久化

写在前面

这次部署使用到了pv,pvc,deployment,service四种资源对象。
pv使用的是local类型的,localStorage应该是默认的。
在这里插入图片描述

PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mypv1
  namespace: test-for-test
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain   # 手动删除 
  storageClassName: local-storage #表明这个pv所属的storageClass
  local:
    path: /k8sVolume/mysqlVolume/mypv1 #节点上卷的完整路径。(必须是存在的路径,不然容器无法创建,deployment会报错)可以是目录或块设备(磁盘、分区…)。
  nodeAffinity: #节点亲和性配置,限制从哪些节点上可以访问此卷
    required:  
      nodeSelectorTerms: #数组类型
      - matchExpressions: #数组类型
        - key: kubernetes.io/hostname   #字符串类型。被标签选择器应用的label key
          operator: In   #字符串类型。表示键与一组值的关系。有效的操作符有In, NotIn, Exists, DoesNotExist。Gt, Lt。
          values: #一个字符串数组,如果操作符为In或NotIn,则values数组必须非空。如果操作符是Exists或DoesNotExist, values数组必须为空。如果操作符为Gt或Lt,则values数组必须只有一个元素,该元素将被解释为整数。
          - roy-ubuntu #所在节点的主机名

pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvclocal
  namespace: test-for-test
spec:
  accessModes: #访问模式 申领在请求具有特定访问模式的存储时,使用与卷相同的访问模式约定。
    - ReadWriteMany
  volumeMode: Filesystem #卷模式
  resources:
    requests:
      storage: 4Gi
  storageClassName: local-storage # 此处须显式设置空字符串或指定值,否则会被设置为默认的 StorageClass

deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment #指定deployment的名字
  namespace: test-for-test
  labels:  
    app: mysql-labels-app 
spec: #规约
  replicas: 3 #pod的副本数量,就是希望创建多少个pod的副本.可选字段。它的默认值是1。
  selector:  #selector 字段定义 Deployment 如何查找要管理的 Pods。必须匹配 .spec.template.metadata.labels,否则请求会被 API 拒绝。
    matchLabels:
      app: mysql-pod
  template: #Deployment Pod 模板;它和 Pod 的语法规则完全相同。 只是这里它是嵌套的,因此不需要 apiVersion 或 kind。
    metadata:
      labels:
        app: mysql-pod
    spec: #pod模板规约
      containers: #容器
      - name: mysql #容器的名称
        image: mysql:5.7 #容器使用的镜像
        ports:
        - containerPort: 3306
        volumeMounts: 
        - name: mypv1 #pv的name
          mountPath: /var/lib/mysqlMount#容器内对应的路径,这里这个路径不对,应该是/var/lib/mysql。MySQL的数据都在这个里面,需要持久化的也就是这个路径下的内容
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
      volumes:
      - name: mypv1#pv的name
        persistentVolumeClaim:
          claimName: mypvclocal 
      restartPolicy: Always #Deployment 中的 Pod 模板必须指定适当的标签和适当的重新启动策略。只有 .spec.template.spec.restartPolicy 等于 Always 才是被允许的,这也是在没有指定时的默认设置

service

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: test-for-test
spec:
  ports:
  - port: 3306
    nodePort: 30060
  selector:
    app: mysql-pod # 该 Service 会将所有具有标签 app: mysql-labels-app暴露到一个抽象的 Service 端口上(targetPort:容器接收流量的端口;port:可任意取值的抽象的 Service 端口,其他 Pod 通过该端口访问 Service
  type: NodePort

使用可视化工具连接MySQL

请添加图片描述

主机地址就是节点的地址

进入容器

kubectl exec -it pod的name -c 在deployment文件指定了的容器name -n test-for-test – bash

root@roy-ubuntu:/k8sVolume/mysqlVolume/mypv1# kubectl exec -it  mysql-deployment-59f68f87cd-d4bt8 -c mysql -n test-for-test -- bash
root@mysql-deployment-59f68f87cd-d4bt8:/# ls
bin  boot  dev	docker-entrypoint-initdb.d  entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值