Rodeoシナリオ(日本語) with v2.6 - 2021/10

# 前書き
Rancher Rodeo v2.6(RKE版2)へようこそ。

このシナリオでは、RancherをHAモードでインストールし、Rancher経由でクラスターを構築し、さらに構築したクラスターにワークロードをデプロイするなどの手順を説明します。

このシナリオは、こちらの<a href="https://rancher.com/docs/rancher/v2.6/en/installation/install-rancher-on-k8s/" target="_blank">HAインストール手順</a>を参照して作成したものです。

本日のラボは、右側のパネルのタブにある`rancher01`と`cluster01`の2つの仮想マシンを使用します。 
`rancher01` はKubernetesクラスターとRancherを実行し、`cluster01` はRancher経由で構築したKubernetesクラスターとユーザーのワークロードを実行します。

ここでは2つの異なるKubernetesクラスターが使用されていることに注意してください。
Rancher用のKubernetesクラスターはRancherの実行専用であり、RKE CLIにより、`rancher01`上に構築されます。
ワークロード用のKubernetesクラスターはRancherによって、`cluster01`上に構築されます。

**注意事項：** [FINISH]ボタンをクリックすると、このRodeoセッションは終了し、Lab環境のリソース（仮想マシン）がすぐに破棄されます。休憩の際には、HobbyFarmページをそのままに開くか、[CLOSE SCENARIO]ボタンをクリックしてください。

# RancherのKubernetesクラスターを作成
Rancherインストールは、CNCF (Cloud Native Computing Foundation) 認証付きの全てのKubernetesディストリビューションを対応しています。

