在 Linux 上安装 Kubernetes 和 KubeSphere

本节介绍如何安装 Kubernetes 和 KubeSphere。

安装过程中将用到开源工具 KubeKey。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库

说明

您也可以直接运行安装 KubeSphere 的命令将 KubeSphere v4.1.1 升级到 v4.1.2。

前提条件

  • 您需要准备至少 1 台 Linux 服务器作为集群节点。在生产环境中,为确保集群具备高可用性,建议准备至少 5 台 Linux 服务器,其中 3 台作为控制平面节点,另外 2 台作为工作节点。如果您在多台 Linux 服务器上安装 KubeSphere,请确保所有服务器属于同一子网。

  • 集群节点的操作系统和版本须为 Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、Debian 9、Debian 10、CentOS 7、CentOS Stream、RHEL 7、RHEL 8、SLES 15 或 openSUSE Leap 15。多台服务器的操作系统可以不同。关于其它操作系统和版本支持,请联系 KubeSphere 技术支持。

  • 在生产环境中,为确保集群具有足够的计算和存储资源,建议每台集群节点配置至少 8 个 CPU 核心、16 GB 内存和 200 GB 磁盘空间。除此之外,建议在每台集群节点的 /var/lib/docker(对于 Docker)或 /var/lib/containerd(对于 containerd) 目录额外挂载至少 200 GB 磁盘空间用于存储容器运行时数据。

  • 在生产环境中,建议提前为 KubeSphere 集群配置高可用性以避免单个控制平面节点出现故障时集群服务中断。有关更多信息,请参阅配置高可用性

    说明

    如果您规划了多个控制平面节点,请务必提前为集群配置高可用性。

  • 默认情况下,KubeSphere 使用集群节点的本地磁盘空间作为持久化存储。在生产环境中,建议提前配置外部存储系统作为持久化存储。有关更多信息,请参阅配置外部持久化存储

  • 如果集群节点未安装容器运行时,安装工具 KubeKey 将在安装过程中自动为每个集群节点安装 Docker 作为容器运行时。您也可以提前手动安装 containerd、CRI-O 或 iSula 作为容器运行时。

    说明

    CRI-O 和 iSula 与 KubeSphere 的兼容性尚未经过充分测试,可能存在未知问题。

  • 请确保所有集群节点上 /etc/resolv.conf 文件中配置的 DNS 服务器地址可用。否则,KubeSphere 集群可能会出现域名解析问题。

  • 请确保在所有集群节点上都可以使用 sudocurlopenssl 命令。

  • 请确保所有集群节点时间同步。

配置防火墙规则

KubeSphere 需要特定端口和协议用于服务之间的通信。如果您的基础设施环境已启用防火墙,您需要在防火墙设置中放行所需的端口和协议。如果您的基础设施环境未启用防火墙,您可以跳过此步骤。

下表列出需要在防火墙中放行的端口和协议。

服务协议起始端口结束端口备注

ssh

TCP

22

etcd

TCP

2379

2380

apiserver

TCP

6443

calico

TCP

9099

9100

bgp

TCP

179

nodeport

TCP

30000

32767

master

TCP

10250

10258

dns

TCP

53

dns

UDP

53

metrics-server

TCP

8443

local-registry

TCP

5000

离线环境需要

local-apt

TCP

5080

离线环境需要

rpcbind

TCP

111

使用 NFS 作为持久化存储时需要

ipip

IPENCAP/IPIP

使用 Calico 时需要

安装依赖项

您需要为所有集群节点安装 socat、conntrack、ebtables 和 ipset。如果上述依赖项在各集群节点上已存在,您可以跳过此步骤。

在 Ubuntu 操作系统上,执行以下命令为服务器安装依赖项:

sudo apt install socat conntrack ebtables ipset -y

如果集群节点使用其他操作系统,请将 apt 替换为操作系统对应的软件包管理工具。

