k8s-statefulset部署myql-Nodeport方式

目录

[1、部署openebs(Elastic Block Store)](#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)

bash 复制代码
[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

bash 复制代码
[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

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

2、编写相关yaml文件

1.编写secret

bash 复制代码
[root@k8s01 ~]# echo -n "huafeirenmo" | base64
aHVhZmVpcmVubW8=

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

2.编写statefulset文件

bash 复制代码
[root@k8s01 ~]# vim statefulset_mysql_opaque_passwd.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:latest
        name: mysql
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:    #使用secret方式
              name: mysql-password
              key: password
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName:  openebs-hostpath
      resources:
        requests:
          storage: 1Gi
[root@k8s01 ~]# k apply -f statefulset_mysql_opaque_passwd.yaml

3.编写service文件

bash 复制代码
[root@k8s01 ~]# vim service_mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 30007
  type: NodePort
[root@k8s01 ~]# k apply -f service_mysql.yaml

3、修改数据库配置

1.远程连接问题

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

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

bash 复制代码
[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> 为您想要设置的密码:

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

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

    sql 复制代码
    GRANT ALL PRIVILEGES ON *.* TO 'myadmin'@'%' WITH GRANT OPTION;

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

  4. 刷新权限

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

    sql 复制代码
    FLUSH PRIVILEGES;

2.测试连接

bash 复制代码
[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 数据库集群技术

相关推荐
SelectDB9 小时前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
AlfredZhao9 小时前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
Jim60011 小时前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL17 小时前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
秋播3 天前
国内本地WSL2编译rancher源码
云原生
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
云技纵横4 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql