简介
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
镜像上传完成后,我们就可以在配置文件中使用它了!