Kubernetes는 *v1.ConfigMap을 나열할 수 없습니다: 가져오기

Kubernetes는 *v1.ConfigMap을 나열할 수 없습니다: 가져오기

K8S 클러스터, 서버 2개, 마스터 1개, 작업자 1개가 있고 모든 것이 잘 작동합니다.

클러스터 배포:

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 클러스터를 생성하되 로드 밸런서(VIP)의 IP를 가리키고 포트 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가 충돌하는 것 같았습니다. 최고의 솔루션은 아니지만 레거시 iptables가 있는 RHEL7.8을 사용하여 이 문제를 해결했지만 지금은 필요합니다. 감사해요!

관련 정보