10个步骤成为K8S云原生工程师

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 10个步骤成为K8S云原生工程师

看到这篇文章的时候,你很可能已经了解到了使用 kubernetes 管理多服务架构的好处。本文不会讨论为什么要使用 kubernetes,而是重点讨论你已经确定将kubernetes作为你的解决方案后,如何使用它。

网上有许多 kubernetes 的学习资源,这当然很好,但这也使得我们很难知道从哪里以及如何开始学习这项庞大的技术。本文将提供一系列学习路径和资源,涵盖在 K8s 集群上运行应用程序微服务的不同方面。

我们将介绍一些概念,并为实际的学习提供外部资源,这将是你成为全面的 K8s 工程师的一站式指南。



一、十个步骤

STEP 1:在本地安装 Minikube 并熟悉 Control Plane 组件

Minikube 将为我们模拟一个多服务集群环境,它安装快速简便,文档可在此处找到。Minikube 比较占用机器资源(它非常占用 RAM),因此请记住这一点。

了解 k8s 集群组件的作用很重要。在继续第 2 步之前,请访问此简短教程。关注驻留在Control Plane(主节点)上的组件。

  1. Kube-apiserver:为k8s api对象(如pods)配置数据
  2. Kubelet:向 api-server 注册一个节点
  3. Kube-controller-manager:一个嵌入 k8s 核心控制循环的守护进程
  4. Kube-scheduler:确定哪些节点是每个 Pod 的有效位置
  5. Kube-proxy:将发往服务的流量定向到正确的后端 Pod

STEP 2:安装并熟悉 Kubectl

kubernetes命令行界面或 Kubectl 用于从主节点(稍后讨论)或您的本地机器向 K8s 环境中的工作节点发出调度命令。要安装命令行工具,请单击此处。您可以此处学习基本命令,但我强烈建议您在深入了解 Kubectl 之前先完成第 3 步并了解不同类型的 k8s yaml 配置对象。

STEP 3:了解不同的 yaml k8s api 对象

我认为最省时的方法是在高层次上学习核心 K8s 配置 yaml api 对象的目的。

不要记住文件结构或语言,因为 Helm(在下一步中有详细说明)会自动创建 yaml 配置结构。此处有个简短的教程,重点了解以下各项的作用:

  1. 部署
  2. 服务
  3. 服务帐户
  4. ingress(不要与后面讨论的 nginx-ingress-controller 混淆)
  5. hpa(水平 pod 自动缩放器)
  6. ConfigMap 和 Secrets

STEP 4:使用 Helm 为你的各种微服务编写 yaml 自定义文件

Helm 自动为您创建的每个“chart”创建默认的 yaml 配置文件。每个“chart”代表您架构中的一个单独的微服务。“chart”目录包含在集群上部署此微服务所需的所有配置文件。由于微服务是使用定义文件部署的,因此可以灵活轻松地更改和重新部署。最佳实践是将所有 helm 目录推送到(私有)git 存储库中,以便您稍后可以使用单个命令在不同的集群上重新安装所有服务。“动态” kubectl 命令不提供这种可重用性。

在大多数情况下,需要在每个Helm Chart中编辑的唯一文件是 values.yaml 文件。该文件为每个微服务创建了一个“单一的事实来源”。有关如何创建 Helm 图表的完整指南,我们会放在另一篇文章

STEP 5:使用 KOPS 构建具有工作节点自动缩放功能的高可用云设置

一旦您看到您的 Helm chart服务在 Minikube 中成功相互通信,您就正式准备好设置云环境了。高可用云设置被定义为在不同区域中至少有两个工作节点,每个节点托管您的应用程序入口控制器和服务。如果一个数据中心因风暴着火,另一个节点驻留在一个完全不同的“计算机群”中,并将继续不间断地处理传入请求。您的最终客户将不受干扰。不用担心,K8s 会在几分钟内自动创建在火灾中丢失的 Node 工作线程。

第一步,从您的云提供商处购买一台便宜、低 CPU/RAM 的机器。在这台便宜的机器上安装 Kubectl、KOPS 和 Helm。这台机器将被称为主节点,它将负责连接、交互和设置集群和驻留在其中的 pod。详细介绍,我们会在另一篇文章说明。

确保将所有 KOPS 命令记录在 sh 脚本文件中,这样您的基础设施构建过程就会被记录为代码,并且可以轻松复制,以防出现可能需要重新设置集群的错误。“基础设施即代码”的概念通过使用 KOPS 和 Helm 得到了很好的体现。

STEP 6:设置您的 Nginx 入口控制器和微服务入口 yaml 以满足您的需求

Nginx 入口控制器将管理到集群的流量。它可以配置为向服务提供外部可访问的 URL、负载平衡流量、终止 SSL/TLS 并提供基于名称的虚拟主机。下一篇文章我们将带您逐步了解如何部署带有 aws LoadBalancer 的 Nginx 入口控制器。

