本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

轻松上手 Kubernetes

Kelsey Hightower 写了一本关于 Kubernetes 的宝贵指南,名为《Kubernetes 难上手指南》。对于那些希望深入了解 Kubernetes 的人来说,这是一个很棒的资源,但如果您想以轻松模式使用 Kubernetes 呢?这是我们一直与 Google Cloud 合作的内容。在本指南中,我们将向您展示如何启动和运行集群,以及如何实际将代码部署到该集群并运行它。

这就是轻松使用 Kubernetes 的方法。

我们将完成的任务

  1. 1.设置集群
  2. 2.将应用程序部署到集群
  3. 3.通过滚动更新自动化部署

先决条件

  • 一个容器化应用程序
  • 您也可以使用一个演示应用程序
  • 一个 Google Cloud 账户或在其他提供商上运行的 Kubernetes 集群
  • 集群创建之后的所有步骤都与所有提供商相同。
  • 一个Codefresh的免费账户
  • Codefresh 是一项处理 Kubernetes 部署配置和自动化的服务。

我们为开源项目免费提供 Codefresh,并为私人项目每月免费提供 200 次构建,以尽可能简化 Kubernetes 的采用。您可以随意在任意数量的集群上部署任意数量的内容。

设置集群

  1. cloud.google.com 上创建一个账户并登录。

注意:如果您使用的是 Google Cloud 之外的集群,可以跳过此步骤。

Google Container Engine 是 Google Cloud 的托管 Kubernetes 服务。根据我们的测试,它既强大又易于使用。

如果您是平台新手,可以在此过程结束时获得 500 美元的信用额度。

  1. 打开菜单,向下滚动到 Container Engine。然后选择 Container Clusters

  1. 点击创建集群。

第 1 步已完成。根据我的经验,创建集群通常需要不到 5 分钟。

将应用程序部署到 Kubernetes

首先访问 Codefresh 并使用 GitHub、Bitbucket 或 Gitlab 创建账户。如前所述,Codefresh 对开源和小型私有项目都是免费的。我们将使用它来创建部署应用程序到 Kubernetes 所需的配置 Yaml。然后我们将部署我们的应用程序并自动化该过程,使其在每次提交代码更改时都发生。以下是步骤:

  1. 1. 创建 Codefresh 账户
  2. 2. 连接到 Google Cloud(或其他集群)
  3. 3. 添加集群
  4. 4. 部署静态镜像
  5. 5. 构建并部署镜像
  6. 6. 自动化流程

连接到 Google Cloud

要连接您在 Google Container Engine 中的集群,请转到 账户设置 > 集成 > Kubernetes,然后点击认证。这将提示您使用 Google 凭据登录。

登录后,所有集群都可在 Codefresh 中使用。

添加集群

要添加您的集群,请点击向下箭头,然后点击添加集群,选择项目和集群名称。您现在可以部署镜像了!

可选:使用备用集群

要连接非 GKE 集群,我们需要向 Codefresh 添加令牌和证书。转到 帐户设置(左下)> 集成 > Kubernetes > 配置 > 添加提供商 > 自定义提供商。展开下拉菜单并点击添加集群

按照说明生成所需信息,然后点击保存。您的集群现在将显示在 Kubernetes 选项卡下。

将静态镜像部署到 Kubernetes

现在是最有趣的部分了!Codefresh 提供了一个易于修改的样板,它负责为您的应用程序配置 Kubernetes 的繁重工作。

  1. 单击Kubernetes选项卡:这将显示命名空间的列表。

可以将命名空间视为在 Kubernetes 集群上有点像 VLAN 的作用。每个命名空间可以包含所有需要相互通信的服务。目前,我们只使用默认命名空间(简单方法!)。

  1. 点击添加服务并填写详细信息。

您可以使用我之前提到的带有 Node.js 前端和 MongoDB 的演示应用程序

以下是我们所需的信息:

集群 - 这是我们之前添加的集群,我们的应用程序将部署到该集群。
命名空间 - 我们将使用默认命名空间,但如果您愿意,可以创建并使用新的命名空间。命名空间是用于对与应用程序关联的所有服务进行分组的离散单元。
服务名称 - 您可以随意命名服务。由于我们正在部署 Mongo,我将其命名为 mongo!
暴露端口 - 我们不需要将端口暴露到集群外部,所以暂时不勾选此框,但我们会指定一个端口,其他容器可以通过此端口与此服务通信。Mongo 的默认端口是“27017”。
镜像 - Mongo 是 Dockerhub 上的一个公共镜像,所以我可以通过名称和标签“mongo:latest”引用它。
内部端口 - 这是 mongo 应用程序监听的端口,在本例中仍然是“27017”。

我们暂时可以忽略其他选项。

  1. 向下滚动并单击部署

