开箱即用的 Docker 环境:Rancher OS 安装记录

这是一篇我的向折腾日志git

最近为了搭建 K8s 集群,在 PVE 虚拟化平台基础上创建多个虚拟机实例做为 K8s 节点.github

为何是 Rancher OS

具体的介绍能够查看官网.docker

促使我使用 Rancher OS 有几个缘由:shell

  • Rancher OS 仅包含运行 Docker 所需的服务
  • 使用配置文件的形式安装到硬盘,包括但不限于:网络设置、Docker 配置、SSH 配置,对于做为程序猿的我来讲不用处处找去哪里配置 XXX 了 :)

从 ISO 镜像引导

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

  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@<实例地址>
相关文章
相关标签/搜索