Google Kubernetes Engineのクラスター管理

GKEのk8sバージョンアップ

Google Kubernetes Engine(GKE)では、利用しているkubernetesのバージョンをWebコンソールから管理できます。

Cloud Platformの管理コンソールで「Kubernetes Engine」メニューを選択すると利用中のコンテナクラスタ一覧が表示され、バージョンアップ可能なクラスタには「アップデートが利用可能」と表示されています。

バージョンアップしたいクラスターの詳細画面で実際にアップグレード操作を実行可能です。バージョンはマスターとノードの2つあり、マスター→ノードの順に更新する必要があります。

更新は自動で行われますが、一度クラスタ全体が停止し、完了まで10分弱かかります。

サーバーのルートにマウントされている起動ディスクの内容は消えます。データベース用途などで追加でマウントしたPersistent Diskはそのまま保持されます。また、コンテナも一度すべて削除され、ノードのアップグレード後に再作成されますが、これはReplication Controllerの設定から起動したものに限られます。

確認はしていませんが、おそらく単体のpodとして起動設定したコンテナはノード作成後に再作成されないはずなので注意が必要です。

k8sから外部に接続できない場合の応急処置

kubernetesのpodから外部のネットワークに接続できない事象に遭遇しました。

外部からのリクエストは適切に処理できていますが、コンテナ内からapt-get、gitなど外部ネットワークにアクセスできない状況です。

正常なクラスタのpodでは、ping some-external.example.comのようにpingのレスポンスを取得できますが、障害のあるクラスタではpingが通りません。

DNSがひけないことが原因でホスト名が解決できていない問題のため、public DNSのアドレスをname serverに追加することで応急処置できました。

# echo "nameserver 8.8.8.8" >> /etc/resolv.conf

ただし、この方法では、ネットワークアクセスのレスポンス遅延は残っているのと、根本的な解決にはなっていません。

また、この事象に遭遇してから数日間経過を見ていましたが、自動で回復することはありませんでした。最終的に冒頭のアップグレード操作を行い、ノードごと作り直すことで復旧しました。

※ このトラブルは最終的に、リソース不足によるkube-dnsコンテナの異常終了によるものでした。 kubernetesの管理コンテナ群を操作する[1]で解説しています。

中馬崇尋
Chuma Takahiro