为 Kubernetes 配置 Contrail CNI
您可以使用以下过程为 Kubernetes 配置 Contrail 容器网络接口 (CNI)。
要求
此过程需要满足以下最低虚拟机和主机规格:
32 GB 内存
八个 vCPU
150 GB 磁盘空间
为 Kubernetes 配置 Contrail CNI 时,支持的软件版本如下:
Kubernetes 1.6
Docker 引擎版本 1.11.0 到 1.13.0
Ubuntu 16.04.2 或 CentOS 7 操作系统
Preparing for Installation
在为 Kubernetes 配置 Contrail CNI 之前,请确保满足以下先决条件:
停止防火墙服务并删除所有 iptable 规则。
对于 Ubuntu 16.04 主机操作系统,请使用以下命令:
sudo service ufw stop sudo iptables -F
对于 CentOS 7 主机操作系统,请使用以下命令:
sudo service firewalld stop sudo iptables -F
确保 Kubernetes 群集正在运行。你可以选择任何方法来安装 Kubernetes。有关快速安装步骤,请使用以下命令:
适用于 Ubuntu 16.04 主机操作系统的命令:
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl -y curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF' sudo apt-get update -y sudo apt-get install -y kubectl sudo apt-get install -y kubelet sudo apt-get install -y kubeadm sudo apt-get install -y docker-engine sudo kubeadm init mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # If you have multi-node cluster then please copy paste the kubeadm join line # on all the slave nodes from the stdout of sudo kubeadm init command. # It looks like below sudo kubeadm join --token fd554a.97d239c2234d0de352 192.0.2.0:6443
适用于 CentOS 7 主机操作系统的命令:
sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF' sudo setenforce 0 || true yum install -y kubelet kubeadm kubectl docker systemctl enable docker && systemctl start docker systemctl enable kubelet && systemctl start kubelet echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables sudo kubeadm init --kubernetes-version v1.7.4 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # If you have multi-node cluster then please copy paste the kubeadm join line # on all the slave nodes from the stdout of sudo kubeadm init command. # It looks like below sudo kubeadm join --token fd554a.97d239c2234d0de352 192.0.2.01:6443
使用以下命令修补 kube-dns 部署的 LivenessProbe 和 RereadynessProbe :
kubectl patch deploy/kube-dns --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/readinessProbe", "value": {"exec": {"command": ["wget", "-O", "-", "http://192.0.2.1:8081/readiness"]}}}]' -n kube-system kubectl patch deploy/kube-dns --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/livenessProbe", "value": {"exec": {"command": ["wget", "-O", "-", "http://192.0.2.1:10054/healthcheck/kubedns"]}}}]' -n kube-system && kubectl patch deploy/kube-dns --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/1/livenessProbe", "value": {"exec": {"command": ["wget", "-O", "-", "http://192.0.2.1:10054/healthcheck/dnsmasq"]}}}]' -n kube-system && kubectl patch deploy/kube-dns --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/2/livenessProbe", "value": {"exec": {"command": ["wget", "-O", "-", "http://192.0.2.1:10054/metrics"]}}}]' -n kube-system
(可选)如果要在同一设置上重新配置 Contrail,请确保从以前的安装中删除 configdb 和分析数据库数据。
sudo rm -rf /var/lib/contrail* sudo rm -rf /var/lib/configdb* sudo rm -rf /var/lib/analyticsdb*
概述
Kubernetes 是一个开源平台,用于跨主机群集自动部署、扩展和操作应用程序容器,提供以容器为中心的基础架构。Kubernetes 支持称为 CNI 的可插拔框架,用于大多数基本网络连接,包括容器 Pod 寻址、网络隔离、基于策略的安全性、网关、SNAT、负载均衡器和用于 Kubernetes 编排的服务链功能。Contrail 支持 CNI 将 Contrail 与 Kubernetes 自动化平台集成。
配置
程序
分步过程
要为 Kubernetes 配置 Contrail CNI,请执行以下步骤:
Git 克隆 contrail-docker 存储库。
git clone https://github.com/Juniper/contrail-docker.git -b R4.0
将目录更改为 contrail-docker/kubernetes/manifests/。
cd contrail-docker/kubernetes/manifests/
编辑单个 yaml 文件。您可以使用任何编辑器来编辑文件。
对于 Ubuntu 16.04 主机操作系统:
vim contrail-host-ubuntu.yaml
对于 CentOS 7 主机操作系统:
vim contrail-host-centos.yaml
在配置映射中编辑以下变量,并根据您的设置进行更改。必须更改的强制变量包括 config_nodes、controller_nodes、analytics_nodes、analyticsdb_nodes 和 api_server。有关更多信息,请参阅为 Kubernetes 配置 Contrail 时的可定义输入变量 。
data: global-config: |- [GLOBAL] cloud_orchestrator = kubernetes sandesh_ssl_enable = False enable_config_service = True enable_control_service = True enable_webui_service = True introspect_ssl_enable = False config_nodes = "192.0.2.2" controller_nodes = 192.0.2.2 analytics_nodes = 192.0.2.2 analyticsdb_nodes = 192.0.2.2 agent-config: |- [AGENT] compile_vrouter_module = True # Optional ctrl_data_network, if different from management # ctrl_data_network = "192.0.2.3/24" kubemanager-config: |- [KUBERNETES] cluster_name = k8s-default cluster_project = {'domain': 'default-domain', 'project': 'default'} cluster_network = {} service_subnets = 192.0.2.4/12 pod_subnets = 192.0.2.5/12 api_server = 192.0.2.2 kubernetes-agent-config: |- [AGENT]
(可选)如果设置是单节点设置,则取消注释 contrail-agent 守护程序集中的以下行。
#tolerations: #- key: node-role.kubernetes.io/master # operator: Exists # effect: NoSchedule
使用以下命令部署 Contrail。
kubectl apply -f contrail-host-ubuntu.yaml
验证所有 Contrail 容器上的 Contrail 状态。使用以下命令查找 Contrail 容器名称。
kubectl get pods -n kube-system contrail-analytics-9m545 1/1 Running 1 23h contrail-analyticsdb-cpdjn 1/1 Running 1 23h contrail-controller-gd5vl 1/1 Running 1 23h contrail-kube-manager-82fcq 1/1 Running 1 23h contrail-vrouter-agent-vwmbk 1/1 Running 1 23h
contrail-status
使用以下命令检查所有 Pod 的 。kubectl exec -it <contrail-pod-name> -n kube-system -- contrail-status
故障 排除
- #troubleshooting__d14658e185
- #troubleshooting__d14658e199
- #troubleshooting__d14658e213
- #troubleshooting__d14658e230
问题
检查 Contrail Pod 是否正在运行。
解决 方案
使用以下命令列出 Contrail 容器:
kubectl get pods -n kube-system -o wide | grep contrail
问题
确保显示 contrail-agent Pod 的步骤。
解决 方案
如果设置是单节点设置,则取消注释 contrail-agent 守护程序集中的以下行。
#tolerations: #- key: node-role.kubernetes.io/master # operator: Exists # effect: NoSchedule
问题
在 Kubernetes 主节点以外的节点上启动 Contrail 控制平面 Pod。
解决 方案
使用 opencontrail.org/controller=true
以下命令将节点标记为:
kubectl label node <node-name> opencontrail.org/controller=true