Oracle Container Engine for Kubernetes (OKE) でクイックにKubernetesクラスタを作成してみた

## はじめに
Oracle Container Engine for Kubernetes(以後OKE)は、Oracle Cloud(OCI)で提供されているマネージドKubernetesサービスです。
当方これまでクラウドネイティブな環境構築/開発の経験がほとんどなく、前々からKubernetesクラウド環境に興味はあり試してみたくは思っていたものの、フルスクラッチでの構築は知識範囲も広く時間もかかり沼にはまりそうなので躊躇しておりました。

最近クラウドに多少慣れてきたこともあり、今回はマネージドKubernetesサービスであるOKEを使って手早くKubernetesの学習/テスト環境が作成できるか試してみました。

## OKEクラスタの作成 
### 1. ポリシーの作成
今回OKEは自身のコンパートメント下で動作させるものとし、OKE がコンパートメントのすべてのリソースを管理することを許可します。
左上のナビゲーションメニューから[アイデンティティ]-[ポリシー]を選択し、**ポリシーの作成**をクリックします。
![image-20200929171803087.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/501ff975-0577-d92c-9822-87d6d5d33e5c.png)
**[名前]** 任意のポリシー名を指定します。例）Policy4OKE
**[説明]** ポリシーの説明(任意)を記載します。
**[コンパートメント]** OKEを動作させるコンパートメントを指定します。例) MyCompertment
**[ステートメント]** **allow service OKE to manage all-resources in compartment Mycompartment**  ← コンパートメントが **Mycompartment** の場合
*) 紫色の部分は、適宜 ご自身のコンパートメントに置き換えてください。

**作成**をクリックしてポリシーを作成します。
![image-20200929173910254.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4fab9160-f394-a44f-3e8a-872e9c08326e.png)
ポリシーが作成されました。

### 2. クラスタの作成
左上のナビゲーションメニューから[開発者サービス]-[コンテナ・クラスタ(OKE)]を選択し、**クラスタの作成**をクリックします。
![image-20200929174133848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9ebfb954-7d7f-91f1-39c8-407cb97e461f.png)
今回は素早くKubernetes環境を作成したいので、**クイック作成**を選択します。
クイック作成では、OKEに必要なネットワーク関連のリソースやクラスタ関連のリソースを自動生成してくれます。**ワークフローの起動** をクリックして、クイック作成を進めます。

### 3. クイック作成
![image-20200929175418503.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/ee828fb3-6d79-8f1c-3050-6e4216afcb89.png)
**[名前]** 任意のクラスタ名を指定します。例）oke-cluster1
**[コンパートメント]** ご自身のコンパートメントを指定します。例）Mycompartment
**[Kubernetesバージョン]** Kubernetesのバージョンを選択します。
**[可視性タイプの選択]** Kubernetesのノードのサブネットを選択します。デフォルトのままプライベートを選択。
**[シェイプ]** シェイプを選択します。今回は Standard.E3 Flex の 1OCPU/メモリ16GB を選択しました。
**[ノードの数]** ノードの数を指定します。今回は 3ノード構成としてます。
**次** の設定へ進みます。
![image-20200929181233453.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4790061f-9f4a-9752-ae2a-ff46b9560932.png)
**確認** 画面の内容をチェックして、**クラスタの作成**をクリックします。

![image-20200929181807729.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/7e3ebedd-e25a-be59-9e5e-eb3e2438be33.png)
必要なリソースが順次作成されていきます。しばらくすると、OKEクラスタが作成されました。
![image-20200929182225098.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/c2189a30-40da-10ef-9e97-0a7cdc733dd8.png)
左下メニューの[ノード・プール] をクリックし、続けて作成された Pool1 を選択。さらに左下メニューの[ノード]を選択すると、作成されたノードの情報が表示されます。
![image-20200930132512337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/72455635-a6f9-105a-a92b-f03c0dd79d93.png)
これらは、ナビゲーションメニューから[コンピュート]-[インスタンス] を選択した際にも、OKEクラスタのインスタンスが生成されていることを確認できます。
![image-20200930132910072.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/40106e8a-e860-c6a9-c391-c93edae0a6b8.png)
各ノードはフォルト・ドメインの FD-1, FD-2, FD-3 に分散されて作成されています。構成図で示すと、大枠下記のクラスタ構成になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/49fa8641-5e9d-0146-d886-736075cf172c.png)
クラスタが構築できたので、続いてクラスタへのアクセスを確認します。

