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

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

はじめに

こんにちわ!石田です。昨年くらいから「これからの技術者は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周りが初めての方は混乱するかも、と思うので、まず用語をおさらいしますね。

上記のように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からダウンロードします。


「Download Now」ボタン


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

2) VMWareでのVM設定と起動

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

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

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

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

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

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

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

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

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

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

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

  • rancher.password=に任意のパスワードを設定してください
  • VMWareのコンソール上、この時点では英語キーボードになっていますので”とか=の文字入力がしずらいですが、USキーボードの配列を見ながら入力してください

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

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

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

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

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

6) SSHでログイン

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

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を外しておきましょう
  • 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 -でもいいよ~と書いてあります。

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:~ +x /usr/local/bin/k3s  rancher@rancher:~  /usr/local/bin/k3s   1 root root 37735552 Mar 19 04:49 /usr/local/bin/k3s  rancher@rancher:~    

【1】アクセス すでにrancherは動いています。ブラウザーでにアクセスするとパスワードを設定するように求められるので、任意のものに設定します。 次回からのURLです 【1】既にk3sのクラスターは動いていますのでrancherに追加しましょう。 「Add Cluster」ボタン 【2】 – クラスターの種類から右上の「import」を選択 – Cluster Nameに任意の名前を入力 – 「Create」ボタン 【3】既存クラスターをRancherに登録するためのコマンドが表示されますので、最下のコマンドを実行します k3sをクリックして次パネルで「Enable Monitoring to see live metrics」をクリック(V2.2以降でないとこのリンクは表示されません) モニタリングを「Enable」にして「Save」ボタン 活動化した直後は「Monitoring API Not Ready」ですが、しばらくするとデータが収集され、性能データが見られるようになります 以下はCluster Metrics Grafanaは当記事執筆時点(2019/03-2.2.0RC6)では「Node」の情報だけはきちんと表示されました。カッコイイですね。