1

这是一篇个人向折腾日志

最近为了搭建 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 文件并上传至虚拟机实例.

然后依次执行以下命令:

  1. sudo ros config validate -i cloud-init.yaml

    这个命令只是检查语法是否正确,它并不检查配置项是否合法.
    使用命令设置 DNS 时可以使用
    sudo ros config set rancher.network.dns.nameservers "['<DNS Server>']"
    然而文件中并不能使用这种格式而是需要按照 yaml 的数组格式来写,如果文件中使用 "['<DNS Server>']" 这种写法此命令却并不会报错;
  2. sudo ros config merge -i cloud-init.yaml
    这个命令将配置文件的内容合并到当前系统的配置,此时才会检查到前面说的配置项不合法的问题;
  3. 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@<实例地址>

krun
6.9k 声望11.3k 粉丝