[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クラスターを動かすことができました。 物理マシンでも仮想マシンでも割と色々なところで動くようですので、試してみてください。