虚拟化 频道

有Docker在手,做一名IT刀客何难之有?

PC时代我们拼什么?

当然是CPU主频高低和内存大小。

云计算时代我们拼什么?

当然是虚拟化技术哪方强。

虚拟化通过硬件模拟或操作系统实现,

而技术的迭代往往要面临

新旧技术大斗法的局面,

近年来又出现了一个新玩家,

前方高能预警!

因为容器虚拟化要不动声色地攻略你了。

Docker容器·科普向

简单来说,我们可以把Docker容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,并且每个容器之间还可以建立通信机制。容器的创建和停止都十分快速,容器自身对资源的需求也十分有限,远远低于虚拟机。

Docker在手,做一名IT刀客何难之有?

Docker容器概念图

举个例子,假设用户使用Linux+Apache+MySql组合来运维一个网站,按照传统的做法,需要先安装Linux,然后是Apache,再然后是MySql,还要对它们进行配置,以及验证是否工作正常,如果应用再变多,事情将会变得更加难以处理。服务器一旦迁移(从一个云到另一个云),极大可能需要重新部署和调试。

而容器提供更快捷方便的方式,通过容器来打包应用,迁移的话只需要在新的服务器启动需要的容器即可,不仅节省了时间,还提高了效率。

Docker入门三大组件: 镜像、容器、仓库的概念。

Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,保护了文件系统。

一个镜像可以只包含一个完整的Linux操作系统环境,可以把它称为一个Linux系统镜像。镜像也可以安装某一个应用程序,可以把它称为某一个应用镜像。

使用者可以从网上下载一个已经做好的应用镜像,通过简单的命令就可以直接使用。

Docker Container

容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

镜像自身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

Docker 仓库

Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。

目前,最大的公开仓库是Docker Hub:https://hub.docker.com/ 。网站上存放了数量庞大的镜像供用户下载。

Docker在手,做一名IT刀客何难之有?

    我为Docker打call的四个理由


    从上面我们已经大概了解到了Docker的好处,下面小编为大家详细讲述我为何要替Docker疯狂打call的四大理由。

    更快速的交付和部署。利用容器技术,开发人员可以使用镜像来快速构建一套标准的开发环境;然后可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。

    更高效的利用资源。容器是轻量级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,一些云厂商CPU过卖比可以达到1:25,而虚拟化通常只有1:4或1:8。

    更轻松的迁移和扩展。容器可以几乎在任意平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等。

    更简单的更新管理。使用Dockerfile, 只需小小的配置修改,就可以替代以往大量的更新工作。

    虚拟机与容器:没有对比就没有伤害

    下面小编为大家整理了传统虚拟化方式和Docker各自的特性,通过一系列的对比,小编唯有感叹:没有对比就没有伤害!

Docker在手,做一名IT刀客何难之有?

    经过上图的对比我们发现,相比于传统化虚拟方式,Docker要简洁得多。因为Docker Daemon(守护进程)取代了虚拟机管理程序,可以直接与主操作系统进行通信,为各个Docker容器分配资源,也因为没有众多操作系统。因此,Docker还可以节省大量的磁盘空间以及其他系统资源。另外,虚拟机启动需要数分钟,而Docker容器可以达到秒级启动,相比只能支持几十个容器的虚拟机,Docker单机可以支持上千个容器等。

    科普完以上内容,我们对Docker的概念及应用也有了初步的认知。是的,Docker很好用,但Docker背后的容器集群如何管理?这就是接下来我们要说的另一个“秘密”了。

    基于Kubernetes的容器管理

    Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:

    使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。

    以集群的方式运行、管理跨机器的容器。

    解决Docker跨机器容器之间的通讯问题。

    Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。

    当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。

    但在网络组件上Kubernate需要借助第三方插件进行管理,比如calico、flanel等,但这些插件大多都借助VXlan技术,而且网络管理策略少,QOS也很难实现,举个简单的例子:

    如果某个分公司要作为一个容器组(namespace),在这个公司内部要对应用进行隔离。比如SqlServer不能同时被多个部门访问,这个细化的网络隔离第三方插件是很难做到的(第三方插件一般以主机为单位)。借助Dell SDN软件定义网络解决方案,可以很轻松的解决这个问题。

