MySQL 和 Kubernetes 共用術語。例如,節點可能是 Kubernetes 節點或 MySQL 節點,叢集可能是 MySQL InnoDB 叢集或 Kubernetes 叢集,而 ReplicaSet 是 MySQL 和 Kubernetes 中的一項功能。本文件偏好使用全名,但這些超載的術語仍可能導致混淆;內容很重要。
Kubernetes
Kubernetes 系統使用 控制器,透過在 Kubernetes 系統中將它們作為 Pod 執行,來管理容器化工作負載的生命週期。控制器是通用的工具,可為廣泛的服務提供功能,但複雜的服務需要額外的元件,包括運算子。運算子是在 Kubernetes 叢集內部執行的軟體,運算子會與 Kubernetes API 互動,以觀察資源和服務,以協助 Kubernetes 進行生命週期管理。
Kubernetes 的 MySQL Operator
Kubernetes 的 MySQL Operator 是一個專注於管理一或多個 MySQL InnoDB 叢集的運算子,這些叢集由一組 MySQL 伺服器和 MySQL Router 組成。MySQL Operator 本身在 Kubernetes 叢集中執行,並由 Kubernetes Deployment 控制,以確保 MySQL Operator 保持可用且正在執行。
MySQL Operator 預設會部署在 'mysql-operator' Kubernetes 名稱空間中;並監看 Kubernetes 叢集中所有的 InnoDB 叢集和相關資源。若要執行這些工作,運算子會訂閱 Kubernetes API 伺服器以更新事件,並視需要連線到受管理的 MySQL 伺服器執行個體。在 Kubernetes 控制器的頂端,運算子會使用 MySQL 群組複寫和 MySQL Router 設定 MySQL 伺服器、複寫。
MySQL InnoDB 叢集
一旦將 InnoDB 叢集 (InnoDBCluster) 資源部署到 Kubernetes API 伺服器,Kubernetes 的 MySQL Operator 就會建立資源,包括
-
MySQL 伺服器執行個體的 Kubernetes StatefulSet。
這會管理 Pod 並指派對應的儲存磁碟區。由此 StatefulSet 管理的每個 Pod 都會執行多個容器。其中幾個容器提供一系列初始化步驟,以準備 MySQL 伺服器組態和資料目錄,然後兩個容器會保持啟用以進入操作模式。其中一個容器(名為 'mysql')會執行 MySQL 伺服器本身,另一個容器(名為 'sidecar')則是 Kubernetes sidecar,負責與運算子本身協調進行節點的本機管理。
-
MySQL Router 的 Kubernetes Deployment。
MySQL Router 是無狀態的服務,會根據應用程式的選擇,將應用程式路由到目前的 Primary 或複本。運算子可以根據叢集的工作負載,視需要增加或減少路由器的數量。
MySQL InnoDB 叢集部署會建立這些 Kubernetes 服務
-
其中一項服務是 InnoDB 叢集的名稱。它可作為應用程式的主要進入點,並將傳入的連線傳送到 MySQL Router。它們以 '{clustername}.svc.cluster.local' 的形式提供穩定的名稱,並公開特定的連接埠。
另請參閱 第 3.4 節「MySQL InnoDB 叢集服務說明」和 第 5 章《連線到 MySQL InnoDB 叢集》。
第二項名為 '{clustername}-instances' 的服務會為個別的伺服器提供穩定的名稱。一般而言,不應直接使用這些名稱;而是應使用主要的服務,以可靠地連線到目前的 Primary 或次要伺服器(視需要)。但是,為了維護或監視目的,可能需要直接存取執行個體。每個 pod 執行個體都已安裝 MySQL Shell。
Kubernetes 的 MySQL Operator 會建立和管理其他不應手動修改的資源,包括
-
名為 '{clustername}-initconf' 的 Kubernetes ConfigMap,其中包含 MySQL 伺服器的組態資訊。
若要修改產生的
my.cnf
組態檔案,請參閱 第 3.3 節「InnoDBCluster 的 Manifest 變更」。 -
一系列 Kubernetes Secrets,其中包含系統不同部分的認證;名稱包括 '{clustername}.backup'、'{clustername.privsecrets}' 和 '{clustername.router}'。
如需運算子建立的 MySQL 帳戶 (和相關聯的 Secrets) 清單,請參閱 第 3.5 節「InnoDBCluster 部署建立的 MySQL 帳戶」。