k8s安装mysql

本文指导如何在Kubernetes中使用k8s部署单机版MySQL,涉及Namespace、Pod、Deployment、Service、PV、PVC、Secret等资源对象的实战应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们学习了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

# 定义持久卷信息
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

(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

(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的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

(3)查看创建结果

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

二、测试

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

1.连接数据库服务

2.创建数据库与表数据

3.查看nfs目录

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

### 在 Kubernetes (k8s) 中安装和配置 MySQL 要在 Kubernetes 集群中成功安装和配置 MySQL 数据库,可以按照以下方法操作: #### 使用 Helm 安装 MySQL Helm 是 Kubernetes 的包管理工具,能够简化应用程序的部署过程。以下是通过 Helm 安装 MySQL 的具体方式。 1. 添加官方 Helm 仓库并更新: ```bash helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update ``` 2. 创建一个新的命名空间用于隔离 MySQL 资源: ```bash kubectl create namespace mysql-ns ``` 3. 使用 Helm Chart 部署 MySQL 实例到指定命名空间: ```bash helm install my-mysql bitnami/mysql --namespace=mysql-ns ``` 此命令会自动完成 MySQL安装以及基本配置[^2]。 4. 查看 Pod 和 Service 是否正常启动: ```bash kubectl get pods,services -n mysql-ns ``` #### 手动编写 YAML 文件部署 MySQL 如果不想依赖 Helm,也可以手动定义 Deployment 和 Service 来实现 MySQL 的部署。 1. 编写 `mysql-deployment.yaml` 文件如下所示: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: valueFrom: secretKeyRef: name: mysql-secret key: password ports: - containerPort: 3306 volumeMounts: - mountPath: /var/lib/mysql name: data-volume volumes: - name: data-volume persistentVolumeClaim: claimName: mysql-pv-claim --- apiVersion: v1 kind: Service metadata: name: mysql-service spec: type: ClusterIP ports: - port: 3306 targetPort: 3306 selector: app: mysql ``` 2. 应用该文件以创建资源: ```bash kubectl apply -f mysql-deployment.yaml ``` 3. 如果需要持久化存储,则需额外准备 PersistentVolume 和 PersistentVolumeClaim(PVC)。可以通过以下命令验证 PVC 绑定情况: ```bash kubectl get pvc -l app=mysql ``` 4. 访问 MySQL 数据库实例: 进入对应的 Pod 并连接至数据库服务器: ```bash kubectl exec -it $(kubectl get pod -l app=mysql -o jsonpath="{.items[0].metadata.name}") -- bash mysql -u root -p ``` #### 备份与恢复策略 为了保障数据安全,在生产环境中建议定期备份 MySQL 数据。一种简单的方式是利用 CronJob 自动执行备份脚本并将结果保存到远程存储位置[^1]。 --- ### 总结 无论是采用 Helm 工具还是手动生成资源配置文件的方法都可以有效地在 Kubernetes 环境下搭建起功能完备的 MySQL 数据库服务[^5]。每种方案各有优劣,请依据实际需求选择适合自己的路径实施部署工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值