Kubernetes应用程序开发认证(CKAD)学习指南-第1章 考试详情和考试资源

第1章 考试详情和资源

在这个介绍性的章节中,我想解决计划准备并成功通过认证Kubernetes应用程序开发人员(CKAD)考试的考生经常问的最棘手的问题。我们将不讨论实际的Kubernetes概念或如何应用它们,而是在高层次上讨论认证和必要的技能。

考试目标

越来越多的应用程序开发人员发现自己的项目正在从单一的体系结构模型过渡到小规模的、内聚的和容器化的微服务。这两种方法各有利弊,但我们不能否认Kubernetes已经成为事实上的运行时平台,用于部署和操作应用程序,而无需担心底层的物理基础设施。

现在,在目标运行时环境中部署和监控他们的应用程序不再是管理员或发布管理人员的专属责任。应用程序开发人员需要看到他们的应用程序从开发到操作的全过程。像Netflix这样的公司就有这种文化,所以你作为应用程序开发者,要对设计决策和解决生产中的问题负全部责任。现在比以往任何时候都更重要的是理解Kubernetes的功能、如何正确地应用相关概念以及如何与平台交互。

CKAD考试是专门为需要在Kubernetes上设计、构建、配置和管理云本地应用程序的应用程序开发人员而设计的。

在考试中使用的KUBERNETES版本

在写作时,该考试基于Kubernetes 1.18。本书的所有内容都将遵循该特定版本的特性、api和命令行支持。未来的版本肯定会破坏向后兼容性。在准备认证时,请审查Kubernetes发布说明,并使用考试期间使用的Kubernetes版本进行练习,以避免不愉快的意外。

 

课程总体来看,课程涵盖以下主题。每个主题在总分中所占的比重不同:

  • 13% - 核心概念

  • 18% - 配置

  • 10% - 多容器pod

  • 18% - 可观测性

  • 20% - pod设计

  • 13% - 服务和网络

  • 8% - 状态持久性

请注意

这本书的大纲完全符合CKAD的课程要求。虽然Kubernetes课程可能有一个更自然的教学组织结构,但课程大纲将帮助考生通过关注特定主题来准备考试。因此,你可以根据现有的知识水平来交叉引用这本书的其他章节。

 

让我们详细分解每个领域,并确定它们实际需要什么:

核心概念

Kubernetes环境由一组对象(也称为原语)定义。每个Kubernetes对象表示系统的特定功能。你可能会问,为什么它们被称为“对象”?在Kubernetes的早期,源代码是用Java实现的,Java中有表示系统中特定类型的类的概念。当前代码是用Go编写的,但术语保留了下来。考试的这一部分涵盖了Kubernetes对象的一般结构及其在YAML中的表示。您需要熟悉从命令行创建、删除和修改Kubernetes对象的不同方法。Kubernetes对象模型中最重要的对象是Pod。Pod是用来部署应用程序并在容器中运行它的工具。本节主要介绍Pod管理的基础知识:创建、配置和检查Pod。

配置

考试的这一部分主要在其他Kubernetes对象的帮助下,深入讲解了Pods的高级配置选项。ConfigMaps和Secrets有助于在运行时集中Pod所需的配置数据。您必须了解如何创建和使用这两个概念。此外,本节还介绍了使用安全上下文为容器定义特权和访问控制的来由。ResourceQuota限制授予名称空间的CPU和内存等资源的数量。作为考试的一部分,需要知道如何定义这样的资源限制以及容器的最小和最大资源边界。最后,本节介绍Kubernetes对象Service Accounts,它允许定义在Pod中运行的进程的标识。

多容器POD

通常,POD只包含一个容器。有一些可行的用例需要在一个Pod中运行多个容器。在考试中,需要理解init容器和为多容器pod建立的各种模式。课程明确地列出了您需要熟悉的三种模式:sidecar模式、适配器模式和ambassador模式。

可观察性

容器并不总是走在幸福的道路上。就像在现实生活中,事情可能会出错,这没什么;然而,我们需要能够恰当地处理它。Kubernetes提供准备、活动和启动的探查工具,它们可以识别在容器中运行的应用程序的健康状态,并可能相应地采取行动纠正故障情况。有时候,我们别无选择,只能深挖。您必须了解如何调试使用经过验证的缓解策略失败的容器。虽然这一部分也涉及到监控,但它在考试题目列表中并不是很高,因为它需要使用商业产品。它与考试的关系可能是无关紧要的。

POD设计

在Kubernetes中,标签是一个完整的概念。它们是用于查询、排序和过滤Kubernetes对象的键值对。虽然注解(annotations)看起来与标签很相似,但它们有不同的用途。对于考试,需要理解标签和注解,以及如何应用这些概念来解决不同的用例场景。本节还将介绍Deployments对象,因此请确保您完全理解Deployments的复制和可伸缩性特性。此外,练习使用job来运行批处理操作,使用CronJobs来运行应该在特定时间运行的操作。

服务和网络

服务是一组Pods之上的抽象层,提供了定义网络通信的单一接口。需要了解如何创建这样的服务、它的端口映射机制以及不同类型的服务。网络策略描述了Pods传入和传出流量的访问规则。在定义网络策略的上下文中,要很好地处理标签选择器、端口规则和典型的用例,这些用例可能受益于应用网络策略来加强安全性。

状态的持久性

容器中的应用程序只对容器的文件系统执行文件I/O。如果读/写位置与外部挂载没有关联,那么这些文件将在容器生命周期结束时丢失。本节介绍用于读写数据的不同类型的卷。了解如何创建和配置它们。持久卷确保了即使在集群节点重新启动之后,数据也能持久存在。需要熟悉机制以及如何将持久卷挂载到容器中的路径上。

考试的主要目的是测试你对Kubernetes原语的实用知识。可以预期的是,考试时会将多个概念结合在一个问题中。图1-1给出了Kubernetes资源及其关系的大致指南。

图片

图1-1. Kubernetes与考试有关的原语

您可能已经注意到,考试并没有涵盖您期望在图中找到的所有Kubernetes资源。Kubernetes的某些原语,如ReplicaSet, StatefulSet或Ingress并没有进入课程,这意味着你不一定要学习它们。尽管如此,在高层次上了解并理解重要的概念还是一个好主意。

虽然本书涵盖了图中显示的所有Kubernetes资源,但要解释所有可以想象的场景和配置选项几乎是不可能的。使用以下章节中解释的信息作为起点,进行更深入的研究。不要害怕去探索未知的领域!

考试环境和技巧

考试在网上进行和监考。因此,你可以在舒适的家里报名参加考试。建议你清理一下办公桌,确保一个安静的环境,不要被其他人的干扰或噪音干扰。考试代表将通过视频和音频监视你。作弊行为将导致你的考试被提前终止。

考试包括一些实际问题,你必须在两个小时的时间内解决。您将使用一组预先配置好的Kubernetes集群。这些练习的重点是模拟使用Kubernetes的应用程序开发人员可能遇到的典型情况。

进入考试环境后,您将看到一个基于web的命令行环境。大部分的交互都发生在终端里。我个人觉得终端有点滞后——我输入的任何东西都要过一会儿才会显示在屏幕上。请注意,该终端没有为kubectl命令提供任何复杂的自动完成功能。

允许您在单个浏览器选项卡中访问和浏览Kubernetes文档。在准备考试的过程中,阅读大量的信息至少一次。虽然你可以参考文档中的任何内容,但要知道在哪里以及如何找到相关的信息,以避免花费太多的时间浏览。不要打开指向外部web页面的链接,即使Kubernetes文档中引用了这些链接。我大量使用了文档页面的搜索功能,它帮助我快速地根据搜索词找到正确的信息。此外,我想向您介绍文档中的两个精华:kubectl备忘单和API参考。这两页都可以作为快速参考指南。你不能提前打印出来,但你可以在考试期间打开一个选项卡。有关考试环境的更多信息,请参见认证项目的常见问题。

考生的技能

该认证假定您已经对Kubernetes有了基本的了解。您应该熟悉Kubernetes的内部特性、其核心概念和命令行工具kubectl。CNCF为初学者提供免费的“Kubernetes入门”课程。

您的背景可能更偏向于应用程序开发人员,尽管您最习惯的编程语言并不重要。为了提高你通过考试的可能性,你应该具备以下背景知识:

Kubernetes的架构和概念

CKAD考试不会要求您从头安装Kubernetes集群。阅读Kubernetes及其架构组件的基础知识。不要期望在考试中遇到多项选择题。

kubectl CLI工具

kubectl命令行工具是您将在考试期间使用的与Kubernetes集群交互的工具。即使您只有很少的时间准备考试,练习如何操作kubectl以及它的命令和相关选项也是很重要的。在考试期间,您将无法访问web仪表板UI。

