【发布时间】:2020-10-06 06:47:58
【问题描述】:
我正在设置我的第一个 Kubernetes 集群。我们期望混合使用 Windows 和 Linux 节点,所以我选择 flannel 作为我的 cni。我使用 RHEL 7.7 作为我的主节点,我有另外两台 RHEL 7.7 机器作为工作节点,然后剩下的是 Windows Server 2019。在大多数情况下,我遵循 Microsoft 网站上提供的文档:https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/getting-started-kubernetes-windows 和一个Kubernetes 站点:https://kubernetes.cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/。我知道 Microsoft 网站上的文章已有 2 年多的历史了,但这只是我找到的混合模式操作指南。
到目前为止,我已经在 Master 和 worker RHEL 节点上完成了以下工作:
- 已停止并禁用了防火墙
- 禁用 selinux
- 更新 && 升级
- 已禁用交换分区
- 为我的 Kubernetes 集群中涉及的所有节点添加了 /etc/hosts 条目
- 已安装 Docker CE 19.03.11
- 安装 kubectl、kubeadm 和 kubelet 1.18.3(构建日期 2020-05-20)
- 为 Flannel 准备 Kubernetes 控制平面:
sudo sysctl net.bridge.bridge-nf-call-iptables=1
我现在已经在 RHEL 主节点上完成了跟踪
初始化集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
kubectl 作为非 root 用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
为节点选择器打补丁
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system
补丁后,kube-proxy 长这样:
添加法兰绒
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
修改 flannel 清单的 net-conf.json 部分,以便将 VNI 设置为 4096,将端口设置为 4789。它应该如下所示:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"VNI" : 4096,
"Port": 4789
}
}
应用修改后的 kube-flannel
kubectl apply -f kube-flannel.yml
添加网络后,这是我在 kube-system 中获得的 pod
添加 Windows Flannel 和 kube-proxy DaemonSets
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.18.0/g' | kubectl apply -f -
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml
加入工作节点 我现在尝试通过执行 IU 初始化集群时生成的 kubeadm join 命令来加入 RHEL 7.7 工作节点。 工作节点初始化良好,如下所示:
当我转到我的 RHEL 工作节点时,我看到 k8s_install-cni_kube-flannel-ds-amd64-f4mtp_kube-system 容器已退出,如下所示:
- 如果我遵循正确的程序,请告诉我?我相信 Flannel CNI 需要与 Kubernetes 集群中的 pod 通信
- 如果 Flannel 难以设置为混合模式,我们可以使用其他可以工作的网络吗?
- 如果我们决定只使用 RHEL 节点,我可以安装最好、最简单的网络插件,而不会遇到很多问题?
谢谢,我很感激。
【问题讨论】:
-
您的容器 (install-cni...) 以代码 0 退出的事实应该表明 flannel 的配置是正确的。是的,你是正确的,CNI 是 Pod 通信所必需的。要检查您的 CNI 是否正常工作,您可以在 2 个不同的节点上生成 2 个 pod 并尝试在它们之间建立连接(例如 ping 它们)。请让我知道结果。至于最后一个问题,这实际上取决于您的 CNI 需要哪些功能。以here 为例。
-
大卫,感谢您的评论。我目前正在试验 nginx 部署,它附带了最低限度的 Linux 内核安装。我可以使用 exec 命令进入容器,但是在容器中时,我不能使用 ping,因为它说命令不是 fount。我尝试了apt install,它说无法找到包“iputils-ping”。有什么方法可以从这个最小的 linux 容器测试 ping 吗?如果我问的问题可能没有意义,我很抱歉,但我对所有这些都很陌生,并且正在努力学习。
标签: kubernetes flannel