Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

创建 Kubernetes 群集

使用此示例过程创建上游 Kubernetes 群集。

我们提供此示例过程纯出于信息目的。创建群集的方法多种多样。在本例中,我们使用 kubespray

为了使这些步骤更易于执行,我们使用单独的安装计算机来执行安装并运行 kubectl 和其他工具。

有关创建群集的更多信息,请参阅 Kubernetes 官方文档 (https://kubernetes.io/docs/home/)。

注意:

下面的命令行示例不显示目录路径。我们让您可以在目录结构中应用这些命令。

开始之前,请确保已启动计划用于群集节点的服务器或虚拟机。

  1. 在安装机上安装新操作系统,对操作系统进行最小配置,以用于以下各项:
    • 静态 IP 地址和掩码(例如,我们的单个群集为 172.16.0.10/24)和网关
    • 访问一个或多个 DNS 服务器
    • SSH 连接,包括根 SSH 接入
    • Ntp
    我们示例中使用的安装计算机是连接到群集网络的 Ubuntu 主机。
  2. 从本地计算机,SSH 以 root 用户身份进入安装计算机。
  3. 安装 kubectl。在本示例中,我们在安装机器上运行 kubectl。如果要在另一台机器(例如,本地计算机)上运行 kubectl,请改为在此机器上下载并安装 kubectl。
    1. 此下载 kubectl 版本 1.24.3:
    2. 使文件可执行,并将其移动到路径中的目录(例如/usr/local/bin)。
  4. 为运行的 Python 版本安装 Python 虚拟环境。在本例中,我们运行的是 Python 3.8
  5. 如果要安装 Contrail Analytics,请安装 Helm 3.0 或更高版本。
    有关如何安装 Helm 的信息,请参阅 https://helm.sh/docs/intro/install/
  6. 配置从安装计算机到控制平面和工作节点的无 SSH 密码 root 访问。当您以后运行指南时,这允许 ansible 登录到这些节点。
    1. 创建 SSH 密钥。

      在本示例中,我们将 SSH 密钥存储在其默认位置 ~/.ssh/id_rsa.pub

    2. 将密钥复制到控制平面和工作节点上的根用户。例如:
  7. 克隆 kubespray 目录。在本例中,我们要克隆 2.20 版
    例如:
  8. 安装所需的软件包,以运行此版本的 kubespray。必需的软件包在 kubespray/requirements.txt 中列出。我们将这些软件包安装在 Python 虚拟环境中
    1. 设置虚拟环境。
      虚拟环境在提示符中用 env 表示。
    2. 在虚拟环境中安装所需的软件包。
    注意:

    在此虚拟环境中执行后续步骤,直至设置群集。此虚拟环境可确保您为这个版本的 kubespray 运行正确版本的 ansible。

  9. 如果需要,配置 Pod 和服务子网。
    kubespray 使用的默认子网在 kubespray/roles/kubespray-defaults/defaults/main.yaml 文件中定义。在该文件中查找以下参数并相应地更改。
    注意:

    如果要创建多群集 CN2 设置,则必须在每个群集上配置不同的 Pod 和服务子网。这些子网在整个多群集中必须是唯一的。

    如果您遵循本文档中的多群集示例,请将中央群集上的子网保留为默认值,并在工作负载群集上配置子网,如下所示:

  10. 如果您在群集中运行 DPDK,请配置 multus。
    运行 DPDK 时需要多点。
    1. 启用多云。
      kubespray/roles/kubespray-defaults/defaults/main.yaml 中,enable multus:
    2. 将多图版本设置为 0.3.1,这是运行 DPDK 所需的版本。您可以在两个文件中设置版本。
      kubespray/roles/network_plugin/multus/defaults/main.yml 中,配置 multus 版本:
      kubespray/extra_playbooks/roles/network_plugin/multus/defaults/main.yml 中,配置 multus 版本:
  11. 创建供 ansible 使用的库存文件。例如:

    参数设置为trueoverride_system_hostname,您在文件中指定的主机名 (k8s-cp0k8s-worker0k8s-worker1, ) 将自动在节点上配置。

    注意:

    如果要创建多群集 CN2 设置,则必须为多群集中的每个节点配置不同的节点名称。在整个多群集中,节点名称必须是唯一的。

    注意:

    如果您运行的是 DPDK,请设置 kube_network_plugin_multus: true

    如果要使用不同的容器运行时运行,请更改 container_manager 上述值。

    确保 enable_nodelocaldns 设置为 false

    如果要使用不同数量的控制平面和工作节点运行,请相应地调整库存。

  12. 根据 inventory.yaml 文件的内容,检查 ansible 是否可以 SSH 进入控制平面和工作节点。在此示例中,inventory.yaml 文件位于 ~/contrail 目录中。
  13. 要创建群集,请从 kubespray 目录中运行操作指南。调整以下命令以引用目录结构中的 inventory.yaml
    这一步可能需要一个小时或更多时间才能完成,具体取决于群集的大小。
    注意:

    您可以安全地忽略网络和 CNI 警告和错误,因为您尚未配置 CNI。

  14. 或者,停用 Python 虚拟环境。我们已经完成了运行 ansible,因此不再需要虚拟环境。
  15. 将群集的安全令牌复制到默认的 ~/.kube/config 位置。kubeconfig 必须在该默认位置,CN2 工具才能工作。
    您可以从 inventory.yaml 文件中找到安全令牌位置。如果您在此示例中使用清单文件,则令牌位于 /tmp/mycluster 中。
    注意:

    如果您的 kubeconfig 已为现有群集保留令牌,则需要进行合并,而不是覆盖 ~/.kube/config 文件。

  16. 使用标准 kubectl 命令检查群集的运行状况。
    1. 显示节点的状态。
      您可以看到,由于没有 CNI 插件,节点尚未就绪。这是意料之中的,因为您尚未安装 CN2。
    2. 显示 Pod 的状态。
      除 DNS Pod 外,所有 Pod 的状态都应为“正在运行”。DNS Pod 没有出现,因为没有网络连接。这是我们所期望的。
您已成功安装新群集。您现在可以继续在此群集上安装 CN2。