暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CoreOS

原创 徐佩怡 2021-05-30
1311

CoreOS

CoreOS具有以下几点特性:

  1. Linux内核,Linux运行所需存在两个ROOT分区,一个被用作启动分区,一个被用作更新分区更新分区在更新完成后,自动重新启动系统,当前机器不需要从负载集群中移除,为了保证其它应用程序不被打断,会通过Linux cgroup限制更新过程中的磁盘、网络等IO使用。
  2. systemd,作为默认系统和服务管理器
  3. root分区被设计成只读,用以保证数据的一致性和更新可用
  4. CoreOS很明智使用Docker作为容器管理器用以构建、发布应用,从这个层面来看,一个应用其实就是一个容器。
  5. etcd组件负责服务发现和配置共享,采用Raft分布式一致性协议算法,承担起,组件之间服务通信使用。很自然的,容器(Container)之间应用、服务的伸缩,就显得很简单了。其基因层面支持集群特性,当然,你也可以解读为云环境的支持。

CoreOS 更新组

这里就引出一个实质性的问题:"我更新的到底是哪个版本?"
涉及到 CoreOS 的更新组内容,可以通过查看/etc/coreos/update.conf文件中的GROUP属性的值来得到

ecs-paasmysql sysbench # cat /etc/coreos/update.conf
GROUP=stable

这意味不管是自动更新还是手动更新,我的 CoreOS 的版本只更新迭代 stable 版本, 不会跑到 beta 或 alpha 版本去.
当然,如果你想要更换成别的版本,可以修改GROUP的值,然后执行命令systemctl daemon-reload重新加载下更新配置文件即可生效.

Coreos有三个最重要的工具,etcd,fleet和docker。下面我们分别介绍这三款工具。

Coreos有三个最重要的工具,etcd,fleet和docker

etcd
etcd是一个开源的分布式键值对存储工具。在每个coreos节点上面运行的etcd,共同组建了coreos集群的共享数据总线。etcd可以保证coreos集群的稳定,可靠。当集群网络出现动荡,或者当前master节点出现异常时,etcd可以优雅的进行master节点的选举工作,同时恢复集群中损失的数据。

分布在各个coreos节点中的app,都可以自由的访问到etcd中的数据。最常见的场景就是etcd存储cluster的metadata,cache setting, cluster logging, feature flags等。
截屏20210422 下午2.57.02.png

etcd有如下的功能:

  • 简单可靠,API丰富(支持http,jason)
  • 支持客户端通过SSL认证,保证安全性
  • 每个实例可以支持每秒1000次写操作
  • 基于RAFT协议完成分布式操作
  • 通过http轮询,监听网络变化

Fleet
Fleet是管理coreos和部署app的工具。

有了fleet,你就可以把整个coreos集群当做一台节点来处理。Fleet鼓励用户将应用都封装成轻量级的服务,这些服务很容易在集群中进行管理和部署。

devops team通过fleet,就可以集中精力来关注app应用,而不用关心基础环境如何,哪个container应该部署在哪台节点上。如果你的app需要5个container同时运行,fleet将保证这5个container在集群中同时运行。如果某台节点出现异常,或者需要重启更新,fleet也会将此台节点上面的container转移到其他节点上。

而这些都是automatic的! 运行和管理container就是这样so easy!
截屏20210422 下午2.59.49.png

Fleet的功能如下:

  • 在当前coreos集群中随机部署docker container
  • 在集群中跨主机进行服务分发
  • 负责维护集群中的服务实例,当服务实例异常时,重新进行任务调度来恢复服务
  • 发现集群中的各个节点
  • 自动SSH到其它节点来执行job
    截屏20210422 下午3.03.57.png

Docker
Docker是一个轻量级的虚拟化工具。使用Docker可以进行应用的快速部署。

点击这里了解Docker Docker学习总结之docker入门 - vikingss blog - 博客园](https://www.cnblogs.com/vikings-blog/p/3958091.html) 点击这里安装Docker [Docker学习总结之docker入门 - vikingss blog - 博客园
点击这里使用Docker Docker学习总结之docker入门 - vikings`s blog - 博客园

以上介绍了Coreos的主要工具,

如何使用coreos

因为支持coreos的平台很多,这里无法一一列出所有平台的安装方式,我们选取了应用最多的vagrant+coreos方案进行安装介绍,如果需要了解其他平台的安装方式,请参考https://coreos.com/
在进行安装和配置coreos之前,我们需要准备一台linux实体机,注意一定是实体机,因为使用vmware虚拟出的linux操作系统会和vagrant不兼容,造成失败。(这不难理解,毕竟真正的数据中心不可能在windows平台上面跑虚拟机…)

下面我们开始进行安装:
首先安装vagrant。推荐使用ubuntu 64bit。访问http://www.vagrantup.com/downloads.html下载deb安装文件。

1、安装vagrant后,git vagrantfile。
git clone https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant
2、修改config.rb和user-data。
config.rb文件:


# Size of the CoreOS cluster created by Vagrant
$num_instances=3
# Official CoreOS channel from which updates should be downloaded
$update_channel='stable'

user-data文件:
首先我们需要获取一个新的token:执行 curl  http://discovery.etcd.io/new,会得到一个类似https://discovery.etcd.io/5480377e1e51f25e11dd78f525ba1122的地址。把这个地址替换

user-data文件:
discovery: https://discovery.etcd.io/<token> 
替换为:
discovery:  https://discovery.etcd.io/5480377e1e51f25e11dd78f525ba1122

替换后的user-data文件应该是类似于:

coreos:
  etcd:
      # generate a new token for each unique cluster from https://discovery.etcd.io/new
      # WARNING: replace each time you 'vagrant destroy'
      discovery: https://discovery.etcd.io/5480377e1e51f25e11dd78f525ba1122
      addr: $public_ipv4:4001
      peer-addr: $public_ipv4:7001
  fleet:
      public-ip: $public_ipv4
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start

现在执行:vagrant up --provision
这时,vagrant就开始启动并且开始自动下载coreos最新版本。目前coreos版本迭代非常快,基本一周会有一个新版本。

注意:
在下载完成后,vagrant会自动进行镜像哈希值校验。有的ubuntu没有安装哈希计算工具,这个时候vagrant会报错,提示计算工具找不到,此时单独安装然后再次执行vagrant up --provision即可。

等看到启动完成后,coreos集群就已经启动完毕了。输入vagrant ssh core-01 — -A 就可以登录到coreos集群了,执行:fleetctl list-machines 就会看到所有三台节点。

应用

模拟在CoreOS中通过docker一个容器,容器的环境为centos,在centos上运行应用。
1.docker查找centos镜像

ecs-paasmysql ~ # docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6519                [OK]
ansible/centos7-ansible            Ansible on Centos7                              133                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   128                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   117                                     [OK]
centos/systemd                     systemd enabled base container.                 98                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
tutum/centos                       Simple CentOS docker image with SSH access      47
kinogmt/centos-ssh                 CentOS with SSH                                 29                                      [OK]
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   13
guyton/centos6                     From official centos6 container with full up…   10                                      [OK]
centos/tools                       Docker image that has systems administration…   7                                       [OK]
drecom/centos-ruby                 centos ruby                                     6                                       [OK]
pivotaldata/centos                 Base centos, freshened up a little with a Do…   5
mamohr/centos-java                 Oracle Java 8 Docker image based on Centos 7    3                                       [OK]
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   3
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   3
indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developmen…   2                                       [OK]
amd64/centos                       The official build of CentOS.                   2
miko2u/centos6                     CentOS6 日本語環境                                   2                                       [OK]
pivotaldata/centos6.8-dev          CentosOS 6.8 image for GPDB development         1
mcnaughton/centos-base             centos base image                               1                                       [OK]
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
pivotaldata/centos7-dev            CentosOS 7 image for GPDB development           0
smartentry/centos                  centos with smartentry                          0                                       [OK]

2.docker拉取centos镜像

ecs-paasmysql ~ #  docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest

3.docker测试centos安装:

ecs-paasmysql ~ # docker run -i -t centos echo "hello,CoreOS"
hello,CoreOS

4.docker进入centos系统

docker exec -it c444cfe9752e bash

参考文章

Coreos 安装及配置_shaofei63的专栏-CSDN博客

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论