Closed75

for Google Cloud PODE

Kept1994Kept1994

Anthos Config Management

以下のようなyamlベースのマニュフェストでGoogle Cloudリソースを管理できる。IaC的なイメージ。
従来のTerraformによる環境構築ではHCLでの定義とkubernetes環境のyaml定義が混在し管理が煩雑であったものをどちらもk8sライクなyamlベースで管理できるようにしたもの。(Kubernetes Resource Model (KRM) といわれるらしい。)
また、ポリシーを定義できることでガードレールとしての機能もある。

# test.yaml
  
# テスト用プロジェクト
apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
kind: Project
metadata:
  annotations:
    cnrm.cloud.google.com/auto-create-network: "false"
  name: cc-test-prj
  namespace: config-control
spec:
  # name (プロジェクト名、ディスプレイ表示) と resourceID (プロジェクトID) は一致させる
  name: cc-test-prj
  resourceID: cc-test-prj
  folderRef:
    # フォルダID
    external: "1111111111111"
  billingAccountRef:
    # 請求先アカウントID
    external: "222222-222222-222222"
---
# テスト用 Storage バケット
apiVersion: storage.cnrm.cloud.google.com/v1beta1
kind: StorageBucket
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: cc-test-prj
    cnrm.cloud.google.com/state-into-spec: absent
  name: cc-test-prj-demo-bucket
  namespace: config-control
spec:
  storageClass: STANDARD
  location: asia-northeast1
  uniformBucketLevelAccess: true
---

▲ 以下より転載
https://blog.g-gen.co.jp/entry/try-gitops-resource-management-with-config-controller

以下の3部構成。

  • Policy Controller
    - セキュリティやコンプライアンスに沿ったポリシーを事前定義する
    - ポリシーに合致しないAPIリクエストをブロックできる
  • Config Sync
    - Gitリポジトリに格納されている構成をKubernetesクラスタに継続的に反映、調整する
    - 各種Gitプラットフォームのパイプライン機能と組み合わせることで、CI/CDが可能になる
  • Config Controller
    - Google Cloud, Anthosのリソースのプロビジョニングとオーケストレーションを行う
    - yaml形式のファイル(kubernetesマニフェスト)によるリソース管理ができる

https://www.creationline.com/tech-blog/61646

  • 実体はk8sクラスタが構築され、上記のコンポーネントが立ち上がる。
    • そのため料金は Anthos Config Managementの費用 と K8sクラスタのノードの費用がかかる。
  • このk8sクラスやそのVPCなど幾つかはコンソールやTerraform、gcloudコマンドなりで作成しておく必要あり。

Config Controller

  • Config Connector のホスト型バージョン
    • 内部的にはConfig Connector と呼ばれる Kubernetes アドオンを利用。
    • 公式だと元からConfig Connectorと記載されてる。
  • Workload Identityでサービスアカウント連携されてリソースを操作できる。

Config Controller インスタンスを作成する

インスタンスを作成するといってるけど実体はクラスタを起動していてその中でPodを起動してるという意味と解釈。それってインスタンスを起動っていうの?
https://www.creationline.com/tech-blog/61646

具体的には Config Connector は CRD と controller を提供してくれます。CRD は Google Cloud のリソースを表現するためのもので、Google Cloud のリソースを作成したい場合はそのリソースに対応する Custom Resource をクラスタに apply します。すると、cnrm-system ネームスペースに存在する controller が先ほど apply した Custom Resource を元に実際のリソースを作成してくれます。

https://zenn.dev/dogggggo/articles/93a764cf08f370

CRDって何? → あまりヒットしない。一旦パス TODO

Config Controller には Policy Controller と Config Sync も含まれています。

https://cloud.google.com/anthos-config-management/docs/concepts/config-controller-overview?hl=ja

公式に謎記述。 → Anthos Config Managementってもう言わない? TODO

Config Sync

  • 構成ファイルをGit連携する。
    • しない場合はConfig Controllerに直接kubectlする。applyとかdeleteとか、クラスタいじるのと同じ感覚でGoogle Cloud リソースを作成削除できる。
  • Config Controller クラスタ(?)は限定公開クラスタとして作成されるのでGitHubなど外部アクセスのためにはCloud NATを作成する必要あり。

