Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Kubernetes 集群的配置

Contrail 网络支持以下方式配置 Kubernetes 群集:

配置独立的 Kubernetes 集群

您可以使用 contrail-ansible-deployer 来配置独立的 Kubernetes 集群。

执行以下步骤以安装一个 Kubernetes 集群和一个 Contrail 集群并将它们集成在一起。

  1. 有关支持的平台的列表,请参阅 支持的平台 Contrail 版本
  2. 安装必要的工具。

    yum -y install epel-release git ansible net-tools

  3. contrail-ansible-deployer-19<xx>.<NN>.tgz下载Ansible Deployer 应用程序工具包从 Contrail 下载页面到您的配置主机上,然后解压缩该软件包。

    - tar xvf contrail-ansible-deployer-19<xx>.<NN>.tgz

  4. 导航到 contrail-ansible-deployer 目录。

    cd contrail-ansible-deployer

  5. 编辑 config/instances.yaml 并输入必要的值。请参阅 了解 Contrail 命令中使用的 contrail-ansible-deployer ,获取示例 config/instances.yaml 文件。
  6. 关闭 swap 所有节点上的功能。

    swapoff -a

  7. 配置节点。

    ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/configure_instances.yml

  8. 安装 Kubernetes 和 Contrail。

    ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_k8s.yml

    ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_contrail.yml

  9. 打开 swap 所有节点上的功能。

    swapon -a

配置嵌套的 Contrail Kubernetes 群集

当 Contrail 为在 Contrail-OpenStack 群集的工作负载上预配的 Kubernetes 群集提供网络连接时,该群集称为嵌套 Kubernetes 群集。Contrail 组件在两个群集之间共享。

Prerequisites

在预配嵌套的 Kubernetes 群集之前,请确保满足以下先决条件:

  1. 确保您有一个基于 Contrail 网络版本 19<xx>. 的可操作的 Contrail-OpenStack 集群。

  2. 确保在 Contrail-OpenStack 群集上创建的虚拟机上有一个可操作的 Kubernetes v1.12.9 群集。

  3. 使用群集中每个节点的条目更新 Kubernetes 主节点上的 / etc/hosts 文件。

    例如,如果 Kubernetes 集群由三个节点组成,例如 master1 (IP: x.x.x.x)、minon1 (IP: y.y.y.y.y) 和 minion2 (IP: z.z.z.z)。Kubernetes 主节点上的 / etc/hosts 必须具有以下条目:

  4. 如果 Contrail 容器映像存储在安全的 docker 注册表中,则必须在 生成单个 yaml 文件以创建 Contrail-k8s 群集期间使用私有 docker 注册表的凭据创建并引用 Kubernetes 密钥。

    命令选项:

    • name- 密钥的名称。

    • registry- 注册表的名称。示例:hub.juniper.net/contrail。

    • username- 用于登录注册表的用户名。

    • password- 用于登录注册表的密码。

    • email- 注册表帐户的注册电子邮件。

    • namespace- 必须在其中创建密钥的 Kubernetes 命名空间。这应该是您打算在其中创建 Contrail Pod 的命名空间。

以下步骤介绍如何预配嵌套的 Contrail Kubernetes 群集。

配置与 Contrail 配置和数据平面功能的网络连接。

嵌套的 Kubernetes 集群由管理底层 OpenStack 集群的相同 Contrail 控制进程管理。

kube-manager 本质上是 Contrail Config 功能的一部分。在嵌套部署中,每个叠加集群中将预配一个 kube-manager 实例。这就需要 在叠加层中运行的 kube-manager 必须具有网络可访问性,才能访问底层 OpenStack 集群的 Contrail 配置功能。

以下 Contrail 配置功能需要网络连接:

  • Contrail 配置

  • Contrail 分析

  • Contrail 消息队列

  • Contrail VNC DB

  • 重点

除了配置连接之外,Kubernetes 群集的 CNI 还需要对其计算节点上的 vRouter 具有网络可访问性。还需要 vRouter 数据平面功能的网络连接。

您可以使用链路本地服务功能或链路本地服务与 Contrail 的结构源网络地址转换 (SNAT) 功能的组合,提供与叠加 Kubernetes 群集配置和数据组件之间到底层 OpenStack 群集的相应配置和数据组件的 IP 可访问性。

若要使用带有链接本地服务的交换矩阵 SNAT 提供与 Kubernetes 群集之间的 IP 可访问性,请执行以下步骤。

  1. 在 VM 的虚拟网络上启用结构 SNAT。

    必须在运行 Kubernetes 主节点和工作节点的虚拟机的虚拟网络上启用结构 SNAT 功能。

  2. 为容器网络接口 (CNI) 创建链路本地服务,以便与其虚拟路由器代理进行通信。在以下示例中,应使用 Contrail GUI 配置此链路本地服务:

Contrail 流程

服务 IP

服务端口

交换矩阵 IP

结构端口

虚拟路由器

Service-IP for the active node

9091

127.0.0.1

9091

注意:

交换矩阵 IP 地址为 127.0.0.1,因为您必须使 CNI 与其底层节点上的虚拟路由器通信。

例如,必须创建以下链接本地服务:

链接本地服务名称

服务 IP

服务端口

交换矩阵 IP

结构端口

K8s-cni-to-agent

10.10.10.5

9091

127.0.0.1

9091

注意:

此处 10.10.10.5 是您选择的服务 IP 地址。这可以是群集中任何未使用的 IP。此 IP 地址主要用于标识链路本地流量,没有其他意义。

生成单个 yaml 文件以创建 Contrail-k8s 群集

Contrail 组件作为 Pod 安装在 Kubernetes 群集上。在 Kubernetes 中创建这些 Pod 的配置被编码在一个 yaml 文件中。

可以按如下方式生成此文件:

  1. contrail-ansible-deployer-19<xx>.<NN>.tgz下载Ansible Deployer 应用程序工具包从瞻博网络到您的配置主机上,然后解压缩该软件包。

    - tar xvf contrail-ansible-deployer-19<xx>.<NN>.tgz

  2. 导航到 contrail-container-builder 目录。

    cd contrail-container-builder

  3. 使用与您的集群和环境相对应的信息填充位于克隆的 contrail-container-builder 存储库顶部目录中的 common.env 文件。

    有关参考,请参阅此处的示例 common.env 文件,其中包含所需的最低配置 https://github.com/Juniper/contrail-container-builder/blob/master/kubernetes/sample_config_files/common.env.sample.nested_mode

    注意:

    如果 Contrail 容器映像存储在安全的 docker 注册表中,则必须创建并引用 Kubernetes 机密,如先决条件的 4 中所述。在 common.env 文件中使用生成的 Kubernetes 密钥的名称填充变量 KUBERNETES_SECRET_CONTRAIL_REPO=<>secret-name

  4. shell 中生成 yaml 文件,如下所示:
  5. 将从 4 生成的输出(或文件)复制到 Kubernetes 集群中的主节点。

实例化 Contrail-k8s 群集

将 Contrail 组件创建为 Kubernetes 群集上的 Pod。

您将看到以下 pod 在 kube-system 命名空间中运行:

contrail-kube-manager-xxxxxxx - 这是充当 Kubernetes 和 OpenStack 集群之间管道的管理器

contrail-kubernetes-cni-agent-xxxxx - 这将在 Kubernetes 节点上安装和配置 Contrail CNI

配置非嵌套 Contrail Kubernetes 群集

Prerequisites

在预配非嵌套 Kubernetes 群集之前,请确保满足以下先决条件:

  1. 您必须已安装且基于 Contrail Networking Release 19xx 版本的 Contrail OpenStack 集群。

  2. 在要安装非嵌套 Contrail Kubernetes 群集的服务器上,必须已安装且正在运行的 Kubernetes 群集。

  3. 使用 Contrail 控制器标签标记 Kubernetes 主节点:

  4. 确保在 Kubernetes 主节点上运行的 Kubelet 没有使用网络插件选项运行。如果 kubelet 使用网络插件选项运行,则禁用或注释掉 /etc/system/ system/kubelet.service.d/10-kubeadm.conf 配置文件中的 KUBELET_NETWORK_ARGS 选项。

    注意:

    建议不要在 Kubernetes 主站配置网络插件,以免在控制节点上安装 vRouter 内核模块。但是,这是可选的。

  5. 重新启动 kubelet 服务:

在非嵌套模式下,Kubernetes 集群与 OpenStack 集群并排置备,而 OpenStack 集群的网络由 OpenStack 集群的相同 Contrail 组件提供。

Provisioning a Contrail Kubernetes Cluster

请按照以下步骤配置 Contrail Kubernetes 群集。

  1. contrail-ansible-deployer-19<xx>.<NN>.tgz下载Ansible Deployer 应用程序工具包从瞻博网络到您的配置主机上,然后解压缩该软件包。

    - tar xvf contrail-ansible-deployer-19<xx>.<NN>.tgz

  2. 导航到 contrail-container-builder 目录。

    cd contrail-container-builder

  3. 使用与您的集群和环境相对应的信息填充位于克隆的 contrail-container-builder 存储库顶部目录中的 common.env 文件。

    有关具有必需的最低配置的示例 common.env 文件,请参阅 https://github.com/Juniper/contrail-container-builder/blob/master/kubernetes/sample_config_files/common.env.sample.non_nested_mode

    注意:

    如果 Config API 不受梯形图保护,AUTH_MODE请确保在填充 common.env 文件时未配置或存在 和KEYSTONE_*变量。

  4. 生成 yaml 文件,如下所示:
  5. 将从 4 生成的文件复制到 Kubernetes 集群中的主节点。
  6. 在 Kubernetes 群集上将 Contrail 组件创建为 Pod,如下所示:
  7. 在 Kubernetes 群集上创建以下 Contrail Pod。确保仅在工作器节点上创建 contrail-agent Pod。