コンテナ化のメリット

最近、自分のまわりでも、本番環境でコンテナ(docker)を使うようになってきた。

コンテナであれば、例えば WEB サーバであれば、apache だけを意識すればよくなる。 OS からインストールする必要はない。

また、コンテナを使わない場合は、プラットフォーム(OS、サーバ、PHP など)の最新バージョンがインストールされてしまうが、 コンテナであれば、バージョンを指定して環境を構築することができるので、テスト済みバージョンを構築することが簡単だ。

コンテナの配置を便利にする Kubernetes

さて、便利そうなコンテナなのだが、コンテナの配置を楽にするために、Kubernetes というツールがある。 データを保持するためのストレージを構成したり、 複数のコンテナをロードバランスさせたり、アプリ固有の設定情報を管理したりすることができる。

マニフェストと呼ばれる設定ファイルを用意して適用すれば、自動的にコンテナを配置する。 ソースコードのようにインフラを記述できるので、WEB 画面から手動で設定するより格段に楽で間違いも少ないと思う。

Kubernetes 関連の情報

Kubernetes を評価するにあたって、以下の書籍、URL が参考になった。

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 オブジェクトを作るのが良いと思う。

ヘルスチェックに応答するようにしておくこと。(サービスが開始されたとみなされず、エラーページが返る。)

GKE で Google が発行する SSL 証明書を使う設定

GKE で常時 https にする設定