Edited at

RancherOS+k3s+Rancherで、超軽量のKubeお勉強環境を作ってみた

image


はじめに

こんにちわ!石田です。昨年くらいから「これからの技術者はKubernetesのスキル付けんと(どうこう)」ってことで、Qiita読者の皆様はもうk8sをあれこれお勉強中かと思います。私もあれこれ試してたんですが


  • とにかく手間かけずに現物を触ってみたいならメガ・ベンダーが提供するk8sのクラウド・サービスが一番簡単でしょうが、各々独自のお約束や手間があるし、自分で環境作らないと、なんか腹落ちしません。(すぐ動くけど、やったことすぐ忘れそう)

  • 「minikubeってのがあるよ」ってことで自分のPCに入れてみたんですが、結構重いです!私のPCはメモリ16GB/SSDのThinkpadなんですが、VMWareで実行するとメモリ8GB割り当てても、起動までにかなり待たされますし、なんか「モッサリ」感が否めません。

そんな時にRancherLabsからk8sの軽量版、k3sってのが出たよ、と知りました。「すごく軽い」と聞いたんで試してみたら、確かに導入も簡単でメチャ軽い!これでCNCFの認証通ってるって、すごいなあと素直に驚きました。IoTなどのエッジ向け、ってことですし、まだバージョンも0.2でHAも未実装=要は「発展途上」のようですが、クラスターもコンテナも普通に動くのでお勉強用ならこれで十分。軽さとシンプルさは正義です。

ということで、k3sのご紹介記事を書こうと思ったのですが、もう先達の記事が色々ありますしk3sだけだと「ダウンロードして起動するだけ」なんでシンプルすぎて記事になりません。(=スバラシイ!)

ついては「RancherOS+k3s+Rancher」のRancherLabs3兄弟の組み合わせでお勉強環境の構築手順を書くことにしました。「この通りやってけば数十分でkubeの環境が作れる」ように書きます。

:triangular_flag_on_post: 当記事の執筆時点は2019/3月です。先々バージョンやコマンドが変わるかもしれませんが、その場合はご容赦ください。

:triangular_flag_on_post: (2019/7/3) 当記事は2019/3月に投稿しましたが、その後、4月になってRancherOSとk3sをセットにしたk3OSが発表されました。こちらのほうがより便利かもしれませんが、執筆時期の関係もあり当記事では扱っておりませんので念のため申し添えます。1


まずは、用語の整理

(私がそうでしたが)Rancher周りが初めての方は混乱するかも、と思うので、まず用語をおさらいしますね。

image

上記のようにRancherOS(または別のLinux+Docker)上でRancherやk3sが動きます。(特にRancherOSとRancherは別のものなので混同しないようにしましょう)

:triangular_flag_on_post: (2018/3/29) @inductorさんに「k3sにはdocker不要」とのコメントを頂いたので、不明確だった記述を修正しました。変更箇所は:pencil:の印を付けています。


:one: RancherOS


  • Dockerコンテナの実行に特化した軽量OSです

  • Dockerを内蔵してますので、Dockerの別導入は不要です

  • IoTやエッジデバイス向けですが、PC上でも軽くて便利!

  • 売り文句: OS Fast, ultra-lightweight container OS

  • Rancherやk3sを動かす環境としてのOSはubuntuやRHELでもいいです。2


:two: Rancher


  • Kunbenetesを管理するためのUIダッシュボード/ツールです

  • マルチベンダー/ハイブリッドを謳っており、様々なKubeを一元管理できます


  • 売り文句: An Enterprise Platform for Managing Kubernetes Everywhere


  • :pencil:(追記) Rancherはdocker runで起動するので、ubuntuやRHEL上で動かす場合、Dockerを別途導入してください


:three: k3s


  • 40MBという超軽量なKubernetesの実装です

  • 高可用性(HA)は現在未実装ですが、導入も簡単でサクサク動くのでKubeのお勉強には最適!

  • 売り文句: Lightweight Kubernetes Easy to install. A binary of less than 40 MB. Only 512 MB of RAM required to run.


  • :pencil:(追記) ubuntuやRHELで動かす場合でも、k3sはDockerの代わりにcontainerdが内蔵されているので、Dockerは不要です


:four: k8s


  • Rancherの管理対象となるマルチベンダー/ハイブリッドな様々なKubernetes実装群

  • Rancherから独自のkubernetes環境を構築することもできます