Policy Controller

Open Policy Agent (OPA) Gatekeeper ベースのサービス。ポリシーを設定してポリシーに準拠しない変更をもたらす API リクエストをブロック。

  • 制約テンプレート(ConstraintTemplate)を定義したyamlを利用。デフォルトで用意もある。
    • Rego (Native Query Language)で記述。
  • 組織ポリシー(Organization policies)よりも柔軟にポリシーを作成可能。
    • 拡張したカスタム制約テンプレートの作成
    • 組織ポリシー自体もCOnfig Controllerで管理可能なため誤った無効化などのオペミス防止にも。

今だと組織ポリシーも作成可能じゃなかったっけ? → TODO

Terraformとの違い

  • K8sの仕組みにより管理するため、Reconciliation Loopに従いリソースの状態を維持。= ドリフトが起きない。
  • Configuration as Data (CaD) vs Infrastructure as Code (IaC) ?
    • おそらく、実体であるリソースを削除してもそれを検知して元の状態に戻してくれる仕組みが搭載されてるってことを言いたいものと認識。

参考

Kept1994Kept1994

Cloud Deploy

アプリケーションのデプロイには有用。
K8sクラスタにネットワークポリシーやDeamonSetなどをデプロイするのはCloud Buildの方がいい。

Kept1994Kept1994

ドリフトの検出をするのもPolicy Controllerの役目。

Kept1994Kept1994

※ Config Connector はバージョン間でトラフィックを振り分けるみたいなものではない。

Kept1994Kept1994

CloudBuildの実行時間改善

ビルドの速度を上げるには、以前のビルドの結果を再利用します。以前のビルドの結果を Google Cloud Storage バケットにコピーし、その結果から計算を行い、新しい結果をコピーしてバケットに戻すことができます。ビルドに時間がかかるときに、生成されるファイル数が少なく、Google Cloud Storage とのコピーに時間がかからない場合は、この方法を使用します。

https://cloud.google.com/build/docs/optimize-builds/speeding-up-builds?hl=ja#caching_directories_with_google_cloud_storage

CodeBuildの中間生成物をGCSにキャッシュする。
→ GCSへのアップロードが発生するのでその分の時間はかかる。不要なファイルがわかっているならあらかじめ.gcloudignore ファイルで定義しておくことでアップロード時間を最適化できる。

Kept1994Kept1994

kanikoキャッシュというGoogleのOSSを利用した高速化手法もある。

Kaniko キャッシュでは、コンテナ イメージのレジストリ(Google 独自の Artifact Registry など)内に中間レイヤが保存され、インデックス付けされます。

Kaniko キャッシュの仕組みは次のとおりです。
Cloud Build では、コンテナ イメージのレイヤがビルド時にレジストリに直接アップロードされるため、明示的な push ステップはありません。すべてのレイヤが正常にビルドされると、それらレイヤを含むイメージ マニフェストがレジストリに書き込まれます。
Kaniko では、各レイヤが、その作成元の Dockerfile ディレクティブと、先行するすべてのディレクティブ(FROM 行のイメージのダイジェストに至るまでのもの)のコンテンツに従ってキャッシュに保存されます。

https://cloud.google.com/build/docs/optimize-builds/kaniko-cache?hl=ja

Kept1994Kept1994

GCSにキャッシュするのとの違い。

ビルドに --cache-from を常に使用することをおすすめします

Docker ビルド専用の --cache-from とは異なり、Google Cloud Storage のキャッシュは、Cloud Build でサポートされているすべてのビルダーで使用できます。

通常のDockerビルドの場合は Artifact Registry にキャッシュが作られ、--cache-fromで以前のビルドからキャッシュを再利用する。
Dockerビルド以外を利用する場合はこれができないのでGCSにキャッシュを作るということと理解。

Kept1994Kept1994

Access Context Manager

