网络研讨会系列:Kubernetes入门

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

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

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

介绍

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

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

主节点公开了一个API,通过这个API命令行工具和富客户端提交一个包含应用程序定义的作业 每个应用程序由一个或多个容器 ,存储定义以及它们所暴露的内部和外部端口组成。 在主节点上运行的控制平面将容器安排在其中一个工作节点中。 当缩放应用程序时,控制平面将在任何可用的工作节点上启动附加容器。

有关Kubernetes的详细介绍,请参阅Kubernetes简介

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并单击登录按钮。

StackPoint网页

这将使您进入一个页面,您可以选择身份提供程序以使用现有凭证登录。 从列表中选择DigitalOcean并使用DigitalOcean用户名和密码登录。

选择提供者

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

选择DigitalOcean供应商

您现在可以配置群集。 点击编辑按钮编辑DigitalOcean提供商的设置:

DigitalOcean提供商概述

这将使您进入配置提供程序屏幕。

DigitalOcean提供商配置页面

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

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

输入群集名称

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

您的群集的状态

一旦配置了集群,我们就可以设置一个命令行工具来处理它。

第2步 - 配置Kubernetes CLI

要与在DigitalOcean中运行的Kubernetes群集交谈,我们需要在我们的开发机器中使用命令行工具。 我们将使用kubectlkubectl的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

你会看到这个输出:

 % 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链接,将配置文件下载到本地机器上:

IMG

回到终端,将环境变量KUBECONFIG设置为下载文件的路径。 假设你的文件被下载到主目录下的Downloads文件夹中,你可以在你的终端里发出这个命令:

export KUBECONFIG=~/Downloads/kubeconfig

通过配置kubectl ,让我们确保我们可以与我们的集群进行通信。

第3步 - 验证Kubernetes安装

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

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

kubectl cluster-info

你会看到这个输出:

Kubernetes 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

你会看到这个输出:

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

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

kubectl get nodes

你会看到这样的输出:

NAME                  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

这确认了具有一个主节点和两个工作节点的集群已准备好部署应用程序。 所以让我们将一个应用程序部署到集群。

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

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

kubectl run --image=nginx:latest myweb

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

当你执行命令时,你会看到这个输出:

deployment "myweb" created

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

kubectl get pods

你会看到这个输出:

NAME                     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
service "myweb-59d7488cb9-jvnwn" exposed

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

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

kubectl get svc myweb-59d7488cb9-jvnwn
NAME                     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地址。

Droplet

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

curl http://your_worker_1_ip_address:31930/

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

<!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的构建模块。