クラウドオーケストレーターのはじめかた

# この記事は

NTTドコモテクニカルジャーナル Vol.29 No.1 [クラウドオーケストレータを活用した複数 Kubernetes 管理](https://www.nttdocomo.co.jp/corporate/technology/rd/technical_journal/bn/vol29_1/004.html)の筆者による解説記事です。この記事ではクラウドオーケストレーターを使いはじめるためのインストールとセットアップ方法を紹介します。

# クラウドオーケストレーターとは
[クラウドオーケストレーター](https://cloud.airgap.host/ja)は、複数のクラウドを管理するためのワンストップポータルです。
CMS である [Drupal](http://bit.ly/m16tEa) をベースにオープンソースとして公開されているため、どなたでも利用することができます。![multi-cloud_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/8f9ac394-75e7-fb33-e474-fb3ffd51ecda.png)

# クラウドオーケストレーターを使うメリット
- クラウドオーケストレーターを使うと、**AWS**、**Kubernetes**、**OpenStack**、**VMware**、**Terraform Cloud** といったさまざまなクラウドを一元的に管理できます。
- シングルサインオンや Azure AD　（Active Directory）　で既存のシステムに統合できます。
- Kubernetes のリソースの使用状況を分析、最適化し、運用コストを削減します。

# インストール

クラウドオーケストレーターをインストールするには、いくつかの方法があります。

- [AWS Marketplace から EC2 インスタンスを起動](http://amzn.to/2Mfq9NE)
- [CloudFormation から AWS 上に起動](#cloudformation-を使う方法)
- [PHP Composer からローカルやオンプレの環境にインストール](#php-composer-によるインストール)

以下、３つの方法をそれぞれ説明します。

## AWS Marketplace から起動

いちばん簡単な方法です。AWS Marketplace の [Cloud Orchestrator](http://amzn.to/2Mfq9NE) から起動してください。 

## AWS CloudFormation を使う方法

ビデオマニュアル [CloudFormation でインストールする方法](https://youtu.be/266wIFM9aO0) をご覧ください。
EC2、ECR、S3、IAM の管理者権限のアカウントが必要です。

1. テンプレートを起動し、スタックが完了するまで数分待ちます。
1. クラウドオーケストレーターの自動セットアップスクリプトが実行されます（十数分かかります）。
1. 進行状況をみるには、サーバーに SSH で接続しログを確認します。
1. スタック作成が完了したら、**Drupal URL** をクリックします。

以下の表から、利用環境に合った CloudFormation テンプレートを選択してください。

| 構成                               | Apache2 |  Memached   | MariaDB | VPC     | CloudFormation テンプレート                                                                                                                      |
|-----------------------------------|----------|------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| EC2 シングルインスタンス              | Docker | Docker | Docker | 自動作成 | [cloud_orchestrator_single.yaml](https://cloud-orchestrator.s3.amazonaws.com/cfn/cloud_orchestrator_single.yaml)                               |
| EC2 シングルインスタンス              | Docker | Docker | Docker | 既存利用 | [cloud_orchestrator_single_manual_vpc.yaml](https://cloud-orchestrator.s3.amazonaws.com/cfn/cloud_orchestrator_single_manual_vpc.yaml)         |
| EC2＋ElastiCache＋RDS              | Docker | ElastiCache | RDS      | 自動作成 | [cloud_orchestrator_full.yaml](https://cloud-orchestrator.s3.amazonaws.com/cfn/cloud_orchestrator_full.yaml)                                  |
| EC2＋ElastiCache＋RDS              | Docker | ElastiCache | RDS      | 既存利用 | [cloud_orchestrator_full_manual_vpc.yaml](https://cloud-orchestrator.s3.amazonaws.com/cfn/cloud_orchestrator_full_manual_vpc.yaml)             |
| EC2 上の Docker＋RDS                | Docker | Docker | RDS      | 既存利用 | [cloud_orchestrator_docker_rds_manual_vpc.yaml](https://cloud-orchestrator.s3.amazonaws.com/cfn/cloud_orchestrator_single_rds_manual_vpc.yaml) |

※ Docker...同一 EC2 インスタンス上の Docker コンテナで実行されます。

## PHP Composer によるインストール

ビデオマニュアル [Composer でインストールする方法](https://youtu.be/3umJX9bN_uc) をご覧ください。 

  1. はじめる前に、LAMP スタックと PHP の `composer` をあらかじめインストール・設定しておきます。
  1. ターミナルを起動し、`/var/www` ディレクトリに移動します。

      ```
      cd /var/www
      ```

  1. `composer` でクラウドオーケストレーターをインストールします
      - [最新の Stable バージョン](https://www.drupal.org/project/cloud_orchestrator)がインストールされます。
      - `composer` でのインストール中、GitHub の API コールの回数制限でエラーになることがあります。[GitHub のこの記事](https://docs.github.com/en/rest/overview/resources-in-the-rest-api)を参考に GitHub のトークンを適切に設定してから上のコマンドを再実行してみてください。

     ```
     composer create-project docomoinnovations/cloud_orchestrator
     ``` 

  1. `composer` の実行終了後、ディレクトリ `/var/www/cloud_orchestrator/docroot` が Cloud Orchestrator が稼働するホストのデフォルトトップページになるように、Apache2 や NGINX などお使いのウェブサーバーを設定します。
  1. ウェブブラウザーを開いて、サイトに移動します。
  1. インストール手順に従ってサイトを設定します。

# セットアップ

ここでは、クラウドオーケストレーターで特に **Kubernetes** を管理するための設定方法を説明します。

## Kubernetes の設定

1. アドミンユーザーを作成するための、以下の内容のマニフェストを作成します。

    ```
    vi admin-user.yaml
    ```

    ```
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kube-system
    ```

1. マニフェストからアドミンユーザーを作成します。

    ```
    kubectl apply -f admin-user.yaml
    ```

1. 以下のコマンドを実行し、画面上に表示されるトークンを取得します。


    ```
    export POD=$(kubectl -n kube-system get secret | grep admin-user-token | cut -f1 -d' ') && kubectl describe secret ${POD} --namespace kube-system
    ```

## クラウドオーケストレーターの設定

1. クラウドオーケストレーターにログインします。![ログイン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/3cf02741-3df9-b8c4-441d-2faddc966538.png)
1. **Tour** または **Cloud service providers** メニューから、**K8s Cloud Service Provider** を追加します。![ツアー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/ea0014a7-3cb7-7894-fb84-9ee0617d5c0c.png)![メニュー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/0f155546-27fe-27f9-7c70-842d9d6d50ba.png)![192.168.1.240_admin_structure_cloud_config_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/4e118fd7-dcba-0fa7-c0d9-bc067add4162.png)
1. **API Server** のフィールドに**マスターノードの API エンドポイント URL**、上で作成した**アドミンユーザーのトークン**を入力し、**Save** ボタンで保存します。![192.168.1.240_admin_structure_cloud_config_add_k8s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/a38883d9-58a4-79c6-2016-0487d48adf30.png)
1. 以下の画面が表示されれば成功です。![192.168.1.240_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/9a7e0341-2bd5-d57b-55c1-3fca1a1db303.png)
1. **Cloud service providers** メニューからクラスタを選択すると、各種リソースが確認できます。![192.168.1.240_clouds_k8s_cluster_1_node(iMac).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321853/37b68646-f3a4-005d-6c20-2daa73f8d5ed.png)

## 複数の Kubernetes クラスターの管理

上記の手順にしたがって各クラスターの**マスターノードの API エンドポイント URL** と**アドミンユーザーのトークン**を取得、**K8s Cloud service provider** をそれぞれ追加することで複数の K8s クラスターを管理できます。 

# 次のステップ

クラウドオーケストレーターをもっと深く知りたい方のために、関連サイトをリストアップしておきます。

  - [クラウドオーケストレーターで AWS を管理しよう](https://qiita.com/dcm_naoi/items/d8f141a262b940ea5432)
  - [クラウドオーケストレーターのホームページ](https://cloud.airgap.host/ja)
  - [クラウドオーケストレーターの YouTube チャンネル](https://www.youtube.com/channel/UCmlm5QPAKn2YsRvoPFpQ7WA)
  - [クラウドオーケストレーターのドキュメント（英語）](https://www.drupal.org/node/3044215)
  - [クラウドオーケストレーターの開発サイト](https://drupal.org/project/cloud)
  - [クラウドオーケストレーターのソースコード](https://git.drupalcode.org/project/cloud)