Rancher v2.3の主要機能を触ってみた



本記事は、Rancher v2.3で追加した主要な機能の紹介及び検証を纏めたものです。
・Windows GA Support
・クラスターのテンプレート機能
・Istio機能のデフォルト搭載
・ノードのセルフヒーリング機能
・K8Sバージョンアップの為のRancherバージョンアップが不要になった

# Windows GA Support
KubenertesクラスターにWidowsノードの追加、Widowsアプリのデプロイ

## 概要
### Rancherでのサポート内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/310c5384-0f8d-1a5a-cf60-a29475a21727.png)

### 現状できないこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/786ec8aa-339c-cc87-f868-88b6dffcdf3a.png)
基本は、kubernetesのWidowsコンテナからの制約事項です。詳細は、[Windows制約事項](https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#supported-functionality-and-limitations)からご参照ください。


## 検証Goal
■やること：
　WindowsとLinuxのMixedのクラスタを作成し、WindowsノードにIISアプリをデプロイする

■検証用のノード構成：

|　ノード | 役割 | 数 | OS/MW |
|------|-----------------|-----------------|-----------------|
|　master node | etcdとControlPlane | １台 | Ubuntu 18.04/Docker 18.09（1例）|
|　worker node| Linux| １台|Ubuntu 18.04/Docker 18.09（1例）| 
|　worker node| Windows| １台|Windows Server 2019/Docker EE-basic 19.03（1例） | 
※AWS使用の場合は、[Microsoft Windows Server 2019 Base with Containers]のAMIから、Windowsノードを作成できます。

### windows対応のMixedクラスタの構築

・[Cluster]方式で、クラスタ作成画面に、windows対応クラスタのパラメータは、下記のように設定します。
　※現時点、[Cluster]方式+[kubernetesV1.15]+[Flannel]の設定しか、windows対応クラスタが作成できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/e4f82c13-1aa3-fa8d-efe3-98406b6374b1.png)
・事前に用意したVMに、master node構成するためのDockerコマンドを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/4b06c5fc-aa04-59d9-cb98-4df6e17be1d1.png)

・master nodeの構築が完了後に、事前に用意したVMに、worker node(linux)構成するためのDockerコマンドを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/77aad04b-247c-a0a0-dece-cca55f1163bc.png)

・worker node(linux)の構築が完了後に、事前に用意したwindows VMに、worker node(windows)構成するためのDockerコマンドを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/67a8a603-7b95-9637-f0a1-aafe96347b33.png)

・クラスタ構築後のノード一覧は下記となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/49fe0408-d4f9-8756-4dbc-55a2ed95cacf.png)

### Widowsアプリのデプロイ
・[microsoft/iis]をwindowsノードにデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/eb82664d-094b-8399-fd77-de9030cd6231.png)
・デプロイが完了したら、WindowsノードのPublic IPとNodePortのポート番号で、アクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/49073754-da0e-f4a8-c47f-f25330ee8cf2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/d237d608-e6b1-b987-a23b-b72bd9e5ae18.png)

# クラスターのテンプレート機能
事前に決めたクラスター設定（セキュリティポリシーやベストプラクティス設定）をテンプレート化し、クラスター作成時は、指定のテンプレートを使用してクラスターを作成

## 概要
### 制約事項
・クラスターテンプレート機能を使用せず作成したクラスター（V2.3以外のバージョンで生成したクラスター含む）は、作成後にクラスターテンプレート機能を利用して、クラスターの設定変更ができない
・クラスターテンプレートの設定を変更したい場合は、既存のテンプレートのバージョンの設定変更ができないため、既存バージョンをクローンして新しいバージョンを生成します。その後、新しいバージョンの設定を、クラスターに適用できる

## 検証Goal
■やること：
　クラスターテンプレートを作成して、クラスター作成時に、クラスターテンプレートを使用して作成する。
　クラスターテンプレートをバージョンアップし、作成したクラスターも、クラスターテンプレートの新しいバージョンに更新して、クラスター設定を更新する。

