在 Kubernetes 上部署 MySQL {指南}
MySQL 是當今最流行的關係資料庫管理系統之一,在 Kubernetes 上執行它可以提供高度可擴充套件和靈活的解決方案來管理您的資料庫工作負載。在本指南中,我們將引導您完成在 Kubernetes 上部署 MySQL 的過程,從設定 Kubernetes 叢集到建立 MySQL 部署、新增永續性儲存以及使用服務公開部署。
我們將使用 YAML 檔案來定義 Kubernetes 資源,並且我們還將提供每個步驟的詳細解釋和示例。無論您是 Kubernetes 新手還是經驗豐富的使用者,本指南都將為您提供部署和管理 Kubernetes 上 MySQL 所需的知識和工具。
在 Kubernetes 上部署 MySQL 的先決條件
對 Kubernetes 概念的基本理解,例如 Pod、服務、部署和持久卷。
已啟動並執行的 Kubernetes 叢集。這可以是託管的 Kubernetes 服務,例如 GKE、EKS 或 AKS,也可以是使用 kubeadm 或 kops 的自託管叢集。
在本地計算機上安裝 kubectl 命令列工具,用於與 Kubernetes API 伺服器互動。
在本地計算機上安裝 Docker,用於構建和將 Docker 映象推送到容器登錄檔。
訪問容器登錄檔以儲存您的 Docker 映象。
對 YAML 語法(用於定義 Kubernetes 資源)的基本瞭解。
在您的 Kubernetes 叢集上安裝持久卷提供程式,例如 AWS Elastic Block Store (EBS)、Google Cloud Persistent Disk (PD) 或 Azure Disk。
可選:如果計劃從 Kubernetes 叢集外部訪問 MySQL 伺服器,則配置允許外部流量訪問服務的防火牆規則。
步驟 1:設定 Kubernetes
在 Kubernetes 上部署 MySQL 之前,我們需要設定一個 Kubernetes 叢集。這可以使用託管的 Kubernetes 服務(如 Google Kubernetes Engine (GKE)、Amazon Elastic Kubernetes Service (EKS) 或 Microsoft Azure Kubernetes Service (AKS))來完成。或者,您可以使用 kubeadm 或 kops 等工具設定您自己的 Kubernetes 叢集。
一旦您啟動並運行了 Kubernetes 叢集,您將需要安裝 kubectl 命令列工具,該工具用於與 Kubernetes API 伺服器互動。
步驟 2:建立 MySQL 部署
要在 Kubernetes 上部署 MySQL,我們將使用 Deployment 物件,這是一個更高級別的抽象,它管理 Pod 的一組副本。Pod 包含 MySQL 容器以及任何必要的配置。
這是一個用於建立 MySQL 部署的示例 YAML 檔案:
data-lang="python">apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0.23 env: - name: MYSQL_ROOT_PASSWORD value: yourpassword ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc
此 YAML 檔案描述了一個名為“mysql-deployment”的 MySQL 部署,它具有單個副本。MySQL 容器使用帶有 8.0.23 版本的官方 MySQL Docker 映象。它還指定了一個環境變數 MYSQL_ROOT_PASSWORD,它設定 MySQL 伺服器的 root 密碼。容器偵聽埠 3306,這是 MySQL 的預設埠。
Deployment 還指定了一個名為“mysql-persistent-storage”的 volumeMount,它將持久卷安裝到容器的 /var/lib/mysql 目錄。卷在 volumes 部分中定義,它引用名為“mysql-pvc”的 PersistentVolumeClaim。
步驟 3:建立 PersistentVolumeClaim
預設情況下,MySQL Pod 沒有永續性儲存,這意味著如果 Pod 被刪除或重新建立,則 Pod 中儲存的任何資料都將丟失。要向 MySQL Pod 新增永續性儲存,我們需要建立一個 PersistentVolumeClaim (PVC) 並將其附加到 Pod。
這是一個用於建立 PVC 的示例 YAML 檔案:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
此 YAML 檔案描述了一個名為“mysql-pvc”的 PVC,它請求 1GB 的儲存空間,並具有 ReadWriteOnce 訪問模式。這意味著該卷可以被叢集中的單個節點以讀寫方式掛載。
步驟 4:使用服務公開 MySQL
要從 Kubernetes 叢集外部訪問 MySQL 伺服器,我們需要建立一個 Service 物件。該服務透過建立可用於連線到 MySQL 伺服器的穩定 IP 地址和埠來公開 MySQL 部署。
這是一個用於為 MySQL 建立 Service 物件的示例 YAML 檔案:
apiVersion: v1 kind: Service metadata: name: mysql-service spec: type: ClusterIP selector: app: mysql ports: - name: mysql port: 3306 targetPort: 3306
此 YAML 檔案描述了一個名為“mysql-service”的服務,它公開了 MySQL 的 3306 埠。它使用 ClusterIP 型別,這為 Kubernetes 叢集內的服務提供了一個穩定的 IP 地址。
建立服務後,您可以使用其 IP 地址和埠從叢集外部連線到 MySQL 伺服器。如果您在雲平臺上執行 Kubernetes,則可能需要建立防火牆規則以允許外部流量訪問該服務。
步驟 5:測試 MySQL 部署
現在我們已經部署了 MySQL 並使用服務公開它,我們可以測試部署以確保它正常工作。我們可以透過連線到 MySQL 伺服器並建立測試資料庫來做到這一點。
要連線到 MySQL 伺服器,您可以使用以下命令:
$ kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql-service -p
此命令建立一個執行 MySQL 客戶端的新 Pod,並使用服務 IP 地址將其連線到 MySQL 伺服器。系統將提示您輸入 MySQL root 密碼,您可以在我們之前建立的金鑰中找到它。
連線到 MySQL 伺服器後,您可以建立測試資料庫和表:
mysql> CREATE DATABASE test; mysql> USE test; mysql> CREATE TABLE messages (message VARCHAR(255));
這將建立一個名為“test”的新資料庫和一個名為“messages”的表,該表只有一個名為“message”的列。
要驗證是否建立了該表,您可以執行以下命令:
mysql> SHOW TABLES;
這將顯示當前資料庫中的表列表,其中應包含“messages”表。
步驟 6:清理
完成 MySQL 部署測試後,您可以透過執行以下命令刪除部署、服務和 PVC:
$ kubectl delete deployment mysql $ kubectl delete service mysql-service $ kubectl delete pvc mysql-pvc
這將刪除與 MySQL 部署相關的所有資源。
結論
在 Kubernetes 上部署 MySQL 可能是一項複雜的任務,但是使用正確的工具和知識,它可以成為一個簡單的過程。透過遵循本指南中概述的步驟,您可以建立一個可靠且可擴充套件的 Kubernetes 上的 MySQL 部署,以滿足應用程式的需求。
請記住始終徹底測試您的部署並監控其效能和可用性。使用 Kubernetes,您可以建立高度可用且可擴充套件的基礎架構,以適應應用程式不斷變化的需求。