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 で各マスターサーバーに要求を送信します。理想的には、2つのロードバランサーが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を使用してこの問題を解決しましたが、今は必要です。ありがとうございます!

関連情報