当前位置: 首页 > news >正文

cka解题思路1.32-3

8、pvc

[candidate@base] $ ssh cka000047
Task
mariadb namespace 中的 MariaDB Deployment 被误删除。请恢复该 Deployment 并确保数据持久性。请按照以下步骤:
如下规格在 mariadb namespace 中创建名为 mariadb 的 PersistentVolumeClaim (PVC):
访问模式为 ReadWriteOnce
存储为 250Mi
集群中现有一个 PersistentVolume。
您必须使用现有的 PersistentVolume (PV)。
编辑位于 ~/mariadb-deployment.yaml 的 MariaDB Deployment 文件,以使用上一步中创建的 PVC。
将更新的 Deployment 文件应用到集群。
确保 MariaDB Deployment 正在运行且稳定。

题目要求:

1、创建pvc mariadb namespace mariadb 访问模式 readwriteonce 存储250M
2、创建的pvc 使用现有的pv
3、修改目录下的deployment文件,使用创建的pvc mariadb,
● 确保挂载方式正确(volumeMounts + volumes)。
4、更新deployment文件到集群

解题过程:

1、创建已有pv对应pvc,让pvc绑定pv

# 查看已有的pv
kubectl get pv -A
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-8ma68a57-t089-31f6-bab7-5656f638a98a   250Mi      RWO            Retain           Available           local-path     <unset>                          191d
#创建对应pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mariadbnamespace: mariadb
spec:accessModes:- ReadWriteOnceresources:requests:storage: 250MstorageClassName: local-path  #如果pv指定了storage,这里也要指定#再次查看pv是否已被pvc绑定candidate@master01:~$ kubectl apply -f pvc.yaml
persistentvolumeclaim/mariadb created
candidate@master01:~$ kubectl get pv -A
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-8ma68a57-t089-31f6-bab7-5656f638a98a   250Mi      RWO            Retain           Bound    mariadb/mariadb   local-path     <unset>                          191d

2、修改目录下的deployment文件,保证正确挂在volume

apiVersion: apps/v1
kind: Deployment
metadata:name: mariadbnamespace: mariadblabels:app: mariadb
spec:replicas: 1selector:matchLabels:app: mariadbtemplate:metadata:labels:app: mariadbspec:containers:- name: busyboximage: busybox:1.36.1imagePullPolicy: IfNotPresentcommand: ["/bin/sh"]args: ["-c", "while true; do echo autoscale; sleep 300;done"]volumeMounts:- name: mariadb-datamountPath: /var/logvolumes:- name: mariadb-datapersistentVolumeClaim:claimName: "mariadb"  #指定pvc
kubectl apply -f deployment.yaml
#检查是否正常运行
kubectl get deployments.apps -n mariadb
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
mariadb   1/1     1            1           12s

3、pvc模板地址concept-》storage-》pv 下拉末尾pvc
在这里插入图片描述

9、gateway

您必须连接到正确的主机。不这样做可能导致零分。
[candidate@base] $ ssh cka000057
Task
将现有 Web 应用程序从 Ingress 迁移到 Gateway API。您必须维护 HTTPS 访问权限。
注意:集群中安装了一个名为 nginx 的 GatewayClass 。
首先,创建一个名为 web-gateway 的 Gateway ,主机名为 gateway.web.k8s.local ,并保持现有名为 web 的 Ingress 资源的现有 TLS 和侦听器配置。
接下来,创建一个名为 web-route 的 HTTPRoute ,主机名为 gateway.web.k8s.local ,并保持现有名为 web 的 Ingress 资源的现有路由规则。
您可以使用以下命令测试 Gateway API 配置:
[candidate@cka000057]$ curl -Lk https://gateway.web.k8s.local:31443
最后,删除名为 web 的现有 Ingress 资源。

题目要求:

1、查看现有ingress资源 web tls和侦听配置 和ingress 路由规则
2、创建gateway,要求指定主机名:gateway.web.k8s.local ,gateway名字: web-gateway
tls和侦听配置与ingress web一直
3、创建httproute 名字web-route 主机名: gateway.web.k8s.local ,并绑定到web-gateway
4、测试是否生效,删除ingress
Gateway API 是 Kubernetes 官方推出的下一代服务网络 API,目标是取代 Ingress,提供更强大、统一、可扩展的流量管理能力。
它由三个核心资源组成:
在这里插入图片描述

解题过程:

1、查看现有ingress资源和web ingress

kubectl get gatewayclasses.gateway.networking.k8s.io -A
NAME    CONTROLLER                                   ACCEPTED   AGE
nginx   gateway.nginx.org/nginx-gateway-controller   True       192d
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:nginx.ingress.kubernetes.io/rewrite-target: /nginx.ingress.kubernetes.io/ssl-redirect: "true"creationTimestamp: "2025-03-02T06:10:13Z"generation: 1name: webnamespace: defaultresourceVersion: "19116"uid: 09b1388f-12b1-4a89-8251-bf15f97a1b19
spec:ingressClassName: nginxrules:- host: ingress.web.k8s.localhttp:paths:- backend:service:name: webport:number: 80path: /pathType: Prefixtls:- hosts:- ingress.web.k8s.localsecretName: web-cert
status:loadBalancer:ingress:- ip: 10.99.167.108