Helm 自动创建的入口 yaml 定义文件是不同的。它提供特定于服务的入口配置。annotations 字段是您定义 https 转发规则、任何请求大小限制和超时或与传入请求处理相关的其他重要配置的地方。这些规则通常会因集群中的服务而异,这就是为什么每个微服务都有自己的入口。

STEP 7:理解pod水平自动伸缩和集群自动伸缩的关系

您的某些服务可能需要定义一个 hpa(水平 pod 自动缩放器)yaml 文件以允许自动缩放。调度程序将根据您在部署 yaml 文件中定义的 cpu/ram 阈值自动生成更多 pod。一旦 Node 用 Pod 填满了它的资源限制,它就会自动创建一个额外的 Node 并在其上恢复 Pod 的调度。类似地,如果微服务上的工作负载下降,k8s 将神奇地“释放”或终止它产生的 pod 以及它在变得不必要时自动创建的新节点。

STEP 8:使用 taints、tolerations、affinity 和 anti-affinity 将 pod 自动安排在适当的节点上

“污染”节点,包括在其上放置一个标签,部署可以“容忍”(或换句话说,允许在被污染的节点上进行调度)或不允许(禁止调度)。Tolerations 在部署 yaml 文件的 pod spec 部分中指定,而污点则使用 Node.js 上的 Kubectl 命令进行标记。官方文档可以在这里找到。

一个类似的 yaml 配置调度功能是节点选择器 pod 规范。它赋予 Pod 对特定节点污点的亲和(或喜欢),或对节点污点的反亲和(不喜欢)。当尝试在具有特殊功能(高 CPU、GPU、高内存)的节点上调度特定 pod 时,节点亲和性非常强大。它最常用于防止在主节点上调度 Pod(为控制平面 Pod 保留)。

有时希望确保两个 Pod 不会自动部署到同一台机器上。为此,我们有Pod 间关联规则。例如,假设我们有两个 Pod(属于相同的部署/副本集),每个都需要 70% 的节点 CPU。在这种情况下,我们每个节点只能运行一个 Pod,两个 Pod 会导致 CPU 过载。一个不需要资源跟踪的简单解决方案是在部署中放置一个 pod anti-affinity 到它自己。这将实现每个工作节点关系一个 pod。

STEP 9:使用 Prometheus 和 Grafana 进行监控

最基本的性能监控工具是指标服务器。这是使用水平 pod 自动缩放器的基本先决条件,您可以使用它执行“Kubectl top”命令来检索 pod 或节点的 CPU 使用率。这很重要,因为在 K8s 中,每个设置为水平自动缩放的部署都必须在 yaml 配置中定义 CPU/RAM 要求(和限制)。

请注意,您可能会发现指标服务器本身并没有提供足够的洞察力。如果您的服务是 RAM/CPU 密集型的,您将需要一个可视化工具来精确测量每个 Pod 的资源使用情况。更好的监控意味着更少的意外和更少的 Pod 由于限制过度使用或技术术语 OOM 终止而崩溃。

我们会在另一篇文章中介绍有关如何使用helm charts安装 Grafana 和 Prometheus 的详细指南。Prometheus 将测量资源使用情况,而 Grafana 提供了一个可视化界面,用于在 x 时间轴上查看不同的资源指标。

STEP 10:使用 Elastic Search 和 Kibana 聚合日志记录

可以使用以下命令查看每个 pod 的实时 STDOUT:

kubectl logs -f <insert-pod-name>

这本身是不够的。

日志查看器显示 pod 写入 STDOUT 的最新打印的一部分。我们需要查看日志的一个常见原因是错误导致 pod 崩溃。在 pod 崩溃的情况下,日志将被擦除,并且无法恢复它们或调查源错误。

这个时候就得Elastic Search登场了!

它很容易与 Helm Charts 一起安装,并将集中和记录集群中所有 pod 的所有日志。Kibana 将为我们提供一个界面,我们可以从中搜索日志,或者缩小属于特定 pod 或时间段的日志。


二、总结

近期我们将提供一套免费的课程。它涵盖了我上面讨论的所有内容甚至更多,对于那些喜欢动手实践的人来说,这将会是一套非常全面的课程。



文丨Soundhearer

图丨来源于网络



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
83 5
|
5天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
23 1
|
9天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
10天前
|
存储 运维 Kubernetes
云原生之旅:Kubernetes的弹性与可扩展性探索
【10月更文挑战第32天】在云计算的浪潮中,云原生技术以其独特的魅力成为开发者的新宠。本文将深入探讨Kubernetes如何通过其弹性和可扩展性,助力应用在复杂环境中稳健运行。我们将从基础架构出发,逐步揭示Kubernetes集群管理、服务发现、存储机制及自动扩缩容等核心功能,旨在为读者呈现一个全景式的云原生平台视图。
23 1
|
15天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
47 4
|
16天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
48 3
|
20天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
31 3
|
19天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
26天前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。