本文发表已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 的简单之道
Kelsey Hightower 为 Kubernetes 编写了一份非常有价值的指南,名为 Kubernetes 艰难之路。对于那些希望了解 Kubernetes 的来龙去脉的人来说,这是一个很棒的资源——但是如果你想让 Kubernetes 进入简单模式呢?这是我们一直与 Google Cloud 合作开发的东西。在本指南中,我们将向您展示如何启动并运行集群,以及如何实际将代码部署到该集群并运行它。
这就是 Kubernetes 的简单方法。
我们将完成什么
- 1.设置集群
- 2.将应用程序部署到集群
- 3.使用滚动更新自动化部署
先决条件
- 容器化的应用程序
- 您也可以使用演示应用程序。
- Google Cloud 帐户 或其他提供商上的 Kubernetes 集群
- 集群创建之后的所有操作对于所有提供商都是相同的。
- 在 Codefresh 上免费帐户
- Codefresh 是一项处理 Kubernetes 部署配置和自动化的服务。
我们为开源项目免费提供 Codefresh,并为私人项目免费提供 200 次构建/月,以尽可能简化 Kubernetes 的采用。在任意数量的集群上部署任意数量的内容。
设置集群
- 在 cloud.google.com 上创建一个帐户并登录。
注意:如果您正在使用 Google Cloud 之外的集群,则可以跳过此步骤。
Google Container Engine 是 Google Cloud 的托管 Kubernetes 服务。在我们的测试中,它既强大又易于使用。
如果您是该平台的新手,则可以在此过程结束时获得 500 美元的信用额度。
- 打开菜单并向下滚动到 Container Engine。然后选择 Container Clusters。
- 点击 创建集群。
我们完成了第 1 步。以我的经验,创建一个集群通常需要不到 5 分钟的时间。
将应用程序部署到 Kubernetes
首先转到 Codefresh 并使用 GitHub、Bitbucket 或 Gitlab 创建一个帐户。如前所述,Codefresh 对于开源和较小的私人项目都是免费的。我们将使用它来创建将我们的应用程序部署到 Kubernetes 所需的配置 Yaml。然后,我们将部署我们的应用程序并自动化该过程,使其在每次提交代码更改时发生。以下是步骤
- 1.创建一个 Codefresh 帐户
- 2.连接到 Google Cloud(或其他集群)
- 3.添加集群
- 4.部署静态映像
- 5.构建并部署映像
- 6.自动化流程
连接到 Google Cloud
要连接 Google Container Engine 中的集群,请转到 帐户设置 > 集成 > Kubernetes,然后单击 身份验证。这将提示您使用您的 Google 凭据登录。
登录后,您的所有集群都可以在 Codefresh 中使用。
添加集群
要添加集群,请单击向下箭头,然后单击 添加集群,选择项目和集群名称。现在您可以部署映像了!
可选:使用替代集群
要连接非 GKE 集群,我们需要向 Codefresh 添加令牌和证书。转到 帐户设置(左下角)> 集成 > Kubernetes > 配置 > 添加提供商 > 自定义提供商。展开下拉列表,然后单击 添加集群。
按照有关如何生成所需信息的说明进行操作,然后单击“保存”。您的集群现在出现在 Kubernetes 选项卡下。
将静态映像部署到 Kubernetes
现在开始有趣的部分!Codefresh 提供了一个易于修改的样板,可处理为应用程序配置 Kubernetes 的繁重工作。
- 单击 Kubernetes 选项卡:这会显示命名空间的列表。
可以将命名空间视为 Kubernetes 集群上类似于 VLAN 的东西。每个命名空间可以包含 Kubernetes 集群上需要相互通信的所有服务。现在,我们只在默认命名空间中工作(简单的方法!)。
- 单击 添加服务 并填写详细信息。
您可以使用我之前提到的 演示应用程序,它具有带有 MongoDB 的 Node.js 前端。
以下是我们需要传递的信息
集群 - 这是我们之前添加的集群,我们的应用程序将部署在那里。
命名空间 - 我们将为我们的命名空间使用 default,但如果您愿意,也可以创建并使用新的命名空间。命名空间是用于对与应用程序关联的所有服务进行分组的离散单元。
服务名称 - 您可以随意命名该服务。由于我们正在部署 Mongo,我将其命名为 mongo!
公开端口 - 我们不需要在集群外部公开该端口,因此我们暂时不会勾选该框,但我们会指定其他容器可以与此服务通信的端口。Mongo 的默认端口是“27017”。
映像 - Mongo 是 Dockerhub 上的公共映像,因此我可以按名称和标签引用它,“mongo:latest”。
内部端口 - 这是 mongo 应用程序侦听的端口,在本例中再次是“27017”。
我们现在可以忽略其他选项。
- 向下滚动并单击 部署。
搞定!您刚刚将此映像部署到 Kubernetes。您可以通过单击状态来查看服务、部署、副本和 pod 都已配置并正在运行。如果单击“编辑 > 高级”,则可以查看和编辑与此应用程序关联的所有原始 YAML 文件,或复制它们并将它们放入存储库中,以便在任何集群上使用。
构建并部署映像
为了使我们的其余演示应用程序启动并运行,我们需要构建并部署应用程序的 Node.js 部分。为此,我们需要将我们的存储库添加到 Codefresh。
- 单击 存储库 > 添加存储库,然后复制并粘贴 demochat 存储库 url(或使用您自己的存储库)。
我们可以选择使用 dockerfile,或者在需要帮助创建 dockerfile 时使用模板。在本例中,demochat 存储库已经有一个 dockerfile,因此我们将选择它。单击接下来的几个屏幕,直到映像构建完成。
构建完成后,该映像会自动保存在 Codefresh docker 注册表中。您还可以将任何 其他注册表添加到您的帐户 并使用它。
要部署该映像,我们需要
- 拉取密钥
- 映像名称和注册表
- 将要使用的端口
创建拉取密钥
拉取密钥是 Kubernetes 集群可用于访问私有 Docker 注册表的令牌。要创建一个密钥,我们需要生成该令牌并将其保存到 Codefresh。
单击 用户设置(左下角)并生成一个新令牌。
将令牌复制到剪贴板。
转到 帐户设置 > 集成 > Docker 注册表 > 添加注册表,然后选择 Codefresh 注册表。粘贴您的令牌并输入您的用户名(条目区分大小写)。您的用户名必须与屏幕左下角显示的名称匹配。
测试并保存它。
现在我们可以在部署映像时稍后创建密钥。
获取映像名称
- 单击 映像 并打开您刚刚构建的映像。在 评论 下,您将看到以 r.cfcr.io 开头的映像名称。
- 复制映像名称;我们稍后需要粘贴它。
将私有映像部署到 Kubernetes
现在我们准备部署我们构建的映像了。
- 转到 Kubernetes 页面,就像我们对 mongo 所做的那样,单击“添加服务”并填写页面。确保选择与之前用于部署 mongo 的命名空间相同的命名空间。
现在让我们公开该端口,以便我们可以访问此应用程序。这将配置一个 IP 地址并自动配置入口。
- 单击 部署:您的应用程序将在几秒钟内启动并运行!IP 地址可能需要更长的时间来配置,具体取决于您的集群位置。
在此视图中,您可以缩放副本、查看应用程序状态和执行类似的任务。
- 单击 IP 地址以查看正在运行的应用程序。
此时,您应该已经启动并运行了整个应用程序!还不错吧?现在来自动化部署!
自动化部署到 Kubernetes
每次我们对应用程序进行更改时,我们都希望构建一个新的镜像并将其部署到我们的集群。我们已经设置了自动构建,但要实现自动化部署
点击 Repositories(左上方)。
点击 demochat 仓库的流水线(齿轮图标)。
在部署之前运行一些测试是一个好主意。在Build and Unit Test 下,为单元测试脚本添加 npm test。
点击 Deploy Script 并选择 Kubernetes (Beta)。输入您已经部署的服务的相关信息。
您可以看到使用来自您仓库的部署文件或使用您刚刚生成的部署文件的选项。
- 点击 Save。
您已经完成了部署自动化!现在,每当进行更改时,镜像将构建、测试和部署。
结论
我们希望让每个团队,而不仅仅是大型企业团队,都能轻松采用 Kubernetes,同时保留 Kubernetes 的所有强大功能和灵活性。在 Kubernetes 服务屏幕上的任何时候,您都可以切换到 YAML 来查看您在此演练中执行的配置所生成的所有 YAML 文件。您可以调整文件内容,将其复制并粘贴到本地文件中等等。
本演练为每个人提供了一个坚实的基础。当您准备好时,您可以直接调整实体以指定您想要的确切配置。
我们非常希望得到您的反馈!请在 Twitter 上与我们分享,或直接联系我们。
附录
您是否有视频指导我完成此操作? 当然有。
这是否适用于 Helm Charts? 是的!我们目前正在与有限的用户试用 Helm Charts。如果您想提前试用,请联系我们。
这是否适用于任何 Kubernetes 集群? 它应该适用于任何 Kubernetes 集群,并且已经针对 Kubernetes 1.5 及更高版本进行了测试。
我可以在自己的数据中心部署 Codefresh 吗? 当然,Codefresh 是基于 Kubernetes 使用 Helm Charts 构建的。Codefresh 云对开源项目免费,每月 200 个构建。Codefresh 本地部署目前仅供企业用户使用。
每次更新时数据库不会被擦除吗? 是的,在这种情况下,我们跳过了创建持久卷。配置持久卷需要做更多的工作,如果您需要,请随时联系我们,我们很乐意提供帮助!