2、创建gateway和httproute
gateway参考官网地址:https://kubernetes.io/blog/2024/05/09/gateway-api-v1-1/直接文档页搜索gateway-api
ps:考试的时候博客页如果没有还是得学习一下gateway用法
httproute参考网页地址https://kubernetes.io/docs/concepts/services-networking/gateway/ 文档页concepts-》service,loadbanlaceand networking-》gateway api

# 创建gateway
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:name: web-gateway  #指定的gateway名字
spec:gatewayClassName: nginx #题目中说明的gatewyaclass名字listeners:- name: foo-httpsprotocol: HTTPSport: 443hostname: gateway.web.k8s.local  #指定的主机名tls:certificateRefs:- kind: Secretgroup: ""name: web-cert  #ingress里指定的secretname
#创建httproute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:name: web-route #指定的httproute名字
spec:parentRefs:- name: web-gateway #上面创建的gateway名字hostnames:- "gateway.web.k8s.local"rules:- matches:- path:type: PathPrefixvalue: /backendRefs:- name: web #ingress指定的serviceport: 80 #ingress指定的port

3、验证创建得gateway和httproute是否生效

kubectl get gateway -A
NAMESPACE   NAME          CLASS   ADDRESS   PROGRAMMED   AGE
default     web-gateway   nginx             True         51s
candidate@master01:~$ kubectl get httproutes.gateway.networking.k8s.io -A
NAMESPACE   NAME        HOSTNAMES                   AGE
default     web-route   ["gateway.web.k8s.local"]   29s
candidate@master01:~$ curl -Lk https://gateway.web.k8s.local:31443
Hello World ^_^
kubectl delete ingress web

10、NetworkPolicy

您必须连接到正确的主机。不这样做可能导致零分。
[candidate@base] $ ssh cka000056
Task
从提供的 YAML 样本中查看并应用适当的 NetworkPolicy。
确保选择的 NetworkPolicy 不过于宽松,同时允许运行在 frontend 和 backend namespaces 中的 frontend 和 backend Deployment 之间的通信。
首先,分析 frontend 和 backend Deployment,以确定需要应用的 NetworkPolicy 的具体要求。
接下来,检查位于 ~/netpol 文件夹中的 NetworkPolicy YAML 示例。
注意:请勿删除或修改提供的示例。仅应用其中一个。否则可能会导致分数降低。
最后,应用启用 frontend 和 backend Deployment 之间的通信的 NetworkPolicy,但不要过于宽容。
注意:请勿删除或修改现有的默认拒绝所有入站流量或出口流量 NetworkPolicy。否则可能导致零分。

题目要求:

1、网络策略选型,要求能允许frontend和backend namespace之间相互访问

解题过程:

1、切入到正确主机查看frontend和backend deployment状态和标签

kubectl get deployments.apps -n backend --show-labels
NAME      READY   UP-TO-DATE   AVAILABLE   AGE    LABELS
backend   1/1     1            1           193d   app=backend
candidate@master01:~/netpol$ kubectl get deployments.apps -n frontend --show-labels
NAME       READY   UP-TO-DATE   AVAILABLE   AGE    LABELS
frontend   1/1     1            1           193d   app=frontend
candidate@master01:~/netpol$ kubectl get pod -n backend --show-labels
NAME                       READY   STATUS    RESTARTS       AGE    LABELS
backend-5d999bc4dd-772hp   1/1     Running   12 (31m ago)   193d   app=backend,pod-template-hash=5d999bc4dd
kubectl get pod -n frontend --show-labels
NAME                        READY   STATUS    RESTARTS       AGE    LABELS
frontend-5c4847b588-lxc97   1/1     Running   12 (32m ago)   193d   app=frontend,pod-template-hash=5c4847b588
#networkpolicy作用与deployment和pod需要两个app=backend和app=frontend标签
kubectl get ns frontend backend --show-labels
NAME       STATUS   AGE    LABELS
frontend   Active   193d   kubernetes.io/metadata.name=frontend
backend    Active   193d   kubernetes.io/metadata.name=backend
#即netwoorkpolicy作用与namespace需要两个namespace标签
kubectl get networkpolicies -A
NAMESPACE          NAME               POD-SELECTOR     AGE
backend            default-deny-all   <none>           193d
calico-apiserver   allow-apiserver    apiserver=true   193d
#查看集群内得网络规则,backend默认全拒绝,frontend没有则默认全放通

2、切入到正确主机,查看指定目录下的networkpolicy yaml示例

