指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

mysql基于k8s的多个实例配置:

#mysql-cluster.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-cluster
  namespace: default
spec:
  serviceName: "mysql-cluster"
  replicas: 3
  selector:
    matchLabels:
      app: mysql-cluster
  template:
    metadata:
      labels:
        app: mysql-cluster
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "rootpassword"
        - name: MYSQL_DATABASE
          value: "testdb"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-cluster
  namespace: default
spec:
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 30036
  selector:
    app: mysql-cluster
  type: NodePort

这个只是一个具有多实例的mysql集群,通过nodePort访问数据库

$ kubectl apply -f mysql-cluster.yaml
statefulset.apps/mysql-cluster created
service/mysql-cluster created
  
$ kubectl get pods
NAME              READY   STATUS    RESTARTS   AGE
mysql-cluster-0   1/1     Running   0          18s
mysql-cluster-1   1/1     Running   0          14s
mysql-cluster-2   1/1     Running   0          7s
  
$ kubectl get svc mysql-cluster
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
mysql-cluster   NodePort   10.101.179.247   <none>        3306:30036/TCP   11m

可以从宿主机使用以下命令连接到集群节点:

mysql -h <minikube-ip> -P 30036 -u root -p
其中 <minikube-ip> 可以通过以下命令获取:
$ minikube ip
192.168.49.2
  
使用: $ mysql -h 192.168.49.2 -P 30036 -u root -p

上面配置service端口解析:

ports:
  - port: 3306         # Kubernetes 服务的逻辑端口
    targetPort: 3306   # Pod 内容器的端口
    nodePort: 30036    # 暴露到宿主机的高位端口
  
port: 3306
表示服务的逻辑端口,客户端通过此端口访问服务。
当客户端发送请求到服务时,它会通过这个端口进行访问。
在 Kubernetes 集群内,其他 Pod 可以通过 mysql-cluster:3306 访问该服务。
  
targetPort: 3306
表示后端容器的端口,即运行在 Pod 内部容器的实际端口。
服务会将从 port 接收的请求转发到 Pod 中监听 targetPort 的容器。
  
nodePort: 30036
表示服务暴露在 Kubernetes 节点上的固定端口。
通过 NodePort 类型的服务,外部客户端可以通过 NodeIP:nodePort 访问该服务。
例如,如果 minikube ip 的值是 192.168.49.2,则可以通过 192.168.49.2:30036 从外部访问 MySQL。