k8s集群部署mysql完整過程記錄


掛載MySQL數據卷

在k8s集群中掛載MySQL數據卷 需要安裝一個NFS。
在主節點安裝NFS
  yum install -y nfs-utils rpcbind
在主節點創建目錄
  mkdir -p /nfs
  chmod 777 /nfs
更改歸屬組與用戶
  chown -R nfsnobody:nfsnobody /nfs
配置共享目錄
  echo "/nfs *(insecure,rw,sync,no_root_squash)" > /etc/exports
創建mysql共享目錄
  mkdir -p /nfs/mysql
啟動服務
  systemctl start rpcbind
  systemctl start nfs
設置開啟啟動
  systemctl enable rpcbind
  systemctl enable nfs
0
檢查配置是否生效
  exportfs
  showmount -e 192.168.91.129
0

創建MySQL Deployment

編寫一個 mysql.yaml 配置文件:
apiVersion: apps/v1                             # apiserver的版本
kind: Deployment                                # 副本控制器deployment,管理pod和RS
metadata:
  name: mysql                                   # deployment的名稱,全局唯一
  namespace: default                            # deployment所在的命名空間
  labels:
    app: mysql
spec:
  replicas: 1                                   # Pod副本期待數量
  selector:
    matchLabels:                                # 定義RS的標簽
      app: mysql                                # 符合目標的Pod擁有此標簽
  strategy:                                     # 定義升級的策略
    type: RollingUpdate                         # 滾動升級,逐步替換的策略
  template:                                     # 根據此模板創建Pod的副本(實例)
    metadata:
      labels:
        app: mysql                              # Pod副本的標簽,對應RS的Selector
    spec:
      nodeName: k8s-worker01                    # 指定pod運行在的node
      containers:                               # Pod里容器的定義部分
        - name: mysql                           # 容器的名稱
          image: mysql:5.7                      # 容器對應的docker鏡像
          volumeMounts:                         # 容器內掛載點的定義部分
            - name: time-zone                   # 容器內掛載點名稱
              mountPath: /etc/localtime         # 容器內掛載點路徑,可以是文件或目錄
            - name: mysql-data
              mountPath: /var/lib/mysql         # 容器內mysql的數據目錄
            - name: mysql-logs
              mountPath: /var/log/mysql         # 容器內mysql的日志目錄
          ports:
            - containerPort: 3306               # 容器暴露的端口號
          env:                                  # 寫入到容器內的環境容量
            - name: MYSQL_ROOT_PASSWORD         # 定義了一個mysql的root密碼的變量
              value: "root"
      volumes:                                  # 本地需要掛載到容器里的數據卷定義部分
        - name: time-zone                       # 數據卷名稱,需要與容器內掛載點名稱一致
          hostPath:
            path: /etc/localtime                # 掛載到容器里的路徑,將localtime文件掛載到容器里,可讓容器使用本地的時區
        - name: mysql-data
          hostPath:
            path: /data/mysql/data              # 本地存放mysql數據的目錄
        - name: mysql-logs
          hostPath:
            path: /data/mysql/logs              # 本地存入mysql日志的目錄
將 mysql.yaml 配置文件上傳至虛擬機的 /root 目錄下,在 /root 目錄下執行命令:
  kubectl create -f mysql.yaml
0
執行添加服務的命令(這行不執行應該也不影響結果):
  kubectl apply -f mysql.yaml
0
編寫一個提供對外訪問的service mysql-svc.yaml:
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 30001
  selector:
    app: mysql
將 mysql-svc.yaml 配置文件上傳至虛擬機的 /root 目錄下,在 /root 目錄下執行命令:
  kubectl create -f mysql-svc.yaml
0
訪問數據庫並驗證其運行正常
  kubectl get pod
0
kubectl exec -it mysql-999dcb98f-srxff -- mysql -u root -p
(密碼也是root)
0

mysql開放遠程連接:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;        #刷新權限表,使配置生效

開啟防火牆端口

systemctl start firewalld.service
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=30001/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
systemctl stop firewalld.service
systemctl disable firewalld.service
要開放6443端口(k8s集群連接地址)和30001端口(k8s集群mysql端口)

查看已安裝的mysql

kubectl get pod
0
 
kubectl get svc
0
 
mysql服務安裝在default命名空間中,查看其所在節點:
kubectl get pod -n default -o wide
0
此次部署的mysql服務被我們指定運行在了 k8s-worker01 節點上。
 
在本地用SQLyog連接到k8s集群的mysql:
0
0
創建一個名為 test 的數據庫:
0
將本地數據導入搭建好的mysql服務器-test數據庫:
0
0
可以看到,數據已成功導入。
 
在k8s集群中查看mysql數據庫:
0
可看到中文數據出現亂碼問題。
 
查看數據庫的字符編碼類型:
show variables like '%char%';
0
將查詢結果集設置為utf8后再查看數據:
set character_set_results=utf8;
0
已經可以正常顯示中文了。

總結

到這里,我們就成功地在k8s集群上部署了一個mysql、公布該mysql使其可以在外部進行訪問、向mysql數據庫中導入數據並設置其查詢結果集支持中文顯示,整個搭建過程還是有點繁瑣的,如果不熟悉k8s集群一些概念,可能會遇到挺多小問題。

這里分享我自己的搭建過程,希望其他人在學習過程中能從我的筆記中得到一些幫助!


免責聲明!

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



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