kubernetes集群部署mysql 8.0


 

參考:https://blog.csdn.net/sealir/article/details/81177747?utm_source=blogxgwz1

 

集群內安裝mysql並添加相應存儲(PVC)

 

 新建mysql-pvc.yaml、mysql-deploy.yaml和mysql-svc.yaml,分別如下:

 

 先找出當前k8s集群下的storageClass的name,用來創建PVC!!

     kubectl get storageclasses --all-namespaces

 

    mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: kube-system
  labels:
    app: mysql-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  storageClassName: default
storageClassName: default 中的default即為查找出來的storageClass

    mysql-deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploy
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      name: mysql-pod
  template:
    metadata:
      labels: 
        name: mysql-pod
    spec:
      containers:
        - name: mysql
          image: mysql:8.0.12
          imagePullPolicy: IfNotPresent
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: noc-mysql
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: "/var/lib/mysql"
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-pvc

 

    mysql-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  namespace: kube-system
  labels: 
    name: mysql-svc
spec:
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
    nodePort: 32306
  selector:
    name: mysql-pod

 

在mysql-deploy.yaml中,image參數可以指定mysql的版本,如8.0.11、5.7.22等。若省略了,表示用latest。另外,可以指定鏡像庫,這里使用阿里雲鏡像庫,在安裝docker時進行了配置。env參數指定了mysql的root密碼。

在mysql-svc.yaml中,targetPort表示mysql pod中mysql窗口的目標端口,默認為3306,type類型為NodePort,表示將映射到本地端口,本地端口為nodePort: 32306。

接下來啟動PVC、Deployment和Service,執行以下命令:

     kubectl create -f mysql-pvc.yaml
     kubectl create -f mysql-deploy.yaml
     kubectl create -f mysql-svc.yaml

啟動后可以查看mysql部署在了哪個node上,執行以下命令可以查看:

     kubectl get pod -o wide

輸出如下,可以看到部署在了192.168.56.28 node中,這里在部署kubernetes時用ip表示node的名稱。

遠程連接mysql8.0時可能會報一些錯誤,如navicat連接。

注:出現這個原因是mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之后,加密規則是caching_sha2_password, 解決問題方法有兩種,一種是升級navicat驅動,一種是把mysql用戶登錄密碼加密規則還原成mysql_native_password】

這里對mysql8.0作一些設置。

    (1)、登錄到192.168.56.28node中。 

    (2)、執行docker ps查看mysql容器。如下所示:

   (3)、進入mysql容器,執行以下命令進入容器,這里container_id為458bb493e233

  docker exec -it container_id /bin/bash

   (4)、在容器內登錄mysql。執行以下命令,-h為ip,容器內ip為127.0.0.1,-u為用戶名,-p為密碼,在mysql-rc中設置的密碼。

       mysql -h 127.0.0.1 -uroot -pmysql

   (5)、對mysql進行如下設置。

      alter user 'root'@'%' identified with mysql_native_password by'root';
      alter  user 'root'@'%' identified by 'mysql';

   (6)、退出mysql和容器,執行quit退出mysql,按ctrl+p后,再按ctrl+q從容器中返回node主機。

    設置好mysql后,可以遠程連接node中的mysql,node的ip為192.168.56.28,映射的端口為32306,可以用navicat工具連接到這個myql。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM