模块 2 - 部署应用程序
难度: 初级 预计时间: 10 分钟
此场景的目标是帮助您使用 kubectl 在 Kubernetes 上部署您的第一个应用程序。您将学习 kubectl 命令行界面的基础知识以及如何与您的应用程序进行交互。
步骤 1 - kubectl 基础
在终端中输入 kubectl 查看其用法。kubectl 命令的常见格式是:kubectl action resource。这会在指定资源(如 node、container)上执行指定操作(如 create、describe)。您可以在命令后使用 --help
获取有关可能参数的额外信息(kubectl get nodes --help
)。
通过运行 kubectl version
命令,检查 kubectl 是否配置为与您的集群通信
好的,kubectl 已安装,您可以看到客户端和服务器的版本。
要查看集群中的节点,运行 kubectl get nodes
命令
在这里我们看到可用节点(本例中为 1 个)。Kubernetes 将根据节点的可用资源选择在哪里部署我们的应用程序。
步骤 2 - 部署我们的应用程序
让我们使用 kubectl create deployment
命令在 Kubernetes 上部署我们的第一个应用程序。我们需要提供部署名称和应用程序镜像位置(对于托管在 Docker Hub 之外的镜像,请包含完整的仓库 URL)。
太棒了!您刚刚通过创建部署部署了您的第一个应用程序。这为您完成了以下几件事:
- 搜索了一个适合运行应用程序实例的节点(我们只有一个可用节点)
- 将应用程序调度到该节点上运行
- 配置集群以在需要时将实例重新调度到新节点上
要列出您的部署,请使用 get deployments
命令
我们看到有 1 个部署正在运行您的应用程序的单个实例。该实例正在您的节点上的 Docker 容器中运行。
步骤 3 - 查看我们的应用程序
在 Kubernetes 内部运行的 Pods 运行在一个私有、隔离的网络中。默认情况下,它们在同一个 Kubernetes 集群内的其他 Pods 和服务中可见,但在该网络之外不可见。当我们使用 kubectl
时,我们通过一个 API 端点与应用程序进行通信。
我们将在模块 4 中介绍如何将您的应用程序暴露到 Kubernetes 集群之外的其他选项。
kubectl
命令可以创建一个代理,将通信转发到集群范围的私有网络中。代理可以通过按 Control-C 终止,并且在运行期间不会显示任何输出。
我们将打开第二个终端窗口来运行代理。
现在,我们的主机(在线终端)与 Kubernetes 集群之间已建立连接。代理使这些终端能够直接访问 API。
您可以通过代理端点查看所有这些 API。例如,我们可以使用 curl
命令直接通过 API 查询版本
注意:代理在一个新标签页中运行,而最近的命令在原始标签页中执行。代理仍在第二个标签页中运行,这使得我们的 curl 命令可以使用 localhost:8001
正常工作。
如果端口 8001 不可访问,请确保上述启动的 kubectl proxy
正在运行。
API 服务器将根据 Pod 名称自动为每个 Pod 创建一个端点,该端点也可通过代理访问。
首先我们需要获取 Pod 名称,并将其存储在环境变量 POD_NAME 中
您可以通过运行以下命令通过 API 访问 Pod
为了使新的部署无需使用代理即可访问,需要一个 Service,这将在后续模块中进行解释。