这是一篇个人向折腾日志
- 虚拟机环境:VMware Workstation 15 Pro
- Rancher OS v1.5.4
最近为了搭建 K8s 集群,在 PVE 虚拟化平台基础上建立多个虚拟机实例作为 K8s 节点.
为什么是 Rancher OS
具体的介绍可以查看官网.
促使我使用 Rancher OS 有几个原因:
- Rancher OS 仅包含运行 Docker 所需的服务
- 使用配置文件的形式安装到硬盘,包括但不限于:网络设置、Docker 配置、SSH 配置,对于作为程序猿的我来说不用到处找去哪里配置 XXX 了 :)
从 ISO 镜像引导
Rancher OS 可以直接从 ISO 镜像引导,这种模式下会使用 rancher 账号自动登录控制台,但是所作的修改在重启后丢失.
将镜像挂载到虚拟机的光驱,默认启动一路到控制台即可.
对于不同的虚拟机环境,Rancher OS 提供了不同的预编译二进制镜像,注意区别.
安装到硬盘
Rancher OS 使用 cloud-init 来配置系统,例如你可以通过 sudo ros config set rancher.docker.registry_mirror "https://xxx"
来配置 Docker 的仓库镜像地址. 而它的文件形式是一个 yaml 文件,这个文件也可以被用来作为安装系统的配置文件.
首先需要准备一个模板:
# cloud-config
# 全部配置查看官方文档: https://rancher.com/docs/os/v1.x/en/
ssh_authorized_keys:
# - ssh-rsa AAA...ZZZ example1@rancher
# - ssh-rsa BBB...ZZZ example2@rancher
- <SSH 公钥内容>
rancher:
# SSHD Port and IP
# ssh:
# port: 10022
# listen_address: 172.22.100.100
# 设置主机名(特别是作为集群节点,主机名不能一样.
# hostname: myhost
# 切换系统的控制台,控制台与一些持久化选项有关,具体可以翻阅文档,可用的控制台有 default, alpine, centos, debian, fedora, ubuntu
console: ubuntu
# 设置 Docker 的仓库镜像地址,这里设置了整个系统全部 Docker 都使用镜像加速
bootstrap_docker:
registry_mirror: "http://f1361db2.m.daocloud.io"
docker:
registry_mirror: "http://f1361db2.m.daocloud.io"
system_docker:
registry_mirror: "http://f1361db2.m.daocloud.io"
# 配置网卡,此例子就不配置了.
network:
# interfaces:
# eth0:
# address: 172.168.1.100/24
# gateway: 172.68.1.1
# mtu: 1500
# dhcp: false
# 配置 DNS
dns:
nameservers:
- 223.5.5.5
- 223.6.6.6
填写好 SSH 公钥等内容后,保存为 cloud-init.yaml
文件并上传至虚拟机实例.
然后依次执行以下命令:
-
sudo ros config validate -i cloud-init.yaml
这个命令只是检查语法是否正确,它并不检查配置项是否合法.
使用命令设置 DNS 时可以使用
sudo ros config set rancher.network.dns.nameservers "['<DNS Server>']"
然而文件中并不能使用这种格式而是需要按照 yaml 的数组格式来写,如果文件中使用"['<DNS Server>']"
这种写法此命令却并不会报错; -
sudo ros config merge -i cloud-init.yaml
这个命令将配置文件的内容合并到当前系统的配置,此时才会检查到前面说的配置项不合法的问题; sudo ros install -c cloud-init.yaml -d <用于安装系统的硬盘>
扩展:值得一提的是
sudo ros install
命令支持 URL 形式传递cloud-init.yaml
文件,这意味着,可以写个简单的 WEB 程序,用于统一分配管理集群中节点使用的 IP 地址、统一使用堡垒机上的 SSH 公钥或是统一配置内部 DNS 等等.例如:
sudo ros install -c http://xxx/cloud-init?type=new -d <device>
然后系统分配一个未被使用的 IP 地址并生成
cloud-init.yaml
内容用于安装.注意:
安装程序会先后询问 是否继续安装、是否重启,在 是否重启 时记得将镜像文件从虚拟机的光驱中移除,然后再重启.
重启后 Rancher OS 将不再自动登录 rancher 账号,此时唯一能登录系统的办法就是使用 cloud-init.yaml
中配置的 SSH 公钥对应的密钥进行登录.
ssh -i <密钥文件> rancher@<实例地址>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。