安装和配置适用于 Kubernetes 的容器化 Contrail 控制器
本节介绍安装和预配适用于 Kubernetes 的容器化 Contrail 控制器所需的步骤。
确保满足以下先决条件才能成功配置 Contrail Kubernetes 群集。
已安装并正在运行的 Kubernetes 群集可用。
您可以选择 Kubernetes 的安装方法。
Kubernetes 群集必须至少有一个工作节点。
Kubernetes 集群由一个主节点和至少一个工作节点组成。不支持 Kubernetes“污染”主节点,这是一种在 Kubernetes 主节点上调度工作线程 Pod 的模式。
确保在 Kubernetes 主节点上运行的 Kubelet 没有 网络插件选项。
如果 Kubelet 配置了网络插件选项:
禁用或注释掉配置文件中的 KUBELET_NETWORK_ARGS 选项。
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
重新启动 Kubelet 服务。
systemctl daemon-reload; systemctl restart kubelet.service
获取具有群集角色的服务
cluster-admin
帐户令牌。您可以在预配
contrail-ansible
Contrail Kubernetes 群集期间配置此令牌。有关详细信息,请参阅
kubernetes_access_token
中的contrail-ansible
变量all.yml
。创建服务帐户并将其绑定到
cluster-admin
群集角色。kubectl create clusterrolebinding <role-binding-name> --clusterrole=cluster-admin --serviceaccount=<service-account-name>
或者,您可以将角色绑定
cluster-admin
到现有服务帐户。示例:将角色绑定
cluster-admin
到名为default
的服务帐户。kubectl create clusterrolebinding contrail-kube-manager --clusterrole=cluster-admin --serviceaccount=default:default
获取与服务帐户关联的密钥。
kubectl describe sa <service-account-name>
例子:
> kubectl describe sa default Name: default Namespace: default Labels: <none> Annotations: <none> Tokens: default-token-r353k <----- Image pull secrets: <none> Mountable secrets: default-token-r353k
获取与机密关联的令牌。
kubectl describe secret <name>
例子:
> kubectl describe secret default-token-r353k Name: default-token-r353k Namespace: default Labels: <none> Annotations: kubernetes.io/service-account.name=default kubernetes.io/service-account.uid=4fbcc5cf-3fed-11e7-acf4-0271c93f63d6 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 7 bytes token: $123ABC
安装和配置适用于 Kubernetes 的容器化 Contrail 控制器
执行以下步骤以安装适用于 Kubernetes 的容器化 Contrail 控制器:
设置从 Ansible 主机对所有主机的免密码访问。
ssh-keygen -t rsa ssh <user>@<host-ip> mkdir -p .ssh ssh <user>@<host-ip> chmod 700 .ssh cat .ssh/id_rsa.pub | ssh <user>@<host-ip> 'cat >> .ssh/authorized_keys'
确保 ssh <user>@<host-ip> 工作正常。
在 Mac OS X 或任何其他计算机上安装 Ansible。版本必须为 = 2.2.0。
sudo easy_install pip sudo pip install ansible==2.2.0
下载 contrail-kubernetes-docker_<release>_<os-name>.tgz 软件包并将其解压缩。提取的软件包包含 contrail-networking-tools_<release>.tgz 和 contrail-kubernetes-docker-images_<release>.tgz 软件包。
contrail-networking-tools_<release>.tgz 包含软件包,
contrail-ansible
而 contrail-kubernetes-docker-images_<release>.tgz 包含 Contrail 容器映像。从 contrail-networking-tools_<release>.tgz 软件包中提取
contrail-ansible
软件包。contrail-ansible
用于配置 Contrail Kubernetes 群集。存储库contrail-ansible
包含一个 site.yml 剧本,该手册具有预配功能齐全的 Contrail Kubernetes 群集所需的角色和任务。存储库中的清单文件公开了剧本预配群集所需的所有参数。建议使用基于目录的清单文件机制进行contrail-ansible
置备。注意:范围
contrail-ansible
是仅预配 Kubernetes 解决方案的 Contrail 部分。应使用推荐的 Kubernetes 准则独立预配 Kubernetes 群集。可以在以下模式下预配 Contrail Kubernetes 群集:
独立的 Contrail Kubernetes 群集
在这种模式下,Contrail 为独立的 Kubernetes 集群提供网络连接。Contrail 组件已置备并专用于此群集的管理。
嵌套 Contrail Kubernetes 群集
在此模式下,Contrail 为在 Contrail OpenStack 群集上预配的 Kubernetes 群集提供网络连接。Contrail 组件在两个群集之间共享。Ansible 仅提供直接与 Kubernetes API 服务器接口的 Contrail 组件。所有其他 Contrail 组件在 OpenStack 和 Kubernetes 集群之间共享。
在 contrail-ansible/playbook 中创建一个名为 container_images 的文件夹。通过提取 contrail-kubernetes-docker-images_<release>.tgz,将容器映像复制到此文件夹。
更新库存文件。
基于目录的置备中的清单文件如下所示:
inventory/my-inventory/hosts。有关详细信息,请参阅 清单/我的清单/主机清单文件 。
inventory/my-inventory/group_vars/all.yml.有关详细信息,请参阅 库存/我的库存/group_vars/all.yml 清单文件 。
从 contrail-ansible/playbook 运行 Ansible 剧本。
ansible-playbook -i inventory/my-inventory site.yml
inventory/my-inventory/hosts 清单文件
本节介绍独立和嵌套 Contrail Kubernetes 群集中的 参数并提供清单/我的清单/主机 清单文件的示例。
表 1 列出了 清单/我的清单/主机 清单文件中使用的参数。
在表 1 中,集群模式为以下模式之一:
独立 — 仅适用于独立集群。
嵌套 —仅适用于嵌套集群。
两者 - 适用于独立集群和嵌套集群。
参数 |
集群模式 |
描述 |
---|---|---|
Contrail-repo |
嵌 套 |
将启动 Contrail apt 或 yum 存储库容器的主机列表。其他节点将在节点中安装任何包时使用此存储库。设置 Contrail-CNI 需要启用此存储库 |
Contrail 控制器 |
单机版 |
要在其中配置 Contrail 控制器容器或进程的主机列表。. |
Contrail-Analyticsdb |
单机版 |
要置备 Contrail-analyticsdb 容器或进程的主机列表。 |
Contrail-Analytics |
单机版 |
要置备 Contrail 分析容器或进程的主机列表。 |
Contrail-Kubernetes |
两者 |
要运行 contrail-kube-manager 容器或进程的节点。 |
Contrail-compute |
两者 |
要预配为 Kubernetes 计算/工作节点的主机列表。Contrail vRouter 或 vrouter-agent 或 CNI 将在这些节点上进行配置。 |
Kubernetes-contrail-controllers |
嵌 套 |
具有预先存在的 contrail 控制器容器或进程的节点列表,contrail-kube-manager 应连接到这些容器或进程。 |
kubernetes-contrail-analytics |
嵌 套 |
具有预先存在的 contrail 分析容器或进程的节点列表,contrail-kube-manager 应连接到这些容器或进程。 |
- 示例:inventory/my-inventory/hosts 独立 Contrail Kubernetes 群集中的文件
- 示例:嵌套 Contrail Kubernetes 群集中的嵌套清单/我的清单/主机文件
示例:inventory/my-inventory/hosts 独立 Contrail Kubernetes 群集中的文件
以下是独立 Contrail Kubernetes 群集中的 inventory/my-inventory/hosts 文件示例:
[contrail-controllers] 10.xx.27.16 [contrail-analyticsdb] 10.xx.27.16 [contrail-analytics] 10.xx.27.16 [contrail-kubernetes] 10.xx.27.16 [contrail-compute] 10.xx.23.37
示例:嵌套 Contrail Kubernetes 群集中的嵌套清单/我的清单/主机文件
以下是嵌套 Contrail Kubernetes 群集中的 inventory/my-inventory/hosts 文件示例:
[contrail-repo] 10.xx.31.71 [contrail-kubernetes] 10.xx.31.71 [contrail-compute] 10.xx.31.72 [kubernetes-contrail-controllers] 10.xx.29.27 [kubernetes-contrail-analytics] 10.xx.29.27
inventory/my-inventory/group_vars/all.yml 库存文件
本节介绍独立和嵌套 Contrail Kubernetes 群集中的 参数并提供 inventory/my-inventory/group_vars/all.yml 清单文件的示例。
表 2 介绍了 清单/我的库存/group_vars/all.yml 清单文件中使用的配置参数。
在表 2 中,集群模式为以下模式之一:
独立 — 仅适用于独立集群。
嵌套 —仅适用于嵌套集群。
两者 - 适用于独立集群和嵌套集群。
参数 | 值 | 默认 | 集群模式 | 说明 |
---|---|---|---|---|
cloud_orchestrator |
Kubernetes |
没有 |
两者 |
指定业务流程协调程序类型。 |
contrail_compute_mode |
容器 |
bare_metal |
两者 |
指定 Contrail 组件是必须作为容器运行,还是作为独立服务器上的进程运行。 |
keystone_config |
{ip: <ip>, admin_password: <passwd>, admin_user: <username>, admin_tenant: <tenant-name>} |
没有 |
嵌 套 |
梯形失真身份验证信息。 |
nested_cluster_private_network |
“<集群私有网段>” |
没有 |
嵌 套 |
保留供 Kubernetes 用于内部群集管理和内务管理的 IP 子网。Ansible 用户有责任确保此 CIDR 不会与虚拟网络中的现有 CIDR 发生冲突。 |
kubernetes_cluster_name |
<群集名称> |
k8s-default |
两者 |
正在预配的 Kubernetes 群集的名称。 |
nested_cluster_network |
{域: <名称>, 项目: <名称>, 名称: <名称>} |
没有 |
嵌 套 |
必须在其中预配 Kubernetes 群集的虚拟网络。此网络必须是托管 Kubernetes 群集的虚拟机所属的网络。 |
kubernetes_access_token |
<令牌> |
没有 |
两者 |
用于连接到 Kubernetes API 服务器的 RBAC 令牌。 |
nested_mode |
真 |
没有 |
嵌 套 |
用于启用 Kubernetes 群集的嵌套预配的参数。 |
kubernetes_public_fip_pool |
{域: <id>, 项目: <id>, 网络: <id>, 名称: <id>} |
没有 |
两者 |
Kubernetes FloatingIpPool 用于服务或入口。 |
kubernetes_cluster_project |
{域: <id>, 项目: <id>} |
{域:默认域,项目:默认} |
两者 |
必须在其中配置 Kubernetes 群集的 Contrail 项目的 Fq 名称。 |
kubernetes_pod_subnet |
<网段> |
10.32.0.0/12 |
两者 |
Kubernetes 集群使用的 Pod 子网。 |
kubernetes_service_subnet |
<网段> |
10.96.0.0/12 |
两者 |
Kubernetes 群集使用的服务子网。 |
kubernetes_api_server |
<IP> |
Contrail 控制节点 IP |
两者 |
运行 kubernetes-api 服务器的节点。 |
示例:独立 Contrail Kubernetes 群集中的 inventory/my-inventory/group_vars/all.yml 文件
以下是独立 Contrail Kubernetes 群集中的 inventory/my-inventory/group_vars/all.yml 文件的示例:
docker_install_method: package docker_py_pkg_install_method: pip # ansible connection details ansible_user: root ansible_become: true ansible_ssh_private_key_file: ~/.ssh/id_rsa contrail_compute_mode: container os_release: ubuntu14.04 # contrail version contrail_version: 4.0.0.0-16 cloud_orchestrator: kubernetes # vrouter physical interface vrouter_physical_interface: enp6s0f0 # global_config: analytics_api_config: {aaa_mode: no-auth} # To configure custom webui http port webui_config: {http_listen_port: 8085} # Name of the kubernetes cluster being provisioned. kubernetes_cluster_name: k8s5 # Access token to connect to Kuberenetes API server. kubernetes_access_token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc 3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9 zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRl cy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG 9rZW4tcTUzYmYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Nlcn ZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc 2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImVhNzE1YjJkLT JhYWUtMTFlNy1iZmJmLTAyMWQwOTNhMzRkMSIsInN1YiI6InN5c3RlbTpzZ XJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.Kj0-NYBopRc8rMsX 4NnKpJa570k2iamPOgCTdj3d93MW20girt4IgdAmR4v4kifQO-h5eYGVlfA3 ftkPuWb5GbHDz9x7BoYc7b759i2cuX3AmtbCl5kNcbGY7_7JPIDkMHwwRj 7FK7Y57eEFTstCxcpR4itqxzsRi7jc0nrrcbDkvlOkDhA93ID4ChPwE2PcsAf_ LV9ds-gSzuyPIQt0qdxnQvI262AjgeNowbQhkYguoqZWJIE--AwpgSE0NiNpjc xiUx1HC2uaRSP3g9mMr2g4YQHRjxJwuz3fUkaSRNZyQEpyE5G5WKXTefc 7h52R5Kphn2nT9gg6x175mrrnNQ # Kubernetes API server IP. kubernetes_api_server: 10.14.27.16
示例:嵌套 Contrail Kubernetes 群集中的 inventory/my-inventory/group_vars/all.yml 文件
以下是嵌套 Contrail Kubernetes 群集中的 inventory/my-inventory/group_vars/all.yml 文件示例
docker_install_method: package docker_py_pkg_install_method: pip # ansible connection details ansible_user: root ansible_become: true ansible_ssh_private_key_file: ~/.ssh/id_rsa contrail_compute_mode: container os_release: ubuntu14.04 # contrail version contrail_version: 4.0.0.0-16 cloud_orchestrator: kubernetes # vrouter physical interface vrouter_physical_interface: enp6s0f0 # global_config: # To configure custom webui http port webui_config: {http_listen_port: 8085} keystone_config: {ip: 10.14.29.27, admin_password: c0ntrail123, admin_user: admin, admin_tenant: admin} ################################################### # Kubernetes cluster configuration ## # The IP subnet reserved for use by kubernetes for internal cluster management # and housekeeping. nested_cluster_private_network: "10.10.10.0/24" # Name of the kubernetes cluster being provisioned. kubernetes_cluster_name: k8s5 # Virtual Network in which the Kubernetes cluster should be provisioned. nested_cluster_network: {domain: default-domain, project: admin, name: 5-k8s-VM-network} # Access token to connect to Kuberenetes API server. kubernetes_access_token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc 3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9z ZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlc y5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9 rZW4tcTUzYmYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZp Y2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2V ydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImVhNzE1YjJkLTJhY WUtMTFlNy1iZmJmLTAyMWQwOTNhMzRkMSIsInN1YiI6InN5c3RlbTpzZXJ2 aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.Kj0-NYBopRc8rMsX4Nn KpJa570k2iamPOgCTdj3d93MW20girt4IgdAmR4v4kifQO-h5eYGVlfA3ftkPu Wb5GbHDz9x7BoYc7b759i2cuX3AmtbCl5kNcbGY7_7JPIDkMHwwRj7FK7Y 57eEFTstCxcpR4itqxzsRi7jc0nrrcbDkvlOkDhA93ID4ChPwE2PcsAf_LV9ds-g SzuyPIQt0qdxnQvI262AjgeNowbQhkYguoqZWJIE--AwpgSE0NiNpjcxiUx1HC2 uaRSP3g9mMr2g4YQHRjxJwuz3fUkaSRNZyQEpyE5G5WKXTefc7h52R5Kph n2nT9gg6x175mrrnNQ # Kubernetes cluster is nested within an Openstack cluster. nested_mode: true # Kubernetes API server IP. kubernetes_api_server: 10.14.27.16