なお今回は意図して:one::three:の組み合わせでご紹介しますが、各々は独立しており、依存関係は関係はありません。つまり、


  • Rancherやk3sはRancherOSが前提ではありません。例えばubuntu等の上でも、導入して動かせます

  • k3sを動かすのにRancherは必須ではありません。ks3の実体は単独の実行バイナリーです。今回はRancher自体のお勉強も兼ねて、k3sの管理やリソース可視化のために入れてみるだけ、です。

  • Rancherはk3sのためのツールではなく、より幅広い一般的なKubertetesの管理ツールです

  • 上記の絵では1ノードのイメージで表現してしまっていますが、Rancherとk3sは別のノードであってもかまいません。共存も、分離もできます。(ただし後述しますが同一ノードのときはポート競合に注意)

ちなみにRancher Labsが上記の開発元の会社の名前です。

なお、以下は1ノードの環境に全部詰め込む前提で書いてます。

では早速、やってみます!


1. RancherOS

まずはOSを用意しましょう。筆者の環境は


  • Thinkpad X230 / Windows

  • VMWare Workstation Pro 12.5

なのでVMWareでやりますが、その他の仮想化環境でも大丈夫かと思います。


1) イメージ(iso)の入手

Rancher.comからダウンロードします。

image

「Download Now」ボタン

image

環境別のイメージが用意されています。今回は一番普通っぽい rancheros.isoを選択3。全体が88MBしかないのですぐ終わります。


2) VMWareでのVM設定と起動

image

普通にVMを定義してISOで起動すればいいだけですが、一点だけ、ゲストOSは「Linux-他のLinux 3.xカーネル 64ビット」とします。


3) ISOを使ったブートとOSインストール

ISOでブートします。筆者の環境では2分くらいでインストール完了します。

【1】ブート起動直後の画面

image

【2】自動的にopenvmtoolsのコンテナイメージがダウンロードされます

image

【3】RancherOS vX.Y.Z startedが表示されたら起動完了です

image

【4】デフォルトユーザー rancher(/パスワードなし)でコンソールにログインできます

image


4) リモートログインのためにユーザー rancherにパスワードを設定する

この後puttyとか使いたいのですが、このままではリモートからはでログインできません。

【1】下記のコマンドでユーザー rancherにパスワードを設定するとリモート・ログインできるようになります。

sudo ros install -d /dev/sda --append "rancher.password=password"


  • rancher.password=に任意のパスワードを設定してください

  • VMWareのコンソール上、この時点では英語キーボードになっていますので"とか=の文字入力がしずらいですが、USキーボードの配列を見ながら入力してください

【2】Continueに「y」を答えます

image

【3】リブートするかどうか聞かれるので「y」を答える

→リブートされます

image


5) リブート後の再ログイン

【1】ユーザー rancherでログインすると、今度はパスワードを聞かれるので、設定したパスワードでログインします

image

【2】ifconfig -aでIPアドレスを確認します

image


6) SSHでログイン

sshでログインできました。筆者はSuperPuttyを使いましたが、要はお好みのsshクライアントでよろしいかと。

image


7) curlなどを使えるよう、コンソールを切り替えておく

RancherOSは軽量化のためコンテナを実行するのに必要な最低限の機能のみが有効化されています。デフォルトのコンソールのままではapt-getもcurlも使えません。4 dockerコマンドは使えるのでコンテナを実行するだけならこれでもいいのですが、k3sは実行バイナリーをダウンロードする必要があるのでcurlが必要です。コンソールをデフォルトのものからubuntuのものに切り替えるとapt-getやcurlが使えるようになります。やってみましょう。

【1】切り替え手順

sudo ros console listでコンソールの状態を確認し、

sudo ros console switch ubuntuで切り替えます

確認にyを答えるとログアウトされるので、再ログインして

sudo apt-get -v

curl

で両コマンドが使えることを確認します。

【実行例】

[rancher@rancher ~]$ sudo ros console list

disabled alpine
disabled centos
disabled debian
current default
disabled fedora
disabled ubuntu
[rancher@rancher ~]$ sudo ros console switch ubuntu
Switching consoles will
1. destroy the current console container
2. log you out
3. restart Docker
Continue [y/N]: y
ERRO[0030] Missing the image: Error: No such image: docker.io/rancher/os-ubuntuconsole:v1.4.3
Pulling console (docker.io/rancher/os-ubuntuconsole:v1.4.3)...
v1.4.3: Pulling from rancher/os-ubuntuconsole

