Rancherのkubernetesテンプレートを利用して、簡単にk8s環境を構築してみたいと思います。
Rancherは、ホストを管理するRancher Serverと管理されるホストのRancher Agentが必要となり、
ServerとAgentはDockerイメージであるため、docker runコマンドを実行するだけで利用できます。
Rancher ServerとAgent環境を構築して、k8s環境も構築して、Rancherのk8sのArchitecutreを考えてみたいと思います。
Rancher Server & Agent on GCP
今回は、Google Cloud Platformを利用して、Rancher Server 1台とAgentホスト 3台の環境を作成します。
※他のクラウドベンダー、オンプレミス環境でも構いません。
Compute Engineで以下の4インスタンスを作成します。
項目 | 入力概要 |
---|---|
ゾーン | asia-southeast1-a |
マシンタイプ | vCPUx1 |
ブートディスク | Ubuntu 14.04 LTS |
ファイアウォール | HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方をチェックします。 |
GCPでは、デフォルトでファイアウォールが設定されていて、ホスト間でのコンテナの通信が行えないため、
設定を変更する必要があります。
GCPのダッシュボードで、「ネットワーキング」-「ファイアウォール」を選択して、ファイアウォールルールを作成します。
名前は任意名、ソースIPの範囲は0.0.0.0/0、プロトコルとポートは全て許可とします。
今回はお試しということで、全許可にしています。
最後に「作成」ボタンをクリックします。
Rancher Serverの構築
rootパスワードの設定
GCPではrootのパスワードがデフォルトでは設定されていないので、まずはrootのパスワードを設定します。
4インスタンスに任意のパスワードを設定します。
$ sudo passwd root
Dockerのインストール
Dockerをインストールします。Rancherとk8s環境ではDockerのバージョンがサポートしているものとそうでないものがあるので、Support Versionで確認します。
今回は、Rancher Labs公式Online Meetupで1.12.6で行っているので、そのバージョンに合わせてみます。
4インスタンスにDockerをインストールします。
$ curl https://releases.rancher.com/install-docker/1.12.6.sh | sh
.
.
.
Client:
Version: 1.12.6
API version: 1.24
Go version: go1.6.4
Git commit: 78d1802
Built: Tue Jan 10 20:26:30 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Go version: go1.6.4
Git commit: 78d1802
Built: Tue Jan 10 20:26:30 2017
OS/Arch: linux/amd64
.
.
.
Remember that you will have to log out and back in for this to take effect!
Rancher Serverのインストール
4インスタンスうちの1台に最新版のRancher Serverのコンテナをインストールします。
2017年6月現在Rancher Serverはv1.6.2となります。
$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
対象のインスタンスの外部IPにポート8080でブラウザからアクセスします。
http://外部IPアドレス:8080/
1.「Got it」をクリックします。
2.下部メニューの言語選択から「日本語」を選択します。
3.上部メニューの「管理者」-「アクセスコントロール」を選択します。
4.「click here」をクリックします。
5.GitHubのログイン画面が表示されます。ログインします。
※GitHubのアカウントを持っていない場合は作成しましょう。
6.「Register a new Application」ボタンをクリックします。
7.赤枠箇所を入力し、「Register application」ボタンをクリックします。
8.「Client ID」および「Client Secret」が払い出されます。
9.GitHubから払い出された「クライアント ID」および「クライアント秘密キー」を入力して「保存」をクリックします。
10.「GitHubアカウントで認証」ボタンをクリックします。
11.Rancher側の画面が切り替わり「GitHubは有効です」と表示されます。
k8s環境テンプレートの作成
1.上部メニュー「環境管理」を選択します。
2.「環境追加」をクリックします。
3.「名前」に任意の名前を入力します。ここでは「k8s」とします。「環境のテンプレート」でkubernetesのアイコンを選択します。「作成」をクリックします。
4.上部メニューから「k8s」を選択します。
5.「ホストを追加」をクリックします。
Rancher Agentのインストール
1.赤枠のコマンドをコピーして、残り3台のまず1台にペーストし、「閉じる」をクリックします。
$ sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.2 http://RancherServer外部IP:8080/v1/scripts/053345DA35CBEE8144B6:1483142400000:2cehkwGGXulEgYZV0uD3NIRIRk
2.上部メニュー「インフラストラクチャー」から「ホスト」を選択します。
3.Rancher ServerとRancher Agentが連携し、約5分以内にk8s環境が構築されます。
4.残り2台のインスタンスにも1のコマンドをペーストして実行すると、2台のホストが追加されます。
以下の構成となります。
これでk8sの環境構築は完了となります。
k8s dashboard
1.上部メニュー「KUBERNETES」-「ダッシュボード」を選択します。
2.「kubernetes UI」をクリックします。
3.新規にブラウザのタブが開いて、kubernetes dashboardが利用できます。
k8s Architecture of Rancher
Rancherのk8s環境では各ホストで以下のコンテナ構成が自動で構築されます。HOST1にあるkubernetes-1がAPI Serverと思われます。kubernetes-controller-manager-1、kubernetes-etcd-1、kubernetes-scheduler-1が主にMasterに必要となるコンポーネントコンテナになります。
HOST1
対象ホスト | スタック名 | コンテナ名 |
---|---|---|
HOST1 | kubernetes | kubernetes-addon-starter-1 |
HOST1 | kubernetes | kubernetes-controller-manager-1 |
HOST1 | kubernetes | kubernetes-etcd-1 |
HOST1 | kubernetes | kubernetes-kubectld-1 |
HOST1 | kubernetes | kubernetes-1 |
HOST1 | kubernetes | kubernetes-kubernetes-kube-hostname-updater-1(sidekicks) |
HOST1 | kubernetes | kubernetes-proxy-1 |
HOST1 | kubernetes | kubernetes-rancher-ingress-controller-1 |
HOST1 | kubernetes | kubernetes-rancher-kubernetes-agent-1 |
HOST1 | kubernetes | kubernetes-scheduler-1 |
対象ホスト | スタック名 | コンテナ名 |
---|---|---|
HOST1 | kube-system | monitoring-grafana |
HOST1 | kube-system | kubernetes-dashboard |
HOST1 | kube-system | tiller-deploy |
HOST1 | kube-system | heapster |
HOST1 | kube-system | monitoring-influxdb |
HOST1 | kube-system | kube-dns |
HOST2
対象ホスト | スタック名 | コンテナ名 |
---|---|---|
HOST2 | kubernetes | kubernetes-proxy-2 |
HOST2 | kubernetes | kubernetes-kubelet-2 |
HOST2 | kubernetes | kubernetes-etcd-2 |
HOST3
対象ホスト | スタック名 | コンテナ名 |
---|---|---|
HOST3 | kubernetes | kubernetes-proxy-3 |
HOST3 | kubernetes | kubernetes-kubelet-3 |
HOST3 | kubernetes | kubernetes-etcd-3 |
ホストを追加するごとに構成としては、HOST2,HOST3と同じ構成が作成されると思われます。
引き続き、それぞれのRancherのk8sとしての各コンポーネントコンテナの意味合いやPodを作成するとどうなるかなど、検証しながら更新していきたいと思います。