备战CKAD之CoreConcept-序篇

查理谈科技 2024-05-11 22:38:54
CKAD 简介

Kubernetes的专业技术认证主要有以下几种:

CKA(Kubernetes 管理员认证)CKAD(Kubernetes 应用程序开发者认证)CKS(Kubernetes 认证安全专家。预计2020年11月开放,须先通过CKA认证)

其中,#CKAD# 考试证明用户可以为 Kubernetes 设计、构建、配置和发布云原生应用。

通过 #CKAD 认证#的人员能够在 #Kubernetes# 中定义软件资源并且使用核心组件来搭建、监控、检查可伸缩应用.

CKAD

CKAD 前人经验介绍

下面是网络上找到的一些前辈经验的总结:

首先需要了解考试的特点。CKA和CKAD都是上机考试,没有选择/填空/问答之类的题目,全是上机面对Kubernetes集群的操作,所以记住一定要在Kubernetes集群里多练习,minikube和katacoda提供的单机和网上集群可以多使用。另外因为CKA有Initial setup和TLS bootstrapping的内容,所以去AWS或者Azure上建虚拟机,直接搭建集群也是很有帮助的,而且有些debug的操作是需要在集群的master节点和node节点上ssh进去执行的,所以多自己搭建下是很有必要的。

其次需要了解考试大纲。CKA和CKAD都有自己的大纲,比较详细,需要针对大纲的每一个内容进行有针对性的学习和准备。别觉得目的性太强,要建立起使用者的知识体系,这些大纲对应的内容是必须要掌握的。

CKAD 大纲

最后需要熟悉Kubernetes的官网文档,尤其是Task部分。因为考试时间比较紧张,CKA 3个小时,CKAD 2个小时,普遍反映都是时间不够。上机考试环境中是没有时间让你从头到尾敲键盘输入YAML文件内容的,更多都是找到Task对应的部分,Copy 现成的YAML文件下来,然后快速修改,最后完成指定操作。

例如CKA和CKAD都有使用Secret的部分,即创建Secret,然后在Pod中通过环境变量或者Volume的方式来使用。建议比较省时的方法即在http://kubernetes.io/docs右上角的搜索栏中输入“inject secret”查到前面的结果,即Task中的一个例子,然后把该例子中的YAML内容Copy到考试使用的终端上,然后再根据题目要求修改下,最后执行,这样能节省大量的时间。

另外别忘了CNCF提供了很优秀的线上视频课程,其中面向管理员的《Kubernetes 基础课程》(LFS258)和面向开发者的《kubernetes开发员课程》(LFS259)是很有用的。

从多个来源的消息都提到, 在CKA考试的时候, 由于是纯粹的网络考试环境, 对于复制和粘贴是有一定的限制的, 所以对于一些命令的熟练掌握和记忆是必须的, 这就要求我们在准备的时候务必多加练习, 手动敲写, 最好能熟记于心.

基于此, 在本系列文章中, 我会陆续以考试大纲为基本纲领, 以网上找到的dgkanatsios/CKAD-exercises和twajr/ckad-prep-notes的学习单为基础,不断强化学习, dgkanatsios/CKAD-exercises 以及twajr/ckad-prep-notes , 都是是目前Github 上得到的Star 比较高的一个项目,希望有所帮助!

dgkanatsios/CKAD-exercises

有想要参加CKAD的小伙伴们, 一起来学习吧!

CKAD 第一部分----Core Concept 介绍

从大纲上看, 第一部分占比13%, 是整个CKAD上第二重要的章节, 基本上要求熟练掌握Kubernetes的基本概念, 已经相应的kubectl的操作.

从前辈的经验来看,基本上就是要非常非常地熟悉kubectl 命令行.

使用资源的缩写. 例如使用po代替pods, 使用deploy代替deployment, 使用netpol来代替networkpolicies等. 如果不确定资源的缩写形式, 可以使用一下命令:

