kubestronautへの道 ~CKS編 その3 killer coda「Apiserver Misconfigured」~

tech article

今日覚えて帰ること

今日覚えること、と言っておきながら今回のシナリオはトラブルシューティング系で明確なポイントはありません。
しいて言えば
「–etcd-servers=https://$PRIVATE_IP:$PORTのポートは/etc/kubernetes/manifests/etcd.yamlの–listen-client-urls=http://$PRIVATE_IP:$PORTを確認しよう」
です。

Killercoda Interactive Environments
Learn DevOps Linux Kubernetes CKS CKA CKAD Git Cassandra etc | Katacoda compatible

Apiserver Misconfigured

今回のシナリオは「Apiserver Misconfigured」です。

The Apiserver manifest contains errors

Make sure to have solved the previous Scenario Apiserver Crash.

The Apiserver is not coming up, the manifest is misconfigured in 3 places. Fix it.

APIserverが壊れてるから直そうぜっていう問題です。
前回の応用編って感じですね。

/etc/kubernetes/manifests/kube-apiserver.yamlを直接見て直すのもありですが、今回はログをチェックして原因を探っていきましょう。

まず/var/log/pods配下にkube-apiserverのログが吐かれているかを確認しましょう。

kube-apiserverのログはなさそうです。
そこで、kubeletのログを見てみます。
kubeletはsystemdとして動いていて、ログは/var/log/syslogに出力されます。

cat /var/log/syslog | grep kube-apiserver

を実行すると以下のようなエラーが出力されます。

よくわからないですが、pod= の周りでエラーが出ているように見えます。
一旦ファイルを見てみましょう。

メタデータの後ろがコロンではなくセミコロンになっています。
こちらを修正しましょう。
修正が完了したらkube-apiserverのログが出力されているかを確認します。

ログが出ています。
ログを確認します。

マニフェストファイルのcommandに記述する–authorization-modeが–authorization-modusと書き間違えられているようです。
これも直すだけなので直して再度ログを確認します。

podが作り替わっているため、pods配下のディレクトリの名前も変わっていることに注意してください。
ログはこのようになっています。

127.0.0.1:23000に繋ごうとして失敗しています。
マニフェストファイルを確認してみます。

–etcd-serversのポート指定が間違っているみたいです。
正しい値が分からないので公式サイトで確認します。

Kubernetes向けetcdクラスターの運用
etcdは 一貫性、高可用性を持ったキーバリューストアで、Kubernetesの全てのクラスター情報の保存場所として利用されています。 etcdをKubernetesのデータストアとして使用する場合、必ずデータのバックアッププランを作成して下さい。 公式ドキュメントでetcdに関する詳細な情報を見つけることができます。...

単一ノードetcdクラスター

単一ノードetcdクラスターは、テスト目的でのみ使用してください。

  1. 以下を実行します:etcd --listen-client-urls=http://$PRIVATE_IP:2379 \ --advertise-client-urls=http://$PRIVATE_IP:2379
  2. Kubernetes APIサーバーをフラグ--etcd-servers=$PRIVATE_IP:2379で起動します。PRIVATE_IPがetcdクライアントIPに設定されていることを確認してください。

–advertise-client-urlsと–listen-client-urlsて何が違うんやろうか。
よくわかりませんが、一旦etcdのマニフェストファイルを見てみます。

今回はどちらも同じhttps://172.30.1.2:2379だったので–etcd-serversをこの値に変更すればOKです。

GPTに違いを聞いたらこんな感じになりました。

advertise-client-urls: クライアントに対して広告されるURL。kube-apiserverはこのURLを使用してetcdに接続します。

listen-client-urls: etcdサーバーが実際にクライアントリクエストを受け付けるURL。このURLでetcdがリッスンしますが、kube-apiserverに対してはadvertise-client-urlsを使って自身を通知します。

initial-advertise-peer-urls: クラスター内の他のetcdメンバーに対して広告されるURL。これはピア間通信のために使用されます。

listen-peer-urls: クラスター内のピアリクエストを受け付けるURL。このURLでetcdが他のetcdノードからのリクエストをリッスンします。

う~んわからない。
識者の方教えてください。

タイトルとURLをコピーしました