openFuyao平台部署
参考openFuyao社区安装指导部署cluster-api、provider-bke以及openFuyao管理面,部署完成后,用户可在openFuyao管理面上进行业务集群的安装、卸载、扩缩容、升级等操作。
Cluster-API是Kubernetes的子项目,通过声明式API和控制器模式实现了Kubernetes集群的生命周期管理自动化,其核心介绍如下:
- 基础设施即代码:使用Kubernetes自定义资源定义(CRD)集群配置。
- 声明式管理:通过YAML文件定义集群的期望状态。
- 控制器模式:自动协调实际状态与期望状态。
BKE工具将机器分为两种类型:
- 引导节点:部署轻量级的K3s作为长期引导集群,承载Cluster-API控制平面,负责创建和管理目标业务集群。
- 业务集群节点:部署由Cluster-API实际创建和管理的目标业务集群,用于运行用户工作负载,其生命周期由引导集群控制。
- openFuyao Cluster-API部署流程如图1图所示,可参考openFuyao社区安装指导进行安装包完整性校验、引导集群安装、业务集群安装和离线组件增量安装等。建议采用在线方式安装引导集群,并通过管理面安装业务集群。
- 引导节点需要安装tar工具。tar工具安装版本可参考https://mirrors.aliyun.com/gnu/tar/。
- 禁用fstab的Swap分区。
sudo sed -i '/swap/s/^/#/g' /etc/fstab sudo mount -a sudo swapoff -a
- 在线安装引导集群时需要加上--enableNTP=false选项。
bke init --otherRepo cr.openfuyao.cn/openfuyao/bke-online-installed:1.0.5 --enableNTP=false
- 根分区磁盘使用率需低于85%,否则会导致openFuyao新建Pod失败。
- 在线方式安装引导集群完成后,根据openFuyao社区安装指导通过管理面安装业务集群。

- 单击下方的“一键校验”,校验成功后,单击“创建”即可下发业务集群的创建任务。界面弹出“集群信息”窗口。待集群信息滚动完成后,返回集群列表界面,“状态”列显示为“安装中”,待“状态”列字段更新完毕,完成新增集群。若对应集群“状态”列字段为“健康”,代表新增成功。对应集群“状态”列字段为“安装失败”,代表新增失败。如果“集群日志”显示报错信息,需要进一步定位解决,可参考FAQ相关内容进行处理。
- 业务集群安装完毕后,在引导节点机器上执行如下命令,进行Pod IP地址检查。
cat > check_pods_ip.sh << 'EOF' # 定义函数:判断IP是否属于子网 function is_ip_in_subnet() { local ip="$1" local subnet="$2" local network_addr="${subnet%/*}" local prefix_length="${subnet#*/}" # 将IP地址转换为整数 ip_to_int() { local ip="$1" local a b c d IFS=. read -r a b c d <<< "$ip" echo $((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d)) } local ip_int=$(ip_to_int "$ip") local network_int=$(ip_to_int "$network_addr") local mask_int=$((0xffffffff << (32 - prefix_length) & 0xffffffff)) if (( (ip_int & mask_int) == network_int )); then return 0 # 属于子网 else return 1 # 不属于子网 fi } function reboot_pods() { # 存在pod ip 分配错误问题,重启pod后可解决问题 # 如何确认正常的pod ip,在下面范围中的ip可认为是正常的ip ## 1、kubectl get node -A -owide 回显结果中的INTERNAL-IP字段 ## 2、kubectl get ippool -n default-ipv4-ippool -oyaml 回显结果中spec/cidr的网络段 # 获取所有 Node 的 InternalIP NODE_IPS=$(kubectl get nodes -o json | jq -r '.items[].status.addresses[] | select(.type=="InternalIP") | .address') # 获取 Calico IPPool 的 CIDR 网段 CALICO_CIDR=$(kubectl get ippools.crd.projectcalico.org default-ipv4-ippool -o json | jq -r '.spec.cidr') # 检查是否获取到 IPPool if [ -z "$CALICO_CIDR" ]; then echo "Calico IPPool not found!" return fi # 遍历所有 Pod,检查 IP 是否合法 kubectl get pods -A -o json | jq -r '.items[] | select(.status.podIP != null) | "\(.metadata.namespace) \(.metadata.name) \(.status.podIP)"' | while read -r ns pod ip; do # 检查 Pod IP 是否在 Node IP 列表里 if grep -q "$ip" <<< "$NODE_IPS"; then echo "Pod $ns/$pod IP $ip is a Node IP, skipping..." continue fi # 检查 Pod IP 是否在 Calico IPPool 网段 is_ip_in_subnet "$ip" "$CALICO_CIDR" if [ $? -ne 0 ]; then echo "Pod $ns/$pod IP $ip is outside Calico IPPool $CALICO_CIDR, restarting..." kubectl delete pod -n "$ns" "$pod" --force --grace-period=0 else echo "Pod $ns/$pod IP $ip is valid." fi done } reboot_pods EOF # 赋予执行权限 chmod +x check_pods_ip.sh # 执行脚本 ./check_pods_ip.sh - check_pods_ip.sh执行完成后,在终端执行如下命令,预期无Pod IP地址为10.4.0.x。
kubectl get pod -A -o wide
- 业务集群安装成功后,即可登录业务集群的openFuyao管理面进行集群管理相关的操作。浏览器中输入“https://业务集群IP地址:31616”,首次登录时,用户名为admin,密码为test@1234,首次登录后需要修改用户名和密码。
- 引导节点的管理面Web服务采用HTTPS协议,侦听端口为30010。初始登录用户名为admin,密码为test@1234。出于安全考虑,首次登录后必须立即修改默认密码。
- 业务集群节点的管理面Web服务采用HTTPS协议,侦听端口为31616。初始登录用户名为admin,密码为test@1234。出于安全考虑,首次登录后必须立即修改默认密码。
- 待安装集群节点与引导节点的时间偏差不超过10秒。
- 修改“/var/lib/kubelet/config.yaml”文件,向其中添加maxPods字段修改Pods上限,除机密OpenClaw Pod外,有60 Pods为openFuyao以及记忆,E2B等必需的Pod,需要设置maxPods字段>=60+预期部署的OpenClaw实例数。
- 打开“/var/lib/kubelet/config.yaml”文件。
vim /var/lib/kubelet/config.yaml
- 按“i”进入编辑模式,添加maxPods字段并修改Pods上限为300。
maxPods: 300

- 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
- 重启服务。
systemctl restart kubelet
- 打开“/var/lib/kubelet/config.yaml”文件。
父主题: 基于openFuyao的快捷部署