### クラスターテンプレートの作成して、クラスター作成時に適用
・[RKE Templates]メニューから、クラスターテンプレート作成画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/61306d5c-bf53-de60-f9aa-4524fb826705.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/1c223485-0a6a-b289-c640-a3b43ea71c90.png)
・クラスターテンプレート作成画面に、クラスター設定項目を設定します。
 　※設定項目のところの切替ボタン![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/28292001-e9da-2ef4-b6be-dbe7dcbd0891.png)の押下により、テンプレート利用者がクラスター作成時に、該当項目に対して、設定の上書きができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/294b8b94-0325-407f-9993-dbec9554ffce.png)
・クラスターテンプレート配下に、v1のテンプレートバージョンが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/1f8ed34b-75b0-bb6e-7929-9b02568c707d.png)

・クラスターテンプレートを指定して、クラスターを作成します。
  　※クラスターテンプレートとバージョンを指定するだけで、クラスターの設定項目が自動に入力されてています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/0ebf1180-2db7-468d-6282-5b02df3e254a.png)

### クラスターテンプレートをバージョンアップして、クラスター編集時に新しいテンプレートのバージョン設定を適用
・テンプレート配下の既存のバージョンをクローンして、新しいバージョンを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/1dd042d3-95cb-fb01-1849-9c2f4af5b633.png)
・ここでは、kubernetesのデフォルトのバージョンのみを変更しました。※必要に応じて、いろんなクラスター設定変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/5991ced1-c3b9-277d-f56a-6bec982cf98a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/f878ed7a-b8f7-5154-2da7-511fe42d1d70.png)
・クラスターテンプレートを適用しているクラスターにも、アップデート催促の通知アイコンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/1b30aeb0-b234-2388-9ca8-476bcfbd1c7b.png)
・クラスターテンプレートの最新のバージョンを選択したら、クラスターの設定項目が自動に更新されてています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/69154165-ff88-99ef-963a-06e6c037d3ae.png)
・最新のテンプレートのバージョンを適用したら、アップデート催促の通知アイコンが消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/6ef9b198-e00f-e86d-dad2-37c1af93803c.png)

# Istio機能のデフォルト搭載
サービスメッシュ機能を提供するIstioをデフォルト搭載

## 概要
### 主要な機能
・UIからのIstioの設定機能
・namespaceへのIstioサイドカー自動注入の設定機能
・kiali(Istio可視化ツール)、jaegar（分散トレーシング）もデフォルトでUI搭載

## 検証Goal
■やること：
　Istio機能を有効化してから、サンプルアプリケーションをデプロイし、UI画面上に、トラフィック情報確認などを行う

■事前準備
下記のようなテスト用クラスターを用意します。※リソースは多めにしました
　master node(2Cpu+8GB)×1
　worker node(2Cpu+8GB)×4
※Istioは結構リソースを消費します。最低（CPU：3950m | メモリ：5546Mi）を消費します。詳細情報は、[Istio's Prerequisites](https://rancher.com/docs/rancher/v2.x/en/cluster-admin/tools/istio/#prerequisites)をご参照ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/c8feb5cb-c0b5-6b94-066c-01a62782d520.png)

### Istio機能を有効化
・[Istio]メニューから、Istio画面を開き、デフォルトの設定のままで機能を有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/8cdd4676-60d6-6c8d-4c9d-7217cf3cb75b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/f2406729-9a03-5998-acb8-7eed4050dafb.png)
### サンプルアプリケーションをデプロイ
・下記のサンプルアプリのchart URLをプライベートカタログとして追加します。
https://github.com/qiang1981cn/bookinfo-chart
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/7f747faf-f9aa-4edb-ca5a-f68df3a4679e.png)

・[default]namespaceをistioサイドカー自動注入のnamespaceとして設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/5c80ccfb-a733-10da-b777-72f0a22e790b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/77b100c3-11e4-82e0-08f5-551ba6797e09.png)

・カタログ機能で、上記で設定したプライベートカタログのアプリを選択して、[default]namespaceにデプロイします。
　Review画面機能は、v1とv2の2つのバージョンを同時にリリースさせ、ユーザーリクエストのトラフィック制御はそれぞれ５０％にするように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/54352c43-ebdb-0c64-53ef-268e525bf095.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/49f5791e-95b8-3b87-e79f-3e93a58882e2.png)

