zoukankan      html  css  js  c++  java
  • Docker+etcd+flanneld+kubernets 构建容器编排系统(1)

      Docker: Docker Engine, 一个client-server 结构的应用, 包含Docker daemon,一个 用来和daemon 交互的REST API, 一个命令行应用CLI。 Docker Engine 在命令行中接收并解析、执行docker  命令; 

      etcd:    是 CoreOS 团队发起的一个管理配置信息和服务发现(service discovery)的项目; 

         可以参考: http://www.dockerinfo.net/etcd%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D

      flannel: Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

         可以参考: http://dockone.io/article/618

      kubernets: Kubernetes是一个基于Docker容器的开源编制系统,它能在跨多个主机上管理Docker应用,并提供应用程序部署 维护和扩展的基本机制; 

           可以参考: https://www.kubernetes.org.cn/k8s

    当它们结合在透明地为用户提供原生态系统,如“需要5个 Nginx服务器和1个 MySQL服务器运行". Kubernetes具有自我修复机制,如重新启动 重新启动定时计划 复制容器以确保恢复状态,用户只需要定义状态,那么 Kubernetes就会确保状态总是在集群中。

      Docker定义了运行代码时的容器,有命令用来启动 停止 重启 链接容器,Kubernetes使用Docker打包以及实例化应用程序。

      一个典型的应用程序必须跨多个主机。 例如,您的web层(Apache )可能运行在一个容器。 同样地,应用程序层将会运行在另外一组不同的容器中。 web层需要将请求委托给应用程序层。 当然,在某些情况下,你可能将web服务器和应用服务器打包在一起放在相同的容器。 但是数据库层通常运行在一个单独层中。 这些容器之间需要相互交互。 使用上面的任何解决方案都需要编制脚本启动容器,以及监控容器,因防止出现问题。 而Kubernetes在应用程序状态被定义后将为用户实现所有这些工作。

      给大家推荐一个大神博客: http://www.cnblogs.com/kevingrace/p/5575666.html 以下内容kubernets 参考自这篇文章;

    ectd 部署:

    可以部署单节点,同时也支持集群,下面我们采用集群方式,(单机部署自己可以玩一下);

    1. 下载安装包(服务器采用的是亚马逊服务器,需要翻墙)

      官方下载地址: https://github.com/coreos/etcd/releases/

      wget  https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz

    2. 解压文件,并将可执行文件添加到系统路径中

      tar xvf etcd-v3.2.18-linux-amd64.tar.gz -C /usr/local

      cd /usr/local/etcd-v3.2.18-linux-amd64

      cp etcd* /usr/local/bin

    3. 将etcd 服务注册为系统单元,使用systemctl 管理

    vim /usr/lib/systemd/system/etcd.service

     [Unit]
     Description=etcd
     [Service]
     Environment=ETCD_NAME=infra0
     Environment=ETCD_DATA_DIR=/var/lib/etcd
     Environment=ETCD_INITIAL_ADVERTISE_PEER_URLS=http://192.168.209.160:2380
     Environment=ETCD_LISTEN_PEER_URLS=http://192.168.209.160:2380
     Environment=ETCD_LISTEN_CLIENT_URLS=http://192.168.209.160:2379,http://127.0.0.1:2379
     Environment=ETCD_ADVERTISE_CLIENT_URLS=http://192.168.209.160:2379
     Environment=ETCD_INITIAL_CLUSTER_STATE new
     Environment=ETCD_INITIAL_CLUSTER_TOKEN=Kubernetes
     Environment=ETCD_INITIAL_CLUSTER=infra0=http://192.168.209.160:2380,infra1=http://192.168.209.140:2380,infra2=http://192.168.209.158:2380
     ExecStart=/usr/local/bin/etcd
     [Install]
     WantedBy=multi-user.target

    解释:

    ETCD_NAME: etcd 服务的名字,不等同于主机名

    ETCD_INITIAL_ADVERTISE_PEER_URLS: 通知其它Etcd 实例的地址;

    ETCD_LISTEN_PEER_URLS: 监听其它Etcd 实例的地址;

    ETCD_LISTEN_CLIENT_URLS: 监听客户端地址,此地方必须监听127.0.0.1地址 # 

    ETCD_ADVERTISE_CLIENT_URLS: 通知客户端地址;

    ETCD_INITIAL_CLUSTER_STATE: 初始化群集的状态new 代表新建 

    ETCD_INITIAL_CLUSTER_TOKEN: 初始化集群的token 

    #以上几项地址填写本节点的实际地址

    ETCD_INITIAL_CLUSTER: 初始化集群节点的地址

    4.将配置发送到其它节点上

      scp /usr/lib/systemd/system/etcd.service 192.168.209.160:/usr/lib/systemd/system/

      scp /usr/lib/systemd/system/etcd.service 192.168.209.158:/usr/lib/systemd/system/  

    5. 启动各个节点的etcd 服务 

      systemctl daemon-reload; systemctl start etcd 

    6. 查看etcd 节点的信息(正常情况下每个节点都可以查看)

      etcdctl member list 

    7. 测试验证集群是否正常(任意节点均可操作查看)

    8. 设置Flannel 子网信息

    etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16","SubnetMin":"172.17.1.0","SubnetMax":"172.17.254.0"}'

    至此Etcd 集群搭建完毕

    Flannel 部署

    1. 下载安装包(同样需要翻墙)

      wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz

    2. 解压文件,并将可执行文件添加到系统路径中 

      tar xvf flannel-0.5.5-linux-amd64.tar.gz -C /usr/local/
      cd /usr/local/
      cp flanneld mk-docker-opts.sh /usr/local/bin/

    3. 将flannel  服务注册为系统单元,使用systemctl 管理

    vim /usr/lib/systemd/system/flanneld.service
    [Unit]
    Description=flannel
    [Service]
    ExecStart=/usr/local/bin/flanneld -etcd-endpoints=http://192.168.209.160:2379                       # 这个地址为etcd 的领导地址(etcdctl member list 可以查看到)
    [Install]
    WantedBy=multi-user.target

    4. 需要部署docker 节点都需要安装 

      将同样配置即可

    5. 启动flannled 

      systemctl daemon-reload ; systemctl start flanneld 

    6. 启动后系统将会增加一块名字为flannel0 的网卡

      

    4. 查看etcd 可以看到flanneld 申请的记录(记录为对应节点的IP) 

    [root@localhost lib]# etcdctl ls /coreos.com/network/subnets
    /coreos.com/network/subnets/172.17.99.0-24
    /coreos.com/network/subnets/172.17.80.0-24
    /coreos.com/network/subnets/172.17.16.0-24

    5. 生成修改Docker 的启动参数(每个flanneld 申请不一样)

      要想使 docker 使用flannel 的网络传递数据,要修改一些启动参数

      mk-docker-opts.sh -i         # 生成的文件在/run/docker_opts.env 

    [root@localhost local]# cat /run/docker_opts.env
    DOCKER_OPT_BIP="--bip=172.17.16.1/24"
    DOCKER_OPT_IPMASQ="--ip-masq=true"
    DOCKER_OPT_MTU="--mtu=1472"

    6. 安装docker 

      yum -y install docker 即可

    7. 更改docker 启动参数,如果不更改docker 将会使用自己分配的地址段

      vim /etc/sysconfig/docker 

      OPTIONS='--bip=172.17.99.1/24 --ip-masq=true --mtu=1472 --selinux-enabled --log-driver=journald --signature-verification=false'

    8. 启动docker, docker 网卡将会和flannel0 同属于一个网段

      

    9. 验证:

       使用两个docker 节点,创建两个容器,两个容器间能够直接通讯 

    注: 

      本人也在学习docker 中,从最初的etcd 到flannel 也是不断找资料,踩了不少坑,在不断踩坑中,学习了不少东西,个人感觉最主要的是个人学习能力与实际动手操作能力,希望个人经验能够帮助到你

    kubernets 将在下篇文章中介绍;

  • 相关阅读:
    Codeforces Round #650 (Div. 3)
    C. Count Triangles
    A National Pandemic (思维 + 树链剖分模版)
    扫描线专题
    扫描线模版
    莫队模版
    JS设计模式 -- 4种创建型模式
    滑动窗口的最大值 -- 单调队列
    JS链表实现栈和队列
    js数组扁平化的几种实现方式
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/8725509.html
Copyright © 2011-2022 走看看