6cf436f81810: Pull complete
987088a85b96: Pull complete
b4624b3efe06: Pull complete
d42beb8ded59: Pull complete
2213fb92a87a: Pull complete
ec69cc1fb387: Pull complete
Digest: sha256:ec123f657bbf8ff340460ff4c5686ce0f1cbb969f08b909c881b0e7591395840
Status: Downloaded newer image for rancher/os-ubuntuconsole:v1.4.3
switch-console_1 | time="2019-03-18T14:30:16Z" level=info msg="Project [os]: Starting project "
switch-console_1 | time="2019-03-18T14:30:16Z" level=info msg="[0/20] [console]: Starting "
switch-console_1 | time="2019-03-18T14:30:16Z" level=info msg="Recreating console"

===ログアウトされる===
===再度ログインする===
Using username "rancher".
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.14.73-rancher x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

rancher@rancher:~$


【実行例】curlとapt-getが使えることの確認

rancher@rancher:~$ sudo apt-get -v

apt 1.6.8 (amd64)
Supported modules:
*Ver: Standard .deb
*Pkg: Debian dpkg interface (Priority 30)
Pkg: Debian APT solver interface (Priority -1000)
Pkg: Debian APT planner interface (Priority -1000)
S.L: 'deb' Debian binary tree
S.L: 'deb-src' Debian source tree
Idx: Debian Source Index
Idx: Debian Package Index
Idx: Debian Translation Index
Idx: Debian dpkg status file
Idx: Debian deb file
Idx: Debian dsc file
Idx: Debian control file
Idx: EDSP scenario file
Idx: EIPP scenario file
rancher@rancher:~$ curl
curl: try 'curl --help' or 'curl --manual' for more information



8) Dockerの稼動を確認

docker環境が動くことも確認しておきます

【1】確認例

docker ps

docker run hello-world

【実行例】docker run hello-world

rancher@rancher:~$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

rancher@rancher:~$


以上でRancherOSのインストールと設定は完了です。


9) ご参考


  • VMWareでは次回のリブートでisoから始動せぬよう、isoを外しておきましょう

image


  • RancherOSでsudoを毎回打つのが面倒なら以下でrootにsuできます

sudo passwd root →新しいパスワードの入力

su -

【実行例】rootになる


rootになる

rancher@rancher:~$ sudo passwd root

Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
rancher@rancher:~$ su -
Password:
root@rancher:~# whoami
root
root@rancher:~#



2. k3s

次はk3sのインストールです。っても40MB弱の実行バイナリーをダウンロードして起動するだけで、超簡単です!

:warning: k3sのトップページでは以下のように

curl -sfL https://get.k3s.io | sh -でもいいよ~と書いてあります。

image

ubuntuとかならこの一発でいいんですが、RancherOSではsystemdが無いのでエラーになります5。よってgithubのリポジトリから実行バイナリーを直にダウンロードします。


RancherOSではエラー

rancher@rancher:~$ sudo curl -sfL https://get.k3s.io | sh -

[ERROR] Can not find systemd to use as a process supervisor for k3s


1) 実行バイナリーのダウンロード

sudo curl -L "https://github.com/rancher/k3s/releases/download/v0.2.0/k3s" -o /usr/local/bin/k3s で、ダウンロードして/usr/local/binにコピー

sudo chmod +x /usr/local/bin/k3sで実行フラグつけます

:warning: 上記のURL中のv0.2.0の部分はここ見て適宜、最新のものに変更してください

実行例

rancher@rancher:~$ sudo curl -L "https://github.com/rancher/k3s/releases/download/v0.2.0/k3s" -o /usr/local/bin/k3s

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 594 0 594 0 0 370 0 --:--:-- 0:00:01 --:--:-- 370
100 35.9M 100 35.9M 0 0 163k 0 0:03:45 0:03:45 --:--:-- 173k
rancher@rancher:~$ sudo chmod +x /usr/local/bin/k3s
rancher@rancher:~$ ls -al /usr/local/bin/k3s
-rwxr-xr-x 1 root root 37735552 Mar 19 04:49 /usr/local/bin/k3s
rancher@rancher:~$



