使用树莓派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服务器。
大致的工作流程
我们正在考虑以下工作内容。
-
- 树莓派4的设置
-
- 在工作用电脑上准备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
-
- 把最底下的一行显示移到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中。
上面的内容