GKEの概要
GKEは、GoogleCloud上でkubernetes(k8s)を簡単に扱えるようにしたサービス。
kubernetes(k8s)とは
コンテナオーケストレーションツールと呼ばれるもので、コンテナの起動・停止・デプロイ・増減(オートスケール)などをまるっと自動化できる仕組みのこと。
また、ヘルスチェックという機能でコンテナに障害が発生したときに、自動で再作成してくれる。その間は障害が発生したコンテナにはトラフィックを流さず、再作成した方に流すのもいい感じにやってくれる。
コンテナ管理の仕組み・アーキテクチャ
ノード(Node)
k8sを構成するサーバ(物理的サーバ・仮想マシン)のことをノードという。
ノードは2種類あって、コンテナ化されデプロイされたノードをワーカーノードといい、コンテナ化されたものをどのワーカーノードに割り振りするか管理(クラスタ全体を監視・管理も行う)するノードをマスターノードという。(司令塔みたいな)
クラスタは、それぞれのノードをひとまとめにした単位。
pod
k8sでコンテナをデプロイする際の最小単位のまとまりのこと。(いまいちピンとこないな)
service
複数のpodへの接続を容易にするための機能のようなもの。
podはたくさんのノードに存在するため、特定podと通信するにはIPを指定する必要があるが、k8sはIPが固定ではないため?失敗する可能性がある。
そして、serviceには5つのタイプが存在する。
(が、正直あまり理解できていない。1,2あたりがよく使われるっぽい)
- ClusterIP
- NodePort
- LoadBalancer
- TCPロードバランサを利用できる仕組み(どゆこと?)
- ExternalName
- 外部ドメインにアクセスできる仕組み
- Headless
- podのIPアドレスを直接返してくれる仕組み
レプリカセット
podを複製して、指定した数のpodを作成するリソース。
レプリカ自体は、後述のデプロイメントによって作成される。
デプロイメント
レプリカセットのさらに上位に当たるもので、k8sにおけるデプロイを管理するもの。
Ingressを使用した外部負荷分散
外部サービスであるLoad Balancer(HTTP)を連携して、サービスへのアクセスを行うシステム?
あれ、NodePortを使用すれば、クラスタ内にアクセスできるんじゃないっけ?(GPT先生によると、ポートの競合などがNodePortのみだと起こる可能性があって、そういった問題をIngressは解消でき、柔軟に利用することができるメリットがあるらしい)
これまで出てきたものを図解すると。。(もっと細かく書いたら超複雑なんだろうなぁ。)
特徴
ローリングアップデートが自動
更新後のアプリケーションをデプロイが全て自動で行われる。
GCEの手動で行うとなると、インスタンス作成→デプロイ→ロードバランサの向き先変えて、古いインスタンス削除して。。と面倒。。
ロールバック
マスタノードで設定ファイルの履歴を管理しているため、デプロイが不安定の場合等に前の状態にロールバックできる仕組みがある。
オートスケール
ワーカーノード自体を増減するものとワーカーノード上に稼働しているpodを増減する2つのスケール機能が簡単に利用できる。
参考
終わり
結構難しかった。。所々わからない部分がありましたが、大枠は理解できたつもりなので、今回は良しとしたいと思います。(いい加減ですみません)
大分端折ってるのですが、まとめるのは時間がかかりますね。あと3記事くらいありそうですが、頑張って行きたいと思います。(リアクションもらえるとモチベになります)