K8Sクラスタ、サーバー2台、マスター1台、ワーカー1台があり、すべてがうまく機能します。
- K8Sバージョン:1.19.2
- 翡翠の木:カールhttps://docs.projectcalico.org/manifests/calico.yaml-O // CALICO_IPV4POOL_CIDRの変更
- Metallb:推奨事項に従って0.9.3をインストールします。https://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 で各マスターサーバーに要求を送信します。理想的には、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を使用してこの問題を解決しましたが、今は必要です。ありがとうございます!