具备Docker的工作经验

Kubernetes默认使用Docker来管理镜像。你不需要运行Docker命令,尽管理解它的基本概念并知道如何从命令行操作它是很有用的。至少要理解dockerfile、镜像、容器以及它们对应的CLI命令。

其他相关工具

Kubernetes对象由YAML或JSON表示。本书的内容将只使用YAML中的示例,因为在Kubernetes世界中,YAML比JSON更常用。您必须在考试期间编辑YAML以声明方式创建一个新对象,或者在修改活动对象的配置时。确保您对基本YAML语法、数据类型和符合规范的缩进有了很好的理解。您可能会问,如何编辑YAML定义?当然是从命令行终端。考试终端环境已经预装了vi和vim工具。练习常用的键盘快捷键操作,特别是如何退出编辑器。我想提到的最后一个工具是GNU Bash。您必须理解脚本语言的基本语法和操作符。您完全有可能阅读、修改甚至扩展在容器中运行的多行Bash命令。

时间管理

我之前提到过你们有两个小时的时间来解决面前的问题。虽然两个小时听起来很长,但实际上并不是。准确地说,每个问题的平均答题时间是6.4分钟。考试的时间是非常有限的。它的设计目的是让您处于压力之下,以确保您对Kubernetes的知识已经深入到肌肉记忆中。

我可以给你提供一些时间管理技巧,这些技巧帮助我最大限度地利用我所分配的时间。考试将会给你一系列复杂程度不同的问题。从第一个问题开始是个好主意。如果你不能马上解决问题,或者只是部分地解决问题,那就转到下一个问题。你迟早会遇到一个你可以快速自信地解决的问题。先解决简单的问题会帮助你得分。

在一个难的问题上卡住并浪费太多时间是没有意义的。当我自己参加考试的时候,我有一道题完全没有解,还有一道题在我的时间用完之前只解了一部分。尽管如此,我还是通过了考试,这说明我要把注意力集中在得分上。

记笔记

考试环境提供了一个小记事本,您可以使用它来跟踪未解决的问题。简单地写下你计划稍后再回顾的问题

 

命令行提示和技巧

让我为您提供一些操作命令行的额外提示和技巧。他们不仅帮助我管理时间,也帮助我避免在考试中犯错。

设置上下文和名称空间

考试中的每个问题都要求您对考试提供的Kubernetes集群和名称空间进行操作。问题的介绍性文本清楚地说明了您需要运行的命令。不要忘记执行该命令,特别是当您在不同的问题之间快速来回跳转时。

您可能不会在日常工作中使用Kubernetes中的名称空间,特别是在较小的组织中,它们可能只是在默认名称空间中管理Kubernetes对象。考试大量使用了自定义名称空间。您可以决定在完成考试时为每个命令拼写出名称空间;但是,这种操作模式有忘记设置名称空间的风险。

为了避免问题,在处理问题的步骤之前,运行下面的命令一次。该命令同时设置上下文和命名空间:

$ kubectl config set-context <context-of-question> --namespace=<namespace-of-question>

 

使用kubectl的别名

kubectl命令行工具是Kubernetes集群的主要接口。对于需要执行的每个命令,都必须在终端中输入kubectl。你可能会说,没什么大不了的。为您自己做点好事,定义一个shell别名作为引用kubectl命令的快捷方式。我个人更喜欢使用单字母命令k。你只需要在考试开始时设置一次别名,这样你以后每次运行命令都可以节省几秒钟的时间:

$ alias k=kubectl$ k version

 

在其他章节中,我将继续使用完整的kubectl命令,以避免使没有阅读这一节的人感到困惑。

内部化资源短名称

Kubernetes的一些资源有非常长的名字。想象一下,每次需要引用Kubernetes资源持久卷声明时,都必须输入persistentvolumeccles。值得庆幸的是,kubectl为一些资源提供了简短的名称。下面的命令列出了终端中的所有选项:

$ kubectl api-resourcesNAME                    SHORTNAMES  APIGROUP  NAMESPACED  KIND...persistentvolumeclaims  pvc                   true        PersistentVolumeClaim...

 

可以在输出中看到persistentvolumeclaims提供了短名称pvc。因此,一个与持久卷声明交互的命令可能看起来像这样简单:

$ kubectl describe pvc my-claim

 

删除Kubernetes对象

