这是一篇我的向折腾日志git
- 虚拟机环境:VMware Workstation 15 Pro
- Rancher OS v1.5.4
最近为了搭建 K8s 集群,在 PVE 虚拟化平台基础上创建多个虚拟机实例做为 K8s 节点.github
具体的介绍能够查看官网.docker
促使我使用 Rancher OS 有几个缘由:shell
Rancher OS 能够直接从 ISO 镜像引导,这种模式下会使用 rancher 帐号自动登陆控制台,可是所做的修改在重启后丢失.bootstrap
将镜像挂载到虚拟机的光驱,默认启动一路到控制台便可.ubuntu
对于不一样的虚拟机环境, Rancher OS 提供了不一样的预编译二进制镜像,注意区别.
Rancher OS 使用 cloud-init 来配置系统,例如你能够经过 sudo ros config set rancher.docker.registry_mirror "https://xxx"
来配置 Docker 的仓库镜像地址. 而它的文件形式是一个 yaml 文件,这个文件也能够被用来做为安装系统的配置文件.centos
首先须要准备一个模板:数组
# 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
文件并上传至虚拟机实例.网络
而后依次执行如下命令:ssh
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@<实例地址>