LabHub
学习 学习路径 课程

CNPE — 云原生平台工程师

CNPE 模拟考 A

在 LabHub 中继续学习

目标

在实际的CNPE等条件下,在120分钟内完成17个课题。合格线是64%。 因为是部分分数制,所以通过17个中的11个视为完成。

这是模擬考试。不要看提示和答案,先试着完成到最后。 最好标记好卡住的作业,然后在剩下的时间里回来。 评分随时都可以按,按多次也不会改变结果。

为什么重要

CNPE是专家等级,提问不是操纵方法,而是判断。同样的规则 在管道上阻止还是在API服务器上阻止,发生事故时是否删除限制 决定是否满足,向租户打开什么,关闭什么的地方 每个课题都有一个。虽然会有很多工具出现,但任何一个都不能深入 不问。而是问把哪个工具放在哪里

考试环境(在实际考试中确认的事实)

在这个模拟考试环境中的其他点

这个实训的群集是在PAD内运行的1人用群集。kube-apiserver和 控制器经理和调度器是真实的,所以验证模式、批准政策、RBAC判断、分量、 排程、汇总ClusterRole、排除API实际上运行并实际拒绝。 但是因为没有实际运行容器的运行时间,所以下一步不一样。

节点有3个,每个CPU有8个核心,内存有32Gi,区域有zone-0zone-1zone-2一个一个不一样。

阶段

GitOps and Continuous Delivery

  1. /root/exam/chart请制作Helm图表。图表名称是paved-app和 模板是Deployment,名字是paved-app是。集装箱的名字是 app,复制品数量是.Values.replicas,图像是 .Values.image.repository.Values.image.digest@是罗之后的。 values.schema.jsonreplicas是2以上10以下的整数,tierbronzesilvergold其中之一,image.digestsha256:后面是16进制数 只允许64位字符串,请将所有三个值都设置为必填。默认值分别为3, silver,而且是任意有效的摘要。
  2. /root/exam/portal请创建kustomize目录。Deploymentportal 银复制品2,容器名称app,图像固定为摘要, envFromConfigMapportal-config全部读取。那个ConfigMap是 不要保存为文件configMapGenerator做成LOG_LEVEL=infoFEATURE_FLAGS=beta请包含两个项目,不要关闭名称哈希后缀。 在渲染结果中,Deployment 所参考的名字和生成的ConfigMap 的名字必须相同。 做。
  3. /root/exam/gitops/appproject.yaml在Argo CD AppProjectplatform乙 请使用。命名空间是argocd是。sourceRepos有实际存储库 写下地址*请不要使用。destinations将服务器和命名空间 不能全部固定在名称空间中*请不要使用。clusterResourceWhitelist 留空,namespaceResourceBlacklist有核心团体的ResourceQuotaLimitRange请放入。
  4. /root/exam/promote请将其设置为git存储库。envs/staging/deployment.yamlenvs/prod/deployment.yaml有两个文件,两个都是Deploymentledger并且 集装箱的名字是app,图像固定为摘要。在第一次提交时,两个 摘要彼此不同。然后将舞台的摘要作为运营上传。 请再积累一个晋升提交。在那个提交中,状态文件不会变。 不应该,提交信息中必须包含上传的摘要,工作树 必须干净。

Platform APIs and Self-Service Capabilities

  1. /root/exam/api/environment-crd.yaml请使用CRD并apply。组是 platform.labhub.io,种类是Environment,复数形式是environments,短的 名字是env,范围是Namespaced。版本有两个。v1银 served 利息 这是保存版本,spec.owner是必填字符串,spec.tierbronzesilvergold其中之一,基本值是bronzespec.retentionDays是1 以上为90以下的整数,基本值为7是。v1alpha1虽然是served,但保存 不是版本spec.owner仔细检查,标记废弃标志,并亲自写上废弃警告语句。 请填写。不在结构中存在的字段必须由服务器拒绝。
  2. /root/exam/api/env-defaults.yamlE Kyverno ClusterPolicyenv-defaults的 请使用。仅适用于Environment资源的变异(mutate)规则,标签 platform.labhub.io/ownerspec.owner作为价值,安纳泰奥内塔 platform.labhub.io/requested-tierspec.tier用价格填充。价格 请不要只固定填写,要从请求中阅读并填写。
  3. /root/exam/api/env-rbac.yaml使用汇总权限并apply。ClusterRole platform-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和ServiceAccount env-author制作并进行RoleBindingenv-author将那个汇总ClusterRole 请束缚。无论哪个规则*请不要使用。
  4. /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-authorenvironments/status不能更新。