2) k3s(クラスター)の起動

sudo k3s server &でk3sのクラスターをバックグランド実行します。

sudo k3s kubectl get nodes でクラスターがReadyであることを確認します。

【実行例】

rancher@rancher:~$ sudo k3s server &

[1] 2314
rancher@rancher:~$ INFO[0000] Preparing data dir /var/lib/rancher/k3s/data/e44f7a46cadac4cec9a759756f2a27fdb25e705a83d8d563207c6a6c5fa368b4
INFO[2019-03-19T05:18:26.079861991Z] Starting k3s v0.2.0 (2771ae1)
INFO[2019-03-19T05:18:27.979256923Z] Running kube-apiserver --watch-cache=false --cert-dir /var/lib/rancher/k3s/server/tls/temporary-certs --allow-privileged=true --authorization-mode Node,RBAC --service-account-signing-key-file /var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range 10.43.0.0/16 --advertise-port 6445 --advertise-address 127.0.0.1 --insecure-port 0 --secure-port 6444 --bind-address 127.0.0.1 --tls-cert-file /var/lib/rancher/k3s/server/tls/localhost.crt --tls-private-key-file /var/lib/rancher/k3s/server/tls/localhost.key --service-account-key-file /var/lib/rancher/k3s/server/tls/service.key --service-account-issuer k3s --api-audiences unknown --basic-auth-file /var/lib/rancher/k3s/server/cred/passwd --kubelet-client-certificate /var/lib/rancher/k3s/server/tls/token-node.crt --kubelet-client-key /var/lib/rancher/k3s/server/tls/token-node.key
INFO[2019-03-19T05:18:28.973264623Z] Running kube-scheduler --kubeconfig /var/lib/rancher/k3s/server/cred/kubeconfig-system.yaml --port 10251 --address 127.0.0.1 --secure-port 0 --leader-elect=false
INFO[2019-03-19T05:18:28.977256753Z] Creating CRD listenerconfigs.k3s.cattle.io
INFO[2019-03-19T05:18:28.996962188Z] Running kube-controller-manager --kubeconfig /var/lib/rancher/k3s/server/cred/kubeconfig-system.yaml --service-account-private-key-file /var/lib/rancher/k3s/server/tls/service.key --allocate-node-cidrs --cluster-cidr 10.42.0.0/16 --root-ca-file /var/lib/rancher/k3s/server/tls/token-ca.crt --port 10252 --address 127.0.0.1 --secure-port 0 --leader-elect=false
Flag --address has been deprecated, see --bind-address instead.
INFO[2019-03-19T05:18:29.096540855Z] Creating CRD addons.k3s.cattle.io
INFO[2019-03-19T05:18:29.099448611Z] Creating CRD helmcharts.k3s.cattle.io
INFO[2019-03-19T05:18:29.152491793Z] Waiting for CRD addons.k3s.cattle.io to become available
INFO[2019-03-19T05:18:29.658810108Z] Done waiting for CRD addons.k3s.cattle.io to become available
INFO[2019-03-19T05:18:29.659264325Z] Waiting for CRD helmcharts.k3s.cattle.io to become available
INFO[2019-03-19T05:18:30.162743240Z] Done waiting for CRD helmcharts.k3s.cattle.io to become available
INFO[2019-03-19T05:18:30.165942412Z] Listening on :6443
INFO[2019-03-19T05:18:31.382331741Z] Node token is available at /var/lib/rancher/k3s/server/node-token
INFO[2019-03-19T05:18:31.382582891Z] To join node to cluster: k3s agent -s https://192.168.118.144:6443 -t ${NODE_TOKEN}
INFO[2019-03-19T05:18:31.385053592Z] Writing manifest: /var/lib/rancher/k3s/server/manifests/coredns.yaml
INFO[2019-03-19T05:18:31.385334019Z] Writing manifest: /var/lib/rancher/k3s/server/manifests/traefik.yaml
INFO[2019-03-19T05:18:31.941839249Z] Wrote kubeconfig /etc/rancher/k3s/k3s.yaml
INFO[2019-03-19T05:18:31.941874823Z] Run: k3s kubectl
INFO[2019-03-19T05:18:31.941882500Z] k3s is up and running
INFO[2019-03-19T05:18:32.010735171Z] Logging containerd to /var/lib/rancher/k3s/agent/containerd/containerd.log
INFO[2019-03-19T05:18:32.010966950Z] Running containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
INFO[2019-03-19T05:18:32.011088117Z] Waiting for containerd startup: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial unix /run/k3s/containerd/containerd.sock: connect: no such file or directory"
INFO[2019-03-19T05:18:33.022583350Z] Connecting to wss://localhost:6443/v1-k3s/connect
INFO[2019-03-19T05:18:33.022742208Z] Connecting to proxy url="wss://localhost:6443/v1-k3s/connect"
INFO[2019-03-19T05:18:33.034916056Z] Handling backend connection request [rancher]
WARN[2019-03-19T05:18:33.061762193Z] Disabling CPU quotas due to missing cpu.cfs_period_us
INFO[2019-03-19T05:18:33.061897865Z] Running kubelet --healthz-bind-address 127.0.0.1 --read-only-port 0 --allow-privileged=true --cluster-domain cluster.local --kubeconfig /var/lib/rancher/k3s/agent/kubeconfig.yaml --eviction-hard imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --cgroup-driver cgroupfs --root-dir /var/lib/rancher/k3s/agent/kubelet --cert-dir /var/lib/rancher/k3s/agent/kubelet/pki --seccomp-profile-root /var/lib/rancher/k3s/agent/kubelet/seccomp --cni-conf-dir /var/lib/rancher/k3s/agent/etc/cni/net.d --cni-bin-dir /var/lib/rancher/k3s/data/e44f7a46cadac4cec9a759756f2a27fdb25e705a83d8d563207c6a6c5fa368b4/bin --cluster-dns 10.43.0.10 --container-runtime remote --container-runtime-endpoint unix:///run/k3s/containerd/containerd.sock --address 127.0.0.1 --anonymous-auth=false --client-ca-file /var/lib/rancher/k3s/agent/client-ca.pem --hostname-override rancher --cpu-cfs-quota=false
Flag --allow-privileged has been deprecated, will be removed in a future version
INFO[2019-03-19T05:18:33.096232102Z] waiting for node rancher: nodes "rancher" not found
INFO[2019-03-19T05:18:35.170536317Z] waiting for node rancher CIDR not assigned yet
INFO[2019-03-19T05:18:37.175216057Z] waiting for node rancher CIDR not assigned yet
INFO[2019-03-19T05:18:39.180562347Z] waiting for node rancher CIDR not assigned yet
INFO[2019-03-19T05:18:41.185533616Z] waiting for node rancher CIDR not assigned yet
INFO[2019-03-19T05:18:43.191732721Z] waiting for node rancher CIDR not assigned yet

