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