[初心者向け] IBM Cloud で無料のKubernetesを活用してアプリ(Node.JS)を公開する

# IBM Cloud で無料のKubernetesを活用してアプリ(Node.JS)を公開する

## IBM Cloud のアカウント取得
IBM Cloudのアカウントを所持されてない場合は、こちらの記事を参考にアカウントを作成してください。
所要時間数分で、メールアドレス一つで、どなたでも簡単に登録することができます。
『[「IBM Cloudをはじめました」無料ではじめられるライト・アカウント登録方法](https://qiita.com/ayatokura/items/42d4bc728112c733c80d)』

## Kuernetes Serviceの作成
### リソースの作成
IBM Cloudのログイン画面後のダッシュボード画面で、右上のリソース作成を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/f860cbee-d5b9-6147-1d17-2edbbfe49acf.png)

### Kuernetes Serviceの選択
リソースの「カタログ検索....」に「kubernetes」を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/68ff6b31-a69a-70d7-ea28-9427b51c59ba.png)

検索結果の一覧から「Kuberenetes Service」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/fef0601a-a4ea-75d0-7e77-b351da06e479.png)

### 無料プランの選択
プラン選択で標準から、「無料」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/b4928fef-8b84-4d92-1580-b748ab5030c8.png)

### クラスタの作成
クラスター名やリソースグループを確認し右下の「作成」ボタンを押します。
（クラスター名の変更や、リソースグループの変更は任意で行ってください。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/057485fb-b21e-bcaa-d77c-243369df36f2.png)

Kuberenetes Serviceがプロビジョニングされるまで少し時間を要します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/7891d544-552e-92a6-ad0f-b8a2d0166aee.png)

## Container Registoryの作成
### レジストリーの画面へ遷移
右上の「クラスター」のリンクを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/3889f651-7213-9db5-2a6f-76c142fb3c46.png)

左のメニューから「レジストリー」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/5a3ed920-f740-60da-597f-b7e9d3f11d87.png)

### 名前空間(Namespace)の作成
ロケーションを確認し、「名前空間」のタブを選択してください。
（ロケーションの変更は任意で行ってください。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/12666527-b49d-d52e-05ca-706390671033.png)

右側の「作成」ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/62ce91b8-bd4f-9641-b942-93b1064ec800.png)

名前空間の名前を設定し、「作成」ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/f8c9b187-7dec-2855-d5d7-f28e68e0496c.png)

正常に作成ができた場合、右上に通知が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/3d5eed65-6abe-2fc7-bf7f-c49bf400e472.png)

## Kubernetes Serviceの続き
### クラスターの画面に遷移
左側のメニューから「クラスター」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/27b17373-befa-8c13-5b4e-586f6e9b50a0.png)

### クラスターの作成完了
状態が「正常」になったら作成が完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/910eca24-857d-6036-e003-cdc9c53fc7fc.png)

レコードを選択すると、Kubernetes Serivceのクラスター画面に戻ります。
これで、Kubernetesが無料で使えるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/a4a2ac13-9f35-cc95-f839-f864a0282415.png)

### クラスターへのアクセス
左側のメニューから「アクセス」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/c1e6b338-25ca-252d-3513-c6a12311a3df.png)

### クラスターのアクセス情報
赤枠の情報にしたがってクラスターにアクセスすることが可能です。
情報がよく分からなくてもご安心ください。
ツールチェーンの作成により、この情報を意識せずにビルドやデプロイの自動化が可能です。
イメージはJenkinsと似ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/0ce8ae7b-051a-5d0d-e8b8-3d3004169c38.png)


## ツールチェーンの作成
### ツールチェーンの有効化
「ツールチェーンの有効化」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/a49c0687-4f9a-1bc0-8a65-078e2a923cb6.png)


### テンプレートの選択
様々なテンプレートが用意されていますが、「Kubernetes アプリの開発」テンプレートを選択します。
自分で、詳細に設定したい場合は「Build your onwツールチェーン」で細かく指定することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/bfcebef1-bc98-0857-c667-ae1b3c5e4f69.png)

### リージョンとGitリポジトリの設定
リージョンと、Gitリポジトリーの情報を設定します。
「このリポジトリーをプライベート・リポジトリーにする」を選択すると非公開のリポジトリーが作成されます。
（任意でGitリポジトリーの方法を変更することも可能です。）
設定が終わったら、「作成」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/78d78ef4-e083-c085-f9cf-5a3effae382a.png)

### Key Protectの設定
IBM Cloud APIキーの「作成」ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/dc115cc6-6721-8322-d96f-e2dd507debfa.png)

### Key Protectの作成
キー情報を設定し、「OK」ボタンを選択します。
（再使用のために秘密ストアに保持、サービス名を設定しました。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/3014685d-a4cf-a6cf-db41-7c9792647776.png)

