ちょっと話題の記事

Rancher2.1でKubernetes環境を構築する

Rancher2.1を使ってKubernetes環境を構築してみました。
2018.10.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

初回公開時はRancher2.0としていましたが、誤りでした、正しくは2.1だったので修正しました。

はじめに

おはようございます、加藤です。プライベートな活動でオンプレミスにKubernetes(k8s)を構築する必要がありその手順をまとめてみました。

前提

  • 環境としてvSphere Hypervisorを使用していますが、セットアップやVMの作成については省略します。
  • Rancherやk8sノードを動かすLinux(Ubuntu16.04.1)のインストールについては省略します。
  • RancherではvSphereを使用する場合、紹介する手順より簡単にセットアップできるようですが、本番環境ではNutanix CE予定の為、より汎用的な手順を採用しました。

やってみた

VMの用意

3台のVMを用意しました。全てOSはUbuntu 16.04.1をインストールします。バージョン選定理由は公式での指定に従った為です。
Node Requirements | Rancher Labs

  • Rancher
  • k8s-node * 2

OSのセットアップ(共通)

3台のVMに対して以下のコマンドを実行します。

Dockerバージョンは公式の指定に従って17.03.2を選択しました。RancherのGitリポジトリにインストールスクリプトが公開されているので、それを使ってインストールしました。
Node Requirements | Rancher Labs

# UFWの無効化
$ sudo systemctl disable ufw
$ sudo systemctl stop ufw
# Dockerインストール用のスクリプトをダウンロード・実行
$ wget https://raw.githubusercontent.com/rancher/install-docker/master/17.03.2.sh
$ bash 17.03.2.sh

Rancherのセットアップ

DockerHubから最新のRancherをPullしてきます、必ず2.1で実行される訳では無いのでご注意ください。

VMで以下のコマンドを実行します。

# Rancherの起動
$ sudo docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest

ブラウザでアクセスします。
https://<<RancherのIPアドレス>>:443

adminのパスワードを決めて入力します。

Rancher ServerのURLを入力します。
このアドレスはk8sノードから名前解決・通信できるアドレスである必要があります。注意してください!

k8sのセットアップを開始します。

前提に記載したとおり、vSphere環境ですがCustomでセットアップします。

Docker versionをサポートされているものに限定しました。ここは要件に応じて設定してください。

Node Optionsのetcd, Control Planeにチェックをいれ、表示されるコマンドをコピーして、完了します。

k8sノードのセットアップ

ここからはk8sノードで作業します。
先程コピーしたコマンドを実行します。

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.1 --server https://<<RancherのIPアドレス>>:443 --token <<token>> --ca-checksum <<ca-checksum>> --etcd --controlplane --worker

これだけでOKです!

k8sクラスタの動作確認

最初はProvisioning状態なのでそのまま待ちます。

無事にActiveに移行しました。

上部メニューバーのClusterをクリックするとクラスタの状態をダッシュボードで確認できます。

右上のLaunch kubectlからブラウザ上でkubectlを実行できます。

versionとクラスタ、ノードの状態を確認してみました。

同じく右上のKubeconfig Fileからkubectl用のコンフィグファイルを取得できます。

接続先アドレスがローカル端末から名前解決・接続できない場合は書き換えて使用してください。

私は複数のk8s環境に触っているのでコンフィグを~/.kube/rancher-dev-configに保存しました。
このプロジェクト用の作業ディレクトリを作成しdirenvで読み込むコンフィグを指定しています。

.envrc

export KUBECONFIG="~/.kube/rancher-dev-config"

動作テストしてみます。

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.0", GitCommit:"0ed33881dc4355495f623c6f22e7dd0b7632b7c0", GitTreeState:"clean", BuildDate:"2018-09-28T15:20:58Z", GoVersion:"go1.11", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T17:53:03Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
$ kubectl apply -f sample-pod.yaml
pod/sample-pod created
$ kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   0          46s
$ kubectl delete -f sample-pod.yaml

sample-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:1.13

あとがき

ググって情報を調べている時は結構難しいかも...と思っていましたが、いざ開始してみると簡単にk8s環境が構築できちゃいました!
k8s環境が欲しいという方は是非試してみてください!!