最近看到一个使用 terraform 部署的 k8s 发行版 poseidon/typhon
一开始看 terraform 脚本的时候,虽然看到了 kubelet.service 的配置,但是没找到在什么时候启动的服务。后来才注意到 Ignition 定义里面被忽略掉的 kubelet.path。
整体的流程大概就是:
- 利用 poseidon/terraform-render-bootstrap 来初始化相关的 TLS 证书和 YAML 配置文件
- 将配置文件拷贝到各节点 /etc/kubernetes 下
- systemd.path 监控到路径的变化,然后 bootstrap 集群
systemd.path 是利用了 inotify 机制,监控文件或者路径的变化后启动对应的服务。更多内容可以参考 man page
需要注意的是,systemd.path 可能会丢失事件,参考: