開箱即用的 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@<實例地址>
相關文章
相關標籤/搜索