Access Context Manager は、Google Cloud のプロジェクトとリソースに対する、属性ベースのアクセス制御を定義するものになります。例えばアクセス元のデバイスやOS、IPアドレス、ユーザーIDなどの属性によって制御することが可能です。
Access Context Manager で定義するルールは、「アクセスレベル」と呼ばれ、IAP や IAM Conditions のアクセス許可の条件の1つとしても利用することが可能です。ですが、上述のとおり、​​アクセスレベルでのデバイス属性の使用 をIAPで利用したり、後述する VPC Service Controls での利用は、BeyondCorp Enterprise の有料機能です。

https://medium.com/google-cloud-jp/google-cloud-access-management-2021-43152d69bdb7

アクセスレベル

どのような条件でアクセスを許可するかのユーザアクセスのコンテキストを定義する。fromのIPアドレスや国、デバイスなど。
例としてVPC Service Controlsで上向きのポリシー作成時にこれらのアクセス元のコンテキストを指定する。

https://zenn.dev/d2c_mtech_blog/articles/45f6138235b904

Kept1994Kept1994

Cloud Run

ログエージェントなど自由にインストールできない。
Cloud Runのログ取得は自動的に行わることからログフォーマットの変更などはアプリケーション側で必要。

Kept1994Kept1994

Cloud Functions

  • HTTPトリガ
  • イベントトリガ
    • Pub/Sub トリガ
    • GCSトリガ
      • google.cloud.storage.object.v1.finalized : オブジェクトの作成/更新の完了
      • google.cloud.storage.object.v1.deleted : オブジェクトの削除
      • etc.....
    • Firestoreトリガ
      • google.cloud.firestore.document.v1.created : ドキュメントの作成
      • google.cloud.firestore.document.v1.updated : ドキュメントの更新
      • etc.....
    • Eventarcトリガ
Kept1994Kept1994

Eventarc

Eventarc は、Google Cloud もしくは外部のイベントソースで発生したイベントを、 Pub/Sub サブスクリプション 経由 で 様々な宛先(イベントコンシューマ)に転送するサービスです。
インフラストラクチャの管理は不要で、Eventarc を介したイベントはすべて CloudEvents 形式 に標準化され、コンシューマに配信されます。

https://blog.g-gen.co.jp/entry/notify-using-eventarc-for-cloudrun

  • 第二世代Cloud FunctionsをトリガするGCSの場合 Pub/Subのアクセスが必要になるのは裏でPub/Subが動いてるためと理解。
Kept1994Kept1994

Cloud Foundation Toolkit & Cloud Foundation Fabric

Cloud Foundation Toolkit(CFT)とCloud Foundation Fabric(CFF)はいずれも、Terraformモジュールを基本的な単位として、個別のソリューション、あるいはベストプラクティス集としてサンプルをまとめたものです。
自分の見解では、
Cloud Foundation ToolkitはTerraform Registryに登録されたGoogle Cloudモジュールを利用した汎用的な構成ソリューションが多い
Cloud Foundation Fabricは専用線を用いた閉域網をオンプレミスとGoogle Cloud間で構成するような、エンプラ向けの大規模開発を行いたい環境向けソリューションが多い

https://zenn.dev/hodagi/articles/4e9530112df879

Kept1994Kept1994

マルチクラウドでのイメージデプロイ
→ Packer

Packer

HashiCorpのOSS。マルチプラットフォーム対応したVMイメージを自動ビルドできるツール。Cloud Buildで利用可能。

Kept1994Kept1994

VMからLoggingとかのOperations Suiteに送るとかならOpsエージェント入れる。
そうでないコンピュートリソースからOperations Suiteへ出力するなら各種言語向けのクライアントライブラリを入れる。もちろんIAM権限も

例 : PythonからのLogging

ライブラリをインストールする

https://cloud.google.com/logging/docs/setup/python?hl=ja

Kept1994Kept1994

ログを構造化する場合、jsonPayloadフィールドをログエントリに含める。
→Cloud Loggingで使用されるフィールド

Kept1994Kept1994

Loggingのコスト削減

以下にはコストが発生しない。

  • Cloud Storage バケット / BigQuery データセット / Pub/Sub トピックにルーティングされたログ
  • シンクの除外フィルタで除外したログ

