# ユーザクラウド

ユーザクラウドとして使用できるものは、以下となります。

利用できるクラウドサービス

  • GKE (Google Kubernetes Engine)
  • Amazon EKS (Elastic Kubernetes Service)

Qmonus SDK LabではKubernetesクラスタ単位ではなくKubernetesネームスペース単位での登録も可能です。
※Amazon EKSをご利用の場合は、Kubernetesネームスペース単位での登録のみ利用可能です。

※以降の手順は、GKEでの利用を前提として記載しています。



# 対応バージョン

# Kubernetes v1.34 - v1.35

GKEのリリースチャンネルRegular/Stableにおける最新2バージョンをサポート予定となります。


GKEのversion up

通常の環境作成機能を使用して環境を構築している場合、GKEのversion upを行う際はversion up前に既存の環境を削除し、version up後に再度環境を作成し直すようお願いいたします。
version upの際にQmonusを構成するコンポーネント (Pod) が順不同に削除および再作成されることでQmonusコンポーネント間の同期がとれなくなる可能性があります。
※ VS連携(マルチクラウドデプロイ機能)をご利用の場合は、環境の削除・再作成は不要です。



# テンプレートを使用してクラスタを準備する

テンプレートをご利用いただくことでスムーズに作成することができます。

すでにご用意いただいているクラスタ、ネームスペースを使用したい場合は以下へお進みください。
既存のKubernetesクラスタを使用する場合
既存のKubernetesネームスペースを使用する場合


GCP(GKE) 向け手順

ここでは、Qmonus SDK Labチームの用意したファイル、コマンドを使用し必要なGCPクラウド設定を行うまでを説明します。

前提条件



# 1. ファイルをダウンロードする

Qmonus SDK Labチームが作成した以下の2つのファイルをダウンロードします。



# 2. フォルダの作成、ファイルの再配置

PCに以下のようなツリー構造のフォルダを作成し、ダウンロードしたファイルを下図のように配置してください。
※<project name>は作成いただいたGCPプロジェクトのものを選んでください。

(ユーザディレクトリなど)
└── <project name>
└── gcp
└── environments
├── dev01
├── template.tf
└── project-setup.sh
├── stg01
├── ...
├── ...
└── ...
└── prod01
├── ...
├── ...
└── ...



# 3. テンプレートへの入力 ( project-setup.sh ファイル)

ダウンロードしたファイルを使用するためにはデータを入力しなければなりません。
「project-setup.sh」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# project-setup.sh

#!/usr/bin/env bash
PJ_ID="qmonus-hoge-project-12345678" QMONUS_SRE_MAINTENANCE_GROUP="hoge@example.com" TERRAFORM_BUCKET_NAME="qmonus-hoge-cloud-bucket"

上記の赤文字で示された箇所を編集します。

「project-setup.sh」内で書き換える項目



# 4. テンプレートへの入力 ( template.tf ファイル)

「template.tf」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# template.tf

variable "dev01_project" {
default = "qmonus-hoge-project-12345678"
}

variable "region" {
default = "asia-northeast1"
}

variable "maintenance_group" {
\## google group which contains SRE member's mailaddress
\## or your email address and so on
default = "hoge@example.com"
}

variable "allowed_networks" {
\## GIP of qmonus user's house / VPN Server
default = [
"127.0.0.1/32"
]
}

variable "cluster_version" {
## Version of master and node pool
default = "1.23.11-gke.300"
}

variable "node_count" {
## The number of nodes per instance group.
default = "3"
}

