PC时代我们拼什么?
当然是CPU主频高低和内存大小。
云计算时代我们拼什么?
当然是虚拟化技术哪方强。
虚拟化通过硬件模拟或操作系统实现,
而技术的迭代往往要面临
新旧技术大斗法的局面,
近年来又出现了一个新玩家,
前方高能预警!
因为容器虚拟化要不动声色地攻略你了。
Docker容器·科普向
简单来说,我们可以把Docker容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,并且每个容器之间还可以建立通信机制。容器的创建和停止都十分快速,容器自身对资源的需求也十分有限,远远低于虚拟机。
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打call的四个理由
从上面我们已经大概了解到了Docker的好处,下面小编为大家详细讲述我为何要替Docker疯狂打call的四大理由。
更快速的交付和部署。利用容器技术,开发人员可以使用镜像来快速构建一套标准的开发环境;然后可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。
更高效的利用资源。容器是轻量级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,一些云厂商CPU过卖比可以达到1:25,而虚拟化通常只有1:4或1:8。
更轻松的迁移和扩展。容器可以几乎在任意平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等。
更简单的更新管理。使用Dockerfile, 只需小小的配置修改,就可以替代以往大量的更新工作。
虚拟机与容器:没有对比就没有伤害
下面小编为大家整理了传统虚拟化方式和Docker各自的特性,通过一系列的对比,小编唯有感叹:没有对比就没有伤害!
经过上图的对比我们发现,相比于传统化虚拟方式,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软件定义网络解决方案,可以很轻松的解决这个问题。
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容器,基于戴尔开放式网络以太网交换机,携手更多网络软件合作伙伴,为客户提供自动化与可视化网络服务并有效简化网络运维。