版本:v26.03

Linux后端安装业务集群

本文档介绍使用bke和kubectl进行业务集群搭建验证。

节点要求

  • 节点可以连通外部网络。
  • 节点可以使用root用户登录。
  • 引导节点上需要安装tar工具。

输入图片说明 须知:
建议您的节点环境为裸机操作系统,未安装任何docker与Kubernetes组件,否则可能会发生版本冲突导致安装失败。如需在存量环境试验性安装,可下载孵化期工具env-check进行环境校验。

管理集群

引导节点初始化完成后,在/bke/cluster目录下会生成默认配置的yaml文件,分别是:

  • 1master-cluster.yaml:用于创建1个master节点的管理集群。
  • 1master-node.yaml: 用于创建1个master节点的节点信息文件。
  • 1master1node-cluster.yaml:用于创建1个master节点和1个worker节点的管理集群。
  • 1master1node-nodes.yaml:用于创建1个master节点和1个worker节点的节点信息文件。
  • 3master-cluster.yaml:用于创建3个master节点的管理集群,可配置负载均衡器成为高可用的管理集群。
  • 3master-nodes.yaml:用于创建3个master节点的节点信息文件。

输入图片说明 说明:
部署高可用集群时,建议不要使用引导节点作为高可用集群的Master节点,或者节点梳理不够时将引导节点作为Master节点,那么controlPlaneEndpoint的port字段不要设置为36443。

下面以1master-cluster.yaml和1master-node.yaml为例。

修改配置文件

对1master-cluster.yaml以及1master-node.yaml文件进行编辑,填入正确的节点信息。

输入图片说明 说明:
自定义addon安装参考附录章节。

配置BKENode资源(1master-node.yaml)

yaml
apiVersion: bke.bocloud.com/v1beta1
kind: BKENode
metadata:
  name: master-1
  namespace: bke-cluster
  labels:
    # 关联集群名称
    cluster.x-k8s.io/cluster-name: bke-cluster
spec:
  hostname: m1  # 修改为节点名称
  ip: 127.0.0.1  # 修改为实际节点ip
  password: '******'  # 修改为实际节点密码
  port: "22"   # 默认端口号为22
  role:
  - master/node
  - etcd
  username: root   # 默认为root权限用户
status: {}

配置BKECluster资源(1master-cluster.yaml)

yaml
apiVersion: bke.bocloud.com/v1beta1
kind: BKECluster
metadata:
  creationTimestamp: null
  name: bke-cluster
  namespace: bke-cluster
spec:
  KubeletConfigRef:  # kubelet的自定义配置
    name: bke-kubelet
    namespace: bke-kubelet
  clusterConfig:      
    addons:
    - name: kubeproxy
      param:
        clusterNetworkMode: calico
      version: v1.33.1-of.1
    - name: calico
      param:
        calicoMode: vxlan
        ipAutoDetectionMethod: skip-interface=nerdctl*
      version: v3.27.3
    - name: coredns
      version: v1.10.1
    - block: true     # 注意为cluster-api组件,管理集群有此项addon,业务集群无此项addon
      name: cluster-api
      param:
        manage: "true"
        offline: "true"
        sandbox: deploy.bocloud.k8s:40443/kubernetes/pause:3.9
      version: v1.4.3
    - name: openfuyao-system-controller   # openFuyao的核心组件addon
      param:
        helmRepo: https://helm.openfuyao.cn/_core # 离线安装时,需要替换为 http:<引导节点IP>:38080
      version: latest
    cluster:
      apiServer:
        extraArgs:
          max-mutating-requests-inflight: "3000"
          max-requests-inflight: "1000"
          watch-cache-sizes: node#1000,pod#5000
      certificatesDir: /etc/kubernetes/pki
      containerRuntime:
        cri: containerd
        param:
          data-root: /var/lib/containerd
        runtime: runc
      containerdConfigRef:    # containerd的自定义配置
        name: bke-containerd
        namespace: bke-containerd
      containerdVersion: v2.1.1
      controllerManager:
        extraArgs:
          kube-api-burst: "1000"
          kube-api-qps: "1000"
      etcd:
        dataDir: /var/lib/openFuyao/etcd
      chartRepo:    # chart仓库,离线安装需要把ip改为实际的引导节点ip地址,domain设置为空或引导节点ip地址
        domain: deploy.bocloud.k8s  # 自定义仓库需要修改
        ip: 192.168.200.173         # 自定义仓库需要修改
        port: "38080"               # 自定义仓库需要修改
        prefix: ""                  # 自定义仓库需要修改
      httpRepo:    # http仓库,离线安装需要把ip改为实际的引导节点ip
        domain: http.bocloud.k8s
        ip: 192.168.200.173    # 自定义仓库需要修改
        port: "40080"
        prefix: ""
      imageRepo:
        domain: deploy.bocloud.k8s  # image仓库,离线安装需要把ip改为实际的引导节点ip
        ip: 192.168.200.173   # 自定义仓库需要修改
        port: "40443"
        prefix: kubernetes
      kubelet:
        extraArgs:
          kube-api-burst: "2000"
          kube-api-qps: "1000"
        extraVolumes:
        - hostPath: /var/lib/kubelet
          name: kubelet-root-dir
      kubernetesVersion: v1.33.1-of.1
      networking:
        dnsDomain: cluster.local
        podSubnet: 10.250.0.0/16
        serviceSubnet: 10.96.0.0/16
      ntpServer: 192.168.200.173:123
      openFuyaoVersion: latest
      scheduler:
        extraArgs:
          kube-api-qps: "1000"
    customExtra:
      chartRepoPort: "38080"
      clusterapi: latest
      containerd: containerd-v2.1.1-linux-{.arch}.tar.gz
      domain: deploy.bocloud.k8s
      host: 192.168.200.173     # 修改为引导节点ip
      imageRepoPort: "40443"
      nfsserverpath: /
      otherRepo: ""
      otherRepoIp: ""
      otherSource: ""
      yumRepoPort: "40080"
  controlPlaneEndpoint: {}
  pause: false
