Container/Docker 是輕量級的虛擬化技術,而 CoreOS 是針對 Container/Docker 基於 Linux 內核所開發出來的輕量級作業系統,他提供了 Docker 所需要的基礎功能並可在叢集環境下運作.
CoreOS 的下載點位於 https://coreos.com/os/docs/latest/booting-with-iso.html
剛剛連結提供的是 X86_64 ISO 的安裝光碟其他 ARM 版本或是直接部署的 Vmware OVF檔案都可以在這邊找到 https://stable.release.core-os.net/index.html
前面有介紹不使用設定檔來安裝 CoreOS – https://benjr.tw/95959
但絕大多是的情況下都是搭配著設定檔來安裝 CoreOS,設定檔如下:
#cloud-config hostname: coreos1 ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5wZYPD/mBs+9O9CrUxdg9kpOus24VrMuNncdt4BRc4iF5npV90HYe5j/y3IG6+2MRbAb2edyf/FUcaJHN/V+i123456yuqyAT2rv9T0eB2+wpmYCUQzqZscJP2uLK8jMhezKWS0l7X5CgJf+d17VooS6CADR9MyTbku3upKp5yEnsCfB+pBLGdrqCUTnGHPfJcLTBIvuMriz/kae0azxcderfbw7YWR8oKdWjKYKlznnBmH6VYFcgv/jSXbRbdZjKNSXIm2xIj6TIIJmo6sWhptcGohi467ODyrzCDioXD1MsYx6ImTMcY5mzL2RDePAW7CM4gWIMaIxDeL5e10SX ben@appledeAir coreos: units: - name: etcd2.service command: start - name: fleet.service command: start - name: systemd-networkd.service command: stop - name: 00-eth0.network runtime: true content: | [Match] Name=ens32 [Network] Address=172.16.15.21/24 Gateway=172.16.15.2 DNS=168.95.1.1 - name: systemd-networkd.service command: start - name: flanneld.service drop-ins: - name: 50-network-config.conf content: | [Service] ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{"Network":"10.1.0.0/16", "Backend": {"Type": "vxlan"}}' command: start etcd2: name: "node01" discovery: https://discovery.etcd.io/9dd875ca6dd759d67445a681adde3875 advertise-client-urls: http://172.16.15.21:2379 initial-advertise-peer-urls: http://172.16.15.21:2380 listen-client-urls: http://0.0.0.0:2379 listen-peer-urls: http://172.16.15.21:2380
上面的設定檔 ssh-rsa 與 discovery 這兩個部分你無法直接複製當作你的設定檔來使用,需要自行設定
- ssh-rsa – https://benjr.tw/96318
- discovery – https://benjr.tw/96404
設定檔很容易編寫錯誤,建議可以透過官方網站 https://coreos.com/validate/ 來檢查是否正確.
或是直接在 CoreOS 上面透過指令直接檢視設定檔是否有錯誤.下面的設定檔有輸入錯誤.
core@coreos1 ~ $ coreos-cloudinit -validate --from-file ~/cloud-config.yaml 2017/01/20 15:06:56 Checking availability of "local-file" 2017/01/20 15:06:56 Fetching user-data from datasource of type "local-file" 2017/01/20 15:06:56 line 23: error: mapping values are not allowed in this context 2017/01/20 15:06:56 line 0: warning: incorrect type for "" (want struct)
更正後就檢查無誤了.
core@coreos1 ~ $ coreos-cloudinit -validate --from-file ~/cloud-config.yaml 2017/01/20 15:08:26 Checking availability of "local-file" 2017/01/20 15:08:26 Fetching user-data from datasource of type "local-file"
CoreOS 光碟開機後就進入文字模式,直接透過指令 #coreos-install 來安裝.需要透過 -c 來指定 cloud-init config .
core@localhost ~ $ sudo coreos-install -d /dev/sda -C stable -c ~/cloud-config.yaml 2016/12/21 09:41:12 Checking availability of "local-file" 2016/12/21 09:41:12 Fetching user-data from datasource of type "local-file" Downloading the signature for https://stable.release.core-os.net/amd64-usr/1185.3.0/coreos_production_image.bin.bz2... 2016-12-21 09:41:14 URL:https://stable.release.core-os.net/amd64-usr/1185.3.0/coreos_production_image.bin.bz2.sig [543/543] -> "/tmp/coreos-install.fmCj9mKD5k/coreos_production_image.bin.bz2.sig" [1] Downloading, writing and verifying coreos_production_image.bin.bz2... ... Success! CoreOS stable 1185.3.0 is installed on /dev/sda core@localhost ~ $ sudo reboot
其他可以使用的參數:
-d ( DEVICE ) – Install CoreOS to the given device.
-V ( VERSION ) – Version to install (e.g. current)
-C ( CHANNEL ) – Release channel to use (e.g. beta)
-o ( OEM ) – OEM type to install (e.g. openstack)
-c ( CLOUD ) – Insert a cloud-init config to be executed on boot.
-i ( IGNITION ) – Insert an Ignition config to be executed on boot.
-t ( TMPDIR ) – Temporary location with enough space to download images.
-v – Super verbose, for debugging.
-b ( BASEURL ) – URL to the image mirror.
安裝完成之後的設定檔位於.
core@coreos1 ~ $ sudo cat /var/lib/coreos-install/user_data
至於這些設定檔個代表什麼意思呢!下面一一來介紹.
- 關於 Hostname 設定檔的使用 – https://benjr.tw/96518
- 關於 ssh_authorized_keys 設定檔的使用 – https://benjr.tw/96318
- 關於 units 設定與使用方式 – https://benjr.tw/96332
- 關於 Network 設定與使用方式 – https://benjr.tw/96370
-
ETCD2 (Service Discovery)
etcd 是一種分散式的 key/value 儲存方式 (至少要有三個 node ,會把資料複製三份到個別的 node 作儲存,以確保資料的可靠度),不同於傳統的關聯式資料庫系統 (傳統的關聯式資料庫基本上就是一堆 tables),etc2 採用的是 key / value Stores 儲存,資料就只有 key / value Stores 採用 雜湊表 (Hash table) 是根據鍵 (Key) 來查詢 (noSQL 的方式) 存儲的資料結構.
- 關於 etcd2 設定與使用方式 – https://benjr.tw/96404
- 新增移除 etcd2 Node – https://benjr.tw/96449
- etcd2 Cluster 的災難復原 – https://benjr.tw/96497
- etcd2 Cluster 的容錯能力 – https://benjr.tw/96688
-
Container , Docker
Container 與 Docker 設定與使用方式 – https://benjr.tw/96566
-
Fleet (Cluster Management)
Container 他是輕量級的虛擬化軟體,透過資源共享的方式,可以快速建立出一個獨立空間 (虛擬環境,有自己的 file system, process 與 block I/O ,network 空間) 給另外一個作業系統來使用,透過 Docker 的基本三元素. 容器 (Container) , 映像檔 (Image) , 倉庫 (Repository) .讓我們更方便管理 Container 的環境,但是要能做到 方便大量,分散式的 部署與管理,這時候就要透過 Fleet 來協助.
關於 fleet 設定與使用方式 – https://benjr.tw/96502
-
Flannel
Container 網路要對外時需要設定 port-mapping 或是將網路設定成不同的模式,這時可以使用 flannel (SDN : Software Define Network) 來讓不同的 Host (CoreOS) 的 Container 之間透過虛擬網路來溝通.
關於 Flannel 設定與使用方式 – https://benjr.tw/96562
8 thoughts on “CoreOS 設定檔”