terraform {
required_version = "1.0.0" # specify terraform version
backend "gcs" {
bucket = "sample-qmonus-cloud-bucket" # Defined by manually by project-setup.sh
}
required_providers {
google = {
source = "hashicorp/google"
version = "3.90.1"
google-beta = {
source = "hashicorp/google-beta"
version = "3.90.1"
}
template = {
source = "hashicorp/template"
version = "2.2.0"
}
random = {
source = "hashicorp/random"
version = "3.1.0"
}
}
}

上記の赤文字で示された箇所を編集します。

「template.tf」内で書き換える項目

  • qmonus-hoge-project-12345678
    GKEのプロジェクトIDに書き換えます。
    手順3 で入力した プロジェクトIDと同じものとしてください。

  • asia-northeast1
    希望するリージョンに書き換えます。
    ここで記載したリージョンにクラスタが配置されます。
    Google公式ページ > Cloud のロケーション (opens new window)
    例: asia-northeast1(東京) など

  • hoge@example.com
    Google グループのグループメールアドレスに書き換えます。
    手順3 で入力したメールアドレスと同じものとしてください。

  • 127.0.0.1/32
    アクセス元のGIP(個人宅やVPNサーバーのGIP等)を記載してください。
    事前にCloud Armorにて通信を許可するIPアドレスレンジの定義をする必要があります。
    Google公式ページ > Google Cloud Armor のセキュリティ ポリシー、ルール、式を作成する (opens new window)

  • 1.23.11-gke.300
    クラスタのバージョンに書き換えます。
    利用可能なバージョンは以下よりご確認ください。
    Google公式ページ > GKE release notes (opens new window)

  • 3
    クラスタを構成するインスタンスグループ単位のノード数に書き換えてください。
    例としてasia-northeast1にはzoneが3つあるため、ここで指定した数×3のノードが合計で構築されます。目安として、標準的な構成であれば3つ程度の開発環境が1つのノードに収容可能です。

  • 1.0.0
    Terraformのバージョンに書き換えます。
    バージョンは以下のコマンドで確かめることができます。
    $ terraform --version

  • sample-qmonus-cloud-bucket
    GCS bucket名を入力してください。
    手順3 で入力した bucket名と同じものとしてください。



# 5. APIの有効化

APIを有効化します。以下のコマンドを入力してください。

5-1. ログイン
$ gcloud auth login

5-2. 新しいコンフィグの作成
$ gcloud config configurations create ${config_name}
${config_name}には任意の名前を入力してください

5-3. defaultのGCPプロジェクトを設定
$ gcloud config set project ${project_name}

5-4. defaultのアカウントを設定
$ gcloud config set account ${account}

5-5. 現在のプロジェクトで ID及びアクセス管理、サービスアカウントの作成を有効にする
$ gcloud services enable iam.googleapis.com

5-6. 現在のプロジェクトで Pub/Sub API サービスを有効にする
$ gcloud services enable serviceusage.googleapis.com



# 6. terraform実行権限の追加

以下のコマンドを実行し、google groupのメンバーにterraform実行権限を与えます。

dev01 $ sh project-setup.sh



# 7. クラスタの作成

以下のコマンドを実行し、クラスタの作成を開始します。

dev01 $ terraform init

dev01 $ terraform apply

terraformのapply完了後は必要なリソースが作成されている状態です。
Outputsとして以下の情報が出力されますのでお控えください。

# apply完了後に出力される情報詳細

  • cluster_ip

    • 作成したクラスタにおけるコントロールプレーンのIPアドレスです。
    • Qmonus SDK Labの環境を作成する際、クラウドサービス設定にて利用します。
  • project

    • クラスタを作成したGCPプロジェクトです。
    • Qmonus SDK Labの環境を作成する際、クラウドサービス設定にて利用します。
  • security_policy

    • 作成したcloud armorのsecurity policyです。
    • Qmonus SDK Labの環境を作成する際、クラウドサービス設定にて利用します。
  • service_account_gke_internal

    • 作成した1つ目のサービスアカウントです。
      各種QmonusのImageをPullする際に利用します。
    • Qmonus SDK Lab利用申請の際に記載してください。
  • service_account_qmonus_sdk_lab



# 8. 作成後の確認

以下のページから作成されたクラスタを確認します。
Google公式ページ > Google Kubernetes Engine に移動 (opens new window)


以上で本手順「テンプレートを使用してクラスタを準備する (GCP)」は完了となります。


AWS(Amazon EKS) 向け手順

ここでは、Qmonus SDK Labチームの用意したファイル、コマンドを使用し必要なAWSクラウド設定を行うまでを説明します。

前提条件



# 1. ファイルをダウンロードする

Qmonus SDK Labチームが作成した以下のファイルをダウンロードします。

zip を展開すると以下の2つのフォルダが含まれています。

  • environments/dev01_minimum/ — EKSクラスタや周辺AWSリソースを構築するTerraform
  • crd/dev01_minimum/ — EKSクラスタ上にCRDをインストールするTerraform


# 2. フォルダの作成、ファイルの再配置

PCに以下のようなツリー構造のフォルダを作成し、展開したファイルを下図のように配置してください。
※<product name>は任意のプロダクト名としてください(後続の手順で設定する product_name と合わせます)。

(ユーザディレクトリなど)
└── <product name>
└── aws
├── environments
│ └── dev01_minimum
├── variables.tf
├── project-setup.sh
└── (その他 .tf ファイル)
└── crd
└── dev01_minimum
├── variables.tf
└── (その他 .tf ファイル)



# 3. テンプレートへの入力 ( project-setup.sh ファイル)

project-setup.sh」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# project-setup.sh

#!/usr/bin/env bash
PRODUCT_NAME="qmonus-myapp"
ENVIRONMENT="dev01"
AWS_REGION="ap-northeast-1"
AWS_ACCOUNT_ID="123456789012"
AWS_PROFILE="default"

上記の赤文字で示された箇所を編集します。

「project-setup.sh」内で書き換える項目(必須)

  • qmonus-myapp
    プロダクト名に書き換えます。
    作成されるAWSリソース名のプレフィックスとして使用されます。次の手順 (variables.tf) の product_name と一致させてください。

  • dev01
    環境名に書き換えます。
    Terraform State保存先S3バケット名のサフィックスとして使用されます。

  • 123456789012
    AWSアカウントIDに書き換えます。
    以下のリンクなどから確認することができます。
     → AWS公式ページ > AWS アカウント ID を表示する (opens new window)

以下は任意項目です。デフォルトのままでも動作しますが、環境に応じて変更してください。



# 4. テンプレートへの入力 ( meta.tf ファイル — environments/dev01_minimum/ )

environments/dev01_minimum/meta.tf」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# meta.tf (environments)

backend "s3" {
bucket = "tf-state-YOUR_PRODUCT_NAME-dev01-minimum"
profile = "terraform-YOUR_PROFILE_NAME"
}

上記の赤文字で示された箇所を編集します。

「meta.tf (environments)」内で書き換える項目

  • tf-state-YOUR_PRODUCT_NAME-dev01-minimum
    Terraform State保存用S3バケット名に書き換えます。
    手順3 の project-setup.sh で作成されるバケット名(デフォルトは tf-state-<PRODUCT_NAME>-<ENVIRONMENT>-minimum)と一致させてください。

  • terraform-YOUR_PROFILE_NAME
    Terraform実行に使用するAWS CLIプロファイル名に書き換えます。
    手順3 で入力した AWS_PROFILE と同じものとしてください。



# 5. テンプレートへの入力 ( variables.tf ファイル — environments/dev01_minimum/ )

environments/dev01_minimum/variables.tf」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# variables.tf (environments)

variable "account_id" {
default = "123456789012"
}

variable "product_name" {
default = "qmonus-myapp"
}

variable "profile" {
default = "terraform-myapp-dev"
}

variable "allowed_cidr_blocks" {
default = [
"203.0.113.10/32"
]
}

上記の赤文字で示された箇所を編集します。

「variables.tf (environments)」内で書き換える項目

  • 123456789012
    AWSアカウントIDに書き換えます。
    手順3 で入力したアカウントIDと同じものとしてください。

  • qmonus-myapp
    プロダクト名に書き換えます。
    手順3 で入力した PRODUCT_NAME と同じものとしてください。

  • terraform-myapp-dev
    Terraform実行に使用するAWS CLIプロファイル名に書き換えます。
    手順3 で入力した AWS_PROFILE と同じものとしてください。

  • 203.0.113.10/32
    アクセス元のグローバルIP(個人宅やVPNサーバーのIPアドレス等)をCIDR形式で記載してください。
    ALBおよびセキュリティグループのインバウンドルールに使用されます。複数指定も可能です。

  • eks_cluster.public_access_cidrs
    デフォルト値としてQmonus SDK Lab / QVSのNAT IPが設定されています。
    EKS APIサーバーへのパブリックアクセスを許可するCIDRブロックです。追加で許可したいIPがある場合は書き換えてください。



# 6. テンプレートへの入力 ( meta.tf ファイル — crd/dev01_minimum/ )

crd/dev01_minimum/meta.tf」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# meta.tf (crd)

backend "s3" {
bucket = "tf-state-kubernetes-YOUR_PRODUCT_NAME-dev01-minimum"
profile = "terraform-YOUR_PROFILE_NAME"
}

上記の赤文字で示された箇所を編集します。

「meta.tf (crd)」内で書き換える項目

  • tf-state-kubernetes-YOUR_PRODUCT_NAME-dev01-minimum
    CRD用のTerraform State保存用S3バケット名に書き換えます。
    手順3 の project-setup.sh で作成されるバケット名(デフォルトは tf-state-kubernetes-<PRODUCT_NAME>-<ENVIRONMENT>-minimum)と一致させてください。

  • terraform-YOUR_PROFILE_NAME
    Terraform実行に使用するAWS CLIプロファイル名に書き換えます。
    手順3 で入力した AWS_PROFILE と同じものとしてください。



# 7. テンプレートへの入力 ( variables.tf ファイル — crd/dev01_minimum/ )

crd/dev01_minimum/variables.tf」ファイルを編集用のアプリで開き、以下の記述があることを確認してください。

# variables.tf (crd)

variable "account_id" {
default = "123456789012"
}

variable "product_name" {
default = "qmonus-myapp"
}

variable "profile" {
default = "terraform-myapp-dev"
}

上記の赤文字で示された箇所を編集します。

「variables.tf (crd)」内で書き換える項目

  • 123456789012
    AWSアカウントIDに書き換えます。
    手順3 で入力したアカウントIDと同じものとしてください。

  • qmonus-myapp
    プロダクト名に書き換えます。
    手順3 で入力した PRODUCT_NAME と同じものとしてください。

  • terraform-myapp-dev
    Terraform実行に使用するAWS CLIプロファイル名に書き換えます。
    手順3 で入力した AWS_PROFILE と同じものとしてください。



# 8. セットアップスクリプトの実行

以下のコマンドを実行し、Terraform State保存用S3バケットおよびTerraform実行用IAMユーザーを作成します。

dev01_minimum $ sh project-setup.sh



# 9. EKSクラスタの作成

以下のコマンドを実行し、EKSクラスタおよび周辺リソースの作成を開始します。

dev01_minimum (environments) $ terraform init

dev01_minimum (environments) $ terraform apply

terraformのapply完了後はEKSクラスタを含む必要なリソースが作成されている状態です。
Outputsとして以下の情報が出力されますのでお控えください。

# apply完了後に出力される情報詳細 (environments)

  • account_id

    • デプロイ先のAWSアカウントIDです。
  • eks_cluster_name

    • 作成したEKSクラスタ名です。
    • 次手順 (crd) のapply、およびQmonus SDK Labの環境を作成する際に利用します。
  • eks_cluster_endpoint

    • 作成したEKSクラスタのエンドポイントURLです。
    • Qmonus SDK Labの環境を作成する際、クラウドサービス設定にて利用します。
  • vpc_id

    • 作成したVPCのIDです。


# 10. CRDのインストール

引き続き crd/dev01_minimum/ フォルダにて以下のコマンドを実行し、EKSクラスタ上にCRDをインストールします。

dev01_minimum (crd) $ terraform init

dev01_minimum (crd) $ terraform apply



# 11. 作成後の確認

以下のページから作成されたEKSクラスタを確認します。
AWS公式ページ > Amazon EKS コンソールへ移動 (opens new window)


以上で本手順「テンプレートを使用してクラスタを準備する (AWS)」は完了となります。



# 既存のKubernetesクラスタを使用する場合

以下の3つを作成してください。

  • Kubernetesクラスタ
    • 下記アドレス (Qmonus SDK Lab/Value Stream) からの通信を許可してください。
      • 35.200.13.149/32
      • 35.189.158.160/32
      • 34.146.44.32/32
      • 35.200.92.31/32
  • ユーザクラスタのNodeに関連付けられたサービスアカウント1 (SA1)1)
    • 利用申請時にサポートにご提示いただきます。
      ※Qmonus提供のterraformでクラスタ作った場合は「gke-internal@~~~」というSAとなります。確認方法
  • 「Kubernetes Engine 管理者」ロールのついたサービスアカウント2 (SA2)
    • サポートに提示いただく必要はございません。
      ※「ログ閲覧者」ロールを追加することでQmonus SDK Labからログをダウンロードすることができるようになります。