## クラスタへのアクセス
![image-20200930134214160.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/ecee5624-938c-740c-ed77-fdb9131ec20a.png)
**クラスタへのアクセス** をクリックすると、**Cloud Shell アクセス**と、**ローカル・アクセス** の２つのアクセス方法を選択できます。今回はこの２つの両方でアクセスを試してみます。
初めは **Cloud Shell アクセス**を試します。
![image-20200930134404936.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4c8dbfc4-8c60-b73a-df08-b3a0f9dd8d17.png)

### 1. Cloud Shell アクセス
**Cloud Shellの起動** をクリックすると、Cloud Shell が起動されブラウザに表示されます。
![image-20200930135634887.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4e1243a5-a836-ea73-ca35-c2ef4a61d9ca.png)
Cloud Shell では、クラスタアクセスに必要な次のツールが事前にセットアップ済みとなっています。

- kubectl
- oci cli
- Python など

  
手順②のコマンドをコピーして、Cloud Shell で実行します。右端の**コピー** をクリックするとコピーされます。
![image-20200930140500336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9ee703fd-b8d3-a01b-21ca-ad39857c38d3.png)
HOMEディレクトリの下 に ```.Kube/config``` ファイルが生成されました。アクセスの準備ができたので、Kubectl が正常に動作するか、```kubectl version``` で確認します。version が表示されkubectl は正常に動作しているようです。

操作後にわかったのですが、Cloud Shell の左上部の歯車アイコンをクリックして、フォントの大きさなどを変更できます。
![image-20200930135425941.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a75be5d2-f3f2-9c95-0419-8a513f8306fa.png)
```get node``` コマンドでクラスタ情報にアクセスできるかを確認します。
![image-20200930142251155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4b0e40f6-516d-3aad-b74a-407325a7ecbc.png)
クラスタのノード情報が取得でき、クラスタへのアクセスが確認できました。

### 2. ローカル・アクセス
続いて、ローカル・アクセスを試してみます。今回は先の構成図にあるように、パブリックなサブネットにコンピュート・インスタンスを用意し、Teratermなどのターミナルからクラスタへのアクセスを試みます。
![image-20200930143826783.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/364c34a2-b11a-62b9-172e-d0361ce39448.png)

#### 事前準備
ターミナルからアクセスするためには、事前に以下の準備を済ませておく必要があります。

- Kubectl のセットアップ
- OCI CLI のセットアップ（バージョン2.6.4以上）補足）大筋以下の手順をおこないました。
 1. 必要な情報を取得: User OCID, Tenancy OCID, Region
 2. oci setup config コマンド実行
 3. APIキーを登録 - 2.で生成された PUBLIC KEY をAPIキーに追加
   (詳細は巻末の参考URL『OCIでOKEインスタンスを設定』を参照ください)

#### ターミナルからのアクセス
ローカル・アクセスの手順指示どおりに進めます。
1. OCI コマンドのバージョンと動作を確認
2. kubeconfig ファイルを格納するディレクトリの存在を確認、ない場合には作成
3. その後、クラスタのkubeconfigファイルを生成するためのコマンドを実行します。
![image-20200930152026796.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/54bfb427-fa21-b052-0233-d6f138737b8d.png)
HOMEディレクトリ下 ```.kube/config```が作成されました。

```get node ```コマンドでクラスタ情報にアクセスできるかを確認します。
![image-20200930152245624.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/fa104e79-a41a-7e7c-08f4-7c90bf5b0e9a.png)
クラスタのノード情報が取得でき、ターミナルからもクラスタへのアクセスが確認できました。

## まとめ
OKEを使い簡単にKubernetesクラスタを構成することができました。クイック作成では１画面分の項目を入力/選択するのみでした。またクラスタ構築後のアクセスもOKEダッシュボードのセットアップ指示に従って設定すれば、容易にクラスタにアクセスできることが確認できました。

## 参考URL
[OCIでOKEインスタンスを設定](https://oracle-japan.github.io/paasdocs/documents/weblogic-operator/tutorials/setup.oke/)

[Create a Cluster with Oracle Cloud Infrastructure Container Engine for Kubernetes](https://www.oracle.com/webfolder/technetwork/tutorials/obe/oci/oke-full/index.html)