シンクの除外フィルタでseverity(INFOはいらないとか)やresource.type(k8sコントローラのログはいらないとか)に基づくログの選別をすることで不要なコストを抑える。

Kept1994Kept1994

ポストモーテム
→ 事象発生者が自身でアクションを振り返り、改善点を見つける手法。
→ 障害対応のチームに責任を持たせてはいけない。

Kept1994Kept1994

Cloud Monitoring

valueType : DISTRIBUTION → 値の分布を表現
eg.) HTTPレスポンスの待ち時間の分布など

Kept1994Kept1994

複数プロジェクト(全prod環境とか)のメトリクスを横断して確認する場合

Compute Engine 仮想マシン(VM)インスタンスを含む Staging と Production という名前の 2 つのプロジェクトがあるとします。すべての VM の指標を 1 つのビューで表示するには、別のプロジェクト AllEnvironments を作成し、Staging プロジェクトと Production プロジェクトを AllEnvironments という名前のプロジェクトの指標スコープに追加します。

https://cloud.google.com/monitoring/settings?hl=ja

具体的な指標スコープの構成方法はここ

https://cloud.google.com/monitoring/settings/multiple-projects?hl=ja

Kept1994Kept1994

Metrics Explorer

Google Cloud環境上のメトリクスを視覚的に観察・分析するためのツール

Kept1994Kept1994

カスタムダッシュボードの見た目部分の定義はjsonで定義されているのでエクスポートし他の人に共有(提供)可能。
これは中のデータを含まない。

Kept1994Kept1994

Binary Authorization / Container Analysis (Artifact Registory)

Binary Authorization API と Container Analysis API は、オープンソース プロジェクトの Grafeas と Kritis に基づいています。
Grafeas は、コンテナ イメージ、仮想マシン(VM)イメージ、JAR ファイル、スクリプトなどのソフトウェア リソースに関するメタデータを管理するための API 仕様を定義しています。Grafeas を使用すると、プロジェクトのコンポーネントに関する情報を定義したり集約したりできます。
Kritis は、一元的に管理されているポリシーに準拠していないアーティファクト(コンテナ イメージ)のデプロイを防止するための API を定義しています。必要な証明書があるかどうかを確認することもできます。

https://www.cloudskillsboost.google/focuses/57885?locale=ja&parent=catalog

Kept1994Kept1994

SLO

評価方法

  • ウィンドウベース : 一定期間内に特定の状態にあった時間の割合を測定するためのもの
  • リクエストベース : 個々のリクエストの成功または失敗を判定するために使用される評価方法
Kept1994Kept1994

Cloud Logging

シンクを作成する際に「このリソースとすべての子リソースによって取り込まれたログを含める」オプションを有効化することで、その組織/フォルダ配下の全てのプロジェクトに対してシンクが有効になり、ログ集約用のプロジェクトにログを収集できます。

2種類あるらしい

  • 非インターセプト型集約シンク(non-intercepting aggregated sink)
  • インターセプト型集約シンク(intercepting aggregated sink)

前述の通り、組織の上流(組織のルートやフォルダ)で集約シンクを使用すれば、下流の子リソース(プロジェクト等)で発生するログを集約することが可能ですが、非インターセプト型集約シンクの場合は、親リソースの非傍受型集約シンクで収集したログは、子リソースでも収集することができます。一方のインターセプト型集約シンクの場合、上流のシンクで収集したログはそれより下流の子リソースでは収集できません。
インターセプト型シンクを使えば、子リソースでログを重複して収集し、ログ収集コストが肥大化することを避けることができます。逆に、子リソースでもログを自由に収集できるようにしたい場合は、非インターセプト型のシンクを利用します。
なおインターセプト型シンクは子リソース(プロジェクト)からも閲覧できます(コンソールのログルーター画面に表示されます)。

https://blog.g-gen.co.jp/entry/cloud-logging-explained

Kept1994Kept1994

DiskPressure
K8sにおいて、ノードのディスク容量が圧迫されているかの指標。bool値。

Kept1994Kept1994

Terraform
→ 環境ごとにフォルダ分け。CDKみたいに環境変数で自動的に分かれる構成を望まない。

Kept1994Kept1994

