🎓

GCPでインフラつくるときに知らなかった用語

4 min read

最近になって GCP でインフラ構築をしはじめたけど、AWS 経験があっても知らない用語がたくさんでてきたので書き留めておくことにしました。

🐶 きっかけ
Terraform でインフラつくろうとすると「この設定値はなんだろう?」と無限にわからないことが出てきます。勉強にはなるけど時間もかかりますね。

ネットワーク設定

VPC フローログ

2018年4月6日に追加された機能で VPC ネットワーク内のトラフィックをみれる。料金はログ1GB毎に0.5ドル。AWS では2015年6月から存在しているようだが自分は一度も見たことない。

ハイブリッド接続

GCP だけではなく、オンプレミスのデータセンターや、AWS のような外部クラウドプロバイダーと協調してネットワーク接続すること。Google はインフラの併用や移行を促すためにハイブリッド接続を標榜している。

Cloud Router

インターネットとは、たくさんのネットワーク網を相互通信させる技術とも表現できる。別のネットワークに接続するためにはパケットの宛先を知り、保持しておかなければいけないが、この技術を経路制御という。経路制御のための代表的なプロトコルが BGP。BGP で GCP 内外のネットワークとルーティングするためのサービスが Cloud Router。

動的ルーティングモード

ルーティングには手動で管理・運用が必要な静的ルーティングと、保守が不要で障害時に自動的にルーティングを変更してくれる動的ルーティングがあり、通常は動的ルーティングを使用する。VPC の設定では動的ルーティングモードとして REGIONALGLOBAL が設定できる。

例えば GKE で東京リージョンと大阪リージョンを使ったマルチリージョン構成にする場合、その GKE がオンプレミスのような外部ネットワークと連携する場合、GLOBAL にしておくことで東京と大阪リージョンが個別に外部接続しなくとも片方のリージョンのネットワークを経由してルーティングできるようになるため、ネットワーク障害時のルーティングの可用性が高まる。マルチリージョン構成で且つ外部ネットワークに接続するような場合にだけ必要になる設定なのでほとんどの場合 REGIONAL で良い。

アドバタイズする

ネットワーク制御分野の用語。Cloud Router の場合、隣接するネットワークのルータに対象(サブネットや外部 IP アドレス)への経路情報を伝達することを指す。

🐰 例文
まず us-west1 リージョンにある Cloud Router が外部のオンプレミス・ネットワークと VPN トンネルを通じてハイブリッド接続している構成であるとします。Cloud Router はデフォルトですべてのサブネットをアドバタイズしているので、us-west1 のサブネット内の VM はオンプレミス・ネットワークを認識できます。また、サブネット内に Proxy サーバを立て、その外部 IP アドレスをアドバタイズすることによって、オンプレミス・ネットワークは Proxy サーバを認識できます。

VM

プリエンプティブルインスタンス

ここでいう preempt (先に専有する) とは、GCP 側が必要なときにこのインスタンスを専有 (停止) して利用できることを意味する。利用者はいつ停止されても構わないという条件の元に、1/4くらいの低価格で利用できるインスタンスのこと。
AWS ではスポットインスタンスと呼ばれている。

単一テナントノード

英語で sole-tenant node。通常、クラウド事業者の物理サーバーは仮想化されて複数の顧客によって共有して使われているが、専有できるのが単一テナントノード。セキュリティやコンプライアンス面で厳しい要件が課されているプロジェクトで使われる。

ノードアフィニティ

クラスタリング関連の概念らしい。
Google Compute Engine では単一テナントノード上で VM インスタンスをプロビジョニングするための設定として存在する。単一テナントノードにはノードグループという概念があり、ラベルを指定できる。ノードアフィニティとは指定ラベルのついたノードグループに VM インスタンスをプロビジョニングするための設定。
Kubernetes にも Pod アフィニティという似た仕組みがある。

アンチアフィニティ

上記のノードアフィニティとは逆に、プロビジョニングしないための設定。通常のアフィニティではノードグループの指定ラベルに対して operator="IN" とすることでプロビジョニング対象とするが、operator="NOT" とすることでプロビジョニング対象外にできる。これをアンチアフィニティという。

🐤 たぶんこういうこと
アプリケーションを動かすためには必須のライブラリや環境があるはずで、プロビジョニングを行う上で A というノードグループにプロビジョニングしたい。または B というノードグループにはプロビジョニングしたくない(しても動かない)ということがある。
おそらくアフィニティとは、正しく動かすためにどのグループに VM インスタンスをプロビジョニングするかという条件を設定するための機構なのだと思う。
また、インスタンス数に応じてライセンス料がかかるソフトウェアを使用する場合の費用の制御にも利用できそうだ。

GKE

Anthos

GCP のマネージドサービスである GKE を、オンプレミスや AWS を利用してマルチクラウドで実現するためのサービス。

リリースチャンネル

Kubernetes の自動アップグレードを制御する仕組み。3つのリリースチャンネルがあり利用可能な Kubernetes のバージョンが順に保守的なものとなるため、自動アップグレードの頻度も緩やかになる。

  • Rapid
  • Regular
  • Stable

本番環境では RegularStable が推奨されている。デフォルトでは Regular となる。
2021-02-14 現在、Kubernetes の最新バージョンは v1.20 で 2020-12-09 にリリースされているが、Rapid でもまだ使えない。

マシンタイプ

GKE のデフォルトは e2-medium。vCPU 2個、メモリ4GB。

VPC ネイティブクラスタ

GKE のクラスターネットワークモードには下記2つがある。

  • VPC-native
  • Routes-based

VPC ネイティブなクラスタとは --enable-ip-alias オプションを指定することで作成できるが、Pod の IP アドレス範囲をサブネットから割り当てることを指す。ワーカーノードの Pod に展開される各サービス毎に異なる IP アドレスを割り振れる、らしい。

クラスタの可用性タイプ

  • ゾーンクラスタ
    • シングルゾーンクラスタ
    • マルチゾーンクラスタ
  • リージョンクラスタ

GCP では AWS と同様に東京・大阪・オレゴンのような大分類としてのリージョンがあり、リージョンの中に a, b, c といった形式で複数のゾーンが存在する。一般的に Web サービスの本番環境のサーバーでは複数ゾーンにアプリケーションを分散させることで可用性を担保している。

シングルゾーンクラスタは単一ゾーンに GKE のコントロールプレーンとワーカーノードを展開する。可用性はもっとも低いがコストも低く済む。
マルチゾーンクラスタは単一ゾーンにコントロールプレーン、他のゾーンにワーカーノードを展開する。クラスタのアップグレード中でもワーカーノードは動作し続けるためアプリケーションを止めずに済むが、その最中はクラスタの設定等ができない。
リージョンクラスタはコントロールプレーンとノードプールを3つのゾーンに展開する。もっとも可用性が高いためよっぽどコスト削減に傾倒していない限りは、本番環境ではリージョンクラスタを使うこととなる。

Discussion

ログインするとコメントできます