※当ブログではアフィリエイト広告を利用しています
Rancher Labsから超軽量なKubernetes「k3s」がリリースされました。
リポジトリはこちら。
https://github.com/rancher/k3s
説明にある以下の言葉が印象的です。洒落てますね。
Lightweight Kubernetes. 5 less than k8s.
k8sより5少ない軽量なKubernetes。
LinuxのVMさえ用意できればどこでも動かせそうです。バイナリーは40MB以下、使用メモリは512MBまで抑えられているとのことで、IoT機器などリソースが少ない機器上でも動かすことを目指しているようです。これならラズパイ単体でも十分動きそうですね。
また、Kubernetesの勉強をしようとする場合、それなりのリソースが必要となってしまうのがこれまでネックでした。(Minikubeなどありますが)
また、こちらの記事でも紹介したように、Kubernetesを1から構築しようとするとどうしてもそれなりの手間がかかってしまいます。
k3sならバイナリーをダウンロードして起動するだけで使えるようになるので、サクッと導入して検証したい場合には最適かもしれません。
早速導入してみようと思います。
目次
Vagrantで導入
御託はいいからさっさと導入したい人向けに、「vagrant up」で使えるようになるやつを作っておきました。
k3sとは?
ややこしいので、この記事では以下の呼称を用います。さらにややこしい?何となく察してください。
k8s: 今までのKubernetes。
Kubernetes: k3sもk8sも含めたKubernetes。
k3s: 今回リリースされたやつ
とりあえずリポジトリのReadMeを読んでみる。ふむふむ。
k3sはKubernetes互換のディストリビューションとなるように作られていますが、以下については変更が加えられているようです。
- あんまり使わない機能だったり、標準的ではなかったり、アルファ版の機能は削除されている。
- 複雑なプラグインは削除されている。(ストレージやクラウドプロバイダー関連)。それらはアドオンで代替可能。
- Kubernetesではデータストアとしてetcd3が使われていますが、k3sではsqlite3がデフォルトで使われている。etcdへの変更は可能。
- ランチャーは1つ。その中にいろんな面倒な設定すべてが詰め込まれている。
- OS依存を最小限に。(普通なLinuxカーネルとcgroupマウントだけが必要。なのでWindowsやmacOSでは動かない) Kubernetes の動作に必要な以下のやつはk3sにパッケージングしてある。
- containerd
- Flannel
- CoreDNS
- CNI
- Host utilities (iptables, socat, etc)
5. を見ての通り、コンテナランタイムにはdockerではなくcontainerdが使われています。dockerの勉強をしたい場合には向かないので注意です。
k3sの導入
まず、適当なLinuxを用意します。ほぼなんでも良いはず。VMでもベアメタルでも何でも良いです。
今回は手元にすぐ用意できたので、CentOSを使用しました。
社内クラウドを使ったので少しカスタマイズはされていますが、ほぼminimal installのものです。
おもむろに、以下を実行します。
curl -sfL https://get.k3s.io | sh -
これで必要な設定が全て完了します。
こんなメッセージが出ました。
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] Downloading https://github.com/rancher/k3s/releases/download/v0.1.0/sha256sum-amd64.txt
[INFO] Downloading https://github.com/rancher/k3s/releases/download/v0.1.0/k3s
[INFO] Verifying download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] systemd: Creating /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
ちょっと待って、30秒もかかってない。
インストールはこれで終わりです。お疲れ様でした。
[xyz-ips snippet=”ads”] |
半信半疑で動作確認
本当にセットアップされてるのか疑問を持ちつつ、動作確認・・・
$ k3s kubectl get node
どうやら、「kubectl」でも「k3s kubectl」でも良さそうです。
そして、動いてる!!!!はえーすっごい。
NAME STATUS ROLES AGE VERSION
hogehoge Ready none 2m41s v1.13.3-k3s.6
でも本当にPod動くんかねこれ・・・
$ kubectl create -f https://k8s.io/examples/controllers/nginx-deployment.yaml
deployment.apps/nginx-deployment created
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 74s
$ kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-deployment-76bf4969df-m8bp4 1/1 Running 0 80s
nginx-deployment-76bf4969df-q4f68 1/1 Running 0 80s
nginx-deployment-76bf4969df-wcbz4 1/1 Running 0 80s
普通に動いてて草。
サービスまで作って接続できるか見てみます。(以下の全行をコピーして実行してください)
cat <<EOF | kubectl create -f -
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
targetPort: 80
port: 80
EOF
確認します。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 29m
my-service NodePort 10.43.117.203 <none> 80:32415/TCP 73s
$ curl http://localhost:32415
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
普通に動いてますね!これできる環境が30秒で用意できるとは・・・
まとめ
いやーすごいですね。ここまで軽量にできるんですね。
本来はIoT機器などリソースが少ない機器向けを想定されているようですが、社内でKubernetesのハンズオン勉強会とかやる場合はk3sで十分な気がしました。
HA構成は未対応などまだまだ本番用途で使うのは早いとはいえ、遊びや練習用途で使うのにはすごく便利だと思うので今後積極的に使っていこうと思います。