cat netpol1.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: netpol-1namespace: backend
spec:podSelector: {}  #backend下请求都允许policyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:kubernetes.io/metadata.name: frontend  允许带frontend访问#总结:允许 frontend namespace下的所有pod访问backend
cat netpol2.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: netpol-2namespace: backend
spec:podSelector:matchLabels:app: backend  #允许带app:backend 标签访问backend namespace,由上文可知即限制为deployment和podpolicyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:kubernetes.io/metadata.name: frontend #指定frontend namespace访问backendpodSelector:matchLabels:app: frontend #允许带app: frontend标签访问即允许deployment和pod 访问backend
#总结:允许backend namespace下的deployment和pod带app: backend访问backend
#允许frontend namespace下的deployment和pod带app: frontend 访问backendcat netpol3.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: netpol-3namespace: backend
spec:podSelector:matchLabels:app: database # 允许带app: database访问backend - Ingressingress:- from:- namespaceSelector:matchLabels:kubernetes.io/metadata.name: frontendpodSelector:matchLabels:app: frontend- ipBlock:cidr: 10.0.0.0/24
#由上可知backend和frontend下的deployment和pod都没有这个标签,直接省略
#总结1和2都可满足两个namespace间相互访问,但2限制更多一些更符合题意

3、应用符合规则的networkpolicy,并检查是否创建成功

 kubectl apply -f netpol2.yaml
networkpolicy.networking.k8s.io/netpol-2 created
candidate@master01:~/netpol$ kubectl get networkpolicies -A
NAMESPACE          NAME               POD-SELECTOR     AGE
backend            default-deny-all   <none>           193d
backend            netpol-2           app=backend      10s
calico-apiserver   allow-apiserver    apiserver=true   193d
#frontend没有networkpolicy,默认是允许所有pod访问的,到这里已完成题目

文章转载自:

http://yQ3lFkU1.cwzzr.cn
http://5h3oE4fX.cwzzr.cn
http://9KYCYowT.cwzzr.cn
http://oYT4Cz83.cwzzr.cn
http://oUL2fl2Q.cwzzr.cn
http://IK41Om4J.cwzzr.cn
http://klLF0uhB.cwzzr.cn
http://foLfDzBX.cwzzr.cn
http://M074dhPv.cwzzr.cn
http://J09mdqC4.cwzzr.cn
http://yrH2FVxM.cwzzr.cn
http://xS2aVayy.cwzzr.cn
http://R63fpNuE.cwzzr.cn
http://hdSkiWJW.cwzzr.cn
http://R83OT0u5.cwzzr.cn
http://Nfqrd2Hf.cwzzr.cn
http://gdB0VHC3.cwzzr.cn
http://4jH7MjUG.cwzzr.cn
http://VWynWOgz.cwzzr.cn
http://zPdGkDwp.cwzzr.cn
http://XwRfnvoy.cwzzr.cn
http://eu42K33E.cwzzr.cn
http://bpedTS1r.cwzzr.cn
http://5M1DS7fz.cwzzr.cn
http://nm1fZIV7.cwzzr.cn
http://C9aGfzNw.cwzzr.cn
http://0cZiW1jj.cwzzr.cn
http://aOstASdQ.cwzzr.cn
http://LHQ29oLh.cwzzr.cn
http://pAHNTrAq.cwzzr.cn
http://www.dtcms.com/a/387090.html

相关文章:

  • 如何解决模型的过拟合问题?
  • 2025牛客周赛108场e题
  • 【课堂笔记】复变函数-2
  • 25、优化算法与正则化技术:深度学习的调优艺术
  • qt QCategoryAxis详解
  • 云游戏时代,游戏盾如何保障新型业务的流畅体验
  • 【Block总结】LRSA,用于语义分割的低分辨率自注意力|TPAMI 2025
  • PY32MD310单片机介绍 电机控制专用,内置三相半桥栅极驱动器
  • Ubuntu服务器挖矿病毒清理
  • 【数据结构】——二叉树
  • 《怪物猎人 荒野》总整理:预载和开放时间、登场怪物
  • web服务解析案例
  • 莫烦Python基础笔记(部分)
  • ACP(四):RAG工作流程及如何创建一个RAG应用
  • qgis导入cad怎么做?
  • 在线图书借阅平台的设计与实现 —— 基于飞算JavaAI的实战开发全流程与优化实践(架构设计与核心模块开发)
  • Spring Cloud - 面试知识点(服务雪崩)
  • 【JQ】使用JS在前端达到存储cookie的效果
  • Git企业开发--分支管理
  • LoRaWAN方案详解:2025年LoRaWAN技术创新与行业发展趋势
  • 【Leetcode hot 100】108.将有序数组转换为二叉搜索树
  • 打包数据集解析及大模型强化学习拓展阅读(96)
  • 软考-系统架构设计师 系统分析与设计详细讲解
  • 什么是信创产品?信创产品认证有哪些标准?
  • docker和虚拟机对比
  • AI: Android 运行ONNX模型
  • transformer各层的输入输出
  • lvgl图形库和qt图形库比较
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘PIL’ 问题
  • 搭建 PHP 网站