[[Ctrl+C]]でstdoutを終わらせる

rancher@rancher:~$ sudo k3s kubectl get nodes
NAME STATUS ROLES AGE VERSION
rancher Ready <none> 14m v1.13.4-k3s.1





:triangular_flag_on_post: 以下ご参考ですが、k3sは実はserver/agentの2層構造です。ただしデフォルトではserver起動時にagentも自動的に起動されますので1ノード構成ではagentは意識不要です。もしもagentを別マシンで起動したければk3s server --disable-agentでサーバーをagentなしで起動してから

別マシンでsudo k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}でエージェントを起動します。

詳しくはドキュメントの「Running server」「Joining nodes」のあたりをご参照ください。


3) (オプション) kubectlを/usr/local/binにコピーして直接使えるようにする

デフォルトでもコマンド k3s kubectl ~のようにk3sを介してkubectlコマンドを使えますが、面倒なのでkubectlを/usr/local/binにコピーして、直接使えるようにしておきます。(当作業はオプションです。やらなくても支障はありません)

sudo find / -name kubectl -printで実行モジュールをみつけて

cp -p /var/lib/rancher/k3s/data/xxxxxxxxxxx/bin/kubectl /usr/local/binでコピー

kubectl get nodesでk3s抜きでもコマンドが使えることを確認

【実行例】

rancher@rancher:~$ kubectl