创建 Kubernetes 集群

  1. 如果您访问 GitHub/Googleapis 受限,请登录任意集群节点,执行以下命令设置下载区域:

    export KKZONE=cn
  2. 执行以下命令下载 KubeKey 最新版本:

    curl -sfL https://get-kk.kubesphere.io | sh -

    下载完成后当前目录下将生成 KubeKey 二进制文件 kk

  3. 执行以下命令为 KubeKey 二进制文件 kk 添加执行权限:

    sudo chmod +x kk
  4. 执行以下命令创建安装配置文件 config-sample.yaml

     ./kk create config --with-kubernetes <Kubernetes version>

    将 <Kubernetes version> 替换为实际需要的版本,例如 v1.28.12。KubeSphere 默认支持 Kubernetes v1.21~1.28。

    命令执行完毕后将生成安装配置文件 config-sample.yaml

    说明

    安装完成后,请勿删除安装配置文件 config-sample.yaml,后续进行节点添加等操作时仍需要使用该文件。如果该文件丢失,您需要重新创建安装配置文件。

  5. 执行以下命令编辑安装配置文件 config-sample.yaml

    vi config-sample.yaml

    以下为部分示例配置文件,如需了解完整示例,请参阅此文件

    apiVersion: kubekey.kubesphere.io/v1alpha2
    kind: Cluster
    metadata:
      name: sample
    spec:
      hosts:
      - {name: controlplane1, address: 192.168.0.2, internalAddress: 192.168.0.2, user: ubuntu, password: Testing123}
      - {name: controlplane2, address: 192.168.0.3, internalAddress: 192.168.0.3, user: ubuntu, password: Testing123}
      - {name: controlplane3, address: 192.168.0.4, internalAddress: 192.168.0.4, user: ubuntu, password: Testing123}
      - {name: worker1, address: 192.168.0.5, internalAddress: 192.168.0.5, user: ubuntu, password: Testing123}
      - {name: worker2, address: 192.168.0.6, internalAddress: 192.168.0.6, user: ubuntu, password: Testing123}
      roleGroups:
        etcd:
        - controlplane1
        - controlplane2
        - controlplane3
        control-plane:
        - controlplane1
        - controlplane2
        - controlplane3
        worker:
        - worker1
        - worker2
      controlPlaneEndpoint:
        internalLoadbalancer: haproxy # 如需部署⾼可⽤集群,且⽆负载均衡器可⽤,可开启该参数,做集群内部负载均衡
        domain: lb.kubesphere.local
        address: ""
        port: 6443
      kubernetes:
        version: v1.28.12
        clusterName: cluster.local
        containerManager: containerd # 部署 kubernetes v1.24+ 版本,建议将 containerManager 设置为 containerd
      network:
        plugin: calico
        kubePodsCIDR: 10.233.64.0/18
        kubeServiceCIDR: 10.233.0.0/18
        ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
        enableMultusCNI: false
      registry:
        privateRegistry: ""
        registryMirrors: []
        insecureRegistries: []
      addons: []
  6. config-sample.yaml 配置文件的 spec:hosts 参数下设置各服务器的信息。

    参数描述

    name

    用户自定义的服务器名称。

    address

    服务器的 SSH 登录 IP 地址。

    internalAddress

    服务器在子网内部的 IP 地址。

    port

    服务器的 SSH 端口号。如果使用默认端口 22 可不设置此参数。

    user

    服务器的 SSH 登录用户名,该用户必须为 root 用户或其他具有 sudo 命令执行权限的用户。如果使用 root 用户可不设置此参数。

    password

    服务器的 SSH 登录密码。如果已经设置 privateKeyPath 可不设置此参数。

    privateKeyPath

    服务器的 SSH 登录密钥的路径。如果已经设置 password 可不设置此参数。

    arch

    服务器的硬件架构。如果服务器的硬件架构为 Arm64,请将此参数设置为 arm64,否则请勿设置此参数。安装包默认仅支持所有集群节点都为 x86_64 或 arm64 架构的场景。如果各集群节点的硬件架构不完全相同,请联系 KubeSphere 技术支持团队。

  7. config-sample.yaml 配置文件的 spec:roleGroups 参数下设置服务器的角色:

    参数描述

    etcd

    安装 etcd 数据库的节点。请在此参数下设置集群控制平面节点。

    control-plane

    集群控制平面节点。如果您已经为集群配置了高可用性,您可以设置多个控制平面节点。

    worker

    集群工作节点。

    registry

    用于创建私有镜像服务的服务器。该服务器不会用作集群节点。 安装、升级 KubeSphere 时,如果集群节点无法连接互联网,需要在此参数下设置用于创建私有镜像服务的服务器。其他情况下请将此参数注释掉。

  8. 如果您规划了多个控制平面节点,在 config-sample.yaml 配置文件的 spec:controlPlaneEndpoint 参数下设置高可用性信息。

    参数描述

    internalLoadbalancer

    本地负载均衡器的类型。如果使用本地负载均衡配置,请将此参数设置为 haproxy。否则,请将此参数注释掉。

    domain

    负载均衡器的内部访问域名。请将此参数设置为 lb.kubesphere.local

    address

    负载均衡器的 IP 地址。如果使用本地负载均衡配置,请将此参数留空;如果使用专用负载均衡器,请将此参数设置为负载均衡器的 IP 地址;如果使用通用服务器作为负载均衡器,请将此参数设置为负载均衡器的浮动 IP 地址。

    port

    负载均衡器监听的端口号,即 apiserver 服务的端口号。请将此参数设置为 6443

  9. 如果您需要使用外部持久化存储,在 config-sample.yaml 配置文件的 spec:addons 参数下设置外部持久化存储信息。

    • 如果使用云上存储设备,在 spec:addons 下设置以下参数(将 <configuration file path> 替换为存储插件配置文件的实际路径):

        - name: csi-qingcloud
          namespace: kube-system
          sources:
            chart:
              name: csi-qingcloud
              repo: https://charts.kubesphere.io/test
              valuesFile: <configuration file path>
    • 如果使用 NeonSAN 存储设备,在 spec:addons 下设置以下参数(将 <configuration file path> 替换为存储插件配置文件的实际路径):

        - name: csi-neonsan
          namespace: kube-system
          sources:
            chart:
              name: csi-neonsan
              repo: https://charts.kubesphere.io/test
              valuesFile: <configuration file path>
    • 如果使用 NFS 存储系统,在 spec:addons 下设置以下参数(将 <configuration file path> 替换为存储插件配置文件的实际路径):

        - name: nfs-client
          namespace: kube-system
          sources:
            chart:
              name: nfs-client-provisioner
              repo: https://charts.kubesphere.io/main
              valuesFile: <configuration file path>
  10. 执行以下命令创建 Kubernetes 集群:

     ./kk create cluster -f config-sample.yaml
    说明

    如需使用 openebs localpv,可在命令后添加参数 --with-local-storage。如需对接其他存储,可在配置文件 addons 中添加配置相关存储插件,或 Kubernetes 集群部署完成后自行安装。

    如果显示如下信息,则表明 Kubernetes 集群创建成功。

    Pipeline[CreateclusterPipeline] execute successfully

