使用树莓派4来通过ansible安装K3S

首先

由于rak8s已经不再更新,我决定在树莓派上安装k3s。
考虑到已经解释了安装方法本身,为了进一步简化操作,我打算使用ansible进行安装。

最初的草稿是在Raspbian 32位版的基础上创建的,但后来使用了Ubuntu 20.04 LTS的映像,测试了64位版的k3s,并将其结果添加到最后。

参考文献

Raspberry pi 4におけるK3Sクラスタ構築 https://qiita.com/Tsu_hao_Zhang/items/7d4f5d62bed584766881

Running K3S https://www.rancher.co.jp/docs/k3s/latest/en/running/

环境

    • Hardware: Raspberry Pi 4 (4GB) x4台

 

    • Image: 2020-02-13-raspbian-buster-lite.img

 

    K3S version: v1.17.4+k3s1

如果您使用的是桌面版映像而不是Raspbian Lite,并且希望删除不必要的软件包,则可能需要进行一些操作,但我在这里没有进行确认。

网络

    • 有線接続 (無線LANは想定していません)

 

    • 192.168.100.0/24

 

    • DHCP有効

 

    • 固定IP (MACアドレスによる固定IP配布)

 

    DNSによる正引き、逆引き可能

我们使用dnsmasq作为DNS和DHCP服务器。

大致的工作流程

我们正在考虑以下工作内容。

    1. 树莓派4的设置

 

    1. 在工作用电脑上准备ansible和Makefile

 

    使用ansible安装K3S。

使用于作业中的文件

ansible.cfg和Makefile等文件在GitHub上公开。

    https://github.com/YasuhiroABE/myansible-playground-raspi4k3s

第一步:设置树莓派4 (Raspberry Pi4)。

事先启用SSH服务器,并将ansible主机的SSH公钥注册到authorized_keys中。建议使用编辑SD卡的方法,但也可以手动进行相似的设置。

    【Qiita】Raspberry PiのRaspbian SDイメージにあらかじめ設定を追加する

另外,为了将静态IP地址分配给MAC地址,需要配置DHCP服务器。

第二步:准备ansible和Makefile。

在执行Ansible的主机上,继续进行准备工作。

$ git clone https://github.com/YasuhiroABE/myansible-playground-raspi4k3s
$ cd myansible-playground-raspi4k3s

修改主机文件,并适当调整准备好的Raspberry Pi4的数量和IP地址。

[master]
node1 ansible_host=192.168.100.11 ansible_python_interpreter=/usr/bin/python3

[slave]
node2 ansible_host=192.168.100.12 ansible_python_interpreter=/usr/bin/python3
node3 ansible_host=192.168.100.13 ansible_python_interpreter=/usr/bin/python3
node4 ansible_host=192.168.100.14 ansible_python_interpreter=/usr/bin/python3

如果之前的设置都是正确的,以下命令应该在所有的Raspberry Pi 4上运行。

$ ansible all -m ping
node1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
...

$ ansible all -m command -a uptime
node1 | CHANGED | rc=0 >>
 15:54:04 up  4:08,  2 users,  load average: 0.50, 0.66, 0.55
...

请注意在 Makefile 中使用制表符进行缩进的方式。

K3S_URL = https://192.168.100.11:6443
K3S_TOKEN = K10735fb645c84e6eb1a5b3fa0a273439ef00a7b36bf95e7883fd034f8621faf313::server:b7078e87ce5a278527684026d20a3157

.PHONY: all references check-cmdline setup-cmdline disable-swapfile setup-k3s-master check-token setup-k3s-slave setup-roles

all:
    ansible-playbook site.yml

references:
    @echo https://qiita.com/Tsu_hao_Zhang/items/7d4f5d62bed584766881

check-cmdline:
    ansible all -m shell -a 'cat /boot/cmdline.txt'

setup-cmdline:
    ansible all -b -m replace -a "path=/boot/cmdline.txt regexp='^(.* rootwait)$$' replace='\1 cgroup_memory=1 cgroup_enable=memory cgroup_enable=cpuset'"

check-swapfile:
    ansible all -b -m command -a 'grep SwapTotal /proc/meminfo'

disable-swapfile:
    ansible all -b -m systemd -a "enabled=no state=stopped name=dphys-swapfile.service"

setup-k3s-master:
    ansible master -b -m shell -a "curl -sfL https://get.k3s.io | sh -"
    ansible master -b -m systemd -a "enabled=yes state=started name=k3s"

check-token:
    ansible master -b -m command -a "cat /var/lib/rancher/k3s/server/node-token"

setup-k3s-slave:
    ansible slave -b -m shell -a "curl -sfL https://get.k3s.io | K3S_URL=$(K3S_URL) K3S_TOKEN=$(K3S_TOKEN) sh -"
    ansible slave -b -m systemd -a "daemon_reload=yes"
    ansible slave -b -m systemd -a "enabled=yes state=started name=k3s-agent"

setup-roles:
    mkdir -p roles
    ansible-galaxy install YasuhiroABE.myfavorite-setting

第三步: 使用ansible安装K3S

我们将使用Makefile来执行命令。

$ make setup-roles
## ホスト名の変更や、パスワードによるsshログインの禁止+趣味な設定を追加
$ make all

## swapをoffにする  ## Ubuntu 20.04では最初からswapを使用していないため不要
$ make disable-swapfile
## swapの状況を確認する
$ make check-swapfile
## SwapTotal: 0 kB のようにSwapのサイズが0になっている事を確認

