系統環境:
-
Mysql 版本:8.0.19
-
Kubernetes 版本:1.17.4
-
作業系統版本:CentOS 7.8
一、簡介
Mysql 是我們常用的關系型資料庫,在專案開發、測驗、部署到生成環境時,經常需要部署一套 Mysql 進行資料存盤,這里介紹下如何在 Kubernetes 環境中部署用于開發、測驗的環境的 Mysql 資料庫,當然,部署的是單節點模式,并非用于生產環境的主從或集群模式,整理了一份328頁MySQ學習筆記
單節點的 Mysql 部署簡單,且配置存活探針,能保證快速檢測 Mysql 是否可用,當不可用時快速進行重啟,
二、Mysql 引數配置
在使用 Kubernetes 部署應用后,一般會習慣與將應用的組態檔外置,用 ConfigMap 存盤,然后掛載進入鏡像內部,這樣,只要修改 ConfigMap 里面的配置,再重啟應用就能很方便就能夠使應用重新加載新的配置,很方便,
創建 ConfigMap 存盤 Mysql 組態檔
創建 Kubernetes 的 ConfigMap 資源,用于存盤 Mysql 的組態檔 my.cnf 內容:
mysql-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
labels:
app: mysql
data:
my.cnf: |-
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
max_connections = 2000
secure_file_priv=/var/lib/mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
通過 Kubectl 工具部署 ConfigMap
通過 kubectl 工具部署 Kubernetes ConfigMap 資源,命令如下:
-
-n:指定部署應用的 Namespace 命名空間,
$ kubectl create -f mysql-config.yaml -n mydlqcloud
三、Mysql 資料存盤
Kubernetes 部署的應用一般都是無狀態應用,部署后下次重啟很可能會漂移到不同節點上,所以不能使用節點上的本地存盤,而是徐亞網路存盤對應用資料持久化,PV 和 PVC 是 Kubernetes 用于與儲空關聯的資源,可與不同的存盤驅動建立連接,存盤應用資料,所以接下來我們要創建 Kubernetes PV、PVC 資源,
創建 PV、PVC 系結 Mysql 存盤空間
PV 支持多種存盤驅動,不同存盤驅動的 PV 配置方式是不同的,需要根據你的存盤系統來配置 PV 引數,這里用的是 NFS 存盤(共享網路檔案存盤系統),可以按照以下方式進行配置:
mysql-storage.yaml
## PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql
labels:
app: mysql #設定 pv 的 label 標簽
spec:
capacity:
storage: 50Gi #設定 pv 存盤資源大小
accessModes:
- ReadWriteOnce
mountOptions:
- hard
- nfsvers=4.1
nfs: #指定使用 NFS 存盤驅動
server: 192.168.2.11 #指定 NFS 服務器 IP 地址
path: /nfs/mysql #指定 NFS 共享目錄的位置,且需提前在該目錄中創建 mysql 目錄
persistentVolumeReclaimPolicy: Retain
---
## PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql
spec:
resources:
requests:
storage: 50Gi #設定 pvc 存盤資源大小
accessModes:
- ReadWriteOnce
selector:
matchLabels:
app: mysql #根據 Label 選擇對應 PV
通過 Kubectl 工具部署 PV、PVC
通過 kubectl 工具部署 Kubernetes PV、PVC 資源,命令如下:
-
-n:指定部署應用的 Namespace 命名空間,
$ kubectl create -f mysql-storage.yaml -n mydlqcloud
四、Kubernetes 部署 Mysql
創建 Deployment 部署 Mysql
創建用于 Kubernetes Deployment 來配置部署 Mysql 的引數,需要配置 Mysql 的鏡像地址、名稱、版本號,還要配置其 CPU 與 Memory 資源的占用,通過環境變數配置 Mysql 的 root 用戶默認密碼,配置探針監測應用可用性,配置 Volume 掛載之前創建的 PV、PVC、ConfigMap 資源等等,內容如下:
mysql-deploy.yaml
## Service
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
type: NodePort
ports:
- name: mysql
port: 3306
targetPort: 3306
nodePort: 30336
selector:
app: mysql
---
## Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0.19
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD ## 配置Root用戶默認密碼
value: "123456"
resources:
limits:
cpu: 2000m
memory: 512Mi
requests:
cpu: 2000m
memory: 512Mi
livenessProbe:
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
exec:
command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
readinessProbe:
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
exec:
command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: config
mountPath: /etc/mysql/conf.d/my.cnf
subPath: my.cnf
- name: localtime
readOnly: true
mountPath: /etc/localtime
volumes:
- name: data
persistentVolumeClaim:
claimName: mysql
- name: config
configMap:
name: mysql-config
- name: localtime
hostPath:
type: File
path: /etc/localtime
引數簡介:
-
ports: 配置鏡像映射埠,
-
env: 鏡像環境變數配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 鏡像用于配置 root 用戶默認密碼變數,
-
resources: 配置 CPU、Memory 資源限制,可以通過配置該值來配置 Pod 的 QoS 級別,
-
livenessProbe: 配置存活探針,定時檢測 Mysql 應用運行狀態,如果檢測到 Mysql 掛掉將進行重啟操作,
-
readinessProbe: 配置就緒探針,定時檢測 Mysql 應用啟動狀態,如果啟動成功將允許流量涌入,啟動失敗將進行重啟操作,
-
command: 探針執行探測時執行的探測命令,
-
volumeMounts: 存盤卷掛載配置,用于鏡像記憶體儲的掛載配置,與 volumes 中對于的 name 進行系結,
-
volumes: 存盤卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存盤,需要配置 name 值與 VolumeMounts 進行系結,
通過 Kubectl 工具部署 PV、PVC
通過 kubectl 工具部署 Deployment 來創建 Msyql,命令如下:
-
-n:指定部署應用的 Namespace 命名空間,
$ kubectl create -f mysql-deploy.yaml -n mydlqcloud
五、測驗 Mysql 是否能夠正常使用
接下來啟動個 Mysql 鏡像,使用里面的 Msyql 客戶端工具,對部署在 Kubernetes 中的 Mysql 進行連接,測驗是否能夠正常可用,
這里本人 Kubernetes 集群地址為 192.168.2.11 部署的 Mysql 的 NodePort 埠號為 30336,所以這里啟動一個對應版本的 Mysql 鏡像,然后進入鏡像內部,輸入 Mysql 登錄命令進行測驗,
運行一個 mysql 鏡像,并且進入鏡像內部:
$ docker run -it mysql:8.0.19 /bin/bash
在鏡像內部命令列中輸入 mysql 登錄命令,測驗是否能夠正常登錄:
$ mysql -h 192.168.2.11 -P 30336 --user=root --password=123456
顯示如下:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 592
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
可以看到,已經成功連接資料庫,說明資料庫能正常使用,整理了一份328頁MySQ學習筆記
示例地址:
- github.com/my-dlq/blog…
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/255548.html
標籤:MySQL
