仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

k3OSを使ってみた

以前、このブログでk3sを取り上げたと思いますが、k3sは何らかのOSの上でk3s Serverもしくはk3s Agentを動かす必要がありました。

それでも十分便利ではあったのですが、その後Rancher Labが新たに「k3OS」というものを発表していたので、そのうち試したいなとは思っていました。

k3os.io

少々時間ができたので、試してみることにしました。

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

コンテナーが起動され、アプリを起動できたと思います。

f:id:virtualtech:20190828155735p:plain

ということで、割と短時間でKubernetesクラスターを動かすことができました。 物理マシンでも仮想マシンでも割と色々なところで動くようですので、試してみてください。