加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

神话还是现实?Docker 和 Kubernetes 架构

发布时间:2019-09-13 04:37:52 所属栏目:建站 来源:Linux中国
导读:在 Docker 和 Kubernetes 时代,软件开发的世界发生了怎样的变化?有可能使用这些技术一劳永逸地构建一个放之四海而皆准的架构吗?当所有东西都打包在容器中时,有可能统一开发和集成的过程吗?这些决策有什么要求?它们会带来什么限制?它们会让开发人员的生活

虽然 Kubernetes 只要求在物理机器/云虚拟机上的少量组件(docker、kubelet、kube proxy、etcd 集群),但你仍然需要能够自动化完成添加新机器和对集群进行管理。以下是几个简单的方法:

  • KOPS — 这个工具允许你在两个公有云 (AWS 或 GCE)上安装集群
  • Teraform — 这个工具让你可以管理任何环境的基础架构,并遵循 IAC( 基础架构即代码(Infrastructure as Code))的思想
  • Ansible — 用于构建任何类型自动化的通用工具

就我个人而言,我更喜欢第 3 个选项(加上一个 Kubernetes 集成模块 ),因为它允许我同时使用服务器和 k8s 对象,并实现任何类型的自动化。然而,没有什么能阻止你使用 Teraform 及其 Kubernetes 模块 。KOPS 不能很好地使用“裸机”,但是它仍然是一个很好的使用 AWS/GCE 的工具!

Git 代码库和任务跟踪器

神话还是现实?Docker 和 Kubernetes 架构

不用说,要为开发人员和其他相关角色提供全面的工作环境,你需要有一个团队协作和代码存储的地方。我很难确定哪种服务是最合适的,但我个人最喜欢的任务跟踪工具是 redmine (免费)或 Jira (付费)。对代码库而言,有比较老牌的 gerrit (免费)或 bitbucket (付费)。

值得注意的是,企业环境中协作工作的两个最一致的工具(尽管是商业版本的)是: Atlassian 和 Jetbrains 。你可以使用它们中的任何一个作为独立的解决方案,或者将两者的各种组件结合起来。

要充分利用任务跟踪器和代码库的组合,请考虑它们的集成策略。例如,以下是一些确保代码和相关任务关联性的提示(当然,你也可以选择自己的方法):

  • 只有当试图 推送(push)的分支存在相应的任务号(如:TASK-1/feature-34)时,才能提交到远程代码库中
  • 任何分支只有在一定数量的合格代码复查迭代之后才可以进行合并
  • 如果相应的任务不是 “进行中”(In Progress)或类似状态,则任何分支都应被阻止和禁用,以备将来更新
  • 任何旨在实现自动化的步骤都不应该直接提供给开发人员使用
  • 只有经过授权的开发人员才能直接修改master主分支—其它的一切都由自动化机器人控制
  • 如果相应的任务处于 “交付”(For Delivery)或类似状态之外的任何状态,则分支不可用于合并

Docker 注册表

神话还是现实?Docker 和 Kubernetes 架构

应特别注意 Docker 镜像管理系统,因为它对于存储和交付服务至关重要。此外,该系统应该支持用户和用户组的访问,能够删除旧的和不必要的镜像,提供图形用户界面和 RESTful 应用编程接口。

你可以使用云解决方案(例如, hub.docker.com )或私有托管服务,甚至可以安装在你的 Kubernetes 集群中。作为 Docker 注册表的企业解决方案, Vmware Harbor 就是一个很好的例子。最坏的情况是,如果你只想存储镜像,而不需要复杂的系统,你就直接使用 Docker Registry 好了。

CI/CD 和服务交付系统

神话还是现实?Docker 和 Kubernetes 架构

我们之前讨论过的组件(git 存储库、任务跟踪器、带有 Ansible 剧本的元项目、外部依赖项)都不能像悬浮在真空中一样彼此分开运行。将它们连接起来的是持续集成和交付服务。

CI —  持续集成 (Continuous Integration)

CD —  持续交付(Continuous Delivery)

服务应该足够简单,并且没有任何与系统交付或配置相关的逻辑。CI/CD 服务应该做的就是对外部世界的事件(git 存储库中的变化,任务跟踪器中任务的移动)做出反应,并启动元项目中描述的操作。此外,CI/CD 服务是管理所有代码存储库的控制点和管理它们的工具(代码分支合并、来自上游/主分支的更新)。

我使用过一个来自 Jetbrains 的 工具 TeamCity ,这是一个相当强大但非常简单的工具。但是你也可以决定尝试其他东西,比如免费的 Jenkins 。

在我们上面描述的方案中,集成服务主要负责启动四个主要流程和一个辅助流程,如下所示:

  • 自动化服务测试 — 通常情况下,对单一代码库而言,当分支状态改变或状态改变为“等待自动测试”(或类似情况)时
  • 服务交付 — 通常来自元项目和多个服务(分别来自于不同的代码库),当 QA 测试和生产环境部署的状态分别更改为 “等待展示”(Awaiting Showroom)或 “等待交付”(Awaiting Delivery)时
  • 回滚 — 通常来自元项目和单个服务或整个服务的特定部分,由外部事件或在交付不成功的情况下触发
  • 服务移除 — 这是从单个 测试环境(showroom)中完全移除整个生态系统所必需的,当 测试中(In QA)状态已过期或不再需要该环境时
  • 镜像构建器(辅助过程) — 可以集成到服务交付过程中,或者独立地用于编译 Docker 镜像并将其发送到 Docker 注册表。这经常需要处理常用的镜像(数据库、通用服务或不需要频繁更改的服务)

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读