开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

openFuyao平台部署

参考openFuyao社区安装指导部署cluster-api、provider-bke以及openFuyao管理面,部署完成后,用户可在openFuyao管理面上进行业务集群的安装、卸载、扩缩容、升级等操作。

Cluster-API是Kubernetes的子项目,通过声明式API和控制器模式实现了Kubernetes集群的生命周期管理自动化,其核心介绍如下:

  • 基础设施即代码:使用Kubernetes自定义资源定义(CRD)集群配置。
  • 声明式管理:通过YAML文件定义集群的期望状态。
  • 控制器模式:自动协调实际状态与期望状态。

BKE工具将机器分为两种类型:

  • 引导节点:部署轻量级的K3s作为长期引导集群,承载Cluster-API控制平面,负责创建和管理目标业务集群。
  • 业务集群节点:部署由Cluster-API实际创建和管理的目标业务集群,用于运行用户工作负载,其生命周期由引导集群控制。
图1 openFuyao Cluster-API部署流程
  • 建议您的节点环境使用未安装任何Docker与Kubernetes组件的裸机操作系统,以避免因版本冲突导致安装失败。如需在存量环境进行试验性安装,可下载孵化期工具envCheck进行环境检查,envCheck工具对环境中的残留文件和冲突应用程序进行检测,具体操作请参见安装部署前置环境校验工具使用指导
  • (可选)如需使用自定义CA证书来签发Kubernetes集群内所有组件的证书,以满足企业级安全合规要求,请在引导节点创建之前配置自定义证书。具体操作请参见自定义集群证书使用指导
  1. openFuyao Cluster-API部署流程如图1图所示,可参考openFuyao社区安装指导进行安装包完整性校验、引导集群安装、业务集群安装和离线组件增量安装等。建议采用在线方式安装引导集群,并通过管理面安装业务集群。
    1. 引导节点需要安装tar工具。tar工具安装版本可参考https://mirrors.aliyun.com/gnu/tar/
    2. 禁用fstab的Swap分区。
      sudo sed -i '/swap/s/^/#/g' /etc/fstab
      sudo mount -a
      sudo swapoff -a
    3. 在线安装引导集群时需要加上--enableNTP=false选项。
      bke init --otherRepo cr.openfuyao.cn/openfuyao/bke-online-installed:1.0.5 --enableNTP=false
    4. 根分区磁盘使用率需低于85%,否则会导致openFuyao新建Pod失败。
  2. 在线方式安装引导集群完成后,根据openFuyao社区安装指导通过管理面安装业务集群。

  3. 单击下方的“一键校验”,校验成功后,单击“创建”即可下发业务集群的创建任务。界面弹出“集群信息”窗口。待集群信息滚动完成后,返回集群列表界面,“状态”列显示为“安装中”,待“状态”列字段更新完毕,完成新增集群。若对应集群“状态”列字段为“健康”,代表新增成功。对应集群“状态”列字段为“安装失败”,代表新增失败。如果“集群日志”显示报错信息,需要进一步定位解决,可参考FAQ相关内容进行处理。
  4. 业务集群安装完毕后,在引导节点机器上执行如下命令,进行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
  5. check_pods_ip.sh执行完成后,在终端执行如下命令,预期无Pod IP地址为10.4.0.x。
    kubectl get pod -A -o wide
  6. 业务集群安装成功后,即可登录业务集群的openFuyao管理面进行集群管理相关的操作。浏览器中输入“https://业务集群IP地址:31616”,首次登录时,用户名为admin,密码为test@1234,首次登录后需要修改用户名和密码。
    • 引导节点的管理面Web服务采用HTTPS协议,侦听端口为30010。初始登录用户名为admin,密码为test@1234。出于安全考虑,首次登录后必须立即修改默认密码。
    • 业务集群节点的管理面Web服务采用HTTPS协议,侦听端口为31616。初始登录用户名为admin,密码为test@1234。出于安全考虑,首次登录后必须立即修改默认密码。
    • 待安装集群节点与引导节点的时间偏差不超过10秒。
  7. 修改“/var/lib/kubelet/config.yaml”文件,向其中添加maxPods字段修改Pods上限,除机密OpenClaw Pod外,有60 Pods为openFuyao以及记忆,E2B等必需的Pod,需要设置maxPods字段>=60+预期部署的OpenClaw实例数。
    1. 打开“/var/lib/kubelet/config.yaml”文件。
      vim /var/lib/kubelet/config.yaml
    2. 按“i”进入编辑模式,添加maxPods字段并修改Pods上限为300。
      maxPods: 300

    3. 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    4. 重启服务。
      systemctl restart kubelet