Docker在手,做一名IT刀客何难之有?

    Dell软件定义网络(Bigswitch)

    Kubernetes安装说明

    Dell软件定义网络(Bigswitch)Kubernetes安装的主要流程如下:

    -Step0:在所有节点上安装CentOS 7.2;

    -Step1:在所有节点上安装IVS;

    -Step2:安装 BCF CNI插件;

    -Step3:安装 Kubernetes;

    -Step1:安装IVS

    1.手动在BCF上设置一个租户及网段,以便进行容器集群的配置。

    tenant ContainerMgmtTenant

    segment ContainerMgmtSegment

    member switch any interface node-port vlan untagged

    2.在所有节点上安装配置IVS。

    a. 根据BCF的版本选择适宜版本的IVS,在所有节点上安装。

    b. 更新文件。

    # vi /etc/sysconfig/ivs

    DAEMON_ARGS="--syslog --inband-vlan 4092 -u <NIC1> -u <NIC2> --internalport=node-port"

    注: 理想情况NIC1及NIC2 应该是你连接BCF的10G NIC接口。

    c. 手动设置节点端口的唯一IP。

    注:请使用以下ifcfg文件样本进行设置,使分配的IP在重启后依然有效。

    # vi /etc/sysconfig/network-scripts/ifcfg-node-port

    DEVICE=node-port

    ONBOOT=yes

    HOTPLUG=no

    NM_CONTROLLED=no

    PEERDNS=no

    TYPE=IVSIntPort

    DEVICETYPE=ivs

    IVS_BRIDGE=ivs

    BOOTPROTO=static

    IPADDR=<IP地址>

    NETMASK=<网关掩码>

    d. 执行下列命令以重启服务并分配接口IP。

    i. systemctl daemon-reload

    ii. systemctl restart ivs

    iii. ifdown node-port

    iv. ifup node-port

    e. 请记下分配给主节点分配的节点端口IP (本教程中假定为: 10.10.10.2, 10.10.10.3)。

    -Step2:安装BCF CNI插件

    1.在所有主节点上安装ETCD集群。

    a. 安装etcd:yum install etcd。

    b. 安装bridge-utils:yum install bridge-utils。

    c. 安装BCF CNI插件:rpm -ivh bcf-cni-<version>.rpm。

    d.更新下面文件被标绿的这些地方。

    # vi /lib/systemd/system/bcf-etcd.service

    ExecStart=/usr/bin/etcd--listen-peer-urls http://0.0.0.0:9122 \

    --listen-client-urls http://0.0.0.0:9121 \

    --data-dir=/var/lib/etcd/bcf \

    --advertise-client-urls http://0.0.0.0:9121 \

    --initial-cluster-token bcf-etcd-cluster \

    --initial-cluster-state new \

    --name master1 \? 当前节点的主机名

    --initial-advertise-peer-urls http://10.10.10.2:9122 \ ? 当前节点的IP地址

    --initial-cluster master1=http://10.10.10.2:9122,master2=http://10.10.10.3:9122 ? 所有主节点的主机名及IP地址 (例: 10.10.10.x)

    e.防火墙设置开放端口9121及9122:

    i) iptables -I INPUT -p tcp --dport 9121 -j ACCEPT

    ii) iptables -I INPUT -p tcp --dport 9122 -j ACCEPT

    f.使用下列命令启用并运行服务:

    i) systemctl daemon-reload

    ii) systemctl enable bcf-etcd

    iii) systemctl start bcf-etcd

    g.继续操作前,请确认bcf-etcd服务已在所有的主节点上正常运行。

    # systemctl status bcf-etcd

    2.在所有主节点上设置BCF代理。

    a.在文件中更新ETCD服务器信息:

    # vi /etc/bcf-agent.yaml

    etcd_config:

    - ip : 10.10.10.2

    port: 9121

    - ip : 10.10.10.3

    port: 9121

    b.用下列命令启用并运行服务:

    i.systemctl enable bcf-agent

    ii.systemctl start bcf-agent

    3.在所有一般节点上安装设置BCF-CNI插件。

    a.安装bridge-utils: yum install bridge-utils。

    b.安装BCF CNI 插件: rpm -ivh bcf-cni-<version>.rpm。

    c.在文件中更新ETCD 服务器信息:

    # vi /etc/cni/net.d/bcf.conf

    {

    "name": "bcf",

    "type": "bcf",

    "etcd_server": "10.10.10.2:9121,10.10.10.3:9121"

    }

    4.通过一个主节点设置Big Cloud Fabric控制器。

    a.在一个主节点上执行下列操作。

   i.在文件中更新ETCD 及BCF 信息:

    # vi /etc/bcf-config.yaml

    etcd_config:

    - ip : 10.10.10.2

    port: 9121

    - ip : 10.10.10.3

    port: 9121

    bcf_config:

    ip : 10.2.3.4 ? BCF 控制集群IP地址 (VIP)

    user : admin ? BCF 用户名

    passwd : admin ? BCF 密码

    origination: cni

    tenant : Kubernetes ? 租户名

    segments:

    - name: nodes ? 网段名

    cidr: 10.10.10.1/24 ? 逻辑网段接口IP

    - name: default

    cidr: 10.10.11.1/24

    - name: red

    cidr: 10.10.12.1/24

    - name: blue

    cidr: 10.10.13.1/24

    server_hostnames:

    - BM1

    - BM2 ? 裸机(单租户物理服务器)主机名单-用于自动生成BCF成员规则

    ii. 运行: bcf-cfg-ctl /etc/bcf-config.yaml;用于配置BCF控制器的Tenant/Segment/CIDRs。

    b.注意: 所有的BCF设置更新必须通过bcf-cfg-ctl命令进行。

    -Step3:安装Kubernetes

    请参考此教程:https://kubernetes.io/docs/getting-started-guides/kubeadm/ 

    注意:

    1. 跳过步骤(3/4)安装扩展网络。

    2. 请使用端点接口的IP地址运行kubeadm:例:kubeadm init --api-advertise-addresses <node-port-ip>

    如今,各种虚拟化技术正在加速云计算时代的发展,Docker作为新一代虚拟化技术,正在改善我们开发、测试、部署应用的方式,值得我们为之打call。而戴尔,今后仍将积极拥抱Docker容器,基于戴尔开放式网络以太网交换机,携手更多网络软件合作伙伴,为客户提供自动化与可视化网络服务并有效简化网络运维。

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
1
相关文章