Kubernetes 集群的配置
Contrail 网络支持以下方式配置 Kubernetes 群集:
配置独立的 Kubernetes 集群
您可以使用 contrail-ansible-deployer 来配置独立的 Kubernetes 集群。
执行以下步骤以安装一个 Kubernetes 集群和一个 Contrail 集群并将它们集成在一起。
配置嵌套的 Contrail Kubernetes 群集
当 Contrail 为在 Contrail-OpenStack 群集的工作负载上预配的 Kubernetes 群集提供网络连接时,该群集称为嵌套 Kubernetes 群集。Contrail 组件在两个群集之间共享。
Prerequisites
在预配嵌套的 Kubernetes 群集之前,请确保满足以下先决条件:
确保您有一个基于 Contrail 网络版本 19<xx>. 的可操作的 Contrail-OpenStack 集群。
确保在 Contrail-OpenStack 群集上创建的虚拟机上有一个可操作的 Kubernetes v1.12.9 群集。
使用群集中每个节点的条目更新 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 必须具有以下条目:
x.x.x.x master1 y.y.y.y minion1 z.z.z.z minion2
如果 Contrail 容器映像存储在安全的 docker 注册表中,则必须在 生成单个 yaml 文件以创建 Contrail-k8s 群集期间使用私有 docker 注册表的凭据创建并引用 Kubernetes 密钥。
kubectl create secret docker-registry name --docker-server=registry --docker-username=username --docker-password=password --docker-email=email -n namespace
命令选项:
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 可访问性,请执行以下步骤。
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 文件中。
可以按如下方式生成此文件:
实例化 Contrail-k8s 群集
将 Contrail 组件创建为 Kubernetes 群集上的 Pod。
root@k8s:~# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE contrail-kube-manager-lcjbc 1/1 Running 0 3d contrail-kubernetes-cni-agent-w8shc 1/1 Running 0 3d
您将看到以下 pod 在 kube-system 命名空间中运行:
contrail-kube-manager-xxxxxxx - 这是充当 Kubernetes 和 OpenStack 集群之间管道的管理器
contrail-kubernetes-cni-agent-xxxxx - 这将在 Kubernetes 节点上安装和配置 Contrail CNI
配置非嵌套 Contrail Kubernetes 群集
Prerequisites
在预配非嵌套 Kubernetes 群集之前,请确保满足以下先决条件:
您必须已安装且基于 Contrail Networking Release 19xx 版本的 Contrail OpenStack 集群。
在要安装非嵌套 Contrail Kubernetes 群集的服务器上,必须已安装且正在运行的 Kubernetes 群集。
使用 Contrail 控制器标签标记 Kubernetes 主节点:
kubectl label node node node-role.opencontrail.org/config=true
确保在 Kubernetes 主节点上运行的 Kubelet 没有使用网络插件选项运行。如果 kubelet 使用网络插件选项运行,则禁用或注释掉 /etc/system/ system/kubelet.service.d/10-kubeadm.conf 配置文件中的 KUBELET_NETWORK_ARGS 选项。
注意:建议不要在 Kubernetes 主站配置网络插件,以免在控制节点上安装 vRouter 内核模块。但是,这是可选的。
重新启动 kubelet 服务:
systemctl daemon-reload; systemctl restart kubelet.service
在非嵌套模式下,Kubernetes 集群与 OpenStack 集群并排置备,而 OpenStack 集群的网络由 OpenStack 集群的相同 Contrail 组件提供。
Provisioning a Contrail Kubernetes Cluster
请按照以下步骤配置 Contrail Kubernetes 群集。