我有一个 K8S 集群,2 台服务器,1 台主服务器,1 台工作人员,一切正常。
- K8S版本:1.19.2
- 印花布:卷曲https://docs.projectcalico.org/manifests/calico.yaml-O // 修改CALICO_IPV4POOL_CIDR
- Metallb:按照推荐安装 0.9.3https://metalb.universe.tf/installation/
集群部署:
kubeadm init --pod-network-cidr "10.11.0.0/16" --upload-certs
簇:
ardc01k8s-master01.nps.local Ready master 41m v1.19.2 10.10.80.1 <none> Red Hat Enterprise Linux 8.2 (Ootpa) 4.18.0-193.19.1.el8_2.x86_64 docker://19.3.13
ardc01k8s-wrk01.nps.local Ready <none> 34m v1.19.2 10.10.80.11 <none> Red Hat Enterprise Linux 8.2 (Ootpa) 4.18.0-193.19.1.el8_2.x86_64 docker://19.3.13
当我部署具有 HA 的集群(对于多个主服务器)时,Metallb 失败并且无法读取配置映射,因此请查看它可以分配的 ip。
kubeadm init --control-plane-endpoint "10.10.80.10:6443" --pod-network-cidr "10.11.0.0/16" --upload-certs
金属控制器错误:
E1009 19:34:56.370850 1 reflector.go:125] pkg/mod/k8s.io/[email protected] 78d2af792bab/tools/cache/reflector.go:98: Failed to list *v1.Service: Get https://10.12.0.1:443/api/v1/services?limit=500&resourceVersion=0: dial tcp 10.12.0.1:443: i/o timeout
I1009 19:34:56.371672 1 trace.go:81] Trace[1783558010]: "Reflector pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:98 ListAndWatch" (started: 2020-10-09 19:34:26.371367929 +0000 UTC m=+1612.080726327) (total time: 30.000286335s):
Trace[1783558010]: [30.000286335s] [30.000286335s] END
Metallb 无法读取配置映射并且服务陷入 <Pending> 状态。
所有服务器都是全新安装的 RHEL,我制作了快照以进行回滚。有任何想法吗?
答案1
如果连接到 Kube API 服务器超时,则意味着某个地方的路由存在问题。
在安装 Metallb 之前,请验证您是否可以在内部访问 Kube API。
获取kubernetes服务的集群ip
kubectl get service kubernetes
使用集群 IP 验证与 Kube API 服务器的内部连接
kubectl run -i -t --attach test --restart=Never --image=ubuntu:20.04 -- bash
apt update -y && apt install -y curl
curl https://10.12.0.1:443
确保您可以使用端口 6443 上的物理 IP 访问每个主服务器上的 Kube API 服务器
curl https://10.10.80.10:6443
对于 HA,您需要在初始化 Kubernetes 集群之前配置外部负载均衡器。该负载均衡器侦听端口 443,该端口将请求发送到端口 6443 上的每个主服务器。理想情况下,您将有两个共享 VIP 的负载均衡器。
您可以使用 haproxy 进行简单的配置,如下所示
listen kubernetes
bind *:443
mode tcp
balance roundrobin
server kube-master-1 10.10.80.10:6443
server kube-master-2 10.10.80.11:6443
server kube-master-3 10.10.80.12:6443
现在使用 kubeadm 创建 kube 集群,但指向负载均衡器的 IP (VIP) 并使用端口 443
kubeadm init --control-plane-endpoint "MY_VIP:443" --pod-network-cidr "10.11.0.0/16" --upload-certs
确保您可以在内部和外部访问 Kube API 服务器,然后安装 Metallb
您还必须处理 etcd 的 HA,请查看文档以了解不同的选项
https://kubernetes.io/docs/setup/product-environment/tools/kubeadm/high-availability/
https://github.com/kubernetes/kubeadm/blob/master/docs/ha-considerations.md
答案2
我发现了问题,是RHEL8加上nftables和docker,看起来崩溃了。我使用 RHEL7.8 解决了这个问题,它有遗留的 iptables,不是最好的解决方案,但我现在需要它。谢谢!