如何创建高效、经济的Kubernetes集群

简介: 操作起来要简单快速,既要高效又要省钱,这样的Kubernetes集群怎么搭?Kubernetes是我主要学习的主题之一。我知道不光是我,还有一定数量的人愿意在工作之余进一步使用和研究它。本文是介绍关于如何创建一个高效的Kubernetes集群,用于在Scaleway上使用Terraform和Rancher 2.x的开发目的。


操作起来要简单快速,既要高效又要省钱,这样的Kubernetes集群怎么搭?


Kubernetes是我主要学习的主题之一。我知道不光是我,还有一定数量的人愿意在工作之余进一步使用和研究它。

本文是介绍关于如何创建一个高效的Kubernetes集群,用于在Scaleway上使用Terraform和Rancher 2.x的开发目的。我假设你已经知道了(或者至少听过):
  • Kubernetes
  • Terraform
  • Rancher
  • Scaleway
  • Cloudflare

概 述

下图的概要描述了本文尝试实现的内容:



部署工作大部分将由Terraform自动完成。我们将创建一个Rancher服务器,在上面添加Rancher代理来创建和管理Kubernetes集群。域解析也将由Terraform自动配置到Cloudflare。所有的服务器都将部署到Scaleway上,而且它们非常的便宜(在撰写本文时Start1-S服务器只花费€3.99/mo和€0.008/小时!)

为什么选择Rancher?

如果你想从头开始学习Kubernetes成为一名kubectl魔术师,这个出发点不错,我不反对。不过在我看来,仅仅是学习Kuberenetes是不够的,更重要的是你想用它做什么,你想实现什么。比如,我经常开发微服务和功能来进行测试(特别是webhook集成),并在Kubernetes上运行它。当然,在管理Kubernetes方面kubectl起到了很大的帮助,但是当我想检查某些服务的日志或创建一些secrets时,我不得不使用kubectl输入大量命令创建出大量的清单,这些常让我感到疲惫。有时候我只是想简单地部署一下资源,并不使用清单。我知道有很多工具(如stern、ksonnet等等)可以帮助实现这些工作流,但是我从Rancher 1.x开始就是忠实用户了,知道他们的UI可以让工作变得更简单直观。这也是我为什么在这个工具集中包含Rancher的原因。

让我们开始吧!

话不多说,我们开始部署一些资源吧。这儿有一些准备工作:
  • 准备一个Scaleway账号
  • 准备一个Cloudflare账号
  • 在Cloudflare中设置至少1个zone(你可以得到一个免费的服务域比如Freenom)
  • 克隆kenfdev/rancher-scaleway仓库
  • 安装terraform
  • 安装kubectl

我不会详细解释这些内容,因为如果都写的话这篇文章得爆炸了。你可以自己搜索找到相关的资源。

在这里有一个重要的提示。我们将在Scaleway上部署服务器,这些都不是免费的。所以事先要确认这一点,它会花费一些钱(不过Scaleway非常便宜)。我不会对这些成本承担任何责任,所以如果你完成了,一定要破坏掉它们。

从Scaleway获取信息

我们将在Scaleway上自动部署服务器,为此,我们需要有一个token。在Scaleway中转到Credentials页面并点击Create new token。把Secret key记录下来,因为我们之后会用到这个。



同时,前往Account页面找到ORGANIZATION ID做好记录。到现在为止你已经完成了Scaleway的部分,Terraform会处理好其他事情。



从Cloudflare获取API token

我们需要为创建的Rancher服务器设置DNS,为了实现这一点,我们需要获得Cloudflare的API token。前往Cloudflare下的My Profile,可以在这里找到API Keys。如下图所示点击Global API Key的View按钮。



现在记录下这个token,到这里收集信息的工作结束了。

为Rancher服务器准备Terraform资源

现在我们已经有了需要收集的信息,那么下一步就是用Terraform来部署了。先去克隆kenfdev/rancher-scaleway仓库。

首先,前往rancherserver目录,按照terraform.tfvars.sample创建一个tfvars文件,打开它:



tfvars文件看起来像这样:



需要对这些内容做修改:
  • scw_token – 你的Scaleway Secret Token
  • scw_org – 你的Scaleway Organization ID
  • admin_password – 你将在Rancher服务器使用的密码
  • rancher_server_url – Rancher服务器所使用的URL。Terraform会为你的cloudflare zone设置一个rancher子域名。所以如果你的zone名为example.com,那么terraform会创建一个记录链接到rancher.example.com。
  • cloudflare_email – 你Cloudflare中的Email
  • cloudflare_token – 你Cloudflare的API token
  • cloudflare_zone – 你的Cloudflare zone

你也可以根据你自己的需求修改其他变量。

部署Rancher Server

