PR

RancherでKubernetesクラスタを作る

2019年3月13日(水)
市川 豊
連載2回目となる今回は、Rancherを利用してKubernetesクラスタを作成する手順を紹介する。

Kubernetesクラスタの作成

今回は、Rancherを用いたKubernetesクラスタの構築について解説していきます。

1. Node用のLinuxホストの準備

表1に示したスペックで、Google Compute Engine(GCE)のインスタンスを準備します。

使用するインスタンスのスペック

項目入力概要
名前rancher-host
リージョンasia-northeast1(東京)
ゾーンasia-northeast1-b
マシンタイプvCPUx1
ブートディスクUbuntu 16.04 LTS
ディスクサイズ20GB
ファイアウォール「HTTPトラフィックを許可する」「HTTPSトラフィックを許可する」の両方にチェック

2. Dockerのインストール

準備したNode用のLinuxホストにSSHクライアントからログインして、Dockerをインストールします。※Dockerのバージョンについては、前回の記事内「1. Rancherインストール」の表2を参照してください。

リスト1:Dockerのインストール

$ curl https://releases.rancher.com/install-docker/18.09.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15225  100 15225    0     0  21881      0 --:--:-- --:--:-- --:--:-- 21875
+ sudo -E sh -c apt-get update
・
・
・途中省略
・
・
 Git commit:        6247962
 Built:             Sun Feb 10 04:13:50 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 03:42:13 2019
  OS/Arch:          linux/amd64
  Experimental:     false

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker iyutaka2018

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

3. プロビジョニング

「Clusters」画面で、「Add Cluster」ボタンをクリックします(図1)。

図1:「Add Cluster」ボタンをクリック

図1:「Add Cluster」ボタンをクリック

「From my own existing nodes」の「CUSTOM」を選択、「Cluster Name」に任意の名前を入力(ここではrancher-kubernetes-clusterとします)し、「Next」ボタンをクリックします(図2)。

図2:クラスタの名前を指定

図2:クラスタの名前を指定

「Add Cluster:rancher-kubernetes-cluster」画面で、「Show advanced options」をクリックします(図3)。

図3:「Show advanced options」をクリック

図3:「Show advanced options」をクリック

「Node Role」の「etcd」と「Control Plane」にチェックを入れて、「Public Address」にインスタンスの外部IP、「Internal Address」にインスタンスの内部IPを入力します。生成されたDockerコマンドの右にある「Copy to Clipboard」ボタンをクリックします(図4)。

図4:設定項目を入力

図4:設定項目を入力

4. Kubernetesクラスタの作成

先ほどコピーしたDockerコマンドを、rancher-hostのインスタンスで実行します。

リスト2:Dockerコマンドを実行

$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.1.5 --server https://xx.xx.xx.xxx --token w84smxlhvq8bpwrc7lgx8sj8xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --ca-checksum b0049d24d19eb867773de9bb3c2f0c6207b363f32d99e2d208255bc700cb1e91 --address 34.85.95.91 --internal-address 10.xxx.xx.xx --etcd --controlplane --worker
Unable to find image 'rancher/rancher-agent:v2.1.5' locally
v2.1.5: Pulling from rancher/rancher-agent
84ed7d2f608f: Pull complete
be2bf1c4a48d: Pull complete
a5bdc6303093: Pull complete
e9055237d68d: Pull complete
ecda3d2d744e: Pull complete
c2a506194467: Pull complete
224a48e7f77b: Pull complete
7a6deb26f059: Pull complete
03ee61b2892f: Pull complete
Digest: sha256:ab1f06bcdd6d41f201cfd423d44c0047525d7547e76635e57afb096322392757
Status: Downloaded newer image for rancher/rancher-agent:v2.1.5
96f7637a8abb4224d08771815c33187f1a7348d5885380629278102ca7f9c34a

Dockerコマンド実行後、下部に「1 new node has registered」と表示されますので、確認後「Done」ボタンをクリックします(図5)。

図5:ノードの登録を確認

図5:ノードの登録を確認

しばらくすると「state」がProvisioningからActiveに変わり、Kubernetesクラスタの構築が完了します(図6)。

図6:StateがActiveになっているのを確認

図6:StateがActiveになっているのを確認

ここでクラスタ名をクリックすると、対象クラスタのリソースを確認できます(図7)。

図7:リソースを確認するためにクラスタ名をクリック

図7:リソースを確認するためにクラスタ名をクリック

ここで表示されるリソースは、クラスタ全体のリソースとなります(図8)。
※今回は1ノードですが、複数ノードの場合はその全体のリソースが表示されます。

図8:リソースの使用状況を表示

図8:リソースの使用状況を表示

以上でKubernetesクラスタの作成は完了となります。

アプリケーションデプロイ(Catalog機能)

Kubernetesクラスタが作成できたので、次はRancherのCatalog機能を利用してアプリケーションのデプロイを行ってみます。

1. Catalog機能の有効化

まず上部メニュー「rancher-kubernetes-cluster」から「Global」を選択します(図9)。

図9:メニューから「Global」を選択

図9:メニューから「Global」を選択

すると「Clusters」画面が表示されますので、さらに上部メニューの「Catalogs」を選択します(図10)。

図10:「Catalogs」を選択

