CoreOS集群管理

CoreOS提供了分布式管理系统fleet,配合分布式Key-Value存储etcd构建集群,可在整个集群内批量部署/管理服务。

CoreOS集群的机制简单来说就是集群中每个节点上启动的fleet daemon将本地系统信息存储在etcd集群,之后任一节点上的fleet daemon就能从etcd集群内获取到全部节点的信息。

构建集群示例

  • 系统环境: CoreOS Stable 最新版本
  • 配置模式: cloud-config
  • 系统用户: core
  • 主机1: hostname=coreos001, ipaddr=192.168.0.1
  • 主机2: hostname=coreos002, ipaddr=192.168.0.2
  • 主机3: hostname=coreos003, ipaddr=192.168.0.3
  • 系统用户登录主机,依次在每台主机上创建文件cloud-config.yml,内容如下 (将变量替换为对应值)

    1. #cloud-config
    2. coreos:
    3. etcd2:
    4. name: <hostname>
    5. data-dir: /var/lib/etcd2
    6. listen-peer-urls: http://0.0.0.0:2380
    7. listen-client-urls: http://0.0.0.0:2379
    8. initial-advertise-peer-urls: http://<ipaddr>:2380
    9. advertise-client-urls: http://<ipaddr>:2379
    10. initial-cluster: coreos-001=http://192.168.0.1:2380,coreos-002=http://192.168.0.2:2380,coreos-003=http://192.168.0.3:2380
    11. fleet:
    12. etcd_servers: http://localhost:2379
    13. units:
    14. - name: etcd2.service
    15. command: start
    16. - name: fleet.service
    17. command: start
  • 在主机上依次执行以下指令使配置生效

    1. $ sudo coreos-cloudinit -from-file=cloud-config.yml
  • 检查etcd存储状态,fleet需要与etcd通讯,将集群信息存储到etcd,在任一主机上执行以下命令验证

    1. $ etcdctl member list
    2. 304287bb6c7ae05e: name=coreos-001 peerURLs=http://192.168.0.1:2380 clientURLs=http://192.168.0.1:2379
    3. 520a72d23b13c39f: name=coreos-002 peerURLs=http://192.168.0.2:2380 clientURLs=http://192.168.0.2:2379
    4. ca50541499b08632: name=coreos-003 peerURLs=http://192.168.0.3:2380 clientURLs=http://192.168.0.3:2379
    5. # curl -L http://127.0.0.1:2379/health
    6. {"health": "true"}
  • 查询coreos集群状态信息,在任一主机上执行以下命令验证

    1. $ fleetctl list-machines -l
    2. MACHINE IP METADATA
    3. 23f81afecc6b4a7597c77776cf66a387 192.168.0.3 -
    4. 87c716357024495eabb713c2954031bb 192.168.0.1 -
    5. df515c3682aa43b4ae2b7d2168e17d38 192.168.0.2 -

fleet API v1简单用例 (可选)

  • fleet API的TCP Socket默认关闭,需要配置服务参数开启
  • 可在任一/多台主机上启用fleet API TCP Socket
  • 基于CoreOS官方推荐的模式开启fleet API v1的TCP Socket

    1. $ sudo mkdir /etc/systemd/system/fleet.socket.d
    2. $ sudo echo -e "[Socket]\nListenStream=0.0.0.0:3030" > /etc/systemd/system/fleet.socket.d/30-ListenStream.conf
    3. $ sudo systemctl stop fleet.service
    4. $ sudo systemctl restart fleet.socket
    5. $ sudo systemctl start fleet.service
  • 在开启TCP Socket的主机上访问fleet API v1

    1. $ curl -L http://127.0.0.1:3030/fleet/v1/machines