status:
  agentStatus: {}
  ready: false

其余项为默认项,可以不用更改。需要用户确保编辑提交的yaml文件是可靠的,调谐器会进行校验,但无法确认业务逻辑上的正确性(如IP地址填错,密码填错等,需要用户确认填写信息无误)。

创建管理集群

执行以下指令完成集群的创建,-f后的文件替换为实际的1master-cluster.yaml的文件路径,-n后的文件替换为实际的1master-node.yaml的文件路径。

yaml
bke cluster create -f /bke/cluster/1master-cluster.yaml -n /bke/cluster/1master-node.yaml

业务集群

使用前面创建的管理集群,进一步创建业务集群,流程类似管理集群的创建流程,只需要将管理集群的addon注释掉,不进行安装。

yaml
- block: true     # 注意为cluster-api组件,管理集群有此项addon,业务集群无此项addon
  name: cluster-api
  param:
    manage: "true"
    offline: "true"
    sandbox: deploy.bocloud.k8s:40443/kubernetes/pause:3.9
  version: v1.4.3

用编辑好的配置yaml文件创建业务集群,有两种方式:

  • 使用bke安装工具,需要在管理集群节点下载bke安装工具,并执行安装指令。
bash
# 方式1:快捷下载
curl -sfL https://openfuyao.obs.cn-north-4.myhuaweicloud.com/openFuyao/bkeadm/releases/download/1.2.2/download.sh | bash
bash
# 方式2:校验下载文件的完整下载
## 下载download.sh脚本文件
curl -LO https://openfuyao.obs.cn-north-4.myhuaweicloud.com/openFuyao/bkeadm/releases/download/1.2.2/download.sh
## 下载download.sh文件的校验文件并进行校验(可选),校验成功会输出-: OK,校验失败就需要联系openFuyao社区维护人员定位原因
curl -LO https://openfuyao.obs.cn-north-4.myhuaweicloud.com/openFuyao/bkeadm/releases/download/1.2.2/download.sh.sha256
sha256sum -c <(cat download.sh.sha256) < download.sh
## 运行download.sh文件下载bke安装工具,执行过程中会校验安装工具的sha256sum
chmod +x download.sh && ./download.sh
  • 使用kubectl安装,直接调用K8s的APIServer。
bash
# 先创建命名空间,对应着配置文件中metadata.namespace字段
kubectl create namespace <metadata.namespace>

# 执行安装指令,先Apply BKENode资源,再Apply BKECluster资源
kubectl apply -f /bke/cluster/1master-node.yaml
kubectl apply -f /bke/cluster/1master-cluster.yaml

扩缩容操作指南

这里提供后端进行集群的扩缩容处理,需要在集群处于健康的情况下进行操作,集群处于非健康状态时,扩缩容操作可能会出现错误。

  • 缩容操作,将节点从已有集群中删除。

    查看已有BKENode资源。

    bash
    # bke-cluster替换为实际集群的信息
    kubectl get bn -n bke-cluster

    删除对应的BKENode资源。

    bash
    # bke-cluster-n1替换为实际的节点名称
    kubectl delete bn -n bke-cluster bke-cluster-n1

    再次执行查看已有BKENode资源命令发现无对应节点即删除成功。

  • 扩容操作,将新节点加入到已有集群中。

    编写新的节点的配置文件(newNode.yaml)。

    yaml
    apiVersion: bke.bocloud.com/v1beta1
    kind: BKENode
    metadata:
      name: bke-cluster-n1
      namespace: bke-cluster
      labels:
        cluster.x-k8s.io/cluster-name: bke-cluster
    spec:
      hostname: n1
      ip: <node-ip>
      password: '<encrypted>'
      port: "22"     
      role:
      - node
      username: root

    执行下面命令实现扩容操作。

    bash
    kubectl apply -f newNode.yaml

    执行查看已有BKENode资源命令发现对应节点Ready即扩容成功。

FAQ

在操作过程中遇到问题,可先参考定位指南Faq,尝试解决。

后续操作

完成业务集群安装后,对核心组件生成、挂载证书操作说明请参见openFuyao核心组件的证书生成和挂载

附录

附录部分介绍些Linux后端安装集群的知识。

自定义addon安装

openFuyao提供了K8s集群的安装部署能力,通过添加addon字段安装用户自定义扩展件,bke-manifests提供了社区使用的扩展件的yaml文件,包括coredns、calico等组件。此外通过hostPath挂载允许用户将自定义的扩展件的yaml文件,作到自定义addon的安装。 hostPath挂载路径是/etc/openFuyao/addons/manifests/kubernetes。

按照如下步骤进行自定义addon扩展件的安装:

  1. 拉起引导集群或者管理集群,作为业务集群的集群管理中心。

  2. 按照组件名/版本号/yaml文件的结构将自定义addon扩展件的yaml文件放置到/etc/openFuyao/addons/manifests/kubernetes目录下,如下图所示,给出的是复制操作模拟自定义处理yaml文件。

    img.png

  3. 安装业务集群时,添加addon字段安装自定义扩展件。

    img.png