如何在Ubuntu 18.04上使用Rancher 2.1,Kubernetes和Docker Machine设置多节点部署

[Rancher](https://rancher.com/)是一个流行的开源容器管理平台,2.0版本采用了Kubernetes。本教程将介绍如何在Ubuntu 18.04上使用Rancher,Kubernetes和Docker Machine设置多节点部署。

作者选择Code Org作为Write for DOnations计划的一部分进行捐赠。

介绍

Rancher是一个流行的开源容器管理平台。 Rancher 2.X于2018年初发布,适用于Kubernetes ,并采用了多工具管理和内置CI管道等新工具。 除了Kubernetes中已有的增强的安全性,可伸缩性和简单的部署工具之外,Rancher还提供了一个图形用户界面,使管理容器变得更加容易。 通过Rancher的GUI,用户可以管理机密,安全地处理角色和权限,扩展节点和pod,以及设置负载平衡器和卷,而无需命令行工具或复杂的YAML文件。

在本教程中,您将在Ubuntu 18.04上使用Docker Machine部署多节点Rancher 2.1服务器。 最后,您将能够通过Rancher UI配置新的DigitalOcean Droplet和容器盒,以快速扩展或缩小您的托管环境。

先决条件

在开始本教程之前,除了以下内容之外, 您还需要一个DigitalOcean帐户

  • DigitalOcean个人访问令牌,您可以按照本教程中的说明创建。 此令牌将允许Rancher拥有对您的DigitalOcean帐户的API访问权限。

  • 一个完全注册的域名,其A记录指向您在第1步中创建的Droplet的IP地址。您可以通过阅读DigitalOcean的域和DNS文档了解如何将域指向DigitalOcean Droplet。 在本教程中,将您的域名替换为example.com

第1步 - 创建安装了Docker的Droplet

要启动和配置Rancher,您需要创建一个安装了Docker的新Droplet。 为此,您可以使用DigitalOcean的Docker镜像。

首先,登录您的DigitalOcean帐户并选择Create Droplet 然后,在“ 选择图像”部分下,选择“ 市场”选项卡。 选择Docker 18.06.1~ce~3于18.04

从单击应用程序菜单中选择Docker 18.06图像

接下来,选择不小于2GB的Droplet,并为Droplet选择数据中心区域。

最后,添加SSH密钥,为Droplet提供主机名,然后按“ 创建”按钮。

服务器配置和Docker下载需要几分钟。 Droplet成功部署后,您就可以在新的Docker容器中启动Rancher了。

第2步 - 启动和配置Rancher

您在第1步中创建的Droplet将在Docker容器中运行Rancher。 在此步骤中,您将启动Rancher容器并确保它具有Let的加密 SSL证书,以便您可以安全地访问Rancher管理面板。 Let's Encrypt是一个自动化的开源证书颁发机构,允许开发人员免费提供九十天的SSL证书。

登录到您的新Droplet:

ssh root@your_server_ip

要确保Docker正在运行,请输入:

docker -v

检查列出的Docker版本是否符合预期。 您可以通过运行以下命令启动已安装Let's加密证书的 Rancher:

docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /host/rancher:/var/lib/rancher rancher/rancher --acme-domain example.com

--acme-domain选项从Let's Encrypt安装SSL证书,以确保您的Rancher管理员通过HTTPS提供服务。 此脚本还指示Droplet获取rancher/rancher Docker镜像,并在容器中启动Rancher实例,如果它意外停机,它将自动重启。 为了在数据丢失时简化恢复,脚本在包含Rancher数据的主机(在/host/rancher )安装卷。

要查看所有正在运行的容器,请输入:

docker ps

您将看到类似于以下内容的输出(具有唯一的容器ID和名称):

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                      NAMES
7b2afed0a599        rancher/rancher     "entrypoint.sh"     12 seconds ago      Up 11 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   wizardly_fermat

如果容器未运行,则可以再次执行docker run命令。

在您可以访问Rancher管理面板之前,您需要设置管理员密码和Rancher服务器URL。 Rancher管理界面将允许您访问所有正在运行的节点,pod和机密,因此使用强密码非常重要。

转到指向Web浏览器中新Droplet的域名。 第一次访问此地址时,Rancher将允许您设置密码:

使用提示设置Rancher密码

当询问您的Rancher服务器URL时 ,请使用Droplet指向的域名。

您现在已经完成了Rancher服务器设置,您将看到Rancher管理员主屏幕:

Rancher管理主屏幕

您已准备好继续Rancher群集设置。

第3步 - 使用单个节点配置群集

要使用Rancher,您需要创建一个至少包含一个节点集群 集群是一个或多个节点的组。 本指南将为您提供有关Kubernetes架构的更多信息。 在本教程中,节点对应Rancher将管理的Droplet。 Pod表示Droplet中一组正在运行的Docker容器。 每个节点都可以运行许多pod。 使用Rancher UI,您可以在基础Kubernetes环境中设置群集和节点。

在此步骤结束时,您将设置一个群集,其中有一个节点可以运行您的第一个pod。

在Rancher中,单击“ 添加群集” ,然后选择“ DigitalOcean”作为基础结构提供程序

从列出的基础架构提供商处选择DigitalOcean

输入群集名称并向下滚动到“ 节点池”部分。 输入名称前缀暂时Count保留为1 ,然后检查etcdControl PlaneWorker

  • etcd是Kubernetes的关键价值存储系统,用于保持整个环境的状态。 为了保持高可用性,您应该运行三个或五个etcd节点,这样如果一个节点出现故障,您的环境仍然是可管理的。
  • 控制平面检查环境中的所有Kubernetes对象(例如pod),并使用Rancher管理界面中提供的配置使其保持最新。
  • 工作人员运行实际工作负载和监视代理程序,以确保容器保持运行和联网。 工作节点是您的pod将运行您部署的软件的位置。

使用单个节点创建节点池

在创建群集之前,请单击“ 添加节点模板”以配置新节点的特定选项。

Access Token输入框中输入您的DigitalOcean个人访问令牌,然后单击Next:Configure Droplet

接下来,选择与第1步相同的RegionDroplet Size 。对于Image ,请务必选择Ubuntu 16.04.5 x64,因为目前Rancher和Ubuntu 18.04存在兼容性问题 点击“ 创建”以保存模板。

最后,单击“ 添加群集”页面上的“ 创建 ”以启动配置过程。 Rancher需要几分钟才能完成此步骤,但是当您完成此操作后,您将在DigitalOcean Droplets仪表板中看到一个新的Droplet。

在此步骤中,您已在下一部分中创建了将在其上部署工作负载的新集群和节点。

第4步 - 部署Web应用程序工作负载

新群集和节点准备就绪后,您可以在工作负载中部署第一个Pod Kubernetes Pod是Kubernetes和Rancher的最小工作单元。 工作负载描述了您一起部署的一组pod。 例如,您可以在单个工作负载中运行Web服务器的多个pod,以确保如果一个pod因特定请求而变慢,则其他实例可以处理传入请求。 在本节中,您将要将Nginx Hello World图像部署到单个窗格。

将鼠标悬停在标题中的Global上,然后选择Default 这将带您进入默认项目仪表板。 您将专注于在本教程中部署单个项目,但是从此仪表板还可以创建多个项目以实现隔离的容器托管环境。

要开始配置第一个窗格,请单击“ 部署”

输入名称 ,并将nginxdemos/hello放入Docker Image字段中。 接下来,将容器中的端口80映射到主机节点上的端口30000 这将确保您部署的pod在端口30000的每个节点上都可用。您可以将Protocol设置为TCP ,将下一个下拉设置为NodePort

注意:虽然这种在每个节点的端口上运行pod的方法更容易上手,但Rancher还包括Ingress ,以便为生产使用提供负载平衡和SSL终止。

用于部署Workload的输入表单

要启动窗格,请滚动到底部,然后单击“ 启动”

Rancher将带您回到默认项目主页,几秒钟后您的pod就会准备就绪。 单击工作负载名称下方的链接30000 / tcp ,Rancher将打开一个新选项卡,其中包含有关正在运行的容器环境的信息。

服务器地址,服务器名称和正在运行的NGINX容器的其他输出

您在此页面上看到的服务器地址和端口是内部Docker网络的地址和端口,而不是您在浏览器中看到的公共IP地址。 这意味着Rancher正在工作并将流量从http:// first_node_ip :30000/路由到预期的工作负载。

此时,您已成功将一个Pod的第一个工作负载部署到单个Rancher节点。 接下来,您将了解如何扩展Rancher环境。

第5步 - 扩展节点和窗格

Rancher为您提供了两种扩展托管资源的方法:增加工作负载中的pod数量或增加群集中的节点数量。

将pod添加到工作负载将为您的应用程序提供更多运行流程。 这将允许它处理更多流量并实现零停机时间部署,但每个节点只能处理有限数量的pod。 一旦所有节点都达到其pod限制,如果要继续扩展,则必须增加节点数。

另一个考虑因素是,虽然增加pod通常是免费的,但您必须为添加到环境中的每个节点付费。 在此步骤中,您将向上扩展节点和窗格,并将另一个节点添加到Rancher群集。

注意:本教程的这一部分将通过API自动配置新的DigitalOcean Droplet,因此请注意,在第二个节点运行时,您将产生额外费用。

通过从顶部导航栏中选择Cluster: your-cluster-name ,导航到Rancher安装的群集主页。 接下来,单击顶部导航栏中的“ 节点 ”。

使用顶部导航栏下拉列表选择您的群集

此页面显示您当前在群集中有一个正在运行的节点。 要添加更多节点,请单击“ 编辑群集” ,然后滚动到页面底部的“ 节点池”部分。 单击“ 添加节点池” ,输入前缀,然后选中“ 工作程序”框。 单击“ 保存”以更新群集。

仅将节点池添加为工作程序

在2-5分钟内,Rancher将配置第二个Droplet并在集群的仪表板中将节点指示为Active 第二个节点只是一个worker,这意味着它不会运行Rancher etcd或Control Plane容器。 这使工作人员能够更多地运行工作负载。

注意:拥有数量不均匀的etcd节点将确保它们始终达到法定人数(或达成共识)。 如果您只有一个etcd节点,那么如果该节点出现故障,则存在无法访问群集的风险。 在生产环境中,运行三个或五个etcd节点是一种更好的做法。

当第二个节点准备就绪时,您将能够通过在浏览器中导航到http:// second_node_ip :30000/来查看在此节点上的上一步中部署的工作负载。

扩展节点为您提供了更多的Droplet来分配您的工作负载,但您可能还希望在工作负载中运行每个Pod的更多实例。 要添加更多pod,请返回Default项目页面,按hello-world工作负载左侧的箭头,然后单击+两次以添加两个pod。

在工作负载中运行三个Hello World Pod

Rancher将自动部署更多pod,并根据可用性的位置将运行容器分发到每个节点。

您现在可以扩展节点和窗格以满足应用程序的要求。

结论

您现在已经在Ubuntu 18.04上使用Rancher 2.1设置了多节点部署,并且已经扩展到工作负载中的两个运行节点和多个pod。 您可以使用此策略来托管和扩展您需要在应用程序中运行的任何类型的Docker容器,并使用Rancher的仪表板和警报来帮助您最大化每个群集中的工作负载和节点的性能。


分享按钮