Container-Optimized OS
#Compute_Engine #GoogleCloud
Container-Optimized OS  |  Google Cloud
Chromium OS ベース、GKE のデフォルトのノードイメージでもある
Links
GCP の Container-Optimized OS でサイトを運用するときの tips | gotohayato.com
パスごとの書き込みポリシー
ディスクとファイル システムの概要  |  Container-Optimized OS  |  Google Cloud
ルート パーティション: 読み取り専用としてマウントされます。
ステートフル パーティション: 書き込み可能でステートフルです。
ステートレス パーティション: 書き込み可能ですが、リブート時に内容が保存されません。
パスごとのパーティションが書いてある
cloud-init
インスタンスの作成と構成  |  Container-Optimized OS  |  Google Cloud
インスタンスメタデータの user-data の値が cloud-init として解釈される
GPU 使うならドライバは自分で入れる
GPU アクセラレータを使用してインスタンスを実行する  |  Container-Optimized OS  |  Google Cloud
code:cloud-init
runcmd:
- cos-extensions install gpu
みんな docker コマンド使える
インスタンスでのコンテナの実行  |  Container-Optimized OS  |  Google Cloud
デフォルトでは、cos イメージ上で Compute Engine が管理するすべてのユーザー アカウントが docker グループに追加されます。これにより、どのユーザーもルート権限なしで docker コマンドを実行できます。
/usr/bin/toolbox
ツールボックスを使用したノードの問題のデバッグ  |  Container-Optimized OS  |  Google Cloud
パッケージマネージャとかもなくて toolbox でやる世界観
Node Problem Detector
kubernetes/node-problem-detector: This is a place for various problem detectors running on the Kubernetes nodes.
メタデータの使用 - Node Problem Detector を使用してシステム状態をモニタリングする  |  Container-Optimized OS
Container-Optimized OS マイルストーン 88 以降では、カスタム メタデータ セクションで google-monitoring-enabled の値を true に設定することで、Node Problem Detector を有効にできます。
2021/2/21 現在
LTS で最新は 85 なので cloud-init の runcmd などで systemctl start node-problem-detector する
beta は 89, dev は 93 系なので metadata から使うのが楽
デフォルトの設定は /etc/node_problem_detector にある
code:ls -l /node_problem_detector
/etc/node_problem_detector $ ls -l
total 16
-rw-r--r-- 1 root root 451 Feb 5 04:11 docker-monitor.json
-rw-r--r-- 1 root root 1575 Feb 5 04:11 kernel-monitor.json
-rw-r--r-- 1 root root 208 Feb 5 04:11 stackdriver-exporter.json
-rw-r--r-- 1 root root 1467 Feb 5 04:11 system-stats-monitor.json
収集された指標の表示 - Node Problem Detector を使用してシステム状態をモニタリングする  |  Container-Optimized OS
Node Problem Detector は、Compute Engine インスタンスのモニタリング対象リソースに対する指標のリストを報告します。指標は、compute.googleapis.com/guest/ の接頭辞が付けられて Monitoring 指標の一覧に記載されています
Terraform からプロビジョニングした時明示的にサービスアカウント指定しないと設置されない
Terraform では明示的に渡さないと GCE インスタンスのデフォルトサービスアカウント設定されない
シャットダウンスクリプトの様子
シャットダウン スクリプトの実行  |  Compute Engine ドキュメント  |  Google Cloud
journalctl を使って見れる
$ sudo journalctl -u google-startup-scripts.service
$ sudo journalctl -u google-shutdown-scripts.service
COS では /var/log/journal 以下に永続化されていて過去のものも見れる
シャットダウンスクリプトで docker 止めなくていい
コンテナを安全に止めようと思って docker stop ... をシャットダウンスクリプトに書いていたけど
インスタンスを停止しようとしたら systemd が docker daemon を止めている様子が journalctl -u docker に残っている
なので shutdown script で docker コマンド叩いても dockerd が居ないので失敗する
シャットダウン時に各サービスを停止するのは systemd がやっている?
google compute engine - Docker seems to be killed before my shutdown-script is executed when my is VM preempted on GCE - Stack Overflow