考试中你犯错误是不可避免的。例如,您可能创建了配置不正确的Kubernetes对象,或者您可能只是想从头开始一个问题。默认情况下,Kubernetes尝试优雅地删除对象,这可能需要30秒。考虑到我们正在处理一个考试环境,等待是没有意义的。使用命令行选项--grace-period=0和--force发送SIGKILL信号。信号将立即删除Kubernetes对象:

$ kubectl delete pod nginx --grace-period=0 --force

 

找到对象信息

考试中的一些问题向您提供了Kubernetes对象的现有设置。如果您正在工作的环境中已经包含了两个具有重要配置的Pods,请不要感到惊讶。作为问题的一部分,您可能会被要求识别特定的Kubernetes对象,并继续在这些对象上工作。

您总是可以一个接一个地检查Kubernetes对象,但同样,这将是一个主要的时间消耗。记住,可以使用管道调用将kubectl命令与其他Unix命令组合在一起,这一点很有帮助。例如,您可以运行一个description pods命令,然后使用grep命令过滤输出,以查找分配的标签。-C命令行选项有助于呈现搜索词之前和之后的行:

$ kubectl describe pods | grep -C 10 "author=John Doe"$ kubectl get pods -o yaml | grep -C 5 labels:

 

发现命令选项

即使您可以访问Kubernetes文档,也可能无法立即找到您正在寻找的确切信息。kubectl命令有内置的帮助功能。help选项适用于所有可用的命令,并呈现子命令、命令行选项和使用示例的详细信息。下面的命令演示了create命令的用法:

$ kubectl create --helpCreate a resource from a file or from stdin.
JSON and YAML formats are accepted.
Examples: ...
Available Commands: ...
Options: ...

 

此外,您可以使用explain命令从命令行探索每个Kubernetes资源的字段。作为参数,必须为感兴趣的字段提供JSONPath。例如,假设想列出一个Pod的spec的所有字段;可以使用以下命令:

$ kubectl explain pods.specKIND:     PodVERSION:  v1
RESOURCE: spec <Object>
DESCRIPTION: ...
FIELDS: ...

 

练习和练习考试

在准备考试时,练习使用kubectl是很重要的。您需要访问Kubernetes集群和预安装的kubectl。考虑以下选项:

  • 了解所在公司是否已经建立了Kubernetes集群,并允许你使用它进行实践。
  • 在开发人员的机器上安装Kubernetes是一种简单而快速的设置方法。Kubernetes文档提供了各种安装选项,具体取决于您的操作系统。在我学习Kubernetes的过程中,我在四个Raspberry pi上安装了Kubernetes,结果证明这是一个有趣和令人兴奋的业余项目。你可以在Kubernetes博客上找到如何开始的信息。
  • 如果您是O 'Reilly学习平台的用户,您可以无限制地访问在Katacoda中运行Kubernetes环境的场景。

此外,你也可以尝试以下免费或付费的练习考试:

  • Kubernetes应用程序开发人员(CKAD)预备课程是一个基于视频的学习路径上的O 'Reilly学习平台,由您真正创建。
  • Certified Kubernetes Application Developer (CKAD) Cert Prep: Exam Tips是一个基于视频的LinkedIn学习课程,专注于考试准备。
  • CKAD练习是一个GitHub库,包含各种免费练习,涵盖所有与课程相关的主题。
  • 其他在线培训提供商提供CKAD考试的视频课程,其中一些包括集成的Kubernetes练习环境。我想提一下KodeKloud和Linux Academy。你需要购买订阅来单独访问每门课程的内容。

总结

CKAD考试是一个完全动手的考试,需要您在多个Kubernetes集群中解决问题。您需要理解、使用和配置与应用程序开发人员相关的Kubernetes原语。考试课程对这些重点领域进行了细分,并对各个主题给予了不同的权重,这决定了它们对总分的贡献。即使重点领域是在一个有意义的方式分组,课程不一定遵循自然的学习路径,所以交叉参考章节在准备考试是有帮助的。

在这一章中,我们讨论了考试环境和如何驾驭它。我们还讨论了一些可以帮助你节省时间的技巧。在准备考试的过程中,探索Docker和Kubernetes的架构基础知识。通过考试的关键是通过kubectl来解决现实生活中的问题。以下各章将提供考试习题的范例。要充分了解,请参考“练习和练习考试”章节中提供的资源。

posted @ 2021-08-19 17:11  bluesky1  阅读(527)  评论(0编辑  收藏  举报