1.4.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-reload
kubelet
サービスを再起動します。[core@master-X ~]$ sudo systemctl restart kubelet.service
kubelet
が正しいホスト名で起動されていることを確認します。[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 -text
Subject Name: localhost.localdomain
が含まれるcsr
を削除します。$ oc delete csr <wrong_csr>