-bash: kubectl: command not found
rancher@rancher:~$ sudo find / -name kubectl -print
/var/lib/rancher/k3s/data/e44f7a46cadac4cec9a759756f2a27fdb25e705a83d8d563207c6a6c5fa368b4/bin/kubectl
find: '/proc/655/task/655/net': Invalid argument
(途中省略)
rancher@rancher:~$ sudo cp -p /var/lib/rancher/k3s/data/e44f7a46cadac4cec9a759756f2a27fdb25e705a83d8d563207c6a6c5fa368b4/bin/kubectl /usr/local/bin
rancher@rancher:~$ ls -al /usr/local/bin/kubectl
-rwxr-xr-x 1 root root 85842112 Mar 9 02:46 /usr/local/bin/kubectl

rancher@rancher:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
rancher Ready <none> 12m v1.13.4-k3s.1



4) nginxのコンテナを動かしてみる

:triangular_flag_on_post: 以下の表記で、コマンド先頭の(k3s)の部分は前項でkubectlを直接打てるように設定した場合は不要、という意味です。

【1】コンテナのデプロイと起動

(k3s) kubectl run nginx --image=nginx:latest でコンテナをクラスターにデプロイし

(k3s) kubectl get podsで状態がRunningになるまで待ちます

【実行例】

rancher@rancher:~$ k3s kubectl run nginx --image=nginx:latest

kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
rancher@rancher:~$ k3s kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-585fddf4b-4b8jj 0/1 ContainerCreating 0 21s
rancher@rancher:~$ k3s kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-585fddf4b-4b8jj 1/1 Running 0 92s
rancher@rancher:~$


【2】稼動確認のため、ポートの公開

(k3s) kubectl expose deployment/nginx --type=NodePort --port=80で外向けポートを公開し

(k3s) kubectl get svcで割り当てられたポート番号を確認します(X:Y/TCPのY)

【実行例】

rancher@rancher:~$ k3s kubectl expose deployment/nginx --type=NodePort --port=80

service/nginx exposed
rancher@rancher:~$ k3s kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 6m5s
nginx NodePort 10.43.45.95 <none> 80:32411/TCP 44s


【3】nginxの稼動確認

ブラウザーでHTTPでアクセスするとnginxが動いているのがわかります。

image

【3】後始末

kubectl get deploymentsで名前を確認して

kubectl delete deployments nginxでデプロイメントを消す

kubectl delete svc nginxでサービスを消す

【実行例】


後始末

rancher@rancher:~$ kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 16m
rancher@rancher:~$ kubectl delete deployments
error: resource(s) were provided, but no name, label selector, or --all flag specified
rancher@rancher:~$ kubectl delete deployments nginx
deployment.extensions "nginx" deleted
rancher@rancher:~$ kubectl get deployments
No resources found.
rancher@rancher:~$ kubectl get pods
No resources found.
rancher@rancher:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 129m
nginx NodePort 10.43.45.95 <none> 80:32411/TCP 124m
rancher@rancher:~$ kubectl delete svc nginx
service "nginx" deleted
rancher@rancher:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 130m
rancher@rancher:~$




3. Rancher

稼働中のk3sクラスターをRancherで管理できるように登録します


1) コンテナ rancher/rancherの起動

image

sudo docker run -d --restart=unless-stopped -p 8080:80 -p 449:443 rancher/rancher:v2.2.0-rc6 でrancherを起動します。Docker Hubから自動的にコンテナイメージがダウンロードされます。

:warning: 同一ノードでk3sと一緒に動かすときはポートが被るため、rancher側の外向けポートを変更してください。上記ではhttpを8080にhttpsを449に変更しています

:triangular_flag_on_post: rancherには1.x系(rancher/server)と2.x系(rancher/rancher)があります。今回はPrometheusに対応した最新版を使いたかったので明示的にタグを指定(:v2.2.0-rc6)しました。その時点での最新版のタグはこちらから確認できます。安定版でよいならタグなし(≒latest)でいいと思います。

【実行例】

rancher@rancher:~$ sudo docker run -d --restart=unless-stopped -p 8080:80 -p 449:443 rancher/rancher:v2.2.0-rc6