図10:「Catalogs」を選択

「Helm Stable」をDisableからEnabledに変更します(図11)。これでCatalog機能が有効化されました。

図11:Catalog機能を有効化する

図11:Catalog機能を有効化する

2. Catalogからアプリケーションデプロイ

ここでは、デフォルトで用意されているWeave Scopeというアプリケーションのデプロイを例に、Rancherのカタログ機能を実践してみます。今回デプロイしてみるWeave Scopeは、Kubernetesクラスタ上のPod配置を可視化するツールです。

上部メニューから「Global」-「Default」を選択します(図12)。

図12:メニューから「Default」を選択

図12:メニューから「Default」を選択

上部メニューから「Catalog Apps」を選択します(図13)。

図13:「Catalog Apps」を選択

図13:「Catalog Apps」を選択

下部の「Launch」ボタンをクリックします(図14)。

図14:「Launch」ボタンをクリック

図14:「Launch」ボタンをクリック

検索フィールドに「weave-scope」と入力します(図15)。

図15:weave-scopeで検索

図15:weave-scopeで検索

検索の結果が何も表示されない場合は、「Refresh」ボタンをクリックしてください。それでも表示されない場合は少し時間を置いてから再度実行してください。環境によっては、Helmリポジトリの読み込みに時間を要することがあります。weave-scopeのアイコンが表示されたら、「View Details」ボタンをクリックします(図16)。

図16:「View Details」をクリック

図16:「View Details」をクリック

画面下部の「Launch」ボタンをクリックします(図17)。

図17:下部の「Launch」をクリック

図17:下部の「Launch」をクリック

2個のPodがデプロイされていることを確認します(図18)。

図18:Podがデプロイされていることを確認

図18:Podがデプロイされていることを確認

現状では、Kubernetesクラスタの内部通信のみとなるので、ブラウザを起動して外部通信できるようにIngressの設定を行います。

Ingress機能

1. Ingress作成

KubernetesクラスタにIngressを作成する場合、YAML形式のマニフェストファイルを用います。RancherではUIからIngressを作成することができます。

上部メニューから「Workloads」、「Load Balancing」を選択して、「Add Ingress」ボタンをクリックします(図19)。

図19:Ingressを作成する

図19:Ingressを作成する

「Name」に任意名を入力(ここではweavescopeとします)し、「Namespace」では「weave-scope」を選択します。「Rules」で「Automatically generate a .xip.io hostname」にチェックが入っていることを確認します。「Target」で「weave-scope-frontend-weave-scope」を選択して、「Port」で「4040」を入力します。そして最後に「Save」ボタンをクリックします(図20)。

図20:設定項目を入力

図20:設定項目を入力

Rulesで選択できる各項目は、以下のような意味を持ちます。

Automatically generate a xip.io hostname

この設定を選択すると、xip.ioという外部のワイルドカードDNSサービスを利用して、「Name.Namespace.インスタンス外部IP.xio.io」という形式で、外部IPを名前解決できるようになります。

Specify a hostname to use

この設定を選択すると、Ingressによって入力したドメインからプルダウンメニューで指定したServiceやWorkloadにルーティングされるようになります。

Use as the default backend

この設定は、他のどの入力ルールとも一致しない要求を処理するルールを設定します。たとえば、見つからないリクエストを404ページにルーティングすることができます。

「Save」ボタンをクリック後しばらくすると、ワイルドカードDNSサービスを利用したURLが生成されます(図21)。そのURLをクリックするとWeave Scopeの画面(図22)が表示されます。

図21:「xip.io」付きのURLが表示される

図21:「xip.io」付きのURLが表示される

図22:デプロイされたWeave Scopeが表示された!

図22:デプロイされたWeave Scopeが表示された!

連載の第二回は、ノード追加後にRancherUIからKubernetesクラスタ構築、カタログ機能からWave Scopeのデプロイ、Ingressの追加という流れを紹介しました。次回は、WordPressをベースにRancherのカタログ機能についての詳細と、RancherUIからkubectlコマンドを実行してアプリケーションをデプロイする流れを紹介します。

株式会社エーピーコミュニケーションズ

技術開発部 コンテナグループ
Educational Solution Architect/Developer Advocate/Technical Evangelist

インフラエンジニア、フロントエンドエンジニアとして官公庁のインフラ基盤を中心としたサーバの設計構築、運用保守、Webシステム開発を担当。専門学校で非常勤講師としてOSS(Linux、Docker、k8s、Rancher等)を教えたり、アドボケート/エバンジェリストとして、RancherJPコミュニティを始めとするミートアップや勉強会で登壇、ハンズオン講師としても活動中。

Twitter: @cyberblack28
Community: RancherJP(#rancherjp)、くじらや(#kujiraya)、Cloud Native Deep Dive(#deepcn
Book: 「コンテナ・ベース・オーケストレーション」共著

連載バックナンバー

クラウド技術解説
第2回

RancherでKubernetesクラスタを作る

2019/3/13
連載2回目となる今回は、Rancherを利用してKubernetesクラスタを作成する手順を紹介する。
クラウド技術解説
第1回

Rancherってどんなもの?

2019/2/27
連載の初回となる今回は、Rancherの基本的な知識と一般的なインストールの方法などを紹介する。

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています