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

相关推荐
陌路201 天前
Linux 34TCP服务器多进程并发
linux·服务器·网络
玉树临风江流儿1 天前
Linux驱动开发实战指南-中
linux·驱动开发
hakukun1 天前
docker避免每次sudo方法
运维·docker·容器
杨凯凡1 天前
Docker Compose:多容器应用编排入门与实战
运维·docker·容器
C2H5OH6661 天前
Podman和Docker
docker·容器·podman
李慕婉学姐1 天前
【开题答辩过程】以《Javaweb的火花流浪动物救助系统设计与实现》为例,不会开题答辩的可以进来看看
vue.js·spring boot·mysql
AAA小肥杨1 天前
探索K8s与AI的结合:PyTorch训练任务在k8s上调度实践
人工智能·pytorch·docker·ai·云原生·kubernetes
百***62851 天前
MySQL 常用 SQL 语句大全
数据库·sql·mysql
百***6971 天前
MySQL数据库(SQL分类)
数据库·sql·mysql
m0_527653901 天前
NVIDIA Orin NX使用Jetpack安装CUDA、cuDNN、TensorRT、VPI时的error及解决方法
linux·人工智能·jetpack·nvidia orin nx