Rancher2.1でKubernetes環境を構築する
初回公開時は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で読み込むコンフィグを指定しています。
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
apiVersion: v1 kind: Pod metadata: name: sample-pod spec: containers: - name: nginx-container image: nginx:1.13
あとがき
ググって情報を調べている時は結構難しいかも...と思っていましたが、いざ開始してみると簡単にk8s環境が構築できちゃいました!
k8s環境が欲しいという方は是非試してみてください!!