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

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のポート指定が間違っているみたいです。
正しい値が分からないので公式サイトで確認します。
単一ノードetcdクラスター
単一ノードetcdクラスターは、テスト目的でのみ使用してください。
- 以下を実行します:
etcd --listen-client-urls=http://$PRIVATE_IP:2379 \ --advertise-client-urls=http://$PRIVATE_IP:2379
- 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ノードからのリクエストをリッスンします。
う~んわからない。
識者の方教えてください。