お控えいただくもの
・GKEのプロジェクトID
→  確認場所 (opens new window) より対象のIDをご確認ください。
・Kubernetesクラスタのエンドポイント
→  確認場所 (opens new window)よりクラスタを選択、詳細をご確認ください。
・GKEのサービスアカウント
→  作成方法 (opens new window)または確認方法より対象のSAをご確認ください。
・GKEのサービスアカウントキーファイル
→  作成方法 (opens new window)からサービスアカウントキーを新たに作成してください3)

TIP

サービスアカウントの用途は以下の通りです。
・コンテナイメージ(弊社のプライベートレジストリ内)のPullを許可
・Qmonus SDK LabのCloudService登録 (要Kubernetes Engine 管理者ロール)

# 既存のKubernetesネームスペースを使用する場合

以下の2つを作成してください。
※KUJIRA基盤上にデプロイする場合などはこちらを選択します。

  • Kubernetesネームスペース(作成場所となるKubernetesクラスタもご用意ください。)
  • ネームスペースのkubeconfigファイル

お控えいただくもの
・kubeconfig(KUJIRA基盤利用の場合はKUJIRAチームよりkubeconfigが払い出されます)

KUJIRA環境について

NTT DOCOMO BUSINESSの提供しているKUJIRA(labprivate/labshared)環境を利用する際は以下を参照ください。
NTT DOCOMO BUSINESSの提供しているKUJIRA環境を利用する際の注意事項



【注意事項】開発環境間の通信制御について

Labの仕様としては、GKEクラスタ内のPod同士の通信を抑止する等の設定は行なっておりません。
そのため、認証情報があれば同クラスタに構築された環境間での通信や操作が可能です。 通信制御が必要な場合はユーザ側でのクラスタ設定実施をお願いいたします。

















# 注釈


  1. ^サービスアカウントは、適切に権限管理をするためにも新規作成し、クラスタに設定することを推奨しております。(ComputeEngineが使うデフォルトのサービスアカウントは推奨しておりません。

  2. ^Terraformから払い出されるgke-internalというサービスアカウントは「Kubernetes Engine 管理者」ロールが付与されておりません。そのため、Qmonus SDK LabのCloudService登録にはご利用いただけません。

  3. ^サービスアカウントキーファイルは作成時に一度だけダウンロードすることができます。紛失してしまった場合は再度新しい鍵ファイルを作成してください。