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

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

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在手,做一名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容器,基于戴尔开放式网络以太网交换机,携手更多网络软件合作伙伴,为客户提供自动化与可视化网络服务并有效简化网络运维。

来源:至顶网云计算频道

0赞

好文章,需要你的鼓励

2018

01/02

14:54

分享

点赞