$ kubectl api-resourcesNAME SHORTNAMES APIVERSION NAMESPACED KINDbindings v1 true Bindingcomponentstatuses cs v1 false ComponentStatusconfigmaps cm v1 true ConfigMapendpoints ep v1 true Endpointsevents ev v1 true Eventlimitranges limits v1 true LimitRangenamespaces ns v1 false Namespacenodes no v1 false Nodepersistentvolumeclaims pvc v1 true PersistentVolumeClaimpersistentvolumes pv v1 false PersistentVolumepods po v1 true Podpodtemplates v1 true PodTemplatereplicationcontrollers rc v1 true ReplicationControllerresourcequotas quota v1 true ResourceQuotasecrets v1 true Secretserviceaccounts sa v1 true ServiceAccountservices svc v1 true Servicemutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfigurationvalidatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfigurationcustomresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinitionapiservices apiregistration.k8s.io/v1 false APIServicecontrollerrevisions apps/v1 true ControllerRevisiondaemonsets ds apps/v1 true DaemonSetdeployments deploy apps/v1 true Deploymentreplicasets rs apps/v1 true ReplicaSetstatefulsets sts apps/v1 true StatefulSettokenreviews authentication.k8s.io/v1 false TokenReviewlocalsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReviewselfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReviewselfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReviewsubjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReviewhorizontalpodautoscalers hpa autoscaling/v1 true HorizontalPodAutoscalercronjobs cj batch/v1beta1 true CronJobjobs batch/v1 true Jobcertificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequestleases coordination.k8s.io/v1 true Leaseendpointslices discovery.k8s.io/v1beta1 true EndpointSliceevents ev events.k8s.io/v1 true Eventingresses ing extensions/v1beta1 true Ingressflowschemas flowcontrol.apiserver.k8s.io/v1beta1 false FlowSchemaprioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta1 false PriorityLevelConfigurationingressclasses networking.k8s.io/v1 false IngressClassingresses ing networking.k8s.io/v1 true Ingressnetworkpolicies netpol networking.k8s.io/v1 true NetworkPolicyruntimeclasses node.k8s.io/v1 false RuntimeClasspoddisruptionbudgets pdb policy/v1beta1 true PodDisruptionBudgetpodsecuritypolicies psp policy/v1beta1 false PodSecurityPolicyclusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBindingclusterroles rbac.authorization.k8s.io/v1 false ClusterRolerolebindings rbac.authorization.k8s.io/v1 true RoleBindingroles rbac.authorization.k8s.io/v1 true Rolepriorityclasses pc scheduling.k8s.io/v1 false PriorityClasscsidrivers storage.k8s.io/v1 false CSIDrivercsinodes storage.k8s.io/v1 false CSINodestorageclasses sc storage.k8s.io/v1 false StorageClassvolumeattachments storage.k8s.io/v1 false VolumeAttachment

这上面就比较全面地列出了所有资源的全称以及缩写.

启用命令的自动完成功能. 对于资源的某些属性, 使用命令行的自动完成提示功能是很有用的, 你不会想到命令行提供了那么多的属性来完成平常的功能.

例如, 创建一个Pod, 要求的资源请求是0.5个vCPU, 128Mi 内存; 另外需要增加的标签是foo:bar, 并关联到一个名为test-sa的service account. 这么多要求, 都可以通过下面的命令来完成:

kubectl run pod --image=nginx --restart=Never --requests=cpu=0.5,memory=128Mi --labels=foo=bar --serviceaccount=test-sa

多使用--dry-run和-o yaml参数. 这些参数通过把命令行的输出转到文件中, 在考试时候使用就显得非常有用, 尤其是来产生一些配置文件的时候, 这样做不容易出错.

例如, 我们可以把创建nginx Pod的操作导出为yaml:

kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml[vagrant@control-plane ~]$ cat ./nginx.yaml apiVersion: v1kind: Podmetadata:  creationTimestamp: null  labels:    run: nginx  name: nginxspec:  containers:  - image: nginx    name: nginx    resources: {}  dnsPolicy: ClusterFirst  restartPolicy: Alwaysstatus: {}

注意, 在当前版本(v1.20)中, 需要指定--dry-run=client .

多使用kubectl run --help 命令. 这个命令对于资源创建, 提供了非常好的帮助文档.

$ kubectl run --helpCreate and run a particular image in a pod.Examples:  # Start a nginx pod.  kubectl run nginx --image=nginx    # Start a hazelcast pod and let the container expose port 5701.  kubectl run hazelcast --image=hazelcast/hazelcast --port=5701    # Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in thecontainer.  kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"    # Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container.  kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"    # Dry run. Print the corresponding API objects without creating them.  kubectl run nginx --image=nginx --dry-run=client    # Start a nginx pod, but overload the spec with a partial set of values parsed from JSON.  kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'    # Start a busybox pod and keep it in the foreground, don't restart it if it exits.  kubectl run -i -t busybox --image=busybox --restart=Never    # Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command.  kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>    # Start the nginx pod using a different command and custom arguments.  kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>...Use "kubectl options" for a list of global command-line options (applies to all commands).

使用kubectl explain [[resource.attribute]]. 这是一个非常有用的工具, 对于一些资源的属性提示比较好.

例如, 我们可以使用kubectl explain 来查看创建Pod 的spec的详细情况:

$$ kubectl explain pods.spec.containersKIND:     PodVERSION:  v1RESOURCE: containers <[]Object>DESCRIPTION:     List of containers belonging to the pod. Containers cannot currently be     added or removed. There must be at least one container in a Pod. Cannot be     updated.     A single application container that you want to run within a pod....开启kubectl的自动补全(auto-completion)

作为kubectl cheatsheet的第一部分, 我们先在命令行开启kubectl的自动完成功能吧.

BASH

source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。echo "source <(kubectl completion bash)" >> ~/.bashrc # 在您的 bash shell 中永久的添加自动补全

您还可以为 kubectl 使用一个速记别名,该别名也可以与 completion 一起使用:

alias k=kubectlcomplete -F __start_kubectl k

ZSH

source <(kubectl completion zsh) # 在 zsh 中设置当前 shell 的自动补全echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # 在您的 zsh shell 中永久的添加自动补全

好了,今天就先写到这里吧, 为了CKAD, 让我们继续学习吧!

0 阅读:0

查理谈科技

简介:感谢大家的关注