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 数据库集群技术

相关推荐
NoSi EFUL37 分钟前
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
android·数据库·mysql
柴米油盐那点事儿1 小时前
python+mysql+bootstrap条件搜索分页
python·mysql·flask·bootstrap
Elastic 中国社区官方博客1 小时前
为 Elastic Cloud Serverless 和 Elasticsearch 引入统一的 API 密钥
大数据·运维·elasticsearch·搜索引擎·云原生·serverless
空中海1 小时前
Kubernetes 生产实践、可观测性与扩展入门
java·贪心算法·kubernetes
AC赳赳老秦2 小时前
OpenClaw二次开发实战:编写专属办公自动化技能,适配个性化需求
linux·javascript·人工智能·python·django·测试用例·openclaw
Devin~Y2 小时前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
深色風信子2 小时前
Docker newapi
运维·docker·容器·newapi
mounter6252 小时前
【内核新动向】告别物理槽位束缚:深度解析 Linux Virtual Swap Space 机制
linux·内存管理·kernel·swap·virtual swap
handler012 小时前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
旷世奇才李先生3 小时前
Spring Cloud Alibaba 2026实战:微服务治理全解析
微服务·云原生·架构