この記事は公開されてから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環境が欲しいという方は是非試してみてください!!