现在我们准备好了,用Terraform来进行部署吧!点击terraform apply你会看到像下面这样的显示:



5个资源?

“为什么是5个资源?我们刚刚不是只部署了1个服务器吗?”你可能会这么问,其实我们确实部署了不止一个资源,我们部署了:
  • 1个服务器(Rancher服务器)
  • 1个为cloud-init进程引导Rancher服务器的用户数据
  • 1个安全组
  • 1条附加到安全组来控制流量的规则
  • 1条指向Rancher服务器的Cloudflare DNS记录

这样便添加了5个资源,现在点击yes。如果一切进行顺利,你应该能看到这样的信息:



如果检查Scaleway的话:



看起来服务器是部署好了,那DNS如何呢?



它看起来也添加到了Cloudflare!现在我们用这个地址访问Rancher服务器:

https://rancher.your.zone/

如果你使用的是Chrome的话应该会看到警告提示



这是因为你还没有给服务器设置合法的SSL证书。单击左下角的按钮,忽略警告并强制访问页面。



瞧!我们用1条命令部署了一个带有DNS的Rancher服务器!很酷吧!输入你保存在tfvars中设置的密码,应该能登陆了。



现在你有了一个正在工作的Rancher服务器!你可以在UI上开始为各个位置创建Kubernetes集群,不过本文不会介绍这些用例。取而代之的,我们将在这里使用Terraform,在Scaleway上创建Rancher代理,自动设置这些由Rancher服务器管理的集群。

为Rancher代理准备Terraform资源

返回kenfdev/rancher-scaleway仓库。现在,前往rancheragent目录。同样复制一份terraform.tfvars.sample给terraform.tfvars。



现在打开terraform.tfvars:



和Rancher服务器时一样填入凭证信息,这里列出一些要记住的变量:
  • rancher_server_address – Rancher Serve的地址,它可能是一个IP或者域名,不过我建议你在之前的步骤中设置成域名
  • count_agent_all_nodes – 统计创建的拥有all roles(etcd, controlplane, worker)的节点数。如果你只是取体验一下Kubernetes集群,那么有一个就足够了。
  • count_agent_etcd_nodes – 统计创建的拥有etcd role的节点数
  • count_agent_controlplane – 统计创建的拥有controlplane role的节点数
  • count_agent_worker_nodes – 统计创建的拥有worker role的节点数

部署Rancher代理

现在再一次点击terraform apply,将rancher代理部署到Scaleway上。



选择yes,服务器就部署好了。几分钟后你可以看到资源部署完毕:



同时,在Rancher服务器的UI下,你可以看到一个新的集群注册好了。



再过一会,你可以看到Kubernetes集群部署完毕(Active)!





这也很酷对吧?我们可以在Internet(Scaleway)上创建自己的Kubernetes集群,而这仅仅通过几行命令!

测试Ingress控制器

现在我们可以使用Kubernetes集群了,让我们看看Nginx Ingress控制器是否按照预期工作。在rancheragent目录中,打开dns.tf 文件并添加下面的信息:



这将创建一个Cloudflare记录来指向具有all roles的Rancher代理节点。点击terraform apply,在Cloudflare设置DNS。

现在我们访问 http://default.your.zone  ,我们还没有在集群上配置任何Ingress,因此需要访问默认后端。



嘿!我们可以看到Ingress控制器正按我们期望的运作着。

通过kubectl访问集群

最后,我们来试试能不能通过kubectl访问这个集群。拉取kubeconfig十分容易。只要在集群层找到按钮即可:



把config文件复制或者下载到model上:



用kubectl和KUBECONFIG获取一些信息



成功获得了关于节点的信息,pods又是如何呢?



只用了简单的kubectl就能轻松获得信息,你也可以通过Rancher UI或者kubectl部署资源。

清 理

如果你想继续使用集群,你可以从这时起继续使用,不过我下面要介绍的是如果你已经使用完毕,该如何把这一切清理掉。

破坏掉Rancher代理和Cloudflare资源

执行下面的命令:



销毁Rancher服务器和Cloudflare资源



确保Scaleway上没有任何资源了(只有默认的安全组)。否则你还要为这些资源付费。



本文转自DockOne- 如何创建高效、经济的Kubernetes集群
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
4天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
17 4
|
2月前
|
Kubernetes Ubuntu 应用服务中间件
在Ubuntu22.04 LTS上搭建Kubernetes集群
在Ubuntu22.04.4上安装Kubernetes v1.28.7,步骤超详细
337 1
在Ubuntu22.04 LTS上搭建Kubernetes集群
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
22天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
11天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
53 17
|
24天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
17 0
|
25天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
106 0
|
1月前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
219 0
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
27 0

推荐镜像

更多