Kubernetes 與私有雲
管理後台位置: Kubernetes:Infrastructure › Cloud provider › CloudStack › Kubernetes (CKS) (
/infra/cloudstack?tab=k8s),以及 Services › Kubernetes (Overview, Clusters, Versions, Policy)。私有雲:Services › Private Cloud (Overview/vpc, VPC/vpc/list, Plans & pricing/vpc/plans)。請在 System › Admin › License & updates 下方啟用這兩個模組。
功能
- Kubernetes。 客戶透過 CloudStack Kubernetes Service (CKS) 在您的 CloudStack 上建立託管的 Kubernetes 叢集。控制平面是免費的,客戶僅需為 worker 節點付費。NexCMP 會為每個叢集建立獨立的網路與公開 IP,並將每個客戶的叢集隔離開來。
- Private Cloud。 客戶可獲得一個包含路由器、子網路 (tiers)、防火牆規則 (network ACLs) 以及虛擬機器的私有網路 (CloudStack VPC)。此服務按頻寬方案銷售,提供專用且不限流量的速率(例如 50、100、500 Mbps、1 Gbps 與 3 Gbps)。預設情況下,每位客戶可擁有一個 VPC。
兩者皆建置於 CloudStack 上,並透過相同的連線使用其 API。
需求
Kubernetes
| 項目 | 需求 |
|---|---|
| CloudStack | 4.23 (已測試)。CKS 必須處於啟用狀態 (cloud.kubernetes.service.enabled = true)。 |
| 帳號 | 專用網域中的 Domain Admin 帳戶,以便 NexCMP 能為每個客戶建立 CloudStack 專案及其內部的資源限制。請參閱 CloudStack。 |
endpoint.url | CloudStack 全域設定必須指向您的管理 API,且必須能從叢集虛擬機器存取。NexCMP 會顯示該數值與端點檢查的結果。 |
| 版本 | 至少有一個支援的 Kubernetes 版本項目及其二進位檔 ISO,狀態為 Enabled。已過支援周期的版本不得上架銷售。 |
| 控制平面方案 | 一個免費的服務方案,具有剛好 2 vCPU、2048 MB RAM 與 CPU 上限 (limitcpuuse = true),對該帳戶可見。伺服器會拒絕任何其他設定並回傳 cp_offering_invalid。 |
| 網路 | 一個已啟用的具備 CKS 功能的隔離網路方案。 |
| IP | 可銷售範圍內的免費公共 IPv4 位址;每個叢集使用一個。 |
| 容量 | 每個叢集會佔用您 2 到 4 GB 的 RAM 作為控制平面及小型路由器虛擬機器。請注意容量分頁。 |
私有雲
| 項目 | 需求 |
|---|---|
| CloudStack | 4.23(已測試),已啟用 VPC。 |
| VPC 方案 | 一個 VPC 方案。雙堆疊方案也會為每個階層提供一個 IPv6 /64。 |
| 階層網路方案 | 每個頻寬方案一個網路方案,為 VPC 建立,其網路速率 (Mbps) 等於該方案,外加一個已鎖定的 1 Mbps 方案,當 VPC 因未付款而被鎖定時會套用此方案。 |
| 帳號 | 專用帳戶(建議使用 Domain Admin)。VPC 網路保留在帳戶中,而不是專案中。 |
| IP | 免費公共 IPv4 位址(每個 VPC 使用一個來進行來源 NAT)。 |
| 位址空間 | 每個 VPC 從 10.128.0.0/9 接收一個 /16。請在您自己的網路上保持該範圍未被使用。 |
| 相依於 | 已連線 CloudStack;模組為 Private Cloud。 |
準備基礎設施
Kubernetes:啟用 CKS 並新增版本
啟用服務並設定端點,然後重新啟動管理伺服器:
bashcmk update configuration name=cloud.kubernetes.service.enabled value=true cmk update configuration name=endpoint.url value=https://cloudstack.example.com/client/api sudo systemctl restart cloudstack-managementendpoint.url會被叢集的控制器回呼,因此它必須是叢集虛擬機器能夠到達的位址。使用 CloudStack 原始碼樹中的
create-kubernetes-binaries-iso.sh指令碼,為您想要銷售的版本建置 Kubernetes 二進位檔 ISO,將其託管在網頁伺服器上並進行註冊:bashcmk add kubernetessupportedversion name="Kubernetes 1.35.0" semanticversion=1.35.0 \ url=https://files.example.com/setup-v1.35.0-calico-amd64.iso zoneid=<zone-id> \ mincpunumber=2 minmemory=2048 cmk list kubernetessupportedversions filter=name,semanticversion,state,isostate等待 ISO 狀態變成 Ready 且版本變成 Enabled。
建立控制平面方案,限定於 NexCMP 網域:
bashcmk create serviceoffering name=K8S-CP-2-2 displaytext="Kubernetes control plane" \ cpunumber=2 cpuspeed=1000 memory=2048 limitcpuuse=true offerha=false domainid=<domain-id>檢查 CKS 網路方案是否已啟用:
bashcmk list networkofferings state=Enabled forvpc=false filter=id,name
私有雲:建立方案
在 CloudStack UI(Service Offerings › Network Offerings › Add network offering)中或透過 cmk:
列出您現有的項目:
bashcmk list vpcofferings filter=id,name,state cmk list networkofferings forvpc=true filter=id,name,networkrate,state使用已啟用的 VPC 方案(如果您想要 IPv6,請使用雙堆疊)。如果您需要新方案,請複製 CloudStack 的預設 VPC 方案並加以啟用。
針對您銷售的每個頻寬方案,建立一個用於 VPC 的網路方案(複製預設的「VPC 網路的隔離網路方案」),並將 Network rate (Mb/s) 設定為該方案的速度:
50、100、500、1000、3000。啟用每個方案。為已鎖定的 VPC 建立另一個網路速率為 1 (
VPC-LOCKED-1M) 的方案:客戶仍可透過 SSH 連線到其伺服器,但速度會受到限制。請記住每個方案的 UUID。NexCMP 在接下來的章節中會需要它們。
預設的方案 ID 不存在於你的雲端環境中
Private Cloud 表單中預先填入了屬於其他 CloudStack 安裝的方案 UUID。請將每一個都替換為你自己的,否則第一個 VPC 訂單將會失敗。
在 NexCMP 中連線
Kubernetes
開啟 Infrastructure › Cloud provider › CloudStack 並選擇 Kubernetes (CKS) 標籤頁。右側的 CKS status on CloudStack (read-only) 卡片會顯示
kubernetesserviceenabled、包含 Endpoint check 的endpoint.url、CKS 網路方案、cloud.kubernetes.*設定以及 ISO 與版本列表。修正問題後,請按一下 Recheck。在 Sales config 中,選擇 Control plane Offering(若不符合剛好 2 vCPU / 2048 MB / CPU 上限將會顯示警告),設定 Max workers per cluster(1 到 9:CKS 允許包含控制節點在內共 10 個節點),將 Enable CKS for this backend 切換為開啟,然後按一下 Save。在選擇方案之前,此開關將維持停用狀態。