DevOpsチーム → インフラ管理
開発チーム → コード作成

両チームはインシデント対応だけでなくコードレビューも共有の責任の下実施する。

Kept1994Kept1994

Cloud Monitoring
→ SLOを定義し監視可能。
→ SLOを達成しない時にリスクが通知され、アラートがトリガされる。

select_slo_burn_rate メトリクス ?

Kept1994Kept1994

Cloud Run

カナリアリリース
始めに--no-trafficオプションを付してデプロイすることで、トラフィックを送らずにタグ付きリビジョンを作成することが可能。サービスのurlは発行されるので手動でアクセスすること自体はできるので、手動でUIのテストなどを実施できる。完了次第update-trafficコマンドでトラフィックを分割しカナリアリリースできる。

https://blog.g-gen.co.jp/entry/using-cloud-run-tagged-revision

Kept1994Kept1994

VPCフローログ
サンプリングのため全パケットを拾いたいならミラーリング ← これもう古い? TODO
サンプルボリュームスケールを1にすると完全に拾える。

Kept1994Kept1994

インシデント状態文書 : インシデント中に更新していくもの。
ポストモーテムは別途作成する。

Kept1994Kept1994

アクションアイテム : ポストモーテムに基づき作成された改善策のリスト。
各アクションアイテムに1人責任をもつオーナーを立て、必要であれば協力者を当てる。

Kept1994Kept1994

シャドーテスト
本番トラフィックをミラーリングしてテスト環境に再現し、アップデート前のアプリケーションを評価する手法。通常カナリアリリースなど他の手法と組み合わせて実施。

※ ただしサードパーティシステムへのアクセスはスタブする必要がある。1回のリクエストから本番とシャドウ環境の2つで処理が発生し決済などの冪等性のない重要な処理が重複する恐れがある。

https://cloud.google.com/architecture/application-deployment-and-testing-strategies?hl=ja

Kept1994Kept1994

ローリングアップデートはパーティショニングすることで全てのポッドに更新を加えるのではなく、特定の数のポッドまでを更新するように制限できる。
新機能の段階的なロールアウトで有用。 // カナリアリリースと異なる? TODO

Kept1994Kept1994

Cloud Operation Suite Kubernetes Engine Monitoring

ログ収集、メトリクス収集など。
Prometheus + grafanaでもメトリクスの可視化は可能だが手間がかかる。

Kept1994Kept1994

Spinnaker
CICDパイプラインのOSS。メトリクス収集やクラウドとの連携も可能

Kept1994Kept1994

Network Service

  • スタンダードティア
    • リージョン内or大陸内の通信を最適化する。グローバルならプレミアムティア
  • プレミアムティア
    • グローバルなアクセスをサポートするサービスに高品質なネットワークを提供するもの。
    • ラストワンマイルまでGoogle Cloudで保護

スタンダードに対応していないサービス。いくつか

  • Cloud VPN GW
  • Cloud CDN

https://cloud.google.com/network-tiers/docs/overview?hl=ja

デフォルトではプレミアムが選択されている。

■ プレミアム

■ スタンダード

https://dev.classmethod.jp/articles/google-cloud-network/

Kept1994Kept1994

VPCがリージョナルリソースでない。
Google所有の海底ケーブルが何本もある → 閉域網でリージョンを超えて通信できるからリージョナルで作る必要がない。

Kept1994Kept1994

イベント管理(SIEM)システム
→ ネットワークの監視、サイバー攻撃やマルウェア感染などのインシデント検知を目的とした仕組みのこと。

Kept1994Kept1994

Looker Studio (旧Data Studio)

AWS QuickSight相当。
インタラクティブなレポート、リアルタイムな反映が可能。

Kept1994Kept1994

ログビュー

ログビューを使用すると、ログバケットに保存されているログのサブセットのみに対するアクセス権をユーザーに付与できます。たとえば、一元管理されたプロジェクトに組織のログを保存するシナリオを考えてみます。ログバケットにログを提供するプロジェクトごとに 1 つのログビューを作成できます。その後、各ユーザーに 1 つ以上のログビューへのアクセス権を付与し、ユーザーが表示できるログを制限できます。
Cloud Logging は、すべてのログバケットの _AllLogs ビューと、_Default ログバケットの _Default ビューを自動的に作成します。
_AllLogs ビュー: ログバケット内のすべてのログを表示できます。
_Default ビュー: ログバケット内のデータアクセス以外のすべての監査ログを表示できます。
Cloud Logging によって自動的に作成されたビューは変更できませんが、_AllLogs ビューは削除できます。

