プログラマーの雑レポート

脳死で読めるコードを書きたい

(GCP入門)GoogleKubernetesEngine(GKE)について

 

GKEの概要

GKEは、GoogleCloud上でkubernetes(k8s)を簡単に扱えるようにしたサービス。

kubernetes(k8s)とは

コンテナオーケストレーションツールと呼ばれるもので、コンテナの起動・停止・デプロイ・増減(オートスケール)などをまるっと自動化できる仕組みのこと。

また、ヘルスチェックという機能でコンテナに障害が発生したときに、自動で再作成してくれる。その間は障害が発生したコンテナにはトラフィックを流さず、再作成した方に流すのもいい感じにやってくれる。

コンテナ管理の仕組み・アーキテクチャ

ノード(Node)

k8sを構成するサーバ(物理的サーバ・仮想マシン)のことをノードという。

ノードは2種類あって、コンテナ化されデプロイされたノードをワーカーノードといい、コンテナ化されたものをどのワーカーノードに割り振りするか管理(クラスタ全体を監視・管理も行う)するノードをマスターノードという。(司令塔みたいな)

クラスタは、それぞれのノードをひとまとめにした単位。

pod

k8sでコンテナをデプロイする際の最小単位のまとまりのこと。(いまいちピンとこないな)

service

複数のpodへの接続を容易にするための機能のようなもの。

podはたくさんのノードに存在するため、特定podと通信するにはIPを指定する必要があるが、k8sはIPが固定ではないため?失敗する可能性がある。

そして、serviceには5つのタイプが存在する。

(が、正直あまり理解できていない。1,2あたりがよく使われるっぽい)

  1. ClusterIP
    1. serviceにクラスタ内で扱えるIPアドレスを割り振る。
  2. NodePort
    1. クラスタ外のサービス(LoadBalancer等)と疎通するためIPアドレスクラスタ?に割り振る。
  3. LoadBalancer
    1. TCPロードバランサを利用できる仕組み(どゆこと?)
  4. ExternalName
    1. 外部ドメインにアクセスできる仕組み
  5. Headless
    1. podのIPアドレスを直接返してくれる仕組み

レプリカセット

podを複製して、指定した数のpodを作成するリソース。

レプリカ自体は、後述のデプロイメントによって作成される。

デプロイメント

レプリカセットのさらに上位に当たるもので、k8sにおけるデプロイを管理するもの。

Ingressを使用した外部負荷分散

外部サービスであるLoad Balancer(HTTP)を連携して、サービスへのアクセスを行うシステム?

あれ、NodePortを使用すれば、クラスタ内にアクセスできるんじゃないっけ?(GPT先生によると、ポートの競合などがNodePortのみだと起こる可能性があって、そういった問題をIngressは解消でき、柔軟に利用することができるメリットがあるらしい)

 

これまで出てきたものを図解すると。。(もっと細かく書いたら超複雑なんだろうなぁ。)

アーキテクチャイメージ

特徴

ローリングアップデートが自動

更新後のアプリケーションをデプロイが全て自動で行われる。

GCEの手動で行うとなると、インスタンス作成→デプロイ→ロードバランサの向き先変えて、古いインスタンス削除して。。と面倒。。

ロールバック

マスタノードで設定ファイルの履歴を管理しているため、デプロイが不安定の場合等に前の状態にロールバックできる仕組みがある。

オートスケール

ワーカーノード自体を増減するものとワーカーノード上に稼働しているpodを増減する2つのスケール機能が簡単に利用できる。

参考

www.ios-net.co.jp

kubernetes.io

終わり

結構難しかった。。所々わからない部分がありましたが、大枠は理解できたつもりなので、今回は良しとしたいと思います。(いい加減ですみません)

大分端折ってるのですが、まとめるのは時間がかかりますね。あと3記事くらいありそうですが、頑張って行きたいと思います。(リアクションもらえるとモチベになります)