Kubernetes を使う
2021/10/07, last updated 2022/06/05 - ~3 Minutes
コンテナ化のメリット
最近、自分のまわりでも、本番環境でコンテナ(docker)を使うようになってきた。
コンテナであれば、例えば WEB サーバであれば、apache だけを意識すればよくなる。 OS からインストールする必要はない。
また、コンテナを使わない場合は、プラットフォーム(OS、サーバ、PHP など)の最新バージョンがインストールされてしまうが、 コンテナであれば、バージョンを指定して環境を構築することができるので、テスト済みバージョンを構築することが簡単だ。
コンテナの配置を便利にする Kubernetes
さて、便利そうなコンテナなのだが、コンテナの配置を楽にするために、Kubernetes というツールがある。 データを保持するためのストレージを構成したり、 複数のコンテナをロードバランスさせたり、アプリ固有の設定情報を管理したりすることができる。
マニフェストと呼ばれる設定ファイルを用意して適用すれば、自動的にコンテナを配置する。 ソースコードのようにインフラを記述できるので、WEB 画面から手動で設定するより格段に楽で間違いも少ないと思う。
Kubernetes 関連の情報
Kubernetes を評価するにあたって、以下の書籍、URL が参考になった。
- Docker/Kubernetes 実践コンテナ開発入門
- 入門 Kubernetes
- Kubernetesドキュメント
- Google Kubernetes Engine(GKE) ドキュメント
- GKEのクイックスタート
- kubectl チートシート
- Cloud Build のドキュメント
GKE Howto
コマンド例
# SDK の初期化
gcloud init
# ビルド
gcloud build submit --tag タグ名
# ローカルで docker を使って build して、イメージ置き場(レジストリ)に push してもよい
# クラスタの作成(autopilot)
gcloud container clusters create-auto 適当なクラスタ名
# kubectl でアクセスできるようにする
gcloud container clusters get-credentials クラスタ名
# 固定IPアドレスの取得
gcloud compute addresses create 適当な名前 --global
# kubernetes の制御
kubectl apply -f マニフェストファイル名
# 削除
kubectl delete -f マニフェストファイル名
kubectl delete POD名
# 情報の取得
kubectl get pods
kubectl get nodes
kubectl get services
kubectl get ingresses
kubectl get ManagedCertificates
# 詳細情報の取得
kubectl describe pods
(services などについても同様)
# ログ表示
kubectl logs POD名
# コマンド実行
kubectl exec -it POD名 -- sh
tar cf - . | kbuectl exec -i PDO名 -- tar xvf - -C コピー先
# ファイルコピー
kubectl cp ローカルファイル名 POD名:パス
(kubectl cp httpd.conf hogehoge-nnnn-nnnn:/usr/local/apache2/httpd.conf など)
ロードバランサ設定
SSL 証明書の設定や、URL による振り分けが簡単になるので、ingress オブジェクトを作るのが良いと思う。
ヘルスチェック に応答するようにしておくこと。(サービスが開始されたとみなされず、エラーページが返る。)