Unable to find image 'rancher/rancher:v2.2.0-rc6' locally
v2.2.0-rc6: Pulling from rancher/rancher
898c46f3b1a1: Pull complete
63366dfa0a50: Pull complete
041d4cd74a92: Pull complete
6e1bee0f8701: Pull complete
6897608b7b9b: Pull complete
c6a7299acae7: Pull complete
459492722b0b: Pull complete
1561e91246c3: Pull complete
8544aa5eabc5: Pull complete
99b14c64eae3: Pull complete
7bf88285e9b5: Pull complete
ec6e883abd70: Pull complete
Digest: sha256:dd7c5b4fc3c6671f1a12805f2f7cf3d75b2b489464068125c114aa8539c30c4c
Status: Downloaded newer image for rancher/rancher:v2.2.0-rc6
b6694394617a98a46c40624d87730b76fd566df1e6472ec442d9a576d719138d
rancher@rancher:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6694394617a rancher/rancher:v2.2.0-rc6 "entrypoint.sh" 2 minutes ago Up About a minute 0.0.0.0:8080->80/tcp, 0.0.0.0:449->443/tcp mystifying_bose
rancher@rancher:~$



2) ダッシュボードへのアクセス

【1】アクセス

すでにrancherは動いています。ブラウザーでhttps://<IPアドレス>:4496にアクセスするとパスワードを設定するように求められるので、任意のものに設定します。

image

次回からのURLです

image


3) k3sクラスターの追加(登録)

【1】既にk3sのクラスターは動いていますのでrancherに追加しましょう。

「Add Cluster」ボタン

image

【2】

- クラスターの種類から右上の「import」を選択

- Cluster Nameに任意の名前を入力

- 「Create」ボタン

image

【3】既存クラスターをRancherに登録するためのコマンドが表示されますので、最下のコマンドを実行します

image

【実行例】

rancher@rancher:~$ kubectl apply -f https://192.168.118.144:449/v3/import/bjgt6mmcqx5pr7cfcx4b89bpfb92jgjz22mcnqp4rm8bqh98k7jggj.yaml

Unable to connect to the server: x509: certificate signed by unknown authority
rancher@rancher:~$ curl --insecure -sfL https://192.168.118.144:449/v3/import/bjgt6mmcqx5pr7cfcx4b89bpfb92jgjz22mcnqp4rm8bqh98k7jggj.yaml | kubectl apply -f -
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-c568c94 created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.extensions/cattle-cluster-agent created
daemonset.extensions/cattle-node-agent created
rancher@rancher:~$


しばらくするとクラスターがactiveになります

image

【4】リソース監視の活動化

k3sをクリックして次パネルで「Enable Monitoring to see live metrics」をクリック(:warning:V2.2以降でないとこのリンクは表示されません)

image

モニタリングを「Enable」にして「Save」ボタン

image

活動化した直後は「Monitoring API Not Ready」ですが、しばらくするとデータが収集され、性能データが見られるようになります

image

以下はCluster Metrics

image

Grafanaは当記事執筆時点(2019/03-2.2.0RC6)では「Node」の情報だけはきちんと表示されました。カッコイイですね。7

image

以上です。お疲れ様でした!


ご参考文献やリンク

RancherOS
k3s
Rancher

--------------------
--------------------
--------------------

:house: ホーム
Link
Link
Link

:rocket: Quick Start
Link
n/a
Link

:blue_book: Document
Link
Link
Link

:octocat: Github
Link
Link
Link

:flag_jp: RancherLabs 公式日本語サイト

:flag_jp: RancherJP

:flag_jp: RancherOS日本語訳 - 「くまかみ工房」さんがドキュメントを翻訳/公開してくれていました。ありがとうございます!





  1. おかげさまで当記事は今も読んでいただいているようなので、k3osに言及しておかないと知識が古いままになり申し訳ないなあ、と思ったので追記しました。 



  2. まあ今回はRancherOSを使いますが、RancherOSは軽量すぎて何も入って無いんで、ぶっちゃけ、お勉強ならUbuntuの方が楽かも、、とは思います。ubuntuならdockerの導入も一発( apt install docker.io)で楽ですし。 



  3. rancheros-vmware.isoでもよかったのでしょうが、やってません。 



  4. 各種のserviceは当初は無効化(disabled)されていますが、必要ならrosコマンドで有効化(enable)できます 



  5. RancherOSではsystemdの代わりにsystem-dockerってのが動いてます。 



  6. 念のためですが、この例ではrancher起動時にポート449を指定したので449を指定しました。違う値ならその値を指定してください。 



  7. 筆者の環境では他の部分の情報が表示されないのですが、RCゆえのバグか、設定が必要なのかは未調査です。