CNPE 模拟考 A
目标
在实际的CNPE等条件下,在120分钟内完成17个课题。合格线是64%。 因为是部分分数制,所以通过17个中的11个视为完成。
这是模擬考试。不要看提示和答案,先试着完成到最后。 最好标记好卡住的作业,然后在剩下的时间里回来。 评分随时都可以按,按多次也不会改变结果。
为什么重要
CNPE是专家等级,提问不是操纵方法,而是判断。同样的规则 在管道上阻止还是在API服务器上阻止,发生事故时是否删除限制 决定是否满足,向租户打开什么,关闭什么的地方 每个课题都有一个。虽然会有很多工具出现,但任何一个都不能深入 不问。而是问把哪个工具放在哪里。
考试环境(在实际考试中确认的事实)
- 可以查看的文件是
kubernetes.io/docs,kubernetes.io/blog,而且每个课题 这是单独提供的Quick Reference链接。该链接将添加到允许列表中。 - 在远程桌面中同时写terminal和web界面。根据任务不同 有时用浏览器打开控制台会更快。
- 考试中可能出现的工具有Argo、Crossplane、Flagger、Flux、Gatekeeper、 Grafana, Istio, Jaeger, Kyverno, Linkerd, OPA, OpenCost, OpenTelemetry, 我是Prometheus,Tekton。
- 即使出现陌生的工具,官方课程也可以根据考试期间提供的文件进行处理。
必须要有。所以与其把工具列表全部背下来,
第一次看到的CRD的结构
kubectl explain读出来的手更重要。 - 终端复制是
Ctrl+Shift+C,粘贴是Ctrl+Shift+V是。
在这个模拟考试环境中的其他点
这个实训的群集是在PAD内运行的1人用群集。kube-apiserver和 控制器经理和调度器是真实的,所以验证模式、批准政策、RBAC判断、分量、 排程、汇总ClusterRole、排除API实际上运行并实际拒绝。 但是因为没有实际运行容器的运行时间,所以下一步不一样。
- Argo CD和Argo Rollouts只注册了CRD,没有控制器。 第3个课题的AppProject只通过文件进行评价。
- **工作负载的
exec,logs,port-forward不能成为。**虽然帕德浮起来了 内部不会进行进程。 - **没有Prometheus服务器。**第9题和第10题是
promtool通过CRD 评价。实际不会进行收集。
节点有3个,每个CPU有8个核心,内存有32Gi,区域有zone-0,zone-1,
zone-2一个一个不一样。
阶段
GitOps and Continuous Delivery
/root/exam/chart请制作Helm图表。图表名称是paved-app和 模板是Deployment,名字是paved-app是。集装箱的名字是app,复制品数量是.Values.replicas,图像是.Values.image.repository哇.Values.image.digest的@是罗之后的。values.schema.json到replicas是2以上10以下的整数,tier是bronze,silver,gold其中之一,image.digest是sha256:后面是16进制数 只允许64位字符串,请将所有三个值都设置为必填。默认值分别为3,silver,而且是任意有效的摘要。/root/exam/portal请创建kustomize目录。Deploymentportal银复制品2,容器名称app,图像固定为摘要,envFromConfigMapportal-config全部读取。那个ConfigMap是 不要保存为文件configMapGenerator做成LOG_LEVEL=info哇FEATURE_FLAGS=beta请包含两个项目,不要关闭名称哈希后缀。 在渲染结果中,Deployment 所参考的名字和生成的ConfigMap 的名字必须相同。 做。/root/exam/gitops/appproject.yaml在Argo CD AppProjectplatform乙 请使用。命名空间是argocd是。sourceRepos有实际存储库 写下地址*请不要使用。destinations将服务器和命名空间 不能全部固定在名称空间中*请不要使用。clusterResourceWhitelist留空,namespaceResourceBlacklist有核心团体的ResourceQuota哇LimitRange请放入。/root/exam/promote请将其设置为git存储库。envs/staging/deployment.yaml科envs/prod/deployment.yaml有两个文件,两个都是Deploymentledger并且 集装箱的名字是app,图像固定为摘要。在第一次提交时,两个 摘要彼此不同。然后将舞台的摘要作为运营上传。 请再积累一个晋升提交。在那个提交中,状态文件不会变。 不应该,提交信息中必须包含上传的摘要,工作树 必须干净。
Platform APIs and Self-Service Capabilities
/root/exam/api/environment-crd.yaml请使用CRD并apply。组是platform.labhub.io,种类是Environment,复数形式是environments,短的 名字是env,范围是Namespaced。版本有两个。v1银 served 利息 这是保存版本,spec.owner是必填字符串,spec.tier是bronze,silver,gold其中之一,基本值是bronze,spec.retentionDays是1 以上为90以下的整数,基本值为7是。v1alpha1虽然是served,但保存 不是版本spec.owner仔细检查,标记废弃标志,并亲自写上废弃警告语句。 请填写。不在结构中存在的字段必须由服务器拒绝。/root/exam/api/env-defaults.yamlE Kyverno ClusterPolicyenv-defaults的 请使用。仅适用于Environment资源的变异(mutate)规则,标签platform.labhub.io/owner的spec.owner作为价值,安纳泰奥内塔platform.labhub.io/requested-tier的spec.tier用价格填充。价格 请不要只固定填写,要从请求中阅读并填写。/root/exam/api/env-rbac.yaml使用汇总权限并apply。ClusterRoleplatform-env-author没有自己的规则,只是标签platform.labhub.io/aggregate-to-env-author: "true"附加的ClusterRole 接收。ClusterRoleplatform-env-author-base在上面贴上那个标签 允许对Environment进行get、list、watch、create、update、patch 请不要删除delete。命名空间tenant-amber和ServiceAccountenv-author制作并进行RoleBindingenv-author将那个汇总ClusterRole 请束缚。无论哪个规则*请不要使用。/root/exam/api/env-status-rbac.yaml请分开spec和status的权限。tenant-amberE ServiceAccountenv-controller,Roleenv-controller, RoleBindingenv-controller创建。这个账户读取Environment并environments/status虽然可以update、patch,但Environment本身 不能create、update、patch、delete。相反,7次的env-author是environments/status不能更新。
可观察性和运营
/root/exam/ops/platform-rules.yaml请使用Prometheus规则。组 名字是platform-api并且,记录规则platform:request_error:ratio5m银 使用除法和5分钟区间,通知规则PlatformApiErrorBudgetBurn里面有for,labels.severity,annotations.summary,annotations.runbook_url李 必须有。还有/root/exam/ops/platform-rules-test.yaml的规则 请使用单元测试。rule_files中包含对方姓名platform-rules.yaml只写,alert_rule_test两个以上,但一个是 通知响起的时刻,另一个不响起的时刻(exp_alerts: []) 需要确认。promtool check rules哇promtool test rules都去 必须通过。- 名称空间
platform-system制作并/root/exam/ops/servicemonitor.yamlE ServiceMonitorplatform-api用写 请应用。对象选择器是app: platform-api,namespaceSelector是platform-system是。终端点只有一个,端口名称是metrics, 收集周期是30s,收集限制时间必须比周期短。metricRelabelings里面有__name__看到后将特定指标drop做规则和, 高卡迪纳利蒂标签labeldrop掉落的规则各有一个以上 必须有。 - 名称空间
tenant-ochre制作标签platform.labhub.io/tenant: ochre附上,ResourceQuotaochre-quota罗requests.cpu2,requests.memory请限制为4Gi。其中 Deploymentsearch请用复制品4制作。容器名称是app, 图像的摘要固定,请求是CPU 700m和内存512Mi。此时 帕德都不能浮起来。然后/root/exam/ops/triage.txt在quota_cpu_hard,quota_memory_hard,desired_replicas,max_cpu_per_pod四排키=값请用格式填写。CPU是微核心 以整数为单位,内存以Mi整数为单位,最后值要在这个四分之一范围内,所有复制品都显示出来的话 将一个板的CPU请求需要多少毫秒写成微秒整数。 请不要附上单位文字。 - 不要提高配额
search的4个pad全部变成Running了 请这样做。复制件数量和内存请求保持原样,只要求CPU11次。 以计算出的价格下单。不能留下使用旧请求价格的帕德。
平台架构和基础设施
- 在节点准确地贴上两块标签
platform.labhub.io/pool=platform和化妆品platform.labhub.io/pool=platform:NoSchedule一起走吧。还有platform-system部署portal请用3个复制品制作。 集装箱的名字是app,图像的摘要固定,请求是CPU 100m和内存 是128Mi。这个工作量只选择那个池,忍受那个色调,topology.kubernetes.io/zone以为基准maxSkew: 1科whenUnsatisfiable: DoNotSchedule必须铺好。三个垫子全部 必须在全节点上进行Running。 - PriorityClass
platform-critical(价值100000以上)和tenant-batch(价格1000以下,preemptionPolicy: Never)请制作。两者都globalDefault是false。tenant-amber资源配额amber-priority挂起来platform-critical使用优先顺序的板子 请在名称空间中完全无法创建。还有13次的portal李platform-critical请让我使用。 platform-system在PodDisruptionBudgetportal请制作。选择者是portal选择护肤霜minAvailable是2maxUnavailable不用银子 不。维护时必须一次可以清空一次。
Security and Policy Enforcement
- 名称空间
tenant-teal制作并获得Pad安全批准的enforce,audit,warn全部restricted但三个模式的版本标签是latest不是去v1.31固定在里面。里面有Deploymentcheckout用复制品2 请制作。集装箱名称是app,图像固定为摘要,pad为restricted必须通过。两个脚踏车实际上必须是Running。 - 请在两个地方执行一个规则。规则是“Deployment 包括标签
platform.labhub.io/owner必须去”/root/exam/security/owner-policy.yamlE Kyverno ClusterPolicyrequire-owner的Enforce请用。管道是kyverno apply罗 这是旋转门。/root/exam/security/owner-vap.yaml里面有 ValidatingAdmissionPolicyrequire-owner使用与之同名绑定 请apply。validationActions是Deny并且,适用范围是标签platform.labhub.io/gate=owner只有加的命名空间。命名空间delivery制作后贴上标签。没有标签的Deployment是delivery被拒绝default必须通过。
参考
- 查看服务器实际在做什么时
kubectl apply --dry-run=server的 请使用。将批准链烧毁后,不会在群集中留下任何东西。-o json加上后,还可以看到填充基本值的结果。 - 子资源权限是
kubectl auth can-i update environments.platform.labhub.io --subresource=status처럼--subresource要问。在资源名称后面 如果加上斜杠后写的话,会做出错误的判断。 - 应用CRD后不久
kubectl wait --for=condition=Established crd/...罗 请等待注册结束。 - 在四分之一格满的情况下,如果启动滚动更新,就没有地方创建新的板块,所以无法发布。 停下来。先把旧的垫子倒空,才能装新垫子。
- 是三个常见的错误。
labeldrop根据规则sourceLabels不能写。 如果没有RoleBinding,只创建ClusterRole的话,不会产生任何权限。而且 统计ClusterRole的rules不是一个人填补的位置,而是控制器填补的位置。 是座位。
让图表自己拒绝错误的值
helm 在图表中如果有values.schema.json,会在template和install前面验证值,如果不符,就会拒绝渲染本身。请使用JSON模式的minimum、maximum、enum、pattern、required。是否需要模式取决于helm template ... --set replicas=1像这样故意输入不符的值进行确认。
设置变了,发布也会变。
configMapGenerator 将内容的哈希附加到名字后面,并自动修改在同一kustomization中引用该名字的地方。Deployment中只需写下没有后缀的原始名字即可。打开disableNameSuffixHash时,此连接会断开,只有更改设置时才会再次出现pad。
阐明项目允许什么
AppProject是决定Application可以向哪里部署的界限。如果在sourceRepos和destinations上留空格,就相当于没有界限。如果将clusterResourceWhitelist留空,就完全无法创建cluster范围资源,namespaceResourceBlacklist是记录即使在namespace内也不能操作的种类的地方。
将晋升留为一个承诺
在GitOps中,部署是提交。所以什么什么时候上传的要留在日志中,要恢复的话要用revert。在 staging中验证的摘要要直接运用于运营,但不要动 staging 文件。做完后,git status 应该为空。没有提交的更改不是部署的。
结构才能成为合同
在结构模式(structural schema)中写入default的话,服务器会填充值,不少字段会被服务器拒绝。两个性质必须同时存在才能成为模式,即合同。废止用versions项的deprecated和deprecationWarning表示,其语句实际上会在kubectl屏幕上显示Warning。请用kubectl apply --dry-run=server -o json进行确认。
平台填补请求中遗漏的内容
自助服务,用户要填写的东西越少越好。平台必须填充用户已经填写的值才能提取出来。在Kyverno的mutate规则中,可以通过{{ request.object... }}读取请求正文。固定值填写的话,评分器在询问其他请求时就会显示出来。请用kyverno apply <政策> --resource <文件> -o <目录>进行确认。
将权限分成碎片来收集
汇总ClusterRole不写自己的规则。只要写标签选择器,控制器就会收集并填充带有该标签的其他ClusterRole的规则。所以以后增加权限时,不用修改这个角色,只要再附加一个碎片就可以了。是否实际汇总,请用kubectl get clusterrole <名称> -o jsonpath='{.rules}'来确认。如果为空,说明标签不一致。
分开写字的人和填字的人
status是控制器填写的位置,spec是用户填写的位置。在RBAC中,这两个是单独的资源名称,所以分别写environments和environments/status。确认时,不要在资源名称后面加上斜杠,而是写--subresource=status。如果写斜杠,kubectl会错误地解释,产生相反的结果。
把通知规则作为考试来考
promtool test rules 输入假时序,实际评估规则。input_series的值以'0+3x30'的形式写入起始值、增加幅度、重复次数。只要确认响起的时刻,总是通过响起的规则,所以要不响起的时刻请一起写入exp_alerts: []。rule_files以有测试文件的目录为准进行搜索。
决定不做什么
观测成本由收集的时序数决定,这个数会随着标签的组合而爆炸。所以在收集设置中,必须同时输入要计算的东西和要丢弃的东西。drop将sourceLabels中选择的值与regex匹配时,将该指标全部丢弃,labeldrop将匹配regex的标签名称删除。不能在labeldrop中写入sourceLabels。
重现四分之一的消耗,用数字写下来
如果分区被阻塞,Deployment不会出现错误。ReplicaSet会满足ReplicaFailure条件,而派对本身不会被创建。请用kubectl describe rs或kubectl get rs -o yaml查看该条件。分类不是感觉,而是除法。将分区上限除以想要的复制数,就会得到派对一个可以使用的最大值。
不增加分量进行恢复
仅仅提交请求是不够的。在库存满的状态下,没有地方制作新的板块,滚动更新会在中间停止。只要使用旧请求值的板块留下的一个位置是不空的。请将复制品降到0,然后重新上传,或者先清空旧板块。请确认不是板块数量,而是每个板块的请求值。
分享代码并传播工作量
标签要均匀,色调要推开。两个要一起挂才能成为该流专用。只挂标签的话任何人都可以进来,只挂色调的话就没有进来的办法。topologySpreadConstraints的labelSelector必须指向pad标签,必须设置为DoNotSchedule才能真正强制执行。请确认pad坐落在哪个节点上。
确定可以使用优先级的人
如果把PriorityClass设置为集群范围,任何人都可以以名字使用。所以,不是优先级本身,而是需要单独阻止使用该优先级的权利。在ResourceQuota的scopeSelector上绑定PriorityClass范围,并将上限设为0,那么在这个命名空间中就完全不能创建该等级的文件夹。preemptionPolicy: Never并不意味着不会被推开,而是意味着不会推开别人。
确定在维护中也会剩下的可能性
PodDisruptionBudget不是调度器,而是看排除API。kubectl drain和节点升级会经过这条路径。如果在Replica 3上设置minAvailable 2,可以一次性清空一次。控制器计算的结果会在kubectl get pdb的ALLOWED DISRUPTIONS列中显示,如果这个值为0,则完全阻止维护,如果与Replica数量相同,则什么都不保护。
在租户命名空间上划定基准线
PAD安全批准不会阻止Deployment,而是阻止Deployment生成的PAD。Deployment已经创建了,如果没有PAD,请用kubectl describe rs查看原因。restricted要求在PAD级别运行AsNonRoot和seccompProfile,在容器级别要求allowPrivilegeEscalation: false和capabilities.drop [ALL]。将版本标签设置为latest时,在升级群集时,基准会悄悄变得严格。
在两个地方执行同样的规则
管道门会快速阻止重吃,但无法阻止不经过管道的更改,批准政策无论是什么都会阻止,但开发者只有按下发布键后才会知道。所以把同样的规则放在两个地方。VAP的适用范围由绑定决定,可以通过matchResources的namespaceSelector进行缩小。如果validationActions中没有Deny,只会留下审计,通过时通过。