我是一名 Web 开发人员,但我也对一些管理任务感兴趣。因此,从纯管理转向开发运营对我来说很方便。
无论如何,我在处理恋爱关系时遇到了一些问题。也许没有,所以我想寻求帮助来澄清一下。
基本上,我想介绍的是四种类型的软件(根据我的理解)。具体产品并不重要,你可以将任何类似的软件作为替代品:
- Vagrant:据我所知,就是自动创建和管理虚拟机:设置、启动和停止虚拟机。这可以使用本地虚拟机或远程虚拟机(例如在云平台上)来完成。
- Docker:一种基于一些 Linux 内核概念的“轻量级虚拟机”,可用于独立运行进程,例如在共享的网络托管环境中。
- Chef:用于设置和配置操作系统的工具,例如在虚拟机内部。
- OpenStack:一种允许您构建自己的私有云的工具,因此可与 AWS 等相媲美。
问题 1:我的解释正确吗?或者我对这些消费的一些(或全部)解释是错误的?
问题 #2:我该如何混合使用所有这些工具?这样做有意义吗?
在我的想象和理解中,你可以去
- 使用 OpenStack 构建自己的云,
- 使用 Vagrant 管理云中运行的虚拟机,
- 使用 Chef 设置这些虚拟机
- 最后使用Docker在虚拟机内运行进程。
这是正确的吗?如果正确,您能给我一些建议,告诉我如何开始使用所有这些吗(同时有相当多的东西,我还不知道从哪里开始)?
答案1
让我们使用它们各自的网页来了解这些项目的内容。不过,我会改变您列出的顺序:
厨师:Chef 是一个将基础设施转化为代码的自动化平台。
这是一个配置管理软件。它们中的大多数使用相同的范例:它们允许您定义状态您希望计算机能够处理配置文件、安装的软件、用户、组和许多其他资源类型。大多数系统还提供将更改推送到特定计算机的功能,这一过程通常称为编排。
流浪汉:创建和配置轻量级、可重复和可移植的开发环境。
它提供了一个可重复生成方式完全虚拟化的机器使用 Oracle 的 VirtualBox 或 VMWare 技术作为提供商。Vagrant 可以与配置管理软件协调,在操作系统安装程序完成时继续安装过程。这称为配置。
Docker:一个开源项目,用于将任何应用程序打包、运送和运行为轻量级容器
该软件的功能与 Vagrant 的功能有些重叠,它提供了定义操作系统安装的方法,但在用于此目的的技术上有很大不同。Docker 使用Linux 容器,它们本身不是虚拟机,而是在隔离文件系统中运行的隔离进程。Docker 还可以使用配置管理系统配置容器。
OpenStack:用于构建私有云和公共云的开源软件。
虽然 OpenStack可以部署在单机上,这种部署纯粹是为了概念验证,由于资源限制,可能不太实用。
OpenStack 安装的主要目标是裸机多节点环境,其中不同的组件可以在专用硬件中使用以获得更好的效果。
OpenStack 的一个关键功能是支持多种虚拟化技术,从完全虚拟化(VirtualBox、VMWare)到半虚拟化(KVM/Qemu)以及容器(LXC),甚至用户模式 Linux (UML)。
我尝试将这些产品作为特定架构的组件来呈现。从我的角度来看,首先能够根据所需环境(Chef、Puppet、Ansible 等)定义您的需求,然后能够以受控方式(Vagrant、Docker 等)部署它,最后在需要时将其扩展到全球规模,这是很有意义的。
您需要多少这些功能应该在您的项目范围内定义。
另请注意,我已过度简化了几乎所有技术解释。请使用参考链接获取详细信息。
答案2
我认为具有开发人员背景会使成为“devops”实际上更加棘手,您的问题已经提出近 3 年了,因此很想听听您是如何找到这段旅程的,我将从系统管理员的角度回答您上面提到的应用程序,希望它能有所启发,或者提供一个非技术性的视角,在某种程度上解释为什么一个人(管理员或开发人员)会开始考虑你所问的问题,例如从 devops 的角度来看,x、y、z 之间的关系是什么,这些工具是否大于它们各部分的总和?
我实际上认为系统管理员在这里占了上风,您在问题中提到的大多数应用程序都解决了管理员的“问题”,从而提供了更抽象的数据中心环境,而这反过来又对开发人员和新的“devops”战略(阅读策略/团队,devops 不是一个人)更具可编程性。那么与您提到的应用程序有什么关系?这如何为 IT 服务提供整体方法?
OpenStack:一种允许您构建自己的私有云的工具,因此可与 AWS 等相媲美
这就是它,但它能做什么呢? - 最恰当的操作系统是 DOS - 它通过抽象 BIOS 来操作您的磁盘,OpenStack 操作您的数据中心并抽象您的基础设施(IaaS - 是数据中心操作系统的术语)。现在您的数据中心有一个 API、一个命令语法和一个 GUI,OpenStack 可以驱动虚拟机管理程序、交换机、路由器、防火墙、存储区域网络、负载平衡器、docker 主机等。Openstack 使用您的硬件制造商的“插件”或者特定功能可以仅存在于软件中,如软件定义某物或网络功能虚拟化。在此基础上,OpenStack 和所有其他云都可以通过读取您向编排引擎抛出的脚本或根据规则(扩大、缩小等)触发来编排自己的基础架构。因此,OpenStack 是一个巨大的抽象层,例如,我不关心我有什么交换机,只要给我一个具有这命令,或者,为我构建一个复杂的负载平衡、HA、公开可用、自动扩展、域名注册、附加存储东西-使用我在互联网上找到的这个脚本。
Docker:一种基于一些 Linux 内核概念的“轻量级虚拟机”,可用于独立运行进程,例如在共享的网络托管环境中。
Docker 是另一个抽象层,就像云一样,它是一种颠覆性技术,它正在改变行业,因为它解决了许多操作“问题”,如软件依赖性、升级、数据隔离和纯粹的可移植性。Java 之所以流行,是因为它的源代码可移植性,开发人员不必考虑这个问题,运行 JVM 意味着他们的代码应该在咖啡机上运行,只要它支持 Java。Docker 解决了类似的问题,要运行我的应用程序,您需要一个 docker 主机,不是,您需要这个版本的 Python、这个内核、这个 Linux 发行版等等,应用程序当然仍然具有这些依赖项,但底层主机并不关心,管理员也不关心您在隔离容器内做什么(在某种程度上)。Docker 正在改变开发和操作范式,将整个操作系统及其服务视为二进制文件。我们可以从存储库中获取它们对它们进行版本控制、修改它们、使用参数运行它们等等。
Chef:用于设置和配置操作系统的工具,例如在虚拟机内部。
是的,而且不像前两个那样具有破坏性,Chef、puppet、ansible、salt、system center operations manager 和该领域的大量其他应用程序为开发人员和管理员提供了一种方法来模拟部署、升级和其他操作(配置更改),似乎没有任何标准机构来监督这些努力有云。但我们处理的并不是像基础设施这样确定的东西,因此学习这些会更加痛苦,而且很少有东西可以从一个转移到另一个。
Vagrant:据我所知,就是自动创建和管理虚拟机:设置、启动和停止虚拟机。这可以使用本地虚拟机或远程虚拟机(例如在云平台上)来完成。
这是您提到的应用程序列表中的一个异类,Vagrant 是开发人员的工具,也是管理员的玩具,您可以使用 vagrant 快速建立一个开发环境,例如,我想开发一个 android 应用程序,从 vagrant 中获取一个 IDE,我认为它很快就会被 Docker 超越。
你能给我一些建议,关于如何开始使用这一切吗(同时有很多,但我还不知道从哪里开始)?
这就是为什么我认为管理员占了上风,我们必须手动完成大部分工作,并且知道什么可能出错,Puppet 清单、云计算和 docker 编排对我们来说会更容易,开发人员会发现自己走了很多弯路,所以我对任何潜在的 devops 的建议是先成为一名管理员。
答案3
我刚刚完成一个 OpenStack 部署项目,该项目在 Vagrant 实例中使用 Chef 服务器:https://github.com/bluechiptek/bluechipstack/blob/master/README.md
这种方式的主要问题是每次管理节点时,Vagrant 实例都会获得相同的 IP。如果使用静态寻址,效果会很好。通过 VPN 进行操作并不理想。
答案4
就我而言,我仅使用 Vagrant 和 Docker 的组合。
我使用 vagrant 来配置机器(有其他云提供商但我使用的是内置的 VirtualBox。因为我使用这种方法,所以外部网络和存储几乎是手动的,但是如果你使用类似vagrant-aws插件你可以告诉AWS为你提供必要的部分。
我使用的配置脚本指向一个安全位置,其中包含 CA 证书和用于签署 CSR 的密钥以及令牌docker swarm join
。此外,我安装了 docker-engine 并将其配置为加入 swarm(如果没有,则初始化)。
一旦解决了这个问题,我只需docker stack deploy
从我的本地机器或构建框中执行一个操作即可部署包含我需要的一切的堆栈。
就我而言,我刚刚放弃了厨师赞成只使用简单的安装后脚本yum
或apt-get
作为我的配置脚本。
我也使用vagrant-triggers插件在销毁之前添加额外的脚本(在我的情况下是离开群体)。
使用 Vagrant 进行集中管理的优点在于,您可以将环境复制到另一个系统或单台计算机上进行开发,只需添加或更改部分即可provider
。请注意,我还没有在单台计算机上设置 OpenStack 来管理 VirtualBox。