yaml 部署 mysql

本文介绍了如何使用KubernetesYAML配置非持久化和持久化部署MySQL,包括下载镜像、创建Deployment、Service以及设置持久卷(PVC)和PV。还涵盖了MySQL8.0的用户管理和权限设置。
摘要由CSDN通过智能技术生成

yaml 部署 mysql

非持久化部署

下载 mysql 镜像
从 docker 镜像仓库下载 https://hub.docker.com/ 选择 tags 找到要下载的镜像版本,下载到本地(离线部署时这么操作)。
在这里插入图片描述
创建 yaml 文件 ,如: mysql.yaml

apiVersion: apps/v1                 #版本
kind: Deployment                    #创建资源的类型
metadata:                           #资源的元数据
  name: mysql-dep                   #资源的名称,是元数据必填项
spec:                               #期望状态
  replicas: 1                       #创建的副本数量(pod数量),不填默认为1
  selector:                         #
    matchLabels:
      app: mysql-pod
  template:                         #定义pod的模板
    metadata:                       #pod的元数据
      labels:                       #labels标签,必填一个
        app: mysql-pod
    spec:                           #pod的期望状态
      containers:                   #容器
      - name: mysql                 #容器名称
        image: mysql:8.0.36            #镜像
        imagePullPolicy: IfNotPresent
        ports:                      #容器的端口
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"           #设置 root 密码

---
apiVersion: v1                      #版本
kind: Service                       #创建资源的类型
metadata:                           #资源的元数据
  name: mysql-svc                   #资源的名称,是元数据必填项
  labels:                           #labels标签
    app: mysql-svc
spec:                               #期望状态
  type: NodePort                    #服务类型
  ports:                            #端口
    - port: 3306
      targetPort: 3306              #与containerPort一样
      protocol: TCP
      nodePort: 30480
  selector:
    app: mysql-pod

然后执行 kubectl apply -f mysql.yaml 部署mysql

kubectl apply -f mysql.yaml 

查看 pod 运行状态

kubectl get pod -A |grep mysql

在这里插入图片描述
查看 svc

kubectl get svc -A |grep mysql

在这里插入图片描述
可以外界访问了,使用映射的 30480 端口号
如果出现访问不通,查看下 endpoints 是否关联上的 IP 和端口

kubectl get endpoints

在这里插入图片描述
上面操作是没有持久化的,如果 mysql 的 pod 被删除了,调度到另外一个节点后数据会丢失。

持久化操作

需要先 创建 nfs
创建 mysql.yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-dep      # deployment控制器名称
spec:
  replicas: 1
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: mysql-pod     #选择器 service 的要与其一致
  template:
    metadata:
      labels:
        app: mysql-pod
    spec:
      volumes:
        - name: mysql-pod
          persistentVolumeClaim:
            claimName: mysql-pvc      #关联的pvc
      containers:
        - name: mysql
          image: mysql:8.0.36
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"      # 设置MySQL数据库登录密码
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-pod
              mountPath: /var/lib/mysql    #容器内部挂载路径
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc      # 数据库服务的名称
spec:
  ports:
    - port: 3306
      protocol: TCP
      targetPort: 3306
      nodePort: 30480      # 对外访问的端口
  selector:
    app: mysql-pod
  type: NodePort
  sessionAffinity: ClientIP

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  storageClassName: nfs      #配置为nfs 需要与 pv 的一致
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi      #配置容量大小 需要与 pv 的一致

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 5Gi    #配置容量大小
  accessModes:
    - ReadWriteOnce     #配置访问策略为只允许一个节点读写
  persistentVolumeReclaimPolicy: Retain  #配置回收策略,Retain为手动回收
  storageClassName: nfs       #配置为nfs
  nfs:
    path: /usr/local/k8s/data/mysql   #配置nfs服务端的共享路径
    server: 10.137.200.151    #配置nfs服务器地址

执行 部署命令,部署完成后 外部访问 mysql 连接成功。

kubectl apply -f mysql.yaml

查看 pv

kubectl get pv 

在这里插入图片描述

查看 pvc

kubectl get pvc

在这里插入图片描述

查看 mysql pod

kubectl get pod -A |grep mysql

在这里插入图片描述

查看 service

kubectl get svc -A |grep mysql

在这里插入图片描述

mysql 8.0 添加用户及授权

添加用户

登录mysql 服务器

mysql -u root -p 

创建新用户

# new_user是新用户的名称
# localhost是该用户的登录主机,“localhost"只允许本地连接,而”%"允许所有IP地址都可以连接到服务器
# user_password是该用户的密码
CREATE USER 'new_user'@'localhost' IDENTIFIED BY  'user_password';

mysql 8.0版本给用户授全部数据库权限

# 将username、hostname和password替换为实际的用户名、主机名和密码。
# GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname'这行命令授予username用户在所有数据库(*.*)上的所有权限。
# WITH GRANT OPTION是可选的,它允许该用户将这些权限授予其他用户。
#FLUSH PRIVILEGES;用于确保权限更改立即生效。

ALTER USER 'username'@'hostname' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname' WITH GRANT OPTION;
FLUSH PRIVILEGES;

查看mysql所有用户以及权限

SELECT user, host, authentication_string FROM mysql.user;

删除用户

drop user 'new_user'@'localhost';
FLUSH PRIVILEGES;

修改密码

# 修改用户密码
ALTER USER 'your_user'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值