https://cloud.google.com/logging/docs/logs-views?hl=ja

Kept1994Kept1994

Web Security Scanner (旧Cloud Security Scanner)

App Engine、GCE、GKE上のWebアプリケーションにおける脆弱性スキャンを実行できる。
Inspector相当?

Kept1994Kept1994

CI/CDパイプライン上でTerraformで環境構築する場合、tf.stateファイルはGCSに入れるのがベストプラクティス

Kept1994Kept1994

Artifact Resistory

Container Analysis : 脆弱性スキャンによるコンテナ安全性評価。

Kept1994Kept1994

OCI(Open Container Initiative)基準に準拠したレジストリであるため、コンテナイメージとHelmチャート両方対応。

Kept1994Kept1994

Network Connectivity Center

AWS Transit GW相当。

VPC同士をピアリングしていくとメッシュになる。 → 中央に一個ハブを置く。このハブに相当。
Transit GW同様にVPC同士のほか専用線(Dedicated Interconnect)やVPN(Cloud VPN)の終端とも繋がる。

https://blog.g-gen.co.jp/entry/network-connectivity-center-explained

Kept1994Kept1994

Code Build
→ プライベートプールを利用することでビルド環境からVPC内のリソースアクセスが可能。
AWS CodeBuild でVPC内にインスタンス立てるようなものと理解。

Kept1994Kept1994

Opsエージェントにログ解析のスクリプトを実行させることができる? // TODO

Kept1994Kept1994

tcp_ssl_proxy.xxxx メトリクス → CLB
flex/instance/xxxx メトリクス → App Engine フレックス環境

Kept1994Kept1994

Cloud Profiler

profilerライブラリで初期化することでその言語のアプリケーションの実行時間とリソース利用情報を収集できる。

Kept1994Kept1994

Google Cloud Managed Service for Prometheus

  • 複数のGKEクラスターから収集したメトリクスを一元的に管理、分析可能。
Kept1994Kept1994

VPCフローログ
→ IPトラフィックのキャプチャ

Kept1994Kept1994

IAP
たくさん昨日あるけどいずれもインターネット上からのアクセスを制限するサービス

Kept1994Kept1994

gcloud auth login

ローカルでgcloudなどのCLIを実行するための認証情報取得

gcloud auth application-default login

各言語のSDKを使ったプログラムを実行する際の認証を得るために使う
→ ユーザアカウントを使ってGoogle Cloudリソースへの認証を行う。

Kept1994Kept1994

インスタンスのヘルスチェック
→ CLBの機能ではない。
マネージドインスタンスグループの機能。ヘルスチェックによる自動リペア機能を備えている。

Kept1994Kept1994

バイナリ認証
→ テストが通ったことを秘密鍵を使用して証明書を作る。
この秘密鍵をどこに置くか → KMS。 k8sからはworkload Identityでシームレスに連携

Kept1994Kept1994

kubectl rollout undo → ローリングアップデートを戻す時
Serviceの向き先を以前のDeploymentに戻す → Blue/Greenを戻す時

Kept1994Kept1994

Terraform

ライフサイクル

  • create_before_destroy
    • インプレースで更新できない場合にリソースを削除→再作成が通常の流れ。
    • trueにすると新リソースを構築後に古いものを削除する。
  • prevent_destroy
    • trueとした場合、リソース定義が構成ファイルに記載される限り削除できない。
    • terraform destroyできない。
  • ignore_changes
    • 通常、実際のリソースの状態とリソース定義に差異があると後者に揃える。
    • trueにするとリソースの更新時にはリソース定義は無視され実際のリソースの状態が優先される。

https://kazuhira-r.hatenablog.com/entry/2020/05/05/232725

このスクラップは6日前にクローズされました