2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Raspberry pi 4 にk3sをデプロイしnginxをデプロイする

Posted at

初めての投稿となります。優しく見守っていただけると幸いです。

1.今回の内容

初心者向けの内容です。Raspberry pi 4 model Bにk3sをデプロイし、nginxをデプロイ、Serviceで外部ノードに公開をします。
k3sについてはこちら
要するに、IoTやエッジ向けの小さなk8sですね。
エッジ環境向けなので、クラウド上で必要となるような機能などを削いだことによって軽量化されています。
元々はRancher Labsが開発したのもですが、Rancher Labsが2020年にSUSEに買収されたみたいです。
どうせならOSはopenSUSEにすればよかったかも。
SUSEについてはこちら

環境
HW: Raspberry Pi 4+ model B 8gb mem
OS: Ubuntu22.04.5
k3s version: v1.24.6+k3s1

2.k3sインストールの準備

Raspberry piにk3sをインストールするためには、まず準備が必要です。
/boot/cmdline.txtの編集をしなければなりません。ただ、今回はUbuntuをインストールしている関係か、/boot/firmware配下にファイルがあります。/boot/firmware/cmdline.txtの末尾に改行せずに、cgroup_memory=1 cgroup_enable=memoryと記述する必要があります。

編集した後のファイルがこれです。

cat /boot/firmware/cmdline.txt 
elevator=deadline net.ifnames=0 console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash cgroup_memory=1 cgroup_enable=memory

ファイルを編集した後は一度リブートしてください。

リブートが完了したら、準備は完了です。

3.k3sインストール

k3sをインストールしますが、今回はシングルノードなので単純。

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

これだけです。

以下のようなログが出ます。

[INFO]  Finding release for channel stable
[INFO]  Using v1.24.6+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.24.6+k3s1/sha256sum-arm64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.24.6+k3s1/k3s-arm64
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

k8sは本来kubectlを入れないとCLIでの対話はできませんがk3sは一緒にバイナリでパッケージ化されており、別途インストールする必要がありません。
ただ、権限は面倒なので変更しておきます。

sudo chmod 644 /etc/rancher/k3s/k3s.yaml

k3s.yamlにはこのクラスタの情報が書き込まれており、手元のPCからkubectlを叩きたい場合は、このファイルを入れて設定してあげるだけで大丈夫です。

接続できるか確認してあげます。

kubectl get nodes

ReadyになっておけばOK.

4.nginxデプロイ

nginxをデプロイします。
以下のようなファイルです。

nginx-pod.yml
apiVersion: v1
kind: Deployment
metadata:
  name: nginx-demo
  labels:
    component: nginx
spec: 
  replicas: 3
  selector:
    matchLabels:
      component: nginx
  template:
    metadata:
      labels:
       component: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22

このファイルを適用します。

kubectl apply -f nginx-pod.yml

ポッドの状況を確認します。

kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
nginx-demo-68fb94b6d9-46vpk   1/1     Running   0          86s
nginx-demo-68fb94b6d9-c94j7   1/1     Running   0          86s
nginx-demo-68fb94b6d9-2m7cg   1/1     Running   0          86s

上がっていればOKなので、続いてServiceクラスタ外部から接続できるようにします。

nginx-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    component: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30000
  type: NodePort

これを適用します。

kubectl apply -f nginx-service.yml

外部から接続します。
https://<Raspberry piのIPアドレス>:30000

image.png

問題なく接続できました。

5.ローリングアップデートを試す。

ここで終わるのも味気ないのでローリングアップデートを試してみます。といってもこれもすぐに終わりますが。
nginxのバージョンを変更します。

nginx-pod.yml
apiVersion: v1
kind: Deployment
metadata:
  name: nginx-demo
  labels:
    component: nginx
spec: 
  replicas: 3
  selector:
    matchLabels:
      component: nginx
  template:
    metadata:
      labels:
       component: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.23 ##ここを変更

1.23に変更します。では、適用し、状況をみていきます。

kubectl apply -f nginx-pod.yml

直後はこんな感じ。Podが入れ替わろうとしてますね。

sudo kubectl get pods
NAME                          READY   STATUS              RESTARTS   AGE
nginx-demo-68fb94b6d9-46vpk   1/1     Running             0          10m
nginx-demo-68fb94b6d9-2m7cg   1/1     Running             0          10m
nginx-demo-65bf5bd8c8-hpq4g   1/1     Running             0          17s
nginx-demo-68fb94b6d9-c94j7   1/1     Terminating         0          10m
nginx-demo-65bf5bd8c8-q5mdt   0/1     ContainerCreating   0          4s

その後完全に入れ替わりました。

sudo kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
nginx-demo-65bf5bd8c8-hpq4g   1/1     Running   0          28s
nginx-demo-65bf5bd8c8-q5mdt   1/1     Running   0          15s
nginx-demo-65bf5bd8c8-cx752   1/1     Running   0          11s

Deploymentを利用しているのでローリングアップデートが行われて、入れ替え中もnginxのページは繋がったままでした。

k3sだと少ないリソースのマシンでも十分使えますし、個人でk8sを利用したい場合にも便利ですね。

参考

あとはサイボウズさんの新人研修の内容を参考にしました。
というか、ほぼ丸パクリに近いですね。手順やリソース名は異なりますが。
k3sでなにかデプロイするか、といっても手頃なアプリケーションがあればと思ってたら面白い記事を見つけたのでラズパイ上に展開してみました。
サイボウズさんの研修内容はこちら
直接参考にしたのはこちらです。
https://cybozu.github.io/introduction-to-kubernetes/introduction-to-kubernetes.html

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?