6.5.8.3. クラスターノードが DHCP 経由で正しいホスト名を取得しない
IPv6 のデプロイメント時に、クラスターノードは DHCP でホスト名を取得する必要があります。NetworkManager はホスト名をすぐに割り当てない場合があります。コントロールプレーン (マスター) ノードは、以下のようなエラーを報告する可能性があります。
Failed Units: 2
NetworkManager-wait-online.service
nodeip-configuration.service
このエラーは、最初に DHCP サーバーからホスト名を受信せずにクラスターノードが起動する可能性があることを示しています。これにより、kubelet が localhost.localdomain ホスト名で起動します。エラーに対処するには、ノードによるホスト名の更新を強制します。
手順
hostnameを取得します。[core@master-X ~]$ hostnameホスト名が
localhostの場合は、以下の手順に進みます。注記Xは、コントロールプレーンノード (別名マスターノード) 番号になります。クラスターノードによる DHCP リースの更新を強制します。
[core@master-X ~]$ sudo nmcli con up "<bare-metal-nic>"<bare-metal-nic>を、baremetalネットワークに対応する有線接続に置き換えます。hostnameを再度確認します。[core@master-X ~]$ hostnameホスト名が
localhost.localdomainの場合は、NetworkManagerを再起動します。[core@master-X ~]$ sudo systemctl restart NetworkManager-
ホスト名がまだ
localhost.localdomainの場合は、数分待機してから再度確認します。ホスト名がlocalhost.localdomainのままの場合は、直前の手順を繰り返します。 nodeip-configurationサービスを再起動します。[core@master-X ~]$ sudo systemctl restart nodeip-configuration.serviceこのサービスは、正しいホスト名の参照で
kubeletサービスを再設定します。kubelet が直前の手順で変更された後にユニットファイル定義を再読み込みします。
[core@master-X ~]$ sudo systemctl daemon-reloadkubeletサービスを再起動します。[core@master-X ~]$ sudo systemctl restart kubelet.servicekubeletが正しいホスト名で起動されていることを確認します。[core@master-X ~]$ sudo journalctl -fu kubelet.service
再起動時など、クラスターの稼働後にクラスターノードが正しいホスト名を取得しない場合、クラスターの csr は保留中になります。csr は承認 しません。承認すると、他の問題が生じる可能性があります。
csr の対応
クラスターで CSR を取得します。
$ oc get csr保留中の
csrにSubject Name: localhost.localdomainが含まれているかどうかを確認します。$ oc get csr <pending_csr> -o jsonpath='{.spec.request}' | base64 --decode | openssl req -noout -textSubject Name: localhost.localdomainが含まれるcsrを削除します。$ oc delete csr <wrong_csr>