メルペイ社が主催しているGopher道場の課外学習としGCPの勉強会があったので参加してきました。
Gopher道場については過去記事をご覧ください。
講師は @sinmetal 氏です。
今回はDay 1として Google Kubernetes Engine (GKE) をやりました。
内容としては、前半が座学でKubernetes(k8s)とGKEの概要を教わり、後半は以下の資料を見ながら各自で手を動かしながら理解を深めました。
座学部分のメモです。
Kubernetesとは?
- コンテナオーケストレーションツール
- Borgの知見を元に開発された。
- デファクトに近い存在
Kubernetesがやってくれること
- アジャイルアプリケーションの作成と展開
- Webアプリ、DB、ロードバランサの作成、スケール
構成
- Pod
- コンテナを複製束ねることができる。同じPod内のコンテナは同一ノードに配置される
- Podがデプロイの最小単位になる
- Compute Engineが担当
- マスタ
- リソース状況をみて、Podを追加する
- GKEが管理してくれる
- ReplicaSet
- Podを管理するコントローラ
- Pod数の管理
- 指定した数を維持しようとする
- 世代管理(ロールバックなど)
- Deployment
- ReplicaSetの世代管理
- ReplicaSetで管理するイメージの入れ替えなど
- Service
- 複数Podへの通信をバランシングするロードバランサ
- 実際のLBではなく抽象的なもの
- Igress
- クラスタ外からの通信をServiceに渡す
- IaaS提供のロードバランサと連携する。GCPだとHTTP Load Balancer、TCP Load Balanerとなる
- Label
- リソースにタグをつける
- ラベル対象のみサービスデプロイすることができる
- Blue-Green Deploymentもラベルで制御できる
- Volume
- 永続化するデータ格納領域
- GCP:永続ディスク
- nfs
料金
- Compute Engineの利用料金のみ
- プリエンプティブVMだと8割引。ただし24時間以内に落とされる。落とされたら復旧してくれる
クラスタの作成
GKEのみノードプールというのがある
- ノード数とマシンタイプを選択する
- GPUつけるノードを個別に選択することもできる
Kubernetesのバージョンアップ
- オンプレミスだとバージョンアップがつらい
- GKEだとバージョンアップが簡単にできる
- GKEとGCLBとの関係
- HTTP LBは HTTPでヘルスチェックを行い 200 OKが返って来ないとInServiceにならない
- GKEクラスタができれば後は大体 k8s として操作する
- kubectlで操作する
- DeploymentはGCPコンソールの
Workloads
に表示される
Cloud Container Registry
- プライベートコンテナレジストリ
- ファイルはGCSに保管されている
artifacts.{project-id}.appspot.com
Cloud Build
- コンテナのイメージをビルドする
- Go言語のビルドとかもできる
- トリガ機能でGitHubとかに自動的にビルドすることができる
- ローカルでdocker buildしなくても Cloud Buildつかうこともできる
- 一人で開発しているときにCloud BuildでBuildした後に、k8sにそのまま適用している
Q&A
- Q.EKSのマルチリージョンに対応はしているか?
- A.現時点では対応していない。k8s自体も対応していないがロードマップはある
- Q.GKEで作ったGCEインスタンスに対してネットワークタグをつけてFirewall ルールで制御可能か?
- A.GCEのFirewallルールに対応しきれていない
- 今はk8s側で制御する
- GCEのFirewallルールで制御はしないほうがよい
- A.GCEのFirewallルールに対応しきれていない
- Q.GKE のクラスタ自体はTerraformとかで管理しているのか?
- A.Terraformとかで管理していない。自動的に書き換わったりするので相性が悪い
- Q.ホスト側のGCEインスタンスに対して、セキュリティ対策ソフトなど何か設定したりインストールすることはあるか?
- A.基本的にはホスト側にいれることはめったにない
- ホストのImageをUbuntuにすることもできるので、頑張ればインストールできるが、k8sのVersion Upはなかなかしんどいかも
- Q.k8sのYAMLファイルの管理や書き換えによるデプロイを楽にしたい
- A.Spinnakerは設定に従って、k8sの設定を書き換えてくれる
- イメージのバージョンアップや、Blue-Green Deployment, カナリアリリースもできる
- Spinnakerは大きいので、場合によってはk8sの設定を書き換える必要最低限のツールなんかは作っても良いかも
- Helm というのもあってYAMLのテンプレートを作ったりする
- 開発者一人ずつにテスト環境作りたいみたいな時に、たくさんのYAMLをLabelとかNameを変えてapplyするのは大変なので、Helm使うとそこを変数にして適用したりできる
- A.Spinnakerは設定に従って、k8sの設定を書き換えてくれる
最後に
k8sについては本でざっと概要を掴んでいたのですが、改めて座学で復習したのでより頭に入りました。k8sとGKEの関係についても理解できました。
マニアックな質問も含めいろいろしたのですが、すぐにSlackや口頭で回答いただけました。ありがとうございました!
次回はSpannerということで楽しみです!