Kubernetes使用helm部署單機版mysql(使用hostPath數據卷)


一. 安裝helm

官網:https://helm.sh/zh/docs/intro/install/
https://helm.sh/zh/docs/intro/quickstart/#初始化
通過GitHub下載安裝包

解壓
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
在解壓目中找到helm程序,移動到需要的目錄中
mv linux-amd64/helm /usr/local/bin/helm
添加阿里雲存儲庫
helm repo add brigade http://mirror.azure.cn/kubernetes/charts

二. 配置本機數據卷hostPath

在節點k8s-node01上創建mysql數據存儲目錄
# mkdir -p /data/k8s-mysql-data && chmod -R 777 /data/k8s-mysql-data

三. 自定義配置helm chart

搜索mysql的charts
# helm search repo mysql

下載對應的mysql chart
# helm fetch stable/mysql

# tar zxvf mysql-1.6.9.tgz
# cd mysql


查看mysql的docker image版本
grep image values.yaml

修改mysql的docker image版本為5.7版最新5.7.37
# sed -i 's/5.7.30/5.7.37/g' values.yaml

修改busybox的docker image版本為latest
# sed -i ‘s/1.32/latest/g‘ values.yaml

在節點k8s-node01上下載mysql和busybox的docker鏡像
# docker pull mysql:5.7.37 
# docker pull busybox:latest

配置節點親和性(nodeAffinity)
vi values.yaml
......
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-node01
.....

配置持久化存儲
vi values.yaml
……
persistence:
  enabled: true
  # storageClass: "-"
  accessMode: ReadWriteOnce
  size: 8Gi
  annotations: {}
......

配置資源使用
vi values.yaml
……
resources:
  requests:
    memory: 1024Mi
    cpu: 1000m
......

配置mysql的配置文件
添加字符編碼配置和其它配置
vi values.yaml
……
configurationFiles:
  mysql.cnf: |-
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    #log-error      = /var/log/mysql/error.log
    # By default we only accept connections from localhost
    #bind-address   = 127.0.0.1
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    #如果你的sql語句里有group,添加這句可以防止報錯 
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    #避免表名大小寫問題 
lower_case_table_names=1
......

配置mysql服務的訪問方式
vi values.yaml
……
  #service-types
  #type: ClusterIP
  type: NodePort
  port: 3306
  nodePort: 32000
  # loadBalancerIP:
......
配置pod的時區
vi values.yaml
……
timezone: 'Asia/Shanghai'
......

配置掛載卷
vi templates/deployment.yaml
文件末尾處
      volumes:
      ......
      - name: data
      {{- if .Values.persistence.enabled }}
        persistentVolumeClaim:
          claimName: {{ .Values.persistence.existingClaim | default (include "mysql.fullname" .) }}
      {{- else }}
        emptyDir: {}
      {{- end -}}
      ……
修改為
......
      volumes:
      ......
      - name: data
        hostPath:
          path: /data/k8s-mysql-data
          type: Directory
      ……
......

手動創建pv
vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-mysql
spec:
  capacity:
    storage: 8Gi
  accessModes:
   - ReadWriteOnce
  hostPath:
    path: /data/k8s-mysql-data
type: Directory
# kubectl create -f pv.yaml
# kubectl get pv

四. 通過helm安裝mysql

# kubectl create ns mysql

# helm install -n mysql mysql -f values.yaml  .
如果出現報錯,請檢查配置文件的語法格式!

# kubectl get pod -n mysql -o wide


# kubectl -n mysql get svc

# kubectl -n mysql get pvc

保存本地的chart
# helm package mysql

五. 驗證

獲取mysql root密碼
# MYSQL_ROOT_PASSWORD=$(kubectl get secret -n mysql mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)
# echo $MYSQL_ROOT_PASSWORD


連接數據庫mysql
# mysql -h 節點IP -P 32000 -uroot -p



查看主機上mysql掛載的目錄
在節點k8s-node01上

# cd /data/k8s-mysql-data/
# ls -l



多次刪除mysql pod, 發現mysql pod 始終被調度到節點k8s-node01上. 證明我們配置的節點親和性(nodeAffinity)生效。


免責聲明!

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



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