本文所遵照的步骤是官网的 Installing to disk 方法,即刻录ISO镜像 -> 启动Coreos Live CD -> 安装到硬盘的步骤,与一般的桌面Linux 安装非常类似。但coreos安装时也有一些需要注意的地方:

  1. cloud-config.yml

    这是coreos用来统一配置系统的地方,系统在每次启动时都会加载这个文件的配置,比 如系统服务、网络设定、文件修改、用户设定等。这样做的好处是在部署集群的时候可 以方便地使用相同的配置。在安装coreos时,需要指定好这个配置文件。实际操作时, 可以提前将这个文件写好放在别的机器上,然后用scp / wget (利用下面的web server) 下载到coreos的Live CD即可,或者直接存在Live CD里更方便。

  2. GFW

    coreos安装时需要从官网下载镜像,但网站被墙,所以实际安装的时候可能需要用代理来解决,缺点是速度慢。更方便的方法是提前下载好需要的文件并放在局域网内并搭建一个web server,然后修改安装脚本的server即可。具体方法在后面详述。

刻录ISO镜像

  1. 下载ISO : Go to Download Page
  2. 刻录 : U盘的话在linux上直接用 dd 命令即可。

安装

网络配置

因为安装过程中需要联网,所以需要配置Live CD 内部的 coreos 系统的网络。coreos 使用 systemd 来管理系统服务,所以写一个unit file 并启动即可。

/etc/systemd/network 目录下创建 static.network文件,示例内容如下:

[Match]
Name=eno1

[Network]
DNS=114.114.114.114
Address=192.168.200.12/24
Gateway=192.168.200.11

Name为网卡名,Address为静态IP地址,依自己情况设置即可。

执行如下命令生效:

sudo systemctl restart systemd-networkd

cloud-config

一个基本的cloud-config.yml示例文件如下:

#cloud-config

hostname: coreos-12    
manage_etc_hosts: localhost

coreos:
  etcd:
    discovery: https://discovery.etcd.io/<your-own-uuid>
    addr: 192.168.200.12:4001
    peer-addr: 192.168.200.12:7001
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
    -  name: 00-eno1.network
      runtime: true
      content: |
        [Match]
        Name=eno1

        [Network]
        DNS=114.114.114.114
        Address=192.168.200.12/24
        Gateway=192.168.200.11
users:
  - name: core
    ssh-authorized-keys:
     - ssh-rsa     ...
  - groups:
     - sudo
     - docker

配置文件的语法很简单,很多部分都可以见名知意,具体文件格式定义请参见:Using Cloud-Config 如果配置中有错误,如果不影响启动,会在启动完成后显示错误信息。官方文档中提示 coreos-cloudinit -validate 命令可以用来检查此配置文件中是否有语法错误,但是在 实际安装的时候发现并没有这个参数(V0.10.9),还好官网提供一个在线的检测页面可供检 查 : Cloud-Config Validator

此文件中有几个点应注意 :

  1. #cloud-config 为必备部分
  2. 如果没有添加 manage_etc_hosts选项,在 /etc/hosts 文件中将不会有 localhost的记录
  3. 如果只是部署单机环境, etcd 中的 discovery 字段可以先省略,此字段是用来做 服务发现的(供多个etcd通信).具体请参见CoreOS Cluster Discovery
  4. units部分的设置会转换为相应的systemd unit. etcd,fleet 等都是已定义好的, 配置为开机启动即可。fleetsystemd提供了在集群内部调度systemd unit的能 力。
  5. users部分的ssh-authorized-keys是用来设置需要登入这台coreos的key的,可为多个。 因为Coreos安装默认是coreroot两个用户,都没有密码,只能通过远程ssh 登陆 来操作。选择好以后将用来登陆coreos的机器之后,将其ssh key粘贴到这即可,可添加 多台机器的 key.如果需要,也可以生成为core用户生成密码,但没多大必要,具体可参 见相关文档。
  6. 安装完成之后, cloud-config.yml的内容会保存在 /var/lib/coreos-install/user_data文件中,后续机器重启均会加载此文件。后续的 更改也应该在这里进行。

内网环境

之前提过因为墙的原因很难下到安装时所需的镜像。下面介绍内网部署的方法:

  1. 下载安装脚本 : https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install, 添加可执行权限。
  2. 查看 BASE_URL 变量所指向的地址,如下所示 :

     BASE_URL="http://${CHANNEL_ID}.release.core-os.net/amd64-usr/${VERSION_ID}"
    

    其中CHANNEL_ID是在下载ISO的时候就选择好的,一般都是stable,VERSION_ID为LIVE CD 的版本号,在 /etc/os-release中。

  3. 在上面的地址中下载如下文件 :
    1. coreos_production_image.bin.bz2
    2. coreos_production_image.bin.bz2.DIGESTS
    3. coreos_production_image.bin.bz2.DIGESTS.asc
    4. coreos_production_image.bin.bz2.DIGESTS.sig
    5. coreos_production_image.bin.bz2.sig

    这个看自己能力了。如果实在下不下来,可以到百度网盘里搜一下,应该已经有人在里面存有。

  4. 在另外一台机器上部署web server,不嫌麻烦的可以用 apache,更简单的方法如下 : 在文件所在的目录下执行 :

     python -m SimpleHTTPSever
    

    默认监听端口为 8000.

  5. 修改 coreos-install 文件中的 BASE_URL 变量,改为自己的目录位置即可。

最终安装

安装命令就一个 :

coreos-install -d /dev/sda -C stable -c ~/cloud-config.yaml

注意点 :

  1. /dev/sda 为所要安装到的硬盘。安装有可能会出现 “Device Or Resource Busy “之类 的问题,一般重启下机器即可。

  2. 安装之后如果发现有问题并且进不去系统,比如网络故障,可以用 Live CD 来修复,将有 问题的系统挂在到Live CD上修改user_data即可。 命令如下 :

     mount -o subvol=root /dev/sda9 /mnt/