本日のラボは[RKE2](https://rke2.io/) Kubernetesクラスターを使用します。 RKE2はCNCF認証付きのKubernetesディストリビューションであり、セキュリティにフォーカスし、簡単かつ迅速にインストールおよびアップグレードできます。 データセンター、クラウド、エッジデバイスで実行できます。 単一ノードでも、大規模な高可用性の構成のシステムでも動作します。

このRodeoでは、Rancherをインストールするために、 `Rancher01`VM上にシングルノードのKubernetesクラスターを作成します。 これは、デフォルトのRKE2インストールスクリプトを使用して実行できます。

```ctr:Rancher01
sudo bash -c 'curl -sfL https://get.rke2.io | \
  INSTALL_RKE2_CHANNEL="v1.21" \
  sh -'
```

RKE2の構成ファイルを作成します。

```ctr:Rancher01
sudo mkdir -p /etc/rancher/rke2
sudo bash -c 'echo "write-kubeconfig-mode: \"0644\"" > /etc/rancher/rke2/config.yaml'
```

次に、RKE2 systemdサービスを有効にして、起動します。

```ctr:Rancher01
sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service
```

以下のコマンドを使用してログを表示できます。

```ctr:Rancher01
sudo journalctl -u rke2-server -f
```
`Ctrl+C`を押下し、rke2-serverログ表示を終了します。

このRodeoでは、Lab環境のリソース制約のため、シングルノードのKubernetesクラスターを使用しています。
マルチノードのKubernetesクラスターを作成するようの場合、上記の同じインストールスクリプトを使用できます。Rancherインストールの為のマルチノードKubernetesクラスターに構築すれば、Rancherの高可用性がより高くなります。

詳細については、[RKE2ドキュメント](https://docs.rke2.io/)を参照してください。


# クラスターをテスト
この前の手順で作成したRKE2クラスターにアクセスするためには、Kubernetes CLIの`kubectl`を使用します。

次のコマンドを実行し、`kubectl`をインストールします。

```ctr:Rancher01
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
```

また、 `kubectl`がKubernetesクラスターに接続するためのツールです。`kubectl`は、標準のKubeconfigファイルを使用します。このKubeconfigファイルは、` KUBECONFIG`環境変数で指定されるファイル、またはユーザーのホームディレクトリの `~/.kube/config`ファイルになります。

RKE2は、クラスターのKubeconfigは`/etc/rancher/rke2/rke2.yaml`に格納されいています。

`kubectl`がクラスターへアクセスできるように、`/etc/rancher/rke2/rke2.yaml`を`~/.kube/config`へのソフトシンボリックリンクを作成します。

```ctr:Rancher01
mkdir -p ~/.kube
ln -s /etc/rancher/rke2/rke2.yaml ~/.kube/config
```

下記の2つのコマンドを実行して、kubectlがクラスターへ接続できることを確認します。

クラスタ内のすべてのノードを一覧表示し、それらのステータスを確認します。

```ctr:Rancher01
kubectl get nodes
```

クラスターには1つのノードがあり、ステータスは「Ready」である必要があります。

クラスターのすべてのネームスペース内のすべてのポッドを一覧表示するには、次のようにします。

```ctr:Rancher01
kubectl get pods --all-namespaces
```

すべてのポッドのステータスは「Running」または「Completed」である必要があります。

# Helmをインストール
Helmは、よく利用されているKubernetesパッケージマネージャーです。RancherをKubernetesクラスターに容易にデプロイする為に、Helmを使用します。このステップでは、Helm CLIをダウンロードし、実行可能にします。

```ctr:Rancher01
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
  | bash
```

Helmのインストールが正しくインストールされていることを確認します。

```ctr:Rancher01
helm version --client
```


Helmは、前のステップでのkubectlと同じkubeconfigを使用します。

クラスターに既にインストールされているHelmチャートを一覧表示します。

```ctr:Rancher01
helm ls --all-namespaces
```

# cert-managerをインストール
cert-managerは、さまざまな発行元からのTLS証明書の管理と発行を自動化に行うKubernetesアドオンです。

次の一連の手順では、RancherのTLS証明書を管理するために使用されるcert-managerをインストールします。こちらの<a href="https://cert-manager.io/docs/installation/kubernetes/#installing-with-helm" target="_blank">cert-managerインストール手順</a>を参照して作成したものです。

次のコマンドは、cert-managerのCRD定義をクラスターに適用します。

```ctr:Rancher01
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml
```

次に、Jetstackのhelmリポジトリを追加します。

```ctr:Rancher01
helm repo add jetstack https://charts.jetstack.io
```

これで、cert-managerのバージョン1.5.1をインストールします。

```ctr:Rancher01
helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --version v1.5.1 \
  --create-namespace
```

インストールの進捗状況を確認するためには、 下記のコマンドで、`cert-manager`と` cert-manager-webhook`のdeploymentステータスを確認します。

```ctr:Rancher01
kubectl -n cert-manager rollout status deploy/cert-manager
```

cert-managerのdeploymentは、最終的には次のようなsuccessfully rolled out状態になります。

`Waiting for deployment "cert-manager" rollout to finish: 0 of 1 updated replicas are available...`

`deployment "cert-manager" successfully rolled out`

```ctr:Rancher01
kubectl -n cert-manager rollout status deploy/cert-manager-webhook
```

cert-manager-webhookのdeploymentは、最終的には次のようなsuccessfully rolled out状態になります。

`Waiting for deployment "cert-manager-webhook" rollout to finish: 0 of 1 updated replicas are available...`

`deployment "cert-manager-webhook" successfully rolled out`

# Rancherをインストール
次に、RancherをHAモードで Rancher01上に構築したクラスターにインストールします。次のコマンドで、 rancher-latestをHelmリポジトリとして追加します。

```ctr:Rancher01
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
```

最後に、 helm installコマンドで、Rancherをインストールします。

```ctr:Rancher01
helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=rancher.${vminfo:rancher01:public_ip}.sslip.io \
  --set replicas=1 \
  --version 2.6.0 \
  --create-namespace
```


# Rancherがアクセスできる状態になっていることを確認
Rancherにアクセスする前に、`dynamiclistener-ca`が証明書生成の作業が完了したことを確認する必要があります。次のbashスクリプトで、チェック処理を行います。

```ctr:Rancher01
while true; do curl -kv https://rancher.${vminfo:Rancher01:public_ip}.sslip.io 2>&1 | grep -q "dynamiclistener-ca"; if [ $? != 0 ]; then echo "Rancher isn't ready yet"; sleep 5; continue; fi; break; done; echo "Rancher is Ready";
```

5分間経っても、Rancher is Readyにならない場合は、次のステップの[Rancherへのアクセス]へ進めてください。

# Rancherへのアクセス


**注：** Rancherはまだ起動中の可能性があるため、以下のリンクではすぐに利用できない場合があります。 Rancherが利用可能になるまで画面リフレッシュを続けてください。

1. Rancherへアクセスします <a href="https://rancher.${vminfo:Rancher01:public_ip}.sslip.io" target="_blank">https://rancher.${vminfo:Rancher01:public_ip}.sslip.io</a>
2. このRodeoの場合、Rancherは、ブラウザによって自動的に信頼されないCAからの自己署名証明書を使用してインストールされます。 このため、ブラウザに証明書の警告が表示されます。 この警告はスキップしても問題ありません。 一部のChromiumベースのブラウザでは、スキップボタンが表示されない場合があります。 この場合は、エラーページの任意の場所をクリックして、「thisisunsafe」と入力します（引用符は含みません）。 これにより、ブラウザは警告をバイパスして証明書を受け入れるようになります。
3. ログイン画面が表示されたら、画面左側の**kubectl get secret**コマンドをクリックして、クリップボードにコピーします。これは、初期パスワードを取得する為のコマンドです。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/9c4b01aa-3c55-04ac-dbff-6f7bfa0871cb.png"><br>
4. コピーした**kubectl get secret**コマンドを`rancher01`仮想マシンで実行します。コマンドの結果が初期ログインパスワードです。この初期パスワードコピーして、Rancherログイン画面に戻って、**Passwrod**項目に入力して、**Login with Local User**ボタンをクリックします。<br>
<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/64af5227-62fe-6bce-22dd-7fc78230bd44.png">
5. **Set a specific password to use**を選択し、「admin」ユーザーのパスワードを設定します。[Terms & Conditions]規約を同意し、[continue]ボタンを押下します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/343b1c24-a62d-b2b7-5a25-c29c32425b06.png">
5. Server URL設定画面に、**Rancher Server URL** が `rancher.${vminfo:Rancher01:public_ip}.sslip.io`である必要がありますので、デフォルト設定のままでOK。

ログイン後に、Rancher UIが表示されます。 表示されている`local`クラスターはRancherが稼働するクラスターであり、アプリケーションのデプロイには使用しないでください。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/1259740f-fc7f-524f-e2f0-b02b5627a1d3.png">

UIの左上隅に、グローバルナビゲーションメニューを開く「ハンバーガーメニュー」ボタンがあります。 そこで、グローバルアプリケーションと設定にアクセスできます。 すべてのRancher管理クラスターを探索するためのクイックリンクと、Rancherホームページに戻る方法があります。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/5723aa9d-3f82-1fe4-bb26-ca1fd350adb9.png">


# Rancher経由でKubernetesクラスターを作成


このステップでは、Rancher経由で、Kubernetesラボ用クラスターを作成します。通常、本番環境のKubernetesクラスターは、複数のノードから構成しますが、このラボ環境では、クラスターを構成する仮想マシンノードは、1つだけです。

1. Rancherのホームページに戻ります。
2. クラスターのリストの上にの **Create** ボタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/6adc33e7-01de-aaab-6870-b5d7f006d380.png">
3. **Use existing nodes and create a cluster using RKE2** セクションの**Custom** ボタンをクリックします。
 - RKE2クラスターを使用する為、トグルをRKE2 / K3sに切り替えてください。
 - Rancherが複数なクラスター構築方式をサポートしていますが、このラボでは**Custom**を使用します。<br>                       
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/c9cc7610-423c-a8a0-b7be-22ab0e6fc8a2.png">
4. [**Cluster Name**]項目にクラスターの名前を入力します。
5. Kubernetesのバージョンを `v1.21`シリーズのオプションに設定します。他のすべての設定はデフォルトのままにして、画面の一番下にある[**Create**]をクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/902d59ad-455d-c77d-f6f2-ce3c34733c07.png">
6. **Step 1**のセクションに、[**Node Role**]項目の**etcd**, **Control Plane**、および**Worker**をすべてチェックしているを確認し、**Show Advanced**ボタンブタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/6618c6db-40a7-ca19-4062-63764a73dd43.png">
7. **Step 2**のセクションに、**Node Public IP** に(`${vminfo:Cluster01:public_ip}`)を入力します。 **Node Private IP**に (`${vminfo:Cluster01:private_ip}`)を入力します。
    - **重要：** この手順で、**Cluster01**マシンの正しいpublic IPアドレスとprivate IPアドレスを使用して設定することが非常に重要です。これを間違えると、以降のステップが失敗します。<br>                                            
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/f9a7e0ed-8fb1-a2ad-bc14-ea1a59ed1256.png">
8. **Step 3**のセクションに、**Insecure: Select this to skip the TLS verification if your server has a self-signed certificates**をチェックし、Registration commandをダブルクリックして、クリップボードにコピーします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/800b5c04-cdf1-4f71-70a3-2cfca9622512.png">
9. シナリオの次のステップに進みます。

# Kubernetesクラスターの起動処理
**重要：**ラボ環境で、右側のウィンドウの**Cluster01**タブが選択されていることを確認してください。このコピーしたコマンドを`Rancher01`タブで実行しないでください。

1. コピーした `Shell` コマンドを`Cluster01`で実行します。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/50b8266b-4920-b1be-5544-f9118f1c23a6.png">
2. プロビジョニングプロセスは、Rancher GUIの**Machines**、**Conditions**、および **Related Resources**タブで確認できます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/b3f680ad-d634-039c-fd45-16f0b51da220.png">
3. ホームページにクラスター一覧画面に、クラスターの状態が**Active**になっていることを確認します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/ea74132e-563f-8f28-32e7-83a73eb09836.png">
4. このクラスターの名前をクリックする、または、グローバルメニューでクラスターを選択することで、クラスターの探索を開始できます。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/6f4ba880-be8d-9ca2-3841-e2acf462eb4e.png">


# 作成したKubernetesクラスターを参照

このステップでは、Kubernetesクラスターの詳細情報の参照を行います。

1. **Active**状態になったクラスターの名前リンクをクリックします。
2. Dashboard画面に、クラスターの容量と最近のイベントを示すボックスをご参照ください。
3. 右上隅にある `Kubectl Shell`のプロンプトアイコンをクリックします。 
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/1cdfc3e8-1899-353e-4592-9cdf21093a35.png">
4. 下部に開くShellコマンド画面に`kubectl get pods -A` と入力して、「kubectl」経由で、Kubernetesクラスターとのやり取りを体験してください。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/fe810cd5-de56-e051-0e31-1a56fb3295d4.png">
5. 右上隅にある `Kubeconfig File` ボタンで開く画面から、Kubeconfigファイルを取得できます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/fd5f76fc-d1a5-6dde-4a47-817a69c93bff.png">
5. 画面左側のメニューでは、すべてのKubernetesリソース、Rancher Application Marketplace、および追加のクラスターツールにアクセスできます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/207ddd87-6e83-81a9-c4fa-c0c30529212a.png">

# クラスター監視機能を有効に

次のように、*Rancher Monitoring* 機能をデプロイします：

1. 画面の左側に**Apps & Marketplace**のドロップダウンメニューから、**Charts**をクリックし、カタログ画面を開きます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/319962df-e99e-2cd0-71b5-e79a89dc5a23.png">
2. 画面の右側の**Monitoring**を選択します。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/9725e495-c296-f9df-f05c-c081b27ce1ab.png">
3. 右上隅にある**Install**ボタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/d749d23c-4d94-02b5-2fa8-8a89b3691e4c.png">
4. インストールウィザードが表示されます。最初の**Metadata**ステップでは、すべてをデフォルトのままにして、**Next**をクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/3fc8433d-d2a6-07f7-2d0b-0ff9769e37db.png">
4. **Values** ステップでは、Rodeoの仮想マシンで使用可能なCPUとメモリが限られているため、**Prometheus**セクションを選択して、**Resource Limits** > **Requested CPU**の**750m**を**250m**に変更します。画面の下部にある **Install**ボタンをクリックします。**Monitoring**がインストール完了まで待ちます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/43c67a2f-3ba3-2735-a1ec-8a1a15db2bfd.png">

インストール完了後に、左側の**Installed Apps** メニューで、インストール済みのアプリ一覧から確認します。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/8cfbe14f-94dc-75d8-482b-3bbed243137b.png">


# クラスター監視の操作

クラスター監視機能を有効にした後に、Monitoringの各コンポーネント機能が使用できるようになります。

1. 画面の左側に**Monitoring**を選択し、MonitoringのDashboard画面を開きます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/05241258-1cf2-2de2-00d3-fe769a387fb8.png">
2. Monitoring Dashboard画面に、各コンポーネントのUIリンクが表示されています。GrafanaのUIリンクをクリックすると、Rancher Service Proxyを介してGrafana画面にアクセスします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/b819788f-6460-5aca-401d-b70d58f93b6f.png">

Grafana上に、色んな監視メトリックのdashboardを詳細に確認できます。※Grafana上に、metricsやdashboardも設定できますが、今回のLabには、対象外とします。

# Rancher経由でDeploymentとServiceを作成

このステップでは、KubernetesのDeploymentとServiceを作成します。このラボでは、`rancher/hello-world:latest`というDockerイメージを使用しますが、独自のdockerイメージをお持ちであれば、それを使用しても構わないです。

Deploymentは、pod単位でコンテナーをデプロイする場合、ノードの障害やアプリケーションのクラッシュでPodが足りなくなった際も自動的にPodを追加するセルフヒーリングの仕組みを持っています。

1. 画面の左側に**Workloads**のドロップダウンメニューから、**Deployment**を選択し、画面の右上隅にある**Create**ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/754a541f-63c3-7adf-7cc5-5c2390207bb0.png">
2. **Deployment: Create**の画面には、下記のように値を入力します：
	- **Name** - `helloworld`
	- **Replicas** - `2`
	- **Container Image** - `rancher/hello-world:latest`
	- **Ports**の下にある**Add Port**ボタンを押下し、**Service Type**項目に`Node Port` を選択し、**Private Container Port**項目に`80`を入力します。
	- **注：**Rancherには、コンテナデプロイ時の設定項目が多くありますが、今回のラボには、簡単なところだけを体験していただきます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/31bbe521-c418-3055-4466-2346e9136e99.png">
3. 画面を下にスクロールして、[**Create**]ボタンをクリックします。!
4. これで、**helloworld** Deploymentがデプロイされました。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/78918af4-c325-9116-3e01-f24575b61388.png">
5. **helloworld**をクリックすると、2つのPodがデプロイされていることが確認できます。          
<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/a137c147-4fa1-17ba-bfca-d8219372988c.png">
6. Podの** Three-dots**メニューでは、ポッドのログにアクセスしたり、ポッドへのインタラクティブシェルを開始したりすることもできます。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/888c85bf-5d7e-7c0b-2aed-ce5033b9ca02.png">
7. Podの名前をクリックすると、Podレベルの**Metrics**、**Conditions**、**Related Resources**の情報を確認できます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/f8d62fe1-6f57-95d9-95fb-f47e136ddb47.png">
8. 画面の左側に**Service Discovery**のドロップダウンメニューから、**Services**を選択し、**helloworld**アプリの公開**Port**を確認します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/962bf06a-46f6-dcdd-fe91-100f14a11a47.png">
9. **Port**をクリックすると、**helloworld**アプリのWebPageに遷移します。     
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/1c51c3d3-8fdc-b1e6-411a-fc16e5fefec4.png">


# Kubernetes Ingressを作成
このステップでは、前のステップでデプロイしたDeploymentのPodにアクセスする為のL7のIngressを作成します。また、ワークロードにDNSホスト名を紐付けするために、自動DNS⇆IP変換サービス[sslip.io](http://sslip.io/)を使用します。

1. 画面の左側に**Service Discovery**のドロップダウンメニューから、**Ingresses**を選択し、画面の右上隅にある**Create**ボタンをクリックします。

<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/fc4b27cd-2142-6f5b-6960-686556170c06.png"><br>
2. **Ingress: Create**の画面には、下記のように値を入力します：
	- **Name** - `helloworld`
	- **Request Host** - `helloworld.${vminfo:Cluster01:public_ip}.sslip.io`
	- **Path Prefix** - `/`
	- **Targt Service** - ドロップダウンから `helloworld-nodeport`サービスを選択します
	- **Port** - ドロップダウンからPort `80` を選択します
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/e01027f0-59c4-fa3e-ed24-f5d45b89475a.png"><br>
3. **Create**ボタンをクリックします。`helloworld.${vminfo:Cluster01:public_ip}.sslip.io`ホスト名が登録されるのを待ちます。数分以内にIngressが**Active**になるはずです。
<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/3099fd55-71ce-1243-cd15-6a65e89c95bf.png"><br>
4. sslip.io付きのホスト名をクリックして、Ingress経由で、**helloworld**アプリの画面へアクセスします。

**注：**アプリの画面へアクセスする際に、一時的に404/502/503エラーになる場合があります。これは、Deploymentワークロードに適切なreadiness probeを設定しなかった為、ワークロードが正常起動完了前にアクセスしてしまう可能性があると想定しています。


# Kubernetesクラスターでプロジェクトを作成

プロジェクトは、1つ以上のKubernetesのnamespaceのグループです。
このステップでは、サンプルプロジェクトを作成します。

1. 画面の左上隅に**Cluster**のドロップダウンメニューから、**Projects/Namespaces**を選択し、画面の右上隅にある**Create Project**ボタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/42a95b26-3601-8558-503b-ab35cbfe088a.png">
2. **Project: Create**の画面には、**Name**項目に,`stateless-wordpress`を入力し、[**Create**]ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/ff54825d-7d96-2764-c5d3-9f88b54e592f.png"><br>
    - 上記のプロジェクト設定画面に、リソースクォータとポッドセキュリティポリシーも設定できます。
3. 画面を下にスクロールして、`stateless-wordpress`プロジェクトにの**Create Namespace**]ボタンをクリックします。         
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/a4c847db-257c-9571-1e9c-c096895f7dd6.png">
4. **Namespace: Create**の画面には、**Name**項目に,`stateless-wordpress`を入力し、[**Create**]ボタンをクリックします。        
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/1759d9eb-3115-fbcf-8cdc-676230f43c16.png">

# Helmリポジトリを追加

クラスターにアプリケーションをインストールする為、最も簡単な方法は、Rancherから提供するApps＆Marketplaceを使用することです。 Apps＆MarketplaceにはRancherおよびパートナーから提供する全てなアプリの以外に、他のHelmリポジトリを追加できます。Rancher UIで追加されたHelmリポジトリ中のチャートをインストールできます。

1. 画面の左上隅に**Apps & Marketplace**のドロップダウンメニューから、**Chart repositories**を選択し、画面の右上隅にある**Create**ボタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/e6993f42-82d9-d9d3-fa20-307fb86e0443.png">
2. **Chart repositories: Create**の画面には、下記のように値を入力します：
   - **Name** - `rodeo`
   - **Target** - `http(s) URL to an index generated by Helm`を選択し
   - **Index URL** - `https://rancher.github.io/rodeo` <br>
<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/6c35b9a8-5cfb-3962-48c5-81e6764c626c.png">
4. **Create**ボタンをクリックします。
5. リポジトリが**Active**になったら、**Apps & Marketplace**のドロップダウンメニューから **Charts**に移動します。 ここに、インストールできるアプリが表示されます。`rodeo`リポジトリを選択したら、いくつかの新しいアプリが表示されます。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/1024a623-5964-5323-73ad-fdb0d809082d.png">

# Wordpressをstatelessプリケーションとしてデプロイ

このステップでは、前の手順に作成したプロジェクトに、Wordpressをstatelessアプリケーションとしてデプロイします。

1. **Apps & Marketplace** の**Charts**画面に、**wordpress** アプリを選択します。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/cb7184f0-8b5d-cbfc-4598-b89ad44750f8.png">
2. **Install**ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/ee33f232-955f-3951-cff7-5b16f2cb64f1.png">
3. **Wordpress**の**Install: Step 1**画面に、`stateless-wordpress` Namespaceを選択し、 **Name**項目に`wordpress`を入力し、**Next**ボタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/bd327123-679f-9cd8-5e8b-7f96a5264b69.png">
4. **Wordpress**の**Install: Step 2**画面に、下記のように、値を入力します：
   - **Wordpress settings**タブにの**Wordpress password** - 自由に決定したパスワード
   - **Services and Load Balancing** タブにの **Hostname** - `wordpress.${vminfo:Cluster01:public_ip}.sslip.io`
4. **Install**ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/b9a4c8e5-d266-975a-cb3e-079893f405e2.png">
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/011d3899-ae18-e7fc-1508-7b0a288cacc4.png">
5. インストールが完了したら、**Service Discovery**のドロップダウンから **Ingresses**に移動します。 そこに新しいイングレスが表示されます。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/c82db895-abb4-169f-0143-ef95c917e732.png">
6. URLをクリックしてWordpressにアクセスします。
    - *注：ワードプレスアプリの起動中に404、502、または503エラーが表示される場合があります。Wordpressが利用可能になるまで、Wordpressページをリフレッシュしてください*<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/cb68620d-91cd-b048-f238-072aa1906ae2.png">
6. 設定したパスワードを使用してWordpressにログインし、新しいブログを投稿します。 **wordpress-mariadb-0**Podを削除するか、**wordpress-mariadb** StatefulSetの** Redeploy**をクリックすると、投稿が失われることに注意してください。 これは、Wordpress MariaDB StatefulSetが永続ストレージを使用しない為です。

#nfs-server-provisionerをデプロイ

Kubernetesクラスターでは、アプリケーションが永続ストレージを使用することが多いです。 このクラスターではKubernetesクラウドプロバイダーが有効になっていない為、** nfs-server-provisioner **をデプロイして、NFSサーバーを実行します。これで、Kubernetesクラスター内永続ストレージを提供できます。
これは本番向けのソリューションではありませんが、永続ストレージの仕組みを説明する為のものです。

1. From **Apps & Marketplace** > **Charts** install the **nfs-server-provisioner** app**Apps & Marketplace** の**Charts**画面に、**nfs-server-provisioner** アプリを選択します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/e8e88f15-1939-b771-b312-c2ed13a1f62b.png">
2. **Install**ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/ca06209b-d021-fc06-b88a-6a2af6eaf94d.png">
3. **nfs-server-provisioner**の**Install: Step 1**の画面に、`kube-system` Namespaceを選択し、 **Name**項目に`nfs-server-provisioner`を入力し、**Next**ボタンをクリックします。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/fdb3a4dc-ac14-ebc2-8142-c8df54272954.png">
4. **nfs-server-provisioner**の**Install: Step 2**の設定はデフォルトのままにして，**Install**ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/386f8718-49fa-df55-8f92-178400eb3055.png">
5. インストールが完了したら、**Storage**のドロップダウンから**Storage Classes**に移動します。 `nfs` storageclassはデフォルトの設定であることを表示されます。
<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/8f421d67-f04b-5796-923d-0315e2bdf55d.png">


# KubernetesクラスターでStateful Wordpressプロジェクトを作成
NFSストレージプロバイダーを使用する新しいWordpressインスタンスをデプロイします。 まず、新しいプロジェクトを作成します。

*注：以前のProjects追加手順と同じですので、画面キャプチャを割愛します。*

1. **Cluster**のドロップダウンメニューから、**Projects/Namespaces**を選択し、右上隅にある**Create Project**ボタンをクリックします。
2. **Project: Create**の画面には、**Name**項目に,`stateful-wordpress`を入力し、[**Create**]ボタンをクリックします。
    - 上記のプロジェクト設定画面に、リソースクォータとポッドセキュリティポリシーも設定できます。
4. `stateful-wordpress`プロジェクトにの**Create Namespace**]ボタンをクリックします。
5. **Namespace: Create**の画面には、**Name**項目に,`stateful-wordpress`を入力し、[**Create**]ボタンをクリックします。


# Wordpressをstatefullプリケーションとしてデプロイ


このステップでは、wordpressをstatefullアプリケーションとしてKubernetesクラスターにデプロイします。 このwordpressのデプロイでは、前の手順でデプロイしたNFSストレージプロバイダーを利用して、mariadbデータを永続的に保存できます。
*注：前のstateless wordpressデプロイ手順と同じですので、一部の画面キャプチャを割愛します。*

1. **Apps & Marketplace** の**Charts**画面に、**wordpress** アプリを選択して、**Install**ボタンをクリックします。
2. **Wordpress**の**Install: Step 1**画面に、`statefull-wordpress` Namespaceを選択し、**Name**項目に`wordpress`を入力し、**Next**ボタンをクリックします。
3. **Wordpress**の**Install: Step 2**には、
   - **Wordpress settings**タブにの**Wordpress password** - 任意なパスワード
   - **Wordpress settings**タブに**Wordpress Persistent Volume Enabled**を有効にします
   - **Database setting** タブに **MariaDB Persistent Volume Enabled**を有効にします
   - **Services and Load Balancing** タブにの **Hostname** - `stateful-wordpress.${vminfo:Cluster01:public_ip}.sslip.io`
4. **Install**ボタンをクリックします。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/f362dfd2-779f-2964-00f4-4ce1db007ef3.png"><br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/2f3dca9d-7aa1-4f15-3b0e-3fd1059f8df9.png"><br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/fb0e15c8-27d6-e843-e10d-f03e3697dc01.png"><br>
5. インストールが完了したら、**Service Discovery**のドロップダウンから **Ingresses**に移動します。 新しいイングレスが表示されます。URLをクリックしてWordpressにアクセスします。
    - *注：ワードプレスアプリの起動中に404、502、または503エラーが表示される場合があります。Wordpressが利用可能になるまで、Wordpressページをリフレッシュしてください*
6. **Storage** の**Persistent Volumes**には、2つの永続ボリュームを表示されます。
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/9358d9f0-a018-23b1-846e-d99f9850d265.png">
7. 設定したパスワードを使用してWordpressにログインし、新しいブログを投稿します。 **wordpress-mariadb-0**Podを削除しても、**wordpress-mariadb** StatefulSetの** Redeploy **しても、投稿が引き続き残ります。


# Kubernetesクラスターのアップグレード

このステップは、Rancher経由で、Kubernetesクラスターを簡単にアップグレードできることを体験していただきます。

1. グローバルメニューで**Cluster Management**を選択します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/c7aa5bba-dd98-1f0f-367f-0ce93ade8b09.png">
2. 作成したクラスターの横にある** Three-dots**のドロップダウンメニューからを**Edit Config**を選択します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/babd6895-129d-36cb-851a-49b294a7b387.png">
3. 画面を下にスクロールして、**Kubernetes Version**のドロップダウンから、Kubernetesの新しいバージョンを選択します。<br>
<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/c355c568-27a3-3059-190a-8864b97fcf8f.png">
4. 画面を下にスクロールして**Save**ボタンをクリックします。

Kubernetesクラスターがアップグレードされることを確認します。アップグレード処理が完了までには数分かかる場合があります。

*注：Kubernetesはダウングレードをサポートしていません。


# おめでとう
おめでとうございます。ラボのシナリオはこれで、完了となりました。ラボ環境を破棄する場合は、[**Finish**]ボタンをクリックしてください。
今後、イベント情報参照やお問合せも、SUSEサイトからご利用できます。

https://www.suse.com/events/

<img  alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/bcde4843-98c6-bf77-0cfe-0fca81b487d7.png">