開啟 Services › Kubernetes › Versions 並按一下 Sync from CloudStack。針對你要銷售的版本,將 Available for new clusters 切換為開啟,設定預設值,並可視需要設定 End of life (EOL) 日期。
開啟 Services › Kubernetes › Policy。在 Worker plans 中新增方案並設定 Plan code(A-Z、0-9、連字號,最多 16 個字元)。設定 NVMe per worker (GB)、Min and max workers 以及叢集限制(每個帳號的啟用叢集數、每 24 小時建立次數、全域上限、同時進行的 CKS 操作數)。然後將 Sell Kubernetes (CKS) 切換為開啟。至少須保持一個方案在銷售狀態。

私有雲
開啟 Services › Private Cloud(概觀)。在政策卡片中,將 VPC offering 與 Locked offering tier 替換為你自己的 UUID。檢查各項限制(每個帳號的 VPC 數、層級、每個 VPC 的 VM 與 ACL 規則數、建立所需的方案費用時數餘額、每 24 小時的方案變更次數、其中 0 代表緊急停止的同時作業數)以及 DNS 伺服器。按一下 Save(系統會要求輸入原因)。

開啟 Services › Private Cloud › Plans & pricing。針對每個方案按一下 Edit,並設定 VND price per month、On sale 以及網路速率等於該方案 Mbps 的 CloudStack tier offering UUID。該列會顯示全速運作時的成本與利潤,以便你檢視哪些方案低於成本。

