模块 2 - 部署应用

难度: 初级 预计时间: 10 分钟

本场景的目标是帮助你使用 kubectl 在 Kubernetes 上部署你的第一个应用。你将学习 kubectl 命令行界面的基础知识以及如何与你的应用程序交互。

步骤 1 - kubectl 基础知识

在终端中输入 kubectl 以查看其用法。kubectl 命令的常见格式是:kubectl 操作 资源。这会对指定的资源(例如节点、容器)执行指定的操作(例如创建、描述)。你可以在命令后使用 --help 来获取有关可能参数的更多信息(kubectl get nodes --help)。

通过运行 kubectl version 命令来检查 kubectl 是否配置为与你的集群通信

kubectl version

好的,kubectl 已安装,你可以看到客户端和服务器版本。

要查看集群中的节点,请运行 kubectl get nodes 命令

kubectl get nodes

在这里我们看到可用的节点(在我们的例子中是 1 个)。Kubernetes 将根据节点的可用资源选择在哪里部署我们的应用程序。

步骤 2 - 部署我们的应用

让我们使用 kubectl create deployment 命令在 Kubernetes 上部署我们的第一个应用程序。我们需要提供部署名称和应用程序映像位置(对于托管在 Docker Hub 之外的映像,请包括完整的存储库 URL)。

kubectl create deployment kubernetes-bootcamp --image=gcr.io/k8s-minikube/kubernetes-bootcamp:v1

太棒了!你刚刚通过创建部署来部署了你的第一个应用程序。这为你执行了一些操作

  • 搜索了一个合适的节点,可以在该节点上运行应用程序的实例(我们只有一个可用节点)
  • 计划在该节点上运行该应用程序
  • 配置集群在需要时在新节点上重新调度该实例

要列出你的部署,请使用 get deployments 命令

kubectl get deployments

我们看到有一个部署正在运行你的应用程序的单个实例。该实例正在你的节点上的 Docker 容器内运行。

步骤 3 - 查看我们的应用

在 Kubernetes 内部运行的 Pod 在一个私有的、隔离的网络上运行。默认情况下,它们对于同一 Kubernetes 集群内的其他 Pod 和服务是可见的,但在该网络之外不可见。当我们使用 kubectl 时,我们是通过 API 端点进行交互来与我们的应用程序通信的。

我们将在模块 4 中介绍有关如何在 Kubernetes 集群外部公开你的应用程序的其他选项。

kubectl 命令可以创建一个代理,该代理将通信转发到集群范围内的私有网络。该代理可以通过按 control-C 来终止,并且在运行时不会显示任何输出。

我们将打开第二个终端窗口来运行代理。

echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy

我们现在在主机(在线终端)和 Kubernetes 集群之间建立了连接。代理允许从这些终端直接访问 API。

你可以看到通过代理端点托管的所有这些 API。例如,我们可以使用 curl 命令直接通过 API 查询版本

curl http://localhost:8001/version

注意:代理是在新选项卡中运行的,最近的命令是在原始选项卡中执行的。代理仍在第二个选项卡中运行,这使得我们的 curl 命令可以使用 localhost:8001

如果端口 8001 不可访问,请确保上面启动的 kubectl proxy 正在运行。

API 服务器将根据 Pod 名称自动为每个 Pod 创建一个端点,该端点也可以通过代理访问。

首先,我们需要获取 Pod 名称,并将其存储在环境变量 POD_NAME 中

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

你可以通过运行以下命令通过 API 访问 Pod

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME

为了使新的部署在不使用代理的情况下可访问,需要一个服务,这将在接下来的模块中解释。


上次修改时间:2024 年 6 月 6 日:site: 更新教程图片 (b02c349ed)