Logo
Section 1 / 11

简介

Kubernetes 中部署的概述。

导入

简介

Kubernetes 中部署的概述。

部署简介

我们之前看到,当一个 Pod 崩溃时,无论是手动终止还是发生意外情况,Kubernetes 不会自动重新调度它。

这正是我们几乎从不直接运行 Pod 的原因之一。我们几乎总是使用另一种称为 Deployment 的 Kubernetes 资源来管理 Pod。除了在 Pod 崩溃后确保其被重新调度外,Deployment 还能帮助我们完成多项任务:

  • 我们可以使用 Deployment 来扩展应用程序,通过增加或减少正在运行的副本数量。到目前为止,我们只运行了一个应用副本。
  • Deployment 可以处理应用新版本的发布,让我们能够无缝从 v1 升级到 v2,而不会造成服务中断。
  • 它们还支持轻松回滚有问题的发布版本,甚至可以在某些情况下阻止有问题的发布版本上线。

在深入探讨 Deployment 的工作原理之前,我们先来看一下将要运行的应用程序。

到目前为止,我们只使用了 nginx 镜像,因为它非常简单且便于演示如何在 Kubernetes 中运行应用。

现在,我们将运行自己的应用程序,以便更方便地控制不同版本,并引入我们想要测试的行为。

我用 Ruby 编写了这个非常简单的应用程序,但你可以根据需要进行修改,使用任何你喜欢的工具。只要将其打包为 Docker 镜像,运行方式就完全相同。

以下是应用程序代码:

1# app.rb 2require "sinatra" 3 4set :bind, "0.0.0.0" 5 6get "*" do 7 "[v1] Hello, Kubernetes!\n" 8end

如你所见,代码非常简单。它使用了 Sinatra,这是一个 Ruby 库,提供了一种 DSL 来创建 Web 应用。在此例中,我们接受任意路径的请求,并返回字符串 "[v1] Hello, Kubernetes!"。

为了将此应用程序打包成 Docker 镜像,我们可以使用如下 Dockerfile:

1FROM ruby:2.6.1-alpine3.9 2 3RUN apk add curl && gem install sinatra 4COPY app.rb . 5ENTRYPOINT ["ruby", "app.rb"]

这里我们指定基础镜像是官方的 Ruby 镜像,安装 sinatra,复制 app.rb 文件(即上面的代码),并将命令 ruby app.rb 设置为镜像的入口点。

目前,这些就是我们需要的所有代码。

你可以将该镜像推送到你的 DockerHub 账户(如果你有)。或者,你也可以直接使用我仓库中的镜像。如果你想使用自己的镜像,只需将所有出现的 brianstorti 替换为你自己的账户名:

1# 构建镜像 2docker build . -t brianstorti/hellok8s:v1 3 4# 推送至 DockerHub 5docker push brianstorti/hellok8s:v1

镜像上传完成后,我们就可以在配置文件中使用它了!

使用密钥管理敏感配置

定义我们的部署清单