可观察性和运营

  1. /root/exam/ops/platform-rules.yaml请使用Prometheus规则。组 名字是platform-api并且,记录规则platform:request_error:ratio5m银 使用除法和5分钟区间,通知规则PlatformApiErrorBudgetBurn里面有forlabels.severityannotations.summaryannotations.runbook_url李 必须有。还有/root/exam/ops/platform-rules-test.yaml的规则 请使用单元测试。rule_files中包含对方姓名 platform-rules.yaml只写,alert_rule_test两个以上,但一个是 通知响起的时刻,另一个不响起的时刻(exp_alerts: []) 需要确认。promtool check rulespromtool test rules都去 必须通过。
  2. 名称空间platform-system制作并 /root/exam/ops/servicemonitor.yamlE ServiceMonitorplatform-api用写 请应用。对象选择器是app: platform-apinamespaceSelectorplatform-system是。终端点只有一个,端口名称是metrics, 收集周期是30s,收集限制时间必须比周期短。 metricRelabelings里面有__name__看到后将特定指标drop做规则和, 高卡迪纳利蒂标签labeldrop掉落的规则各有一个以上 必须有。
  3. 名称空间tenant-ochre制作标签 platform.labhub.io/tenant: ochre附上,ResourceQuotaochre-quotarequests.cpu2,requests.memory请限制为4Gi。其中 Deploymentsearch请用复制品4制作。容器名称是app, 图像的摘要固定,请求是CPU 700m和内存512Mi。此时 帕德都不能浮起来。然后/root/exam/ops/triage.txtquota_cpu_hardquota_memory_harddesired_replicasmax_cpu_per_pod四排키=값请用格式填写。CPU是微核心 以整数为单位,内存以Mi整数为单位,最后值要在这个四分之一范围内,所有复制品都显示出来的话 将一个板的CPU请求需要多少毫秒写成微秒整数。 请不要附上单位文字。
  4. 不要提高配额search的4个pad全部变成Running了 请这样做。复制件数量和内存请求保持原样,只要求CPU11次。 以计算出的价格下单。不能留下使用旧请求价格的帕德。

平台架构和基础设施

  1. 在节点准确地贴上两块标签platform.labhub.io/pool=platform和化妆品 platform.labhub.io/pool=platform:NoSchedule一起走吧。还有 platform-system部署portal请用3个复制品制作。 集装箱的名字是app,图像的摘要固定,请求是CPU 100m和内存 是128Mi。这个工作量只选择那个池,忍受那个色调, topology.kubernetes.io/zone以为基准maxSkew: 1whenUnsatisfiable: DoNotSchedule必须铺好。三个垫子全部 必须在全节点上进行Running。
  2. PriorityClassplatform-critical(价值100000以上)和 tenant-batch(价格1000以下,preemptionPolicy: Never)请制作。两者都 globalDefault是false。tenant-amber资源配额 amber-priority挂起来platform-critical使用优先顺序的板子 请在名称空间中完全无法创建。还有13次的portalplatform-critical请让我使用。
  3. platform-system在PodDisruptionBudgetportal请制作。选择者是 portal选择护肤霜minAvailable是2maxUnavailable不用银子 不。维护时必须一次可以清空一次。

Security and Policy Enforcement

  1. 名称空间tenant-teal制作并获得Pad安全批准的enforceauditwarn全部restricted但三个模式的版本标签是latest不是去 v1.31固定在里面。里面有Deploymentcheckout用复制品2 请制作。集装箱名称是app,图像固定为摘要,pad为 restricted必须通过。两个脚踏车实际上必须是Running。
  2. 请在两个地方执行一个规则。规则是“Deployment 包括标签 platform.labhub.io/owner必须去” /root/exam/security/owner-policy.yamlE Kyverno ClusterPolicy require-ownerEnforce请用。管道是kyverno apply罗 这是旋转门。/root/exam/security/owner-vap.yaml里面有 ValidatingAdmissionPolicyrequire-owner使用与之同名绑定 请apply。validationActionsDeny并且,适用范围是标签 platform.labhub.io/gate=owner只有加的命名空间。命名空间 delivery制作后贴上标签。没有标签的Deployment是 delivery被拒绝default必须通过。

参考

让图表自己拒绝错误的值

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,只会留下审计,通过时通过。