## マスター側でのk3sのインストール
$ make setup-k3s-master

## スレーブ側を設定する前にMakefileのK3S_URL, K3S_TOKENを設定する

在从属端安装K3S。

当成功完成到这一步时,我们将确认在主节点上使用的k3s令牌。

$ make check-token
ansible master -b -m command -a "cat /var/lib/rancher/k3s/server/node-token"
node1 | CHANGED | rc=0 >>
K10735fb645c84e6eb1a5b3fa0a273439ef00a7b36bf95e7883fd034f8621faf313::server:b7078e87ce5a278527684026d20a3157
    1. 把最底下的一行显示移到Makefile最前面,并将其设置为K3S_TOKEN。

 

    同样地,将Makefile最前面的K3S_URL IP地址改为主节点的IP地址。
$ make setup-k3s-slave

与所参考的步骤有所不同。

根据尝试的结果,已经删除了与最新安装程序兼容的部分以及认为不必要的部分。
仍然保留了使用ansible执行的部分的备忘录。

关于cgroups功能的内容

使用Raspbian Lite的映像,查看了/proc/cgroups的内容,结果如下。

$ ansible all -m command -a 'cat /proc/cgroups'
node1 | CHANGED | rc=0 >>
#subsys_name    hierarchy       num_cgroups     enabled
cpuset  6       22      1
cpu     5       50      1
cpuacct 5       50      1
blkio   2       50      1
memory  8       106     1
devices 7       50      1
freezer 9       22      1
net_cls 3       22      1
pids    4       55      1
...

如果想要修改/boot/cmdline.txt文件,可以考虑以下任务。

check-cmdline:
        ansible all -m shell -a 'cat /boot/cmdline.txt'

setup-cmdline:
        ansible all -b -m replace -a "path=/boot/cmdline.txt regexp='^(.* rootwait)$$' replace='\1 cgroup_memory=1 cgroup_enable=memory cgroup_enable=cpuset'"

有关systemd的配置

参考来源于运行K3S的文档(https://www.rancher.co.jp/docs/k3s/latest/en/running/),其中也提供了k3s.service单元的示例。但目前的安装程序在主节点上启用了k3s.service(指定了K3S_URL和K3S_TOKEN),在从节点上启用了k3s-agent.service。

不适合将TOKEN留在命令行参数中,因此根据当前情况,不提供类似于k3s-agent.service的配置示例文件。

关于向/etc/hosts添加所有节点信息的补充说明

在我的环境中,通过使用dnsmasq,我直接将DHCP客户端指定的主机名注册到DNS中。由于正向查找和反向查找均正常进行,所以我没有更新/etc/hosts文件。但是,如果需要,在必要时可以执行以下任务来更新所有节点的/etc/hosts。

check-hosts:
        ansible all -m shell -a 'cat /etc/hosts'

setup-hosts:
        ansible all -b -m lineinfile -a 'path=/etc/hosts regexp="^192\.168\.100\.11" line="192.168.100.11 node1"'
        ansible all -b -m lineinfile -a 'path=/etc/hosts regexp="^192\.168\.100\.12" line="192.168.100.12 node2"'
        ansible all -b -m lineinfile -a 'path=/etc/hosts regexp="^192\.168\.100\.13" line="192.168.100.13 node3"'
        ansible all -b -m lineinfile -a 'path=/etc/hosts regexp="^192\.168\.100\.14" line="192.168.100.14 node4"'

尝试使用Ubuntu 20.04 LTS上的64位k3s时的备忘录。

在此使用的图像是ubuntu-20.04-preinstalled-server-arm64+raspi.img。

    • 追加導入するパッケージ名の変更 (emacs25 → emacs)

 

    • swapは最初からoffだったので一部手順を削除

 

    • 時刻が不正確なことでTLS接続に失敗していたので、別途openntpdを導入

 

    cgroupsはmemoryのみdisabledになっていたため、Raspbianでは参考情報としていた作業を追加

将反映这些内容的内容存储在git的”ubuntu2004″分支中。

## 既にgit cloneしていれば、ここは不要で、単純にcdする
$ git clone https://github.com/YasuhiroABE/myansible-playground-raspi4k3s
$ cd myansible-playground-raspi4k3s

## ubuntu2004ブランチに移動
$ git checkout ubuntu2004

$ make setup-roles
## ホスト名の変更や、パスワードによるsshログインの禁止+趣味な設定を追加
$ make all

## swapの状況を確認する
$ make check-swapfile
## SwapTotal: 0 kB のようにSwapのサイズが0になっている事を確認

## cgroupsの設定を確認
$ make check-cgroups
## 表示された各行最後の数字が'1'(enabled)であることを確認する

## memoryが0である場合にはcmdline.txtを更新する
$ make setup-cmdline
$ make check-cmdline
## 各行の最後に"cgroup_memory=1 cgroup_enable=memory"が入っていることを確認する
## 最後に一度、全ノードを再起動する
$ ansible all -m command -b -a "shutdown -r now"

## 全ノードが再起動し、pingが成功することを確認する
$ ansible all -m ping
## 問題がなければ、マスター側でのk3sのインストール
$ make setup-k3s-master

## スレーブ側を設定する前にMakefileのK3S_URL, K3S_TOKENを設定する

## Makefileを修正後、他のノードにk3sを導入する
$ make setup-k3s-slave

最后

最近的BLM运动没有激发我的灵感,但是我反省地认为,“劳工”这个词比“奴隶”更适合用在Kubernetes中。

上面的内容

广告
将在 10 秒后关闭
bannerAds