安装 KubeSphere

KubeSphere Core (ks-core) 是 KubeSphere 的核心组件,为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后,即可访问 KubeSphere Web 控制台。

  1. 您需要提前安装 Helm

    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  2. 在集群节点,执行以下命令安装 KubeSphere Core。

    helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.io/main/ks-core-1.1.3.tgz --debug --wait
    说明

    如果您访问 Docker Hub 受限,请在命令后添加如下配置,修改默认的镜像拉取地址。

    --set global.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks
    --set extension.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks

    如果显示如下信息,则表明 ks-core 安装成功:

    NOTES:
    Thank you for choosing KubeSphere Helm Chart.
    
    Please be patient and wait for several seconds for the KubeSphere deployment to complete.
    
    1. Wait for Deployment Completion
    
        Confirm that all KubeSphere components are running by executing the following command:
    
        kubectl get pods -n kubesphere-system
    
    2. Access the KubeSphere Console
    
        Once the deployment is complete, you can access the KubeSphere console using the following URL:
    
        http://192.168.6.10:30880
    
    3. Login to KubeSphere Console
    
        Use the following credentials to log in:
    
        Account: admin
        Password: P@88w0rd
    
    NOTE: It is highly recommended to change the default password immediately after the first login.
    
    For additional information and details, please visit https://kubesphere.io.
  3. 从成功信息中的 ConsoleAccountPassword 参数分别获取 KubeSphere Web 控制台的 IP 地址、管理员用户名和管理员密码,并使用网页浏览器登录 KubeSphere Web 控制台。

    说明

    取决于您的网络环境,您可能需要配置流量转发规则并在防火墙中放行 30880 端口。

通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。