devops 信创在数字经济时代提升企业竞争力的关键策略
626
2022-11-17
容器基础之(一)容器生态系统【1】
一、容器生态系统
对于像容器这类平台级别的技术,通常涉及的知识范围会很广,相关的软件,解决方案也会很多,初学者往往容易迷失,我们可以从生活经验中寻找答案。比如,当我们去陌生城市旅游会怎么做?大部分人应该会打开这座城市的地图:
1. 城市大概的位置和地理形状是什么?2. 都由哪几个区或县组成?3. 主要的交通干道是哪几条?
同样的道理,学习容器技术我们先这样看看:
1. 容器生态系统包含哪些不同层次的技术?2. 不同技术之间是什么关系?3. 哪些是核心技术哪些是辅助技术?
首先,得对容器技术有个整体认识。这样我们的学习才能够有的放矢,才能够分清轻重缓急,做到心中有数。接下来我会根据自己的经验帮大家规划一条学习路线,一起探索容器生态系统。学习新技术得到及时反馈是非常重要的,所以我们马上会搭建实验环境,并运行第一个容器,感受什么是容器。千里之行始于足下,让我们从了解生态系统开始吧。
(一)容器生态系统
一谈到容器,大家都会想到 Docker。Docker 现在几乎是容器的代名词。确实,是 Docker 将容器技术发扬光大。同时,大家也需要知道围绕 Docker 还有一个生态系统。Docker 是这个生态系统的基石,但完善的生态系统才是保障 Docker 以及容器技术能够真正健康发展的决定因素。大致来看,容器生态系统包含核心技术、平台技术和支持技术。
(1)容器核心技术
容器核心技术是指能够让 container 在 host 上运行起来的那些技术。 这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry 以及 容器 OS,下面分别介绍。
①容器规范
容器不光是 Docker,还有其他容器,比如 CoreOS 的 rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含 Docker、CoreOS、Google在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。
目前 OCI 发布了两个规范:runtime spec 和 image format spec。 有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行。这样就保证了容器的可移植性和互操作性。
②容器的runtime
runtime 是容器真正运行的地方。runtime 需要跟操作系统 kernel 紧密协作,为容器提供运行环境。如果大家用过 java,可以这样来理解 runtime 与容器的关系:Java 程序就好比是容器,JVM 则好比是 runtime。JVM 为 Java 程序提供运行环境。同样的道理,容器只有在 runtime 中才能运行。
lxc、runc 和 rkt 是目前主流的三种容器 runtime:
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作为 runtime。runc 是 Docker 自己开发的容器 runtime,符合 oci 规范,也是现在 Docker 的默认 runtime。rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,因而能够运行 Docker 的容器。
③容器管理工具
只有 runtime 还不够,用户得有工具来管理容器。容器管理工具对内与 runtime 交互,对外为用户提供 interface,比如 CLI。这就好比除了 JVM,还得提供 java 命令让用户能够启停应用不是。
lxd 是 lxc 对应的管理工具。runc 的管理工具是 docker engine。docker engine 包含后台 deamon 和 cli 两个部分。我们通常提到 Docker,一般就是指的 docker engine。rkt 的管理工具是 rkt cli。
④容器定义工具
容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。
docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。
dockerfile 是包含若干命令的文本文件,可以通过这些命令创建出 docker image。
ACI (App Container Image) 与 docker image 类似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。
⑤registry 仓库
容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry。
企业可以用 Docker Registry 构建私有的 Registry。
⑥容器os
由于有容器 runtime,几乎所有的 Linux、MAC OS 和 Windows 都可以运行容器。但这不并没有妨碍容器 OS 的问世。
容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。
目前已经存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。
(2)容器平台技术
容器核心技术使得容器能够在单个 host 上运行。而容器平台技术能够让容器作为集群在分布式环境中运行。 容器平台技术包括容器编排引擎、容器管理平台和基于容器的 PaaS。
①容器编排引擎
基于容器的应用一般会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过 API 对外提供服务。为了保证应用的高可用,每个组件都可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。
大家可以看到,这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群。而这,就是容器编排引擎要干的工作。
所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。
容器的编排引擎有:
docker swarm 是 Docker 开发的容器编排引擎。kubernetes 是 Google 领导开发的开源容器编排引擎,同时支持 Docker 和 CoreOS 容器。mesos 是一个通用的集群资源调度平台,mesos 与 marathon 一起提供容器编排引擎功能。
②容器管理平台
容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能,比如 application catalog 和一键应用部署等。
Rancher 和 ContainerShip 是容器管理平台的典型代表。
③基于容器的 PaaS
基于容器的 PaaS 为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用的开发。
Deis、Flynn 和 Dokku 都是开源容器 PaaS 的代表。
(3)容器支持技术
容器支持技术有:容器网络,服务发现,监控,数据管理,日志管理,安全性。
①容器网络
容器的出现使网络拓扑变得更加动态和复杂。用户需要专门的解决方案来管理容器与容器,容器与其他实体之间的连通性和隔离性。
docker network 是 Docker 原生的网络解决方案。除此之外,我们还可以采用第三方开源解决方案,例如 flannel、weave 和 calico。不同的方案设计和实现方式不同,各有优势和特定,我们可以根据实际需要来选型。
②服务发现
动态变化是微服务应用的一大特点。当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。容器也会根据 host 的资源使用情况在不同 host 中迁移,容器的 IP 和端口也会随之发生变化。 在这种动态的环境下,必须要有一种机制让 client 能够知道如何访问容器提供的服务。这就是服务发现技术要完成的工作。
服务发现会保存容器集群中所有微服务最新的信息,比如 IP 和端口,并对外提供 API,提供服务查询功能。 etcd、consul 和 zookeeper 是服务发现的典型解决方案。
③监控
监控对于基础架构非常重要,而容器的动态特征对监控提出更多挑战。针对容器环境,已经涌现出很多监控工具和方案。
docker ps/top/stats 是 Docker 原生的命令行监控工具。除了命令行,Docker 也提供了 stats API,用户可以通过 HTTP 请求获取容器的状态信息。 sysdig、cAdvisor/Heapster 和 Weave Scope 是其他开源的容器监控方案。
④数据管理
容器经常会在不同的 host 之间迁移,如何保证持久化数据也能够动态迁移,是 Flocker 这类数据管理工具提供的能力。
⑤日志管理
日志为问题排查和事件管理提供了重要的依据。docker logs 是 Docker 原生的日志工具。而 logspout 对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具进行后处理。
⑥安全性
对于年轻的容器,安全性一直是业界争论的焦点。openSCAP能够对容器镜像进行扫描,发现潜在的漏洞。
(二)容器的环境搭建
(1)环境选择
容器需要管理工具、runtime 和操作系统,我们的选择如下:
管理工具 - Docker Engine,因为 Docker 最流行使用最广泛。runtime - runc,Docker 的默认 runtime操作系统 - Ubuntu,虽然存在诸如 CoreOS 的容器 OS,因考虑到我们目前处于初学阶段,选择大家熟悉的操作系统更为合适。等具备了扎实的容器基础知识后再使用容器 OS 会更有利。
(2)安装docker
①配置ubuntu的root登录
输入命令 sudo passwd root安装 SSH安装SSH客户端,apt-get install openssh-client安装SSH服务端,apt-get install openssh-server启动SSH,/etc/init.d/ssh start查看ssh是否启动成功,ps -e | grep ssh配置/etc/ssh/sshd_config文件配置/etc/ssh/sshd_config ,在文件中添加 permitrootlogin yes 允许root用户登录 。/etc/init.d/ssh restart
②配置 Docker 的 apt 源
③运行第一个容器
④镜像-加速
由于 Docker Hub 的服务器在国外,-镜像会比较慢。幸好 DaoCloud 为我们提供了免费的国内镜像服务。
下面介绍如果使用镜像服务。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~