Rancher 2.0で複数のKubernetes環境を管理してみる
2018年4月末にコンテナ管理プラットフォームであるRancherのバージョン2.0がGA(General Availability)となりました。対応するコンテナオーケストレーションツールをKubernetesに絞り、オンプレ/クラウド問わずKubernetesクラスタをマネジメントするOSSに昇華されているみたいです。今回はこのRancher 2.0を使って
というところまでをやってみたいと思います。
環境
今回は以下の環境で試用してみます。
- OS
- CentOS 7.4
- Rancher
- Ver: v2.0.2
- インポートするKubernetes
- Ver: 1.10.0
- RKE(Rancher Kubernetes Engine)のKubernetes
- Ver: 1.10.1
- 構成サーバ群
- Rancherサーバ : rancher-server-01
- RKE k8sマスター: rancher-k8s-master-01
- RKE k8sノード#1: rancher-k8s-node-01
- RKE k8sノード#2: rancher-k8s-node-02
- 自前k8sマスター: tst-k8s-master01
- 自前k8sノード#1: tst-k8s-node01
- 自前k8sノード#2: tst-k8s-node02
事前準備
今回は検証なので、ポートは全開放でいきます。以下のコマンドを全ノードで叩きます。
firewall-cmd --set-default-zone=trusted
次に全ノードにDockerをインストールして、サービスを起動します。
yum -y install docker systemctl enable docker systemctl start docker
この時点でインポートする自前k8sを構築しておきます。注意点としては、kube-dns
とIngress Controllerを忘れずにデプロイしておきます。
Rancherサーバの構築
Rancherサーバを構築していきますが、難しいことはありません。以下のコマンドを叩くだけです。
mkdir /var/lib/rancher docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /var/lib/rancher:/var/lib/rancher:Z rancher/rancher:v2.0.2
ここで/var/lib/rancher
はRancherサーバの永続ボリュームとして使うディレクトリなので、お好みで調整してください。
またCentOSをはじめとしたRHEL系OSではSELinuxが有効になっているかと思いますので、-v
オプションの末尾に:Z
をつけて適切なラベリングを行うようにしておきます。
Rancherサーバが起動したら、ウェブブラウザからRancherサーバにログインします。するとまずadmin
ユーザのパスワードを作成するよう求められるので、パスワードを入力して次に進みます。
RancherサーバのURLはアクセスした際のURLがデフォルトで表示されていますので、そのままで次に進みます。
すると以下のような画面が表示されます。クラスタを登録する前にHelm(k8sのパッケージマネージャ)を有効化しておきましょう。「Catalog」を選択します。
「Helm Stable」のスイッチを「Enabled」にします。
これでHelmの有効化は完了です。
新しいKubernetesクラスタの作成
次にクラスタを登録していきましょう。まずはRKEクラスタを作成・登録します。「Clusters」を選択し、「Add Cluster」をクリックします。
すると以下のような画面になります。今回は一般的な仮想マシンからk8sクラスタを作成しますので、「CUSTOM」を選択し、「Next」をクリックします。
次の画面ではRKE k8sクラスタを作成するのに必要なコマンドが表示されます。k8sマスターを登録をするには「Node Role」の
- etcd
- Control
- Worker
にチェックを入れ、記載されているコマンドを実行します。が、SELinuxが有効な環境に対してはこのままではダメで、-v
オプションの末尾に:Z
をつけるのを忘れないようにしましょう。
同様にk8sノードを登録するには「Node Role」の
- Worker
にチェックを入れ、記載されているコマンドを実行します。-v
オプションの末尾に:Z
をつけるのを忘れずに。
それぞれのサーバでコマンド実行が終わったら「Done」をクリックします。そうするとRKE k8sクラスタの作成が始まります。
既存のKubernetesクラスタのインポート
RKE k8sクラスタの作成を待っている間に既存k8sクラスタをRancherサーバにインポートしましょう。「Clusters」を選択して「Add Cluster」をクリックし、今度は「IMPORT」を選択します。その後「Next」をクリックしましょう。
すると既存k8sクラスタをRancherサーバに登録するためのコマンドが発行されますので、k8sマスター上で二番目のコマンドを叩きます。叩いたら「Done」をクリックします。
戻った画面で「State」の値が「Active」になっていればRKE k8sクラスタの作成・登録、既存k8sクラスタの登録は完了です。
Helmでアプリケーションをデプロイ
Rancherに二つのk8sクラスタが登録されたので、それぞれのクラスタ上にアプリケーションをデプロイしてみましょう。まずはRKE k8sクラスタ上にデプロイしてみます。「Global」から「Cluster: rke-cluster-01 > Default」をクリックします。
「Catalog Apps」を選択し、「Launch」をクリックします。
表示されたカタログ群から「dokuwiki」を選択します。
今回はPersistent Volumeをまだサポートしていないクラスタなので、アプリケーションのデプロイでPersistent Volumeを使わない設定にします。またデフォルトではLoadBalancer
タイプのServiceが作られるので、これをClusterIP
に変更します。下のほうに進んで「Add Answer」を2回クリックし、以下のKey-Valueを入力します。その後「Launch」をクリックします。
- serviceType = ClusterIP
- persistence.enabled = false
しばらくすると以下のようにゲージが緑になります。この状態になれば必要なPodは上がっている状態です。
では、Ingressを作成して外部からdokuwikiにアクセスできるようにしましょう。「Workloads」を選択し「Load Balancing」タブを選んでから「Add Ingress」をクリックします。
Ingressを作成する際のパラメータは以下の通りにします。
- Name: (任意の名前)
- Namespace: (作成されたNamespace)
- Rules
- Automatically generate a
.xip.io
hostname - Target: (作成されたService)
- Port: 80
- Automatically generate a
以上、入力したら下の「Save」をクリックします。少し経つと以下の通りURLが発行されるので、アクセスしてみましょう。dokuwikiのホームページが表示されます!
次は既存k8sクラスタ上にアプリケーションをデプロイしてみます。「Global」から「Cluster: my-cluster-01 > Default」をクリックします。
「Catalog Apps」を選択し、「Launch」をクリックします。
表示されたカタログ群から「zeppelin」を選択します。
このカタログではデフォルトのCPU・メモリリソースを最低2000millicore、4096MiB確保するように設定されているので、今回構築したクラスタで展開できる値に修正します。「Add Answer」を2回クリックし、以下のKey-Valueを入力します。その後「Launch」をクリックします。
- zeppelin.resources.limits.cpu: 1000m
- zeppelin.resources.limits.meory: 2048Mi
ゲージが緑になるまで待ちましょう。
dokuwikiと同様、Ingressを作っていきます。「Workloads」を選択し「Load Balancing」タブを選んでから「Add Ingress」をクリックします。
Ingressを作成する際のパラメータは以下の通りにします。
- Name: (任意の名前)
- Namespace: (作成されたNamespace)
- Rules
- Specify a hostname use
- Request Host: (Ingress Controllerに対応した名前)
- Target: (作成されたService)
- Port: 8080
- Specify a hostname use
以上、入力したら下の「Save」をクリックします。表示されたURLにアクセスしてみましょう。zeppelinのホームページが表示されます!