チラシの裏の書き置き

技術的な話をするブログのタイトルじゃない気がする

Raspberry Pi(Raspbian)上にKubernetesをk3sを使って構築する

表題の通り。Kubernetesを入れる手段としては色々ありますが、今回は軽量なk3sを利用します。
kubectlも内包しているので色々便利です。

k3s.io

環境

  • Raspberry Pi 3 (Model B)
    • 最小限のセットアップは済んでいる前提
  • Docker 18.09.0
  • k3s 0.4.0

流れ

最初に、Kubernetesの起動に必要なcgroupsの設定を/boot/cmdline.txtに書き込みます。
次のようにcgroup_memory=1 cgroup_enable=memoryを末尾に追記し、保存して再起動。

dwc_otg.lpm_enable=0 console=tty1 root=PARTUUID=6cb546a1-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_memory=1 cgroup_enable=memory

次にDockerを入れます。最初のコマンドでインストールして、2つ目のコマンドでroot以外でも動作するようにします。

$ sudo curl -sSL https://get.docker.com | sh
$ sudo usermod -aG docker pi

再ログインしてdocker versionを確認。

$ docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:57:21 2018
 OS/Arch:           linux/arm
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:17:57 2018
  OS/Arch:          linux/arm
  Experimental:     false

そしてk3sを入れます。

$ curl -sfL https://get.k3s.io | sh -

k3sとKubernetesのバージョンを確認して完了です。

$ k3s kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1-k3s.4", GitCommit:"52f3b42401c93c36467f1fd6d294a3aba26c7def", GitTreeState:"clean", BuildDate:"2019-04-15T22:13+00:00Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/arm"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1-k3s.4", GitCommit:"52f3b42401c93c36467f1fd6d294a3aba26c7def", GitTreeState:"clean", BuildDate:"2019-04-15T22:13+00:00Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/arm"}
$ k3s --version
k3s version v0.4.0 (7822549f)

動作確認

次のYAMLファイルをtest-nginx.ymlという名前で用意して、nginxを立ち上げてみます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:stable
          ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata: 
  name: nginx-port
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 8080
    targetPort: 80
  selector:
    app: nginx

applyしてしばらく待ち、http://(RaspbianのIP):8080にアクセスしてnginxのページが表示されれば完了です。

$ k3s kubectl apply -f test-nginx.yml

f:id:taiko19xx:20190418005606p:plain