网络研讨会系列:Kubernetes入门

来自菜鸟教程
跳转至:导航、​搜索

本文补充了关于在云中部署和管理容器化工作负载的 网络研讨会系列 。 该系列涵盖了容器的基本知识,包括管理容器生命周期、部署多容器应用程序、扩展工作负载以及使用 Kubernetes。 它还强调了运行有状态应用程序的最佳实践。

本教程包含本系列第三部分“Kubernetes 入门”中的概念和命令。


观看 YouTube 视频

介绍

在本系列的上一篇教程中,我们探索了使用 Docker Compose 管理多容器应用程序。 虽然 Docker 命令行界面 (CLI) 和 Docker Compose 可以部署和扩展在单台机器上运行的容器,但 Kubernetes 旨在处理跨多台机器或主机部署的多容器应用程序。

Kubernetes 是一个用于管理容器化应用程序的开源容器编排工具。 一个 Kubernetes 集群 有两个关键组件:Master NodesWorker Nodes。 一组主节点充当管理工作节点和部署的应用程序的控制平面。 工作节点是负责运行容器化应用程序的 Kubernetes 集群的主力。

主节点公开一个 API,命令行工具和富客户端通过该 API 提交一个 job,其中包含应用程序的定义。 每个应用程序都由一个或多个 容器、存储定义以及用于暴露它们的内部和外部端口组成。 在主节点上运行的控制平面将容器调度到其中一个工作节点中。 当应用程序扩展时,控制平面会在任何可用的工作节点上启动额外的容器。

关于Kubernetes的详细介绍,请参考教程【X65X】Kubernetes简介【X98X】。

StackPointCloud 使用基于 Web 的界面分三步部署 Kubernetes 集群。 它通过简化的用户体验隐藏了安装和配置 Kubernetes 的复杂性。 DigitalOcean 是 StackPoint 支持的云平台之一。 不熟悉系统管理和配置的开发者可以使用 StackPoint 在 DigitalOcean 上快速安装 Kubernetes。 有关支持的功能和定价的详细信息,请参阅他们的网站。

在本教程中,您将通过 StackPoint 在 DigitalOcean 上设置和配置 Kubernetes,并将容器化应用程序部署到您的集群。

先决条件

要遵循本教程,您需要

  • 安装了 curl 命令的本地计算机,您将使用它下载命令行工具来管理 Kubernetes 集群。 curl 命令已安装在 macOS 和 Ubuntu 16.04 上。
  • 一个 DigitalOcean 帐户。 在本教程中,您将使用 StackPoint 连接到您的 DigitalOcean 帐户并配置三个 1GB Droplet。

第 1 步 - 安装 Kubernetes

要开始在 DigitalOcean 上安装 Kubernetes,请访问 Stackpoint.io 并单击登录按钮。

这会将您带到一个页面,您可以在其中选择身份提供者并使用现有凭据登录。 从列表中选择 DigitalOcean 并使用您的 DigitalOcean 用户名和密码登录。

在下一页上,从可用云平台列表中选择 DigitalOcean。

您现在可以配置集群。 单击 EDIT 按钮以编辑 DigitalOcean 提供程序的设置:

这会将您带到“配置提供程序”屏幕。

Region 下拉列表中选择您选择的区域。 您可以将其他设置保留为默认值。 完成后点击提交

在下一个屏幕上,输入您选择的集群名称,然后单击 Submit

集群安装现在将开始,您将被带到一个页面,您可以在其中跟踪集群的进度。 安装大约需要 15 分钟。

配置集群后,我们可以设置一个命令行工具来使用它。

第 2 步 – 配置 Kubernetes CLI

要与在 DigitalOcean 中运行的 Kubernetes 集群通信,我们需要在我们的开发机器中安装一个命令行工具。 我们将使用 kubectl,Kubernetes 的 CLI。

运行以下命令从 Google 的服务器安装 kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl

你会看到这个输出:

Output % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed

100 63.7M  100 63.7M    0     0  5441k      0  0:00:12  0:00:12 --:--:-- 4644k

kubectl 二进制文件已下载到您的当前目录,让我们更改下载二进制文件的权限并将其移动到 /usr/local/bin 目录,以便我们可以在任何地方运行它:

chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

现在让我们将 kubectl 应用程序指向我们的 Kubernetes 集群。 为此,我们需要从 Stackpoint 下载配置文件。 在浏览器中返回集群状态页面。 验证集群准备就绪且稳定后,点击集群名称,如下图所示:

点击左侧菜单中的 kubeconfig 链接,将配置文件下载到本地机器:

返回终端,将环境变量 KUBECONFIG 设置为下载文件的路径。 假设您的文件下载到主目录中的 Downloads 文件夹,您将发出以下命令:

export KUBECONFIG=~/Downloads/kubeconfig

配置 kubectl 后,让我们确保我们可以与集群通信。

第 3 步 - 验证 Kubernetes 安装

现在我们已经有了完整配置的集群和客户端,让我们运行一些命令来验证环境。

运行以下命令以获取有关集群的信息。

kubectl cluster-info

你会看到这个输出:

OutputKubernetes master is running at https://139.59.17.180:6443

Heapster is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/heapster/proxy

KubeDNS is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/kube-dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

输出确认集群正在运行,并且 Kubernetes 主节点已启动并正在运行。

接下来,让我们验证主节点中运行的所有组件的健康状况。 如果集群刚刚配置,可能需要一段时间才能使所有组件显示健康状态。 这些组件是充当控制平面的 Kubernetes 主节点的一部分。

执行这个命令:

kubectl get cs

你会看到这个输出:

OutputNAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health": "true"}

最后,让我们列出正在运行的 Kubernetes 集群的所有节点。

kubectl get nodes

你会看到这样的输出:

OutputNAME                  STATUS    ROLES     AGE       VERSION
spc52y2mk3-master-1   Ready     master    29m       v1.8.5
spc52y2mk3-worker-1   Ready     <none>    22m       v1.8.5
spc52y2mk3-worker-2   Ready     <none>    22m       v1.8.5

这证实了具有一个 Master Node 和两个 Worker Node 的集群已经准备好供我们部署应用程序了。 因此,让我们将应用程序部署到集群中。

第 4 步 - 部署和访问应用程序

让我们启动一个简单的 Nginx Web 服务器并从我们的本地机器访问它的默认网页。 执行此命令从 Docker Hub 拉取 Nginx 映像 并创建一个名为 myweb 的部署:

kubectl run --image=nginx:latest myweb

此命令类似于 docker run 命令,不同之处在于它将容器打包并部署在称为 Pod 的特定于 Kubernetes 的工件中。 您将在本系列的下一部分中了解有关 Pod 的更多信息。

执行命令时,您将看到以下输出:

Outputdeployment "myweb" created

现在检查 Pod 是否使用 nginx 容器创建:

kubectl get pods

你会看到这个输出:

OutputNAME                     READY     STATUS    RESTARTS   AGE
myweb-59d7488cb9-jvnwn   1/1       Running   0          3m

要访问在 Pod 内运行的 Web 服务器,我们需要将其公开到公共 Internet。 我们使用以下命令实现这一点:

kubectl expose pod myweb-59d7488cb9-jvnwn --port=80 --target-port=80 --type=NodePort
Outputservice "myweb-59d7488cb9-jvnwn" exposed

Pod 现在暴露在集群的每个节点上的任意端口上。 --port--target-port 开关指示 Web 服务器可用的端口。 开关 --NodePort 确保我们可以使用集群上的任何 Node 来访问应用程序。

要获取 myweb 部署的 NodePort,请运行以下命令。

kubectl get svc myweb-59d7488cb9-jvnwn
OutputNAME                     TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
myweb-59d7488cb9-jvnwn   NodePort   10.3.0.119   <none>        80:31930/TCP   6m

在这种情况下,NodePort 是端口 31930。 每个工作节点都使用这个端口来响应 HTTP 请求。 让我们测试一下。

使用 DigitalOcean 控制台获取其中一个工作节点的 IP 地址。

使用 curl 命令向端口 31930 上的节点之一发出 HTTP 请求。

curl http://your_worker_1_ip_address:31930/

您将看到包含 Nginx 默认主页的响应:

Output<!DOCTYPE html>
<html>
  <head>
    <title>Welcome to nginx!</title>
...
     Commercial support is available at
     <a href="http://nginx.com/">nginx.com</a>.</p>
    <p><em>Thank you for using nginx.</em></p>
  </body>
</html>

您已成功将容器化应用程序部署到 Kubernetes 集群。

结论

Kubernetes 是一个流行的容器管理平台。 StackPoint 使在 DigitalOcean 上安装 Kubernetes 变得容易。

在本系列的下一部分中,我们将更详细地探索 Kubernetes 的构建块。