自学内容网 自学内容网

Kubernetes(k8s)1.30.7简单快速部署对外部开放的有状态服务MYSQL8(快速有效)

如何在Kubernetes集群中快速创建部署一个单节点的有状态(即将数据文件挂载到宿主机,防止重新部署mysql服务,数据文件丢失)的对外开放的MYSQL服务。

通过创建一个 Kubernetes Deployment 并使用 PersistentVolumeClaim 将其连接到已有的 PersistentVolume 来运行一个有状态的应用。

资源名称介绍:

  • Deployment主要用于无状态应用,但也可以通过与 PersistentVolumeClaim 配合支持有状态应用。

  • PersistentVolume 是集群管理员提供的存储资源,表示底层的实际存储(如 NFS、云盘、主机磁盘等),为应用提供持久化存储,可以手动创建或者动态配置。

  • PersistentVolumeClaim 是用户请求存储的方式,通过 PVC 可以声明需要的存储容量和访问模式,集群自动绑定到合适的 PV。

1.在所有可能运行mysql的node节点上创建/mnt/data文件夹

mkdir -p /mnt/data

2.运行 mysql-pv.yaml ,创建PV和PVC资源。

kubectl apply -f mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"  // 需要挂载到的宿主机上存储路径(运行时删除这些注释)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

3.运行 mysql-deployment.yaml ,创建资源。

kubectl apply -f mysql-deployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 30006
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.4.3  //换成自己需要的版本
        name: mysql
        env:
          # 在实际中使用 secret
        - name: MYSQL_ROOT_PASSWORD
          value: 123456
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage 
          mountPath: /var/lib/mysql  // 在容器内部数据存储的路径,将它挂载到mysql-persistent-storage卷对应的实际宿主机物理存储位置上,即上面的/mnt/data
      volumes:     //指定了需要使用的持久卷
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

4.查看部署效果

4.1 查看pod资源

 kubectl get pods -A -o wide

4.2 状态正常

 查看service资源

4.3 测试查看外部宿主机是否挂载数据

在node2上/mnt/data找到挂载的数据

4.4 可以使用navicate远程连接mysql数据库,创建数据库,测试是否成功。

本处使用nodePort形式,将pod的3306端口映射到宿主机的30006端口,所以可以直接连接 集群任意节点IP:30006 形式访问mysql。

 4.5 其他命令

# 查看所有pod k8s资源的查看范式,查看pv,pvc等,将pods替换为相应的名称即可
kubectl get pods -A -o wide
# 查看所有service
kubectl get svc -A -o wide

# 删除相应资源
kubectl delete -f mysql-deployment.yaml
kubectl delete -f mysql-pv.yaml
# 查看具体某一pod的信息 pod后接具体pod的name -n 接命名空间 部署时没设置默认为default
 kubectl describe pod mysql-5f8999867-vpht9 -n default
# 查看pod的日志信息 logs后接具体pod的name 在默认命名空间的pod无需使用-n 否则需要使用
 kubectl logs mysql-5f8999867-vpht9

5.参考文献

1.运行一个单实例有状态应用 | Kubernetes


原文地址:https://blog.csdn.net/qq_46274911/article/details/144113831

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!