Kubernetes与私有云
**管理后台路径:**Kubernetes:Infrastructure › Cloud provider › CloudStack › Kubernetes (CKS)(
/infra/cloudstack?tab=k8s),然后访问Services › Kubernetes (Overview, Clusters, Versions, Policy)。Private Cloud: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)、防火墙规则(网络ACL)及内部虚拟机的私有网络(即CloudStack VPC)。该服务按带宽方案销售,提供独享且不限流量的速率(例如50、100、500 Mbps,1和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会显示该值及端点检查结果。 |
| 版本 | 至少一个包含二进制ISO的Kubernetes支持版本条目,状态为Enabled。已停止支持(EOL)的版本无法上架销售。 |
| 控制平面方案 | 规格恰好为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-management集群控制器会回调
endpoint.url,因此它必须是集群虚拟机可以访问的地址。使用CloudStack源码树中的
create-kubernetes-binaries-iso.sh脚本为要销售的版本构建Kubernetes二进制ISO,将其托管在Web服务器上并注册: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创建一个网络方案(克隆默认的“isolated network offering for VPC networks”),并将**Network rate (Mb/s)**设置为该套餐的速率:
50、100、500、1000、3000。启用每个方案。为被锁定的VPC额外创建一个网络速率为1(
VPC-LOCKED-1M)的方案:客户仍可通过SSH访问其服务器,但速率会受到限制。记录每个方案的UUID。NexCMP在下一节中需要用到它们。
预置的方案ID在您的云中不存在
Private Cloud表单预填的方案UUID属于另一个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 cap则会显示警告),设置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(Overview)。在策略卡片中将VPC offering和Locked offering tier替换为您自己的UUID。检查各项限制(每个账户的VPC数、每个VPC的分层数、虚拟机数和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、端点检查正常且已有启用的版本。以客户身份创建一个单工作节点测试集群;集群应达到running状态,且kubectl get nodes应显示其就绪。随后将其删除:网络和IP将退回资源池。 - Private Cloud:以测试客户身份使用最小方案创建VPC。VPC显示为active,分层获取到其子网,该层中的虚拟机通过VPC路由器访问互联网,并且通过Change plan升配至更大方案将在约20秒内生效且不中断连接。
限制与注意事项
- Kubernetes:工作节点按方案价格计费(类似虚拟机),并计入虚拟机的配额限制。由于CKS限制最多10个节点,因此单个集群最多可拥有9个工作节点。
- Kubernetes:集群的控制平面、路由器和公网IP对客户免费;相关成本由您承担。
- Private Cloud:所有方案均为不限流量。表单中的价格为每月越南盾;成本列使用的是参考价格而非您的实际成本,因此请使用您自己的数据。
- 锁定的VPC限速为1 Mbps,不计费且不会被自动删除。
- Private Cloud为每个VPC使用单个路由器,而非冗余双机。若其宿主机发生故障,CloudStack会在数分钟内将其重建。
故障排查
| 症状 | 原因 | 解决办法 |
|---|---|---|
cp_offering_invalid / “此Offering不是2 vCPU / 2048 MB / limitcpuuse” | 控制平面计算方案规格不符或未限制CPU使用 | 按步骤3创建计算方案并重新选择。 |
| Enable CKS开关处于禁用状态 | 未选择控制平面计算方案 | 请先选择一个计算方案。 |
kubernetesserviceenabled: false | CloudStack中未启用CKS | 启用该功能并重启管理服务器。 |
| 端点检查失败 | 从集群虚拟机无法访问endpoint.url | 设置可访问的URL,重启管理服务器,然后点击Recheck。 |
| “EOL:无法启用销售” | 该版本已过生命周期结束(EOL)日期 | 注册更新的版本。 |
| “无版本:请点击Sync from CloudStack” | 未注册任何Kubernetes版本 | 注册版本并同步。 |
| “CKS后端为OFF:即使已启用销售标记,客户也无法创建集群” | 销售开关已开启,但CKS后端处于关闭状态 | 在CloudStack标签页中启用CKS。 |
| “至少必须有1个套餐在售” | 移除了最后一个Worker方案 | 保留至少一个方案,或关闭Kubernetes销售。 |
| 集群创建卡住 | 容量不足或缺少ISO | 检查容量标签页以及该版本的ISO状态。 |
| 新建VPC在第一步即失败 | VPC方案或层方案ID无效 | 将每个方案UUID替换为您CloudStack中的有效UUID。 |
| “cs_offering_id必须为UUID” | 方案ID不是有效的UUID格式 | 从cmk list networkofferings复制并粘贴对应的id。 |
| 方案变更失败 | 新的层方案不存在或网络速率设置错误 | 检查方案UUID及其网络速率。 |