k0sでKubernetes環境をVirtualbox/Vagrantに構築する

k0sという軽量Kubernetesディストリビューションがあるようです。

k0sproject.io

自前のWebアプリを安価にk8sクラスタで運用できると嬉しいなぁということでまずはローカル環境で試してみます。

この記事のゴール

Kubernetes環境でNginxを立て、ホストからNginxのデフォルトページアクセスできる

参考にした記事

https://www.creationline.com/lab/47938 https://www.niandc.co.jp/sol/tech/date20201124_1935.php

k0sのインストール

この記事(k0sインストール)を参考にインストールしていきます。 https://www.creationline.com/lab/47938

  • 記事では、private_networkが 192.168.56.101 となっていますが、以下のエラーが出てしまったので、192.168.35.101 に変更しました。
The IP address configured for the host-only network is not within the
allowed ranges. Please update the address used to be within the allowed
ranges and run the command again.

  Address: 192.168.56.101
  Ranges: 192.168.35.0/24

この環境では、/usr/local/bin のパスがsudo経由では通っていないので、パスを通すか毎度 /usr/local/bin/k0s と入力します。

マニフェストを用意・適用する

DeploymentとServiceを用意します。

nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30007
  type: NodePort

以下のコマンドでapplyします。

sudo /usr/local/bin/k0s kubectl apply -f nginx.yaml

正しくapplyされていそうか確認

[vagrant@node1 ~]$ sudo /usr/local/bin/k0s kubectl get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-7848d4b86f-cnrff   1/1     Running   0          3m48s
pod/nginx-7848d4b86f-nj6qm   1/1     Running   0          3m48s
pod/nginx-7848d4b86f-t9zhw   1/1     Running   0          3m48s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        78m
service/nginx        NodePort    10.98.152.172   <none>        80:30007/TCP   3m48s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   3/3     3            3           3m48s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-7848d4b86f   3         3         3       3m48s

ホストからNginxのデフォルトページへアクセス

VMのIPは192.168.35.101で、NodePortのIPは30007で固定しているため、以下のURLでアクセスします。

curl http://192.168.35.101:30007/

デフォルトページっぽいものが返ってくればOK

まとめ

Kubernetes環境をさくっと立てられて便利でした! 次回は外部からkubectlを実行できるようにしていく予定です!