当前位置: 首页 > news >正文

k8s-statefulset部署myql-Nodeport方式

目录

1、部署openebs(Elastic Block Store)

1.下载镜像(针对k8s1.19)

2.加载镜像(所有节点包括master)

3.下载yaml文件并部署

 4.设置默认storageclass

2、编写相关yaml文件

1.编写secret

2.编写statefulset文件

3.编写service文件

 3、修改数据库配置

1.远程连接问题

2.测试连接

3.问题


1、部署openebs(Elastic Block Store)

1.下载镜像(针对k8s1.19)

链接:https://pan.baidu.com/s/1bKtBKwDkULWfxw_ulKqR3A?pwd=8888 
提取码:8888 

2.加载镜像(所有节点包括master)

[root@k8s01 ~]#  for i in 192.168.248.{20..22}; do ssh root@${i} "docker load -i openebs.tar"; done

3.下载yaml文件并部署

链接:https://pan.baidu.com/s/11P2a4890xTWqbe3nFPGyKA?pwd=8888 
提取码:8888 

[root@k8s01 ~]# k apply -f openebs-operator.yaml
[root@k8s01 ~]# k get pods -A | grep openebs
openebs         openebs-localpv-provisioner-6994cf5dd9-d57xg    1/1     Running     1          2d13h
openebs         openebs-ndm-2b2tl                               1/1     Running     0          2d13h
openebs         openebs-ndm-bxlw8                               1/1     Running     0          2d13h
openebs         openebs-ndm-cluster-exporter-84bb5fc764-dzpdz   1/1     Running     0          2d13h
openebs         openebs-ndm-node-exporter-2f8dg                 1/1     Running     0          2d13h
openebs         openebs-ndm-node-exporter-wpzt2                 1/1     Running     0          2d13h
openebs         openebs-ndm-operator-5f8578c994-pt4pq           1/1     Running     0          2d13h

 4.设置默认storageclass

kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
#此格式只能用json

2、编写相关yaml文件

1.编写secret

[root@k8s01 ~]# echo -n "huafeirenmo" | base64
aHVhZmVpcmVubW8=[root@k8s01 ~]# vim secret_mysql.yaml
apiVersion: v1
kind: Secret
metadata:name: mysql-passwordnamespace: default
data:password: "aHVhZmVpcmVubW8="
[root@k8s01 ~]# k apply -f secret_mysql.yaml

2.编写statefulset文件

[root@k8s01 ~]# vim statefulset_mysql_opaque_passwd.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: mysqlname: mysql
spec:replicas: 3selector:matchLabels:app: mysqlserviceName: mysqltemplate:metadata:labels:app: mysqlspec:containers:- image: mysql:latestname: mysqlports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:    #使用secret方式name: mysql-passwordkey: passwordvolumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName:  openebs-hostpathresources:requests:storage: 1Gi
[root@k8s01 ~]# k apply -f statefulset_mysql_opaque_passwd.yaml

3.编写service文件

[root@k8s01 ~]# vim service_mysql.yaml
apiVersion: v1
kind: Service
metadata:name: mysql-service
spec:selector:app: mysqlports:- protocol: TCPport: 3306targetPort: 3306nodePort: 30007type: NodePort
[root@k8s01 ~]# k apply -f service_mysql.yaml

 3、修改数据库配置

1.远程连接问题

        MySQL 8.0 引入了一些更加严格的安全策略,其中包括不允许创建一个新的 'root'@'%' 用户。这是出于安全考虑的限制,因为允许从任何 IP 地址使用 'root' 用户连接到数据库是不安全的。

        在 MySQL 8.0 中创建一个具有管理权限的用户,可以创建一个具有 GRANT OPTION 权限的普通用户,然后使用该用户进行授权操作。以下是示例步骤:

[root@k8s01 ~]# k get pods    #获取pod名称
NAME                                READY   STATUS    RESTARTS   AGE
mysql-0                             1/1     Running   0          5h4m
mysql-1                             1/1     Running   0          5h3m
mysql-2                             1/1     Running   0          5h3m
[root@k8s01 ~]# k exec -it mysql-0 -- /bin/bash #登录进pod
root@mysql-0:/# mysql -uroot -phuafeirenmo
  1. 以 root 用户登录到 MySQL

    使用 root 用户(或具有管理员权限的用户)登录到 MySQL 服务器:

    mysql -u root -p

  2. 创建新的普通用户

    创建一个新的普通用户,例如 myadmin,并设置密码。替换 <password> 为您想要设置的密码:

    CREATE USER 'myadmin'@'%' IDENTIFIED BY '<password>';
  3. 授予用户权限

    授予 myadmin 用户所需的权限,包括 GRANT OPTION,以便该用户能够授权其他用户。例如:

    GRANT ALL PRIVILEGES ON *.* TO 'myadmin'@'%' WITH GRANT OPTION;

    上述语句将授予 myadmin 用户对所有数据库的所有权限,并允许他授权其他用户。

  4. 刷新权限

    刷新 MySQL 的权限以使更改生效:

    FLUSH PRIVILEGES;

2.测试连接

[root@k8s01 ~]# mysql -h 192.168.248.20 -P 30007 -umyadmin -phuafeiremmo

3.问题

        在部署一个具有多个 MySQL StatefulSet 副本的情况下,每个副本将拥有自己独立的数据卷(Persistent Volume),这些数据卷通常由独立的 Persistent Volume Claim (PVC) 绑定。

        每个 StatefulSet 副本都会启动一个独立的 MySQL 实例,这些实例的数据在各自的数据卷上进行存储,因此默认情况下,它们的数据是相互隔离的,不会共享数据。

        如果想要在这些 MySQL 实例之间共享数据,您需要使用 MySQL 数据库复制或者 MySQL 数据库集群技术

http://www.lryc.cn/news/137773.html

相关文章:

  • MySQL双主架构、主从架构
  • 基于微信小程序的物流管理系统3txar
  • Maven 一键部署到 SSH 服务器
  • docker搭建owncloud,Harbor,构建镜像
  • RISC-V(1)——RISC-V是什么,有什么用
  • 基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码
  • Python标准库概览
  • 两个列表的最小索引总和
  • Go语言基础之切片
  • 关于java三元组的问题
  • 如何正确地设置Outlook SMTP发送电子邮件(wordpress配置)
  • 机器学习编译系列---张量程序抽象
  • python使用matplotlib实现折线图的绘制
  • 网络协议的定义、组成和重要性?
  • vue 使用print.js打印小票
  • 算法通关村第6关【白银】| 树的层次遍历问题
  • Qt与电脑管家3
  • Jmeter 快速生成测试报告
  • 消息队列——RabbitMQ(一)
  • 人工智能在机器学习中的八大应用领域
  • vue3+ts使用vue-i18n
  • 在Ubuntu上安装和设置RabbitMQ服务器,轻松实现外部远程访问
  • Redis多机实现
  • ClickHouse安装及部署
  • [HarekazeCTF2019]Easy Notes-代码审计
  • nginx-location正则
  • 微信小程序胶囊位置计算,避开胶囊位置
  • 快速指南:使用Termux SFTP通过远程进行文件传输——”cpolar内网穿透“
  • 记录一个用C#实现的windows计时执行任务的服务
  • “深入剖析JVM内部机制:了解Java虚拟机的工作原理“