Salt StackでGoogle Cloud Platform (GCP) をマネージメントしたい

E

目的

インフラ構成管理ソフトについて勉強中。AWSで使ってみて、使用感が良かったので、GCPでも使用してみる。

 

この記事でやること

SaltStackの公式ドキュメント [Getting Started With Google Compute Engine] をやってみる。

 

Salt StackでGCPをマネージメントするために用意しておくこと

  • なし ←事前準備が"なし"というのがGCPのすごいところ!

 

Salt Stackを実行するCompute Engineを用意する

次のCompute Engineをコンソールから作成した。

 

ssh-keyを作成して、Compute Engineのメタデータに登録する

一般的なやり方なのでわかりやすい。以下のサイトを見ると簡単に登録できる

SSH 認証鍵ペアによるインスタンス アクセスの管理  |  Compute Engine ドキュメント  |  Google Cloud Platform

 

Salt Stackのインストール

作成したCompute Engineにログインし、SaltStackの公式ドキュメント [Ubuntu] を参照してインストールを行う。このsalt-masterをインストールした環境が管理サーバとなる。


# apt-getのアップデー
apt-get update

#一般的な ネットワークアクセスを行うためのパッケージ
apt-get install salt-api

# public cloud VM をマネージメントするパッケージ
apt-get install salt-cloud

# 管理サーバに入れるパッケージ
apt-get install salt-master

# クライアントサーバに入れるパッケージ
apt-get install salt-minion

# リモート操作をするためのパッケージ
apt-get install salt-ssh

# 分散リモート実行システムパッケージ
apt-get install salt-syndic

# おまじない
salt-cloud -u

#おまじないについて

[salt-cloud] Minion doesn't install on some providers after upgrading to 2015.8.0 · Issue #26699 · saltstack/salt · GitHub

# file_ignore_glob関連のWARNINGが大量に出力されてしまうので、対応しておく

[WARNING ] Key 'file_ignore_glob' with value None has an invalid type of NoneType, a list is required for this value · Issue #33706 · saltstack/salt · GitHub

公式ドキュメントに書いておいてほしいですね。

 

Create a Service Account

サービスアカウントのキーを作成してダウンロードする。下記のマニュアルをみて、デフォルトのサービスアカウントのjsonファイルを生成して、Compute Engineにアップロードしておく

サービス アカウント キーの作成と管理  |  Cloud Identity and Access Management のドキュメント  |  Google Cloud Platform

 

Salt Cloudを使用してクライアントサーバを構築する

2つのCompute Engine構築のための設定ファイルを用意する。これによりインフラ構築環境を再現することができる。

1つめ:/etc/salt/cloud.providers

# プロバイダー名。設定をこの名前を使って取り込む重要な名前
gce-config
  # Set up the Project name and Service Account authorization
  project: "your-project-id"
  service_account_email_address: "123-a5gt@developer.gserviceaccount.com"
  service_account_private_key: "/path/to/your/NEW.pem"
  
  # masterのprivate ip アドレスをいれておく
  minion: 
    master: xx.xx.xx.xx
    
  # このままでいい
  grains: 
    node_type: broker
    release: 1.0.1
    
  driver: gce

2つめ:/etc/salt/cloud.profiles

# プロファイル名。salt-cloud実行時にこの名前を使って指定する。
my-gce-profile:
  image: ubuntu-1604
  size: n1-standard-1
  location: asia-east1-c
  network: default
  subnetwork: default
  use_persistent_disk: True
  delete_boot_pd: False
  deploy: True
  make_master: False
  provider: gce-config
  ssh_username: your_login_user
  ssh_keyfile: /home/your_login_user/.ssh/id_rsa

↑で使用しているssh_keyfileのpublic key (id_rsa.pub) をCompute Engineのメタデータに登録する。ほかに本家のマニュアルを見ればもっと細かいことをやっているが、こちらは最小設定。

 

Salt Cloudを実行する

# Usage: salt-cloud -p <プロファイル名> <新たに作られるインスタンスのName(任意)>
# インスタンスを立てる
salt-cloud -p my-gce-profile kchiba-test-instance

 GCPのコンソールを見ると、新しいインスタンスができてる。

 

MasterからMinionのコマンドを起動する

 # minionサーバのコマンドが実行できた。
# salt kchiba-test-instance test.ping 
  kchiba-test-instance
    : True 
    
# pythonも実行できる
# salt kchiba-test-instance cmd.run 'python --version' 
kchiba-test-instance: 
  Python 2.7.12 

便利っぽい。

 

おかたづけ(インスタンスを削除する)

 #Compute Engineをdestroyするコマンドの実行
# salt-cloud -d kchiba-test-instance
The following virtual machines are set to be destroyed:
 gce-config:
   gce:
     kchiba-test-instance

Proceed? [N/y] y

 # Masterの設定も初期化されたかをみてみる。
# salt-key
Accepted Keys:
# kchiba-test-instanceが設定されていたのが消えている

Compute Engineを削除すると同時にsalt-masterとsalt-minionの関係も解消してくれた。

 

使ってみて感想

Compute Engineインスタンスを簡単に作成できる。

ssh-keyなどGoogle独自の方法ではなく、一般的な方法が使えるのでわかりやすい

ほとんどAWSと同じコマンドだった。

 

おわり。