將 Sell Private Cloud 切換為開啟。若要先行測試,請將測試帳號 ID 新增至 Beta accounts:這些帳號可在銷售開關關閉時使用此服務。
驗證
- Kubernetes:狀態卡片會顯示
kubernetesserviceenabled: true、良好的端點檢查以及啟用的版本。以客戶身分建立一個單一背景工作節點的測試叢集;它應該會達到執行中狀態,且kubectl get nodes應該會顯示其就緒。事後請將其刪除:網路與 IP 將會返回集區中。 - Private Cloud:以測試客戶身分使用最小的方案建立 VPC。VPC 應顯示為使用中,某個層級會取得其子網路,該層級中的 VM 透過 VPC 路由器連線至網際網路,且 Change plan 至較大方案可在約 20 秒內生效而不會中斷連線。
限制與注意事項
- Kubernetes:背景工作節點的計費方式與方案價格的 VM 相同,且在 VM 限制中計入 VM 數量。由於 CKS 限制 10 個節點,因此一個叢集最多只能有 9 個背景工作節點。
- Kubernetes:叢集的控制平面、路由器和公開 IP 對客戶而言是免費的;其成本由你承擔。
- Private Cloud:所有方案皆為不計量。表單中的價格為越南盾每月;成本欄位使用的是非你所有的參考價格,因此請使用你自己的數字。
- 鎖定的 VPC 限制為 1 Mbps,不予計費且不會自動刪除。
- Private Cloud 每個 VPC 使用一個路由器,而非備援對。若其主機故障,CloudStack 會在幾分鐘內重建它。
故障排除
| 症狀 | 原因 | 修正方式 |
|---|---|---|
cp_offering_invalid / 「此方案不是 2 vCPU / 2048 MB / limitcpuuse」 | 控制平面方案有其他大小或沒有 CPU 上限 | 如步驟 3 建立方案並重新選擇。 |
| Enable CKS 開關已關閉 | 未選擇控制平面方案 | 請先選擇一個。 |
kubernetesserviceenabled: false | CloudStack 中的 CKS 已關閉 | 請啟用它並重新啟動管理伺服器。 |
| 端點檢查失敗 | 無法從叢集虛擬機器連線至 endpoint.url | 設定可連線的 URL,重新啟動管理伺服器,然後點擊 Recheck。 |
| 「EOL: 無法啟用銷售」 | 版本已過生命週期終止 (EOL) 日期 | 註冊較新的版本。 |
| 「沒有版本:點擊從 CloudStack 同步」 | 未註冊 Kubernetes 版本 | 註冊版本並同步。 |
| 「CKS 後端為關閉:即使啟用銷售旗標,客戶也無法建立叢集」 | 銷售開關已開啟但 CKS 後端為關閉 | 在 CloudStack 分頁上啟用 CKS。 |
| 「至少必須有 1 個方案在販售中」 | 最後一個背景工作節點方案已被移除 | 保留至少一個方案,或關閉 Kubernetes 銷售。 |
| 叢集建立卡住 | 容量不足或缺少 ISO | 檢查容量分頁與版本的 ISO 狀態。 |
| 新 VPC 在第一步失敗 | VPC 方案或層級方案 ID 無效 | 將每個方案 UUID 替換為來自您 CloudStack 的 UUID。 |
| 「cs_offering_id 必須是 UUID」 | 方案 ID 不是 UUID | 貼上來自 cmk list networkofferings 的 ID。 |
| 方案變更失敗 | 新的層級方案不存在或網路速率錯誤 | 檢查方案 UUID 及其網路速率。 |