### サンプルアプリのトラフィック情報を確認
・トラフィックのデータを生成させるため、サンプルアプリの対象reviews画面を複数回をアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/15cfcba0-4ac2-f598-7699-d52c5cbd512c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/e8bd5fa1-9256-df1c-5b3a-60bbce4e9cf6.png)

・UI画面上に、サンプルアプリのトラフィック情報を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/7f0ba286-9681-8211-78d0-f9cf510cdf0e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/3303ca5f-3e82-a7cd-4002-4e0e125cc1a3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/52e44000-f531-9a1b-8280-20cc7afdb9b8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/0429d284-7f9e-f359-0663-e5d5da258ef1.png)

# ノードのセルフヒーリング機能
クラスターを構成するノード数を指定した数に自動維持
※Rancher経由で、AWS,Azure,Vsphereなどのクラウドに、Node Driversで構築したクラスタをサポート対象とする

## 概要
### 主要な機能
・Node Pool単位で維持するノード数を指定
・Node Pool単位でunreachableの時間を指定
 　※unreachableの時間：ノードと通信取れない時間。この時間経過後に、対象ノードが削除され、新しいノードが自動再作成される

## 検証Goal
■やること：
　クラスターを構成する[Node Pool]を2つ作成する。１つの[Node Pool]は、ノードのセルフヒーリング設定ありにし、もう１つは、セルフヒーリング設定なしにします。それぞれの[Node Pool]中のノードを手動で停止して、セルフヒーリング有無を確認する

### テスト用クラスターを作成
■事前準備
下記のようなテスト用クラスターを用意します。
　master node ： (2Cpu+8GB)×1
　worker node（with-selfhealing）    : (2Cpu+8GB)×2 　※ノードのセルフヒーリング設定あり＋[Auto Replace]が1分指定
　worker node（without-selfhealing） : (2Cpu+8GB)×2 　※ノードのセルフヒーリング設定なし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/f3d58012-35dc-c301-3124-a8d40f1c3b0a.png)
※[Auto Replace]が0以外の値（分単位）を指定している場合、指定した時間にノードと通信取れない時にノードのセルフヒーリングが行われる

### ノードの手動停止とセルフヒーリング有無を確認
・それぞれの[Node Pool]中の1つのノードを手動で停止します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/893e9de3-3a3d-5c30-9580-5cd7989b66fa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/cf5f854c-6418-831d-9ec3-d650ecedafba.png)
・停止処理の１分間後に、セルフヒーリング有無を確認します。
　結果1：ノードのセルフヒーリング設定ありの[with-selfhealing]が、通信取れないノードを削除し、新しいノードを作成しました。
　結果2：ノードのセルフヒーリング設定なしの[without-selfhealing]が、何の復旧処理も行わないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/0abd6f21-4ff5-05c2-984d-c0404dab9801.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/dfb2d85a-ede3-011b-4e8f-e27ff0df99c4.png)

# K8Sバージョンアップの為のRancherバージョンアップが不要になった
K8Sバージョンアップを行いたい場合、通常は、Rancherバージョンアップを行ってから、新しいバージョンのRancherから、K8Sバージョンアップを行います。
V2.3以降、K8sのpatchバージョンアップ(CVE緊急対応など)の場合は、Rancherバージョンアップが不要となり、
下記のクラスタ編集画面から、定期的に自動更新されたK8sリストから最新バーションを選択してにアップデートできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/c516ca98-f0d2-68b1-0ab0-6efe33bf1c49.png)


# おわり
主要な機能だけを説明と検証させて頂きましたが、上記以外も、ノードへのtaints追加機能や、UI上のHPA管理機能など、いくつかの機能が追加されています。
詳細な変更情報（バージョンアップ時の注意事項合わせて）は、[リリースノート](https://github.com/rancher/rancher/releases/tag/v2.3.0)をご参照ください。

今後のリリースですが、kubernetes 1.16 GA対応は、V2.3.x以降で対応されます。
また、当初、V2.3にリリースする予定の、クラスターのセキュリティスキャンとアラーム機能は、V2.4になりそうです。