[2020/4/8 追記]
文中の「sudo os-config」コマンドの部分は、最近のバージョンでは「sudo k3os install」コマンドを実行するように変わっています。セットアップ方法は以前とほぼ変わりません。文字列のコピペなどをするためにSSHアクセスしたいところですがk3OSのデフォルト設定はパスワード認証によるSSHアクセスを許可していないため、ファイル「/etc/ssh/sshd_config」を編集した後に「service sshd restart」コマンドを実行する必要があります。またISOブート時はrancherユーザーに対してパスワードが設定されていないため、「sudo passwd rancher」コマンドを実行してパスワードを設定する必要があります。
なお、VirtulBoxを使って構築をトライする場合は、NICはブリッジを使ってください。ブリッジ以外だとクラスタリングがうまくいかないようです。
はじめに
以前、このブログでk3sを取り上げたと思いますが、k3sは何らかのOSの上でk3s Serverもしくはk3s Agentを動かす必要がありました。
それでも十分便利ではあったのですが、その後Rancher Labが新たに「k3OS」というものを発表していたので、そのうち試したいなとは思っていました。
少々時間ができたので、試してみることにしました。
k3OSとは
k3OSはk3sがインストール済みのLinuxを簡単にデプロイしてシングルノード上で動かしたり、マルチクラスターを作ったりすることが簡単にできるツールです。Liveブートでk3sを動かすこともできます。
ちなみにk3OSはAlpine Linuxベースで動いています。
作る環境
k3OSはLiveブートもできますし、インストールをすることもできるようです。 今回はインストールする方を選択しました。
2台構成を目標にします。1台目をk3s-masterノード、2台目をk3s-workerノードと表記することにします。 今回は次のようなスペックの仮想マシンを二つ作ってk3OSをインストールし、クラスターを組んでみます。
| 項目 | スペック |
|---|---|
| vCPU | 2 |
| vMem | 2GB |
| Disk | 30GB |
| Network | インターネット接続可能なネットワーク一つ |
| Boot順 | k3os-amd64.isoからブートするように設定 |
k3os-masterノードのデプロイ
- ISOでブートします。
- 次のようにセットアップして、ディスクにk3OSをインストールします。
インストールのポイントはToken or cluster secret (optional):のところです。
複数のノードでクラスターを組む場合に必要な情報ですので、識別しやすいものを入力しておきます。
Run as server or agent?と質問されたらserverモードでインストールするようにセットアップします。
k3os-27550 [~]$ sudo os-config
Running k3OS configuration
Choose operation
1. Install to disk
2. Configure server or agent
Select Number [1]: 1
Config system with cloud-init file? [y/N]: n
Authorize GitHub users to SSH? [y/N]: n
Please enter password for [rancher]: ********
Confirm password for [rancher]: ********
Configure WiFi? [y/N]: n
Run as server or agent?
1. server
2. agent
Select Number [1]: 1
Token or cluster secret (optional): k3os-first5656
Configuration
-------------
device: /dev/vda
Your disk will be formatted and k3OS will be installed with the above configuration.
Continue? [y/N]: y
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00262759 s, 399 MB/s
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 487424 1k blocks and 121920 inodes
Filesystem UUID: 2b39f2d7-e442-4731-b953-b5dcab13aa51
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
k3os/
k3os/system/
k3os/system/k3os/
k3os/system/k3os/current
k3os/system/k3os/v0.2.1/
k3os/system/k3os/v0.2.1/k3os
k3os/system/k3s/
k3os/system/k3s/current
k3os/system/k3s/v0.5.0/
k3os/system/k3s/v0.5.0/k3s
k3os/system/kernel/
k3os/system/kernel/4.15.0-47-generic/
k3os/system/kernel/4.15.0-47-generic/initrd
k3os/system/kernel/4.15.0-47-generic/kernel.squashfs
k3os/system/kernel/current
Installing for i386-pc platform.
Installation finished. No error reported.
* Rebooting system in 5 seconds (CTRL+C to cancel)
- 自動的に再起動されますが、ISOブートしてしまったら
k3os-amd64.isoを取り出して再起動し、ディスクから起動してください。
k3os-workerノードのデプロイ
...とその前に、k3os-master上でトークンキーを確認してください。
トークンキーはsudo cat /var/lib/rancher/k3s/server/node-tokenとコマンドを実行すると確認できます。
確認後、k3os-masterと同じように、sudo os-configコマンドでディスクにインストールしてください。
Run as server or agent?の質問にはagentモードを選んでください。
URL of server:はk3os-masterの6443ポートを指定します。k3os-masterのIPアドレスが「192.168.10.100」の場合は、https://192.168.10.100:6443のような感じです。
Token or cluster secret:は最初に調べたトークンキーを入力します。
k3os-7426 [~]$ sudo os-config Running k3OS configuration Choose operation 1. Install to disk 2. Configure server or agent Select Number [1]: 1 Config system with cloud-init file? [y/N]: n Authorize GitHub users to SSH? [y/N]: n Please enter password for [rancher]: ******** Confirm password for [rancher]: ******** Configure WiFi? [y/N]: n Run as server or agent? 1. server 2. agent Select Number [1]: 2 URL of server: https://192.168.10.100:6443 Token or cluster secret: K10323f6a07a8dd49239c501b2cbd667de3a0cda9e4fcda3f0fa6d97f1d8dbb0d3b::node:k3os-first5656 Configuration ------------- device: /dev/vda Your disk will be formatted and k3OS will be installed with the above configuration. Continue? [y/N]: y (以下出力はk3s-masterとほぼ一緒なので略)
- 自動的に再起動されますが、ISOブートしてしまったら
k3os-amd64.isoを取り出して再起動し、ディスクから起動してください。
使ってみよう
k3os-masterノード上でコマンドを実行してみてください。
k3os-25723 [~]$ kubectl get no NAME STATUS ROLES AGE VERSION k3os-18523 Ready <none> 9s v1.14.1-k3s.4 k3os-25723 Ready <none> 28m v1.14.1-k3s.4
コンテナーを起動してみてください。
k3os-25723 [~]$ cat nginx.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 1
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
selector:
app: nginx
k3os-25723 [~]$ kubectl create -f nginx.yml
replicationcontroller/nginx created
service/nginx-nodeport created
k3os-25723 [~]$ kubectl get -f nginx.yml
NAME DESIRED CURRENT READY AGE
replicationcontroller/nginx 1 1 1 7s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-nodeport NodePort 10.43.171.208 <none> 80:32320/TCP 7s
コンテナーが起動され、アプリを起動できたと思います。

他のマシンから使ってみよう
kubectlとkubeconfigがあれば、外部のマシンからk3OSで構築したKubernetesクラスターにアクセスできます。 k3OSのkubeconfigは「/etc/rancher/k3s/k3s.yaml」に存在するので、その内容をクライアントのファイル「~/.kube/config」に保存して、IPアドレスをmasterノードのIPアドレスに修正すればアクセス可能です。
ということで、割と短時間でKubernetesクラスターを動かすことができました。 物理マシンでも仮想マシンでも割と色々なところで動くようですので、試してみてください。