<$>[note] 本文补充了关于部署和管理云中的集装箱工作负载的Webinar系列(https://go.digitalocean.com/containers-and-microservices-webinars-series)。该系列涵盖了集装箱的基本内容,包括管理集装箱生命周期,部署多集装箱应用程序,扩展工作负载,以及与Kubernetes合作。
本教程包括系列中的第三个会话中的概念和命令,开始使用Kubernetes <$>
[youtube o0SXHuv2CVw 480 854 ]
介绍
在本系列中的前一篇教程中(https://andsky.com/tech/tutorials/webinar-series-building-containerized-applications),我们探讨了使用Docker Compose管理多容器应用程序,而Docker Command Line Interface(CLI)和Docker Compose可以部署和扩展运行在单一机器上的容器,Kubernetes(https://kubernetes.io/)旨在处理在多个机器或主机上部署的多容器应用程序。
Kubernetes 是一个开源集装箱编排工具,用于管理集装箱应用程序. 一个 Kubernetes cluster 有两个关键组件: Master Nodes 和 Worker Nodes. 一组主节点作为管理工作节点和部署应用程序的控制平面。
主节点呈现一个API,通过它命令行工具和丰富的客户端提交一个 job,其中包含一个应用程序的定义。每个应用程序由一个或多个 containers,存储定义和它们被曝光的内部和外部端口组成。
有关 Kubernetes 的详细介绍,请参阅教程 An Introduction to Kubernetes。
StackPointCloud通过基于Web的界面,在三个步骤中部署一个Kubernetes集群,通过简化用户体验来隐藏安装和配置Kubernetes的复杂性。DigitalOcean是StackPoint支持的云平台之一。不熟悉系统管理和配置的开发人员可以使用StackPoint快速在DigitalOcean上安装Kubernetes。有关支持的功能和定价的详细信息,请参阅他们的网站。
在本教程中,您将通过StackPoint在DigitalOcean上设置和配置Kubernetes,并向您的集群部署一个集装箱化应用程序。
前提条件
要遵循本教程,您将需要
- 安装了‘curl’命令的本地机器,您将使用它来下载命令行工具来管理您的Kubernetes集群。‘curl’命令已经安装在macOS和Ubuntu 16.04.
- 一个DigitalOcean帐户 在本教程中,您将使用StackPoint连接到您的DigitalOcean帐户并提供三个1GB的Dropplets。
步骤 1 - 安装 Kubernetes
要在 DigitalOcean 上开始安装 Kubernetes,请访问 Stackpoint.io并点击登录按钮。
这会带你到一个页面,在那里你可以选择一个身份提供商,并使用现有凭据登录。从列表中选择DigitalOcean,并使用你的DigitalOcean用户名和密码登录。
在下一页,从可用的云平台列表中选择DigitalOcean。
您现在可以配置集群。点击编辑按钮来编辑 DigitalOcean 提供商的设置:
这将带您到 Configure Provider 屏幕。
从 ** 区域** 下载列表中选择您所选择的区域. 您可以将其他设置留在其默认值。
在下一个屏幕上,输入您选择的集群名称,然后单击 ** Submit**。
集群安装将开始,您将被带到一个页面,在那里您可以跟踪集群的进展。
一旦集群已配置,我们可以设置一个命令行工具来使用它。
步骤 2 – 配置 Kubernetes CLI
要与在DigitalOcean运行的Kubernetes集群进行交谈,我们需要在我们的开发机器中使用命令行工具。
运行以下命令,从Google的服务器上安装kubectl
:
1curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
你会看到这个输出:
1[secondary_label Output]
2 % Total % Received % Xferd Average Speed Time Time Time Current
3 Dload Upload Total Spent Left Speed
4
5100 63.7M 100 63.7M 0 0 5441k 0 0:00:12 0:00:12 --:--:-- 4644k
kubectl
二进制被下载到您的当前目录,让我们更改下载的二进制的权限,并将其移动到/usr/local/bin
目录,以便我们可以从任何地方运行它:
1chmod +x ./kubectl
2sudo mv ./kubectl /usr/local/bin/kubectl
现在,让我们将kubectl
应用程序指向我们的Kubernetes集群。为了做到这一点,我们需要从Stackpoint下载一个配置文件。 回到浏览器中的集群状态页面。 验证集群是否准备好和稳定后,按下图所示的集群名称:
点击左侧菜单中的 kubeconfig链接,将配置文件下载到本地计算机:
回到您的终端,将环境变量KUBECONFIG
设置为下载文件的路径.假设您的文件被下载到您的主目录中的下载
文件夹中,您会发出此命令:
1export KUBECONFIG=~/Downloads/kubeconfig
有了kubectl
的配置,让我们确保我们可以与我们的集群进行通信。
步骤 3 – 检查 Kubernetes 安装
现在我们有完全配置的集群和客户端,让我们运行几个命令来验证环境。
运行以下命令来获取关于集群的信息。
1kubectl cluster-info
你会看到这个输出:
1[secondary_label Output]
2Kubernetes master is running at https://139.59.17.180:6443
3
4Heapster is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/heapster/proxy
5
6KubeDNS is running at https://139.59.17.180:6443/api/v1/namespaces/kube-system/services/kube-dns/proxy
7
8To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
输出确认集群正在工作,Kubernetes 主节点正在运行。
接下来,让我们检查主节点中运行的所有组件的健康状况。如果集群刚刚配置,则可能需要一段时间才能显示所有组件的健康状态。
执行此命令:
1kubectl get cs
你会看到这个输出:
1[secondary_label Output]
2NAME STATUS MESSAGE ERROR
3scheduler Healthy ok
4controller-manager Healthy ok
5etcd-0 Healthy {"health": "true"}
最后,让我们列出运行Kubernetes集群的所有节点。
1kubectl get nodes
你会看到这样的输出:
1[secondary_label Output]
2NAME STATUS ROLES AGE VERSION
3spc52y2mk3-master-1 Ready master 29m v1.8.5
4spc52y2mk3-worker-1 Ready <none> 22m v1.8.5
5spc52y2mk3-worker-2 Ready <none> 22m v1.8.5
这证实了一个主节点和两个工人节点的集群已经为我们部署应用程序准备好了,所以让我们向集群部署一个应用程序。
步骤 4 – 部署和访问应用程序
让我们启动一个简单的 Nginx 网页服务器,并从本地机器访问其默认网页,执行此命令将 Nginx 图像从 Docker Hub拉出并创建一个名为 myweb
的部署:
1kubectl run --image=nginx:latest myweb
这个命令类似于docker run
命令,但它包装和部署容器在一个名为 Pod 的 Kubernetes 特定的文物中。
当您执行命令时,您将看到此输出:
1[secondary_label Output]
2deployment "myweb" created
现在,检查使用nginx
容器创建了Pod:
1kubectl get pods
你会看到这个输出:
1[secondary_label Output]
2NAME READY STATUS RESTARTS AGE
3myweb-59d7488cb9-jvnwn 1/1 Running 0 3m
要访问Pod内部运行的Web服务器,我们需要将其暴露在公共互联网上。
1kubectl expose pod myweb-59d7488cb9-jvnwn --port=80 --target-port=80 --type=NodePort
1[secondary_label Output]
2service "myweb-59d7488cb9-jvnwn" exposed
现在,Pod在集群的每个节点上暴露在任意的端口上。--port
和--target-port
交换机表示网络服务器通过哪些端口可用。
要获取myweb
部署的NodePort,请运行以下命令。
1kubectl get svc myweb-59d7488cb9-jvnwn
1[secondary_label Output]
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3myweb-59d7488cb9-jvnwn NodePort 10.3.0.119 <none> 80:31930/TCP 6m
在这种情况下,NodePort 是端口 31930
. 每个 Worker Node 都使用该端口来响应 HTTP 请求。
使用 DigitalOcean 控制台获取工作节点之一的 IP 地址。
使用curl
命令将 HTTP 请求发送到端口31930
上的一个节点。
1curl http://your_worker_1_ip_address:31930/
您将看到包含 Nginx 默认主页的答案:
1[secondary_label Output]
2<!DOCTYPE html>
3<html>
4 <head>
5 <title>Welcome to nginx!</title>
6...
7 Commercial support is available at
8 <a href="http://nginx.com/">nginx.com</a>.</p>
9 <p><em>Thank you for using nginx.</em></p>
10 </body>
11</html>
您已成功部署一个集装箱化应用程序到您的 Kubernetes 集群。
结论
Kubernetes 是流行的集装箱管理平台,StackPoint 使在 DigitalOcean 上轻松安装 Kubernetes。
在本系列的下一部分中,我们将更详细地探索Kubernetes的建筑物。