砰!您刚刚将此镜像部署到 Kubernetes。通过点击状态,您可以看到服务、部署、副本和 Pod 都已配置并正在运行。如果点击编辑 > 高级,您可以查看和编辑与此应用程序关联的所有原始 YAML 文件,或者复制它们并将其放入您的存储库中,以便在任何集群上使用。

构建并部署镜像

为了让我们的演示应用程序的其余部分启动并运行,我们需要构建并部署应用程序的 Node.js 部分。为此,我们需要将我们的存储库添加到 Codefresh。

  1. 点击 存储库 > 添加存储库,然后复制并粘贴 demochat 存储库 URL(或使用您自己的存储库)。

我们可以选择使用 Dockerfile,或者如果需要帮助创建 Dockerfile,则可以使用模板。在这种情况下,demochat 存储库已经有一个 Dockerfile,所以我们将选择它。点击接下来的几个屏幕,直到镜像构建完成。

构建完成后,镜像会自动保存在 Codefresh Docker 注册表中。您也可以将任何其他注册表添加到您的账户并使用它。

要部署镜像,我们需要:

  • 一个拉取密钥
  • 镜像名称和注册表
  • 将使用的端口

创建拉取密钥

拉取密钥是 Kubernetes 集群用来访问私有 Docker 注册表的令牌。要创建一个,我们需要生成令牌并将其保存到 Codefresh。

  1. 点击用户设置(左下角)并生成一个新的令牌。

  2. 将令牌复制到剪贴板。

  1. 转到 账户设置 > 集成 > Docker 注册表 > 添加注册表 并选择 Codefresh 注册表。粘贴您的令牌并输入您的用户名(区分大小写)。您的用户名必须与屏幕左下角显示的名称匹配。

  2. 测试并保存。

稍后部署镜像时,我们将能够创建我们的 secret。

获取镜像名称

  1. 点击镜像并打开您刚刚构建的镜像。在注释下,您将看到以 r.cfcr.io 开头的镜像名称。

  1. 复制镜像名称;我们稍后需要粘贴它。

将私有镜像部署到 Kubernetes

我们现在可以部署我们构建的镜像了。

  1. 转到 Kubernetes 页面,像我们部署 mongo 一样,点击添加服务并填写页面。请务必选择您之前部署 mongo 时使用的相同命名空间。

现在让我们暴露端口,以便我们可以访问此应用程序。这将配置一个 IP 地址并自动配置入口。

  1. 点击部署:您的应用程序将在几秒钟内启动并运行!IP 地址的配置可能需要更长时间,具体取决于您的集群位置。

在此视图中,您可以扩展副本、查看应用程序状态以及执行类似任务。

  1. 点击 IP 地址查看正在运行的应用程序。

至此,您的整个应用程序应该已经启动并运行了!没那么糟吧?现在开始自动化部署!

自动化部署到 Kubernetes

每次我们更改应用程序时,我们都希望构建新镜像并将其部署到集群中。我们已经设置了自动化构建,但要自动化部署,请按以下步骤操作:

  1. 点击存储库(左上角)。

  2. 点击 demochat 存储库的管道(齿轮图标)。

  1. 最好在部署前运行一些测试。在构建和单元测试下,为单元测试脚本添加 npm test。

  2. 点击部署脚本并选择Kubernetes (Beta)。输入您已部署的服务信息。

您可以看到使用存储库中的部署文件或使用刚刚生成的部署文件的选项。

  1. 点击保存

您已完成部署自动化!现在,每当发生更改时,镜像都会进行构建、测试和部署。

结论

我们希望让每个团队(而不仅仅是大型企业团队)都能轻松采用 Kubernetes,同时保留 Kubernetes 的所有强大功能和灵活性。在 Kubernetes 服务屏幕上的任何时候,您都可以切换到 YAML 视图,查看您在此演练中执行的配置所生成的所有 YAML 文件。您可以调整文件内容,复制并粘贴到本地文件等。

本演练为所有人提供了一个坚实的起点。准备就绪后,您可以直接调整实体以指定所需的精确配置。

我们很乐意听取您的反馈!请在Twitter上与我们分享,或直接联系我们

附录

您有视频指导我完成此过程吗? 当然有

这适用于 Helm Chart 吗? 是的!我们目前正在与有限的用户群试用 Helm Chart。如果您想提前试用,请联系我们。

这适用于任何 Kubernetes 集群吗? 它应该适用于任何 Kubernetes 集群,并且已针对 Kubernetes 1.5 及更高版本进行测试。

我可以在自己的数据中心部署 Codefresh 吗? 当然,Codefresh 基于 Kubernetes 构建,并使用 Helm Chart。Codefresh 云版对开源项目免费,每月提供 200 次构建。Codefresh 本地部署目前仅供企业用户使用。

每次更新都会清除数据库吗? 是的,在这种情况下,我们跳过了创建持久卷。配置持久卷需要更多工作,如果您愿意,请随时联系我们,我们很乐意提供帮助!