### Delivery Pipelineの設定
IBM Cloud APIキーの項目が自動的に設定されます。
Container Registryの情報に、上記で作成したレジストリーのリージョンと名前空間を設定します。
クラスターの情報も自動的に設定されます。
設定が終わったら、「作成」ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/705b02dc-c47f-9346-c250-fa238ae1eb1e.png)

ツールチェーンが構成が始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/91bff151-5006-3d49-5ace-2054c2102770.png)

## サンプルアプリ（Node.JS）をKubernetesにデプロイ
ツールチェーンから「Delivery Pipeline」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/4a3093b1-46ca-e577-2e30-36c76a3e6dc8.png)

ビルドから、Container Imageの作成、KubernetesのDeployがすべて自動で進んでいきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/ec4e845b-f5fa-7387-0ae8-67019181393a.png)

## Kubernetes Serviceのアプリにアクセス
すべて成功したら、Check healthを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/41b330db-3bd5-5098-dcc2-2153f509cb47.png)

ログの下の方に「API_URL」が出力されている箇所があるので、URLのリンクを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/9637c178-2ff7-6655-7173-0003ed9fced8.png)

サンプルアプリケーションが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/35594d5c-6de1-5860-7113-0319ed4beae7.png)

## サンプルアプリケーションにAPIの追加
サンプルアプリケーションに「/hello」のAPIを追加する手順です。

### ツールチェーンに遷移
Deploy結果Check healthのログのタブに戻り、右上の「ツールチェーン」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/15f2e8a0-868b-dcb9-2e7c-e46834adfc4d.png)

### エディターの起動
ツールチェーン一覧から、Orion Web IDEを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/73ac2f33-511e-8254-7a72-4b5945a55a89.png)

### app.jsを開く
app.jsを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/87abb95d-4935-0f7c-675e-e9b6f51df263.png)

編集画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/c152e986-b504-6a6b-116d-429d15fece12.png)

### hello APIの追加
31行目にAPIをコーディングします。

```js

app.get('/hello', function(req, res) {
    res.send("Hello World.");
});
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/d2c66205-81c6-8343-f8e0-17b93f623684.png)

### app.jsの保存
左上のメニューから「ファイル」> 「保存」を選択し、編集結果をファイルに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/70a4841f-c59f-936b-94e3-52adf7616bf8.png)

### GitにCommit
左側のサブメニューからGitを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/a40b8510-fc7a-db16-0121-65b451d904c0.png)

変更内容を確認し、コミットメッセージを記入して、右上の「コミット」ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/3fc66c1a-b1e9-f294-2f6e-a8916e0b8605.png)

### masterにPush
赤枠の「プッシュ」を選択し、masterブランチにプッシュします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/abedb404-2e9f-1225-2c22-002035890e5b.png)

Pushが成功すると、画面下部に通知が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/5b7aed70-1c8e-5572-a3cf-faff62819a2a.png)

### ツールチェーンに戻る
左側のサブメニューからツールチェーンに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/aa5c5515-a293-7131-cb53-02bb411af469.png)

### Delivery Pipelineの選択
構成一覧から、「Delivery Pipeline」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/36eec333-2ddf-e14b-f66c-0aad0b12aeae.png)

### 反映の確認
先ほどと同様に、ビルド・イメージ作成・デプロイの作成が自動的に実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/5a6788b2-0a1d-9782-4dcb-7873a5145983.png)
すべて成功したら、「Check health」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/72ae171e-f604-454a-941e-7ea0e9766d86.png)
API_URLのリンクを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/84c5e253-d7b4-7273-9d54-6560c855b52f.png)
アプリの表示を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/26aa0e17-3c9d-a7e0-4206-2d30af27ab23.png)

### APIの確認
URLに「/hello」を入力して追加したhello APIにアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/cd0a5475-66a4-af37-76e9-b2069350abd8.png)

## 次のステップ
hello APIの修正手順と同様にWEB IDEで開発を続けていくことも可能ですが、
使い慣れた方法で、GitにPushしていくことも可能です。

## Gitリポジトリーにアクセス
ツールチェーンより Gitを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/20a635fa-285d-c3e3-c42a-72bd79d1a720.png)
右側のCloneからソースをCloneすることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/b5ea29cc-097f-81b5-5c2c-4b2c4788703e.png)
ソースをmasterにPushすると、Delivery Pipeが自動で回ってKubernetesにデプロイされます。

## その他
途中で、ブラウザを閉じてしまった場合、IBM Cloudにログイン後ダッシュボードからアクセス可能です。
### リソース一覧表示
右上の「すべて表示」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/f79c7449-c6e7-6cdc-1b43-e78d281671ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/353ff06a-4a26-6104-493d-3569233a03be.png)