首页 > 其他分享 >cka认证

cka认证

时间:2024-04-03 11:58:07浏览次数:26  
标签:cka name app 认证 nginx etcd Pod 节点

1、考核知识:基于角色的访问控制-RBAC

Context
为部署流水线创建一个新的 ClusterRole 并将其绑定到范围为特定的 namespace 的特定ServiceAccount。
Task
创建一个名为 deployment-clusterrole 的 clusterrole,该 clusterrole 只允许对 Deployment、Daemonset、Statefulset
具有 create 权限。在现有的 namespace app-team1 中创建一个名为 cicd-token 的新 ServiceAccount。
限于 namespace app-team1 中,将新的 ClusterRole deployment-clusterrole 绑定到新的 ServiceAccount cicd-token。 
做题解答:
rbac.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: app-team1
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cicd-token
  namespace: app-team1
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: deployment-clusterrole
rules:
- apiGroups: ["","app"]
  resources: ["Deployment","Daemonset","Statefulset"]
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rb-cicd-token
  namespace: app-team1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: deployment-clusterrole
subjects:
- kind: ServiceAccount
  name: cicd-token
  namespace: app-team1

2、考核知识:节点维护-指定 node 节点不可用

Task
将 ek8s-node-1 节点设置为不可用,然后重新调度该节点上的所有 Pod。
做题解答:
设置节点为不可调度。
kubectl cordon 节点名称
驱逐 ek8s-node-1 上的 pod
kubectl drain 节点名称 --delete-emptydir-data --ignore-daemonsets --force

3、考核知识:K8s 版本升级(如何离线主机,并升级控制面板和升级节点)

Task
现有的 Kubernetes 集群正在运行版本 1.23.1。仅将 master 节点上的所有 Kubernetes 控制平面和节点组件升级到版本 1.23.2。
(注意,考试时的集群可能为 1.23.0,会让你从 1.23.0 升级为 1.23.1。甚至是 1.22.1 升级为 1.22.2。所以敲命令时,具体要
升级的版本,根据题目要求更改。)
确保在升级之前 drain master 节点,并在升级后 uncordon master 节点。
可以使用以下命令,通过 ssh 连接到 master 节点:
ssh master01
可以使用以下命令,在该 master 节点上获取更高权限:
sudo -i
另外,在主节点上升级 kubelet 和 kubectl。请不要升级工作节点,etcd,container 管理器,CNI 插件, DNS 服务或任何其他
插件。
做题解答:
#将节点标记为不可调度并驱逐所有负载,准备节点的维护:
kubectl cordon k8smaster
kubectl drain k8smaster --delete-emptydir-data --ignore-daemonsets --force
#升级控制平面节点
#升级 kubeadm
apt-get update
#找到题目要求升级到的指定版本
apt-cache madison kubeadm | grep 1.23.2 
#如:找到以下结果:
#kubeadm |  1.23.2-00 | http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial/main amd64 Packages
apt-get install kubeadm=1.23.2-00
#验证下载操作正常,并且 kubeadm 版本正确
kubeadm version
#验证升级计划:此命令检查你的集群是否可被升级,并取回你要升级的目标版本。 命令也会显示一个包含组件配置版本状态的表格。
kubeadm upgrade plan
#排除 etcd,升级其他的
kubeadm upgrade apply v1.23.2 --etcd-upgrade=false
#升级 kubelet 和 kubectl
apt-get install kubelet=1.23.2-00 kubectl=1.23.2-00
#解除节点的保护
kubectl uncordon k8smaster

4、考核知识:ETCD 数据备份恢复

首先,为运行在 https://127.0.0.1:2379 上的现有 etcd 实例创建快照并将快照保存到 /srv/data/etcd-snapshot.db 文件。
为给定实例创建快照预计能在几秒钟内完成。 如果该操作似乎挂起,则命令可能有问题。用 CTRL + C 来取消操作然后重试。
然后还原位于 /var/lib/backup/etcd-snapshot-previous.db 的现有先前快照。
提供了以下 TLS 证书和密钥,以通过 etcdctl 连接到服务器:
- CA证书: /opt/KUIN00601/ca.crt
- 客户端证书: /opt/KUIN00601/etcd-client.crt
- 客户端密钥: /opt/KUIN00601/etcd-client.key
做题解答:
1、安装etcdctl命令(版本要和k8s的etcd版本一致)
把 etcd-v3.5.4-linux-amd64.tar.gz 文件上传到服务器
tar xvf etcd-v3.5.4-linux-amd64.tar.gz
cp -p etcd-v3.5.4-linux-amd64/etcdctl /usr/local/bin/
2、备份(下面的证书是模拟环境中的位置,考试时用题目给的三个证书)
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /root/exam/etcd-snapshot.db
3、还原(还原题目指定的 /var/lib/backup/etcd-snapshot-previous.db 文件)
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore /var/lib/backup/etcd-snapshot-previous.db

5、考核知识:网络策略 NetworkPolicy

在现有的namespace internal中创建一个名为allow-port-from-namespace的NetworkPolicy。此新的 NetworkPolicy允许同命名
空间下的其他Pod连接到其他Pod的9000端口。
确保新的NetworkPolicy:
- 不允许对没有在监听 9000 端口的 Pods 的访问。
- 不允许非来自 namespace internal 中的 Pods 的访问
做题解答:
netpol.yaml
 
apiVersion: v1
kind: Namespace
metadata:
  name: internal
  labels:
    ns: internal
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: internal
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          ns: internal
  - ports:
    - protocol: TCP
      port: 9000

6、考核知识:四层代理 service

配置一个 front-end 的 deployment,在名字为 nginx 的容器里面添加一个端口配置,名字为 http,暴露端口号为 80,然后创建一
个 service,名字为 front-end-svc,暴露该deployment 的 http 端,并且 service 的类型为 NodePort。
做题解答:
front-end.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: front-end
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: front-end-svc
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: http
  type: NodePort
  selector:
    app: nginx

7、考核知识:七层代理 ingress

如下创建一个新的 nginx Ingress资源:
- 名称:pong
- Namespace:ing-internal
- 使用服务端口 5678 在路径 /hello 上公开服务 hello
可以使用以下命令检查服务 hello 的可用性,该命令应返回 hello:curl -kL<INTERNAL_IP>/hello
做题解答:
ingress.yaml 

apiVersion: v1
kind: Namespace
metadata:
  name: ing-internal
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 5678

8、考核知识:Deployment 管理 Pod 扩缩容

将第6题的deployment front-end管理的 Pod 的副本数扩容成 3个。
做题解答:
kubectl scale deployment front-end --replicas=3

9、考核知识:Pod 指定节点部署

创建一个 Pod,名字为 nginx-kusc00401,镜像地址是 nginx,调度到具有 disk=spinning 标签的节点上。
做题解答:
selectnode.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
spec:
  nodeSelector:
    disk: spinning
  containers:
  - name: nginx
    image: nginx

10、考核知识:检查可用节点数量

检查集群中有多少节点为Ready状态(不包括被打上Taint: NoSchedule 的节点),之后将数量写到/opt/KUSCO0402/kusc00402.txt。
做题解答:
available.sh 

#!/bin/bash

readyNum=`kubectl get nodes |grep "Ready"|wc -l`
noscheduleNum=`kubectl describe nodes |grep "Taint"|grep "NoSchedule"|wc -l`

let result=$readyNum-$noscheduleNum
echo "可以调度的节点数为:$result"

11、考核知识:一个 Pod 封装多个容器

创建一个 Pod,名字为 kucc1,这个 Pod 包含 4 个容器,为 nginx、redis、memcached、consul。
做题解答:
manypod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: kucc1
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  - name: redis
    image: redis
    imagePullPolicy: IfNotPresent
  - name: memcached
    image: memcached
    imagePullPolicy: IfNotPresent
  - name: consul
    image: consul
    imagePullPolicy: IfNotPresent

12、考核知识:持久卷 PersistentVolume

创建一个 pv,名字为 app-config,大小为 2Gi, 访问权限为 ReadWriteMany。Volume 的类型为 hostPath,路径为 
/srv/app-config。
pv.yaml 

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 2Gi
  hostPath:
    path: /srv/app-config

13、考核知识:PersistentVolumeClaims

创建一个名字为 pv-volume 的 pvc,指定 storageClass 为 csi-hostpath-sc,大小为 10Mi。然后创建一个 Pod,名字为 
web-server,镜像为 nginx,并且挂载该 PVC 至 /usr/share/nginx/html,挂载的权限为 ReadWriteOnce。之后通过 
kubectl edit 或者 kubectl path 将 pvc 改成 70Mi,并且记录修改记录。
pvc.yaml 

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: csi-hostpath-sc
  resources:
    requests:
      storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: pvc
      mountPath: /usr/share/nginx/html
  volumes:
  - name: pvc
    persistentVolumeClaim:
      claimName: pv-volume

14、考核知识:查看 Pod 日志

监控名为 foobar 的 Pod 的日志,并过滤出具有 unable-access-website 信息的行,然后将写入到 /opt/KUTR00101/foobar。
做题解答:
考察命令: kubectl logs 

15、考核知识:Sidecar 代理

使用 busybox lmage 来将名为 sidecar 的 sidecar 容器添加到现有的 Pod legacy-app 上,新的 sidecar 容器必须运行以下命
令:
/bin/sh -c tail -n+1 -f /var/log/legacy-app.log
使用 volume 挂载 /var/log/ 目录,确保 sidecar 能访问 /var/log/legacy-app.log 文件
sidecar.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
spec:
  containers:
  - args:
    - /bin/sh
    - -c
    - |
      i=0; while true; do
        echo "$(date) INFO $i" >>/var/log/legacy-app.log;
        i=$((i+1));
        sleep 1;
      done
    image: busybox
    imagePullPolicy: IfNotPresent
    name: count
    volumeMounts:
    - name: log
      mountPath: /var/log
  - name: sidecar
    image: busybox
    imagePullPolicy: IfNotPresent
    args: [/bin/sh, -c, "tail -n+1 -f /var/log/legacy-app.log"]
    volumeMounts:
    - name: log
      mountPath: /var/log
  volumes:
  - name: log
    emptyDir: {}

16、考核知识:查看 Pod 的 cpu

找出标签是 name=cpu-user 的 Pod,并过滤出使用 CPU 最高的 Pod,然后把它的名字写在已经存在的
 /opt/KUTR00401/KUTR00401.txt 文件里(注意他没有说指定 namespace,所以需要使用 -A 指定所有 namespace)。

17、考核知识:集群故障排查 - kubelet 故障

一个名为 wk8s-node-0 的节点状态为 NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成。
做题解答:

systemctl status kubelet
systemctl restart kubelet
systemctl enable kubelet
systemctl status kubelet

标签:cka,name,app,认证,nginx,etcd,Pod,节点
From: https://blog.csdn.net/weixin_44320761/article/details/136483802

相关文章

  • ENSP通过 ISAKMP 方式建立 IPsec 隧道(采用证书认证)更新中
    第一步:证书准备cd/etc/pki/CAopensslreq-newkeyrsa:2048-x509-days365-out//CN-HN-SY-SYZY-XXJS-CA_ROOT(剩下的都按回车)cacert.pem-keyoutcakey.pemmvcakey.pemprivate/cd~/certsopensslreq-newkeyrsa:2048-new-outr1csr.csr-keyoutr1key.pem/......
  • 宁波ISO45001认证费用
    宁波ISO45001认证费用......
  • 关于ITIL认证您需要了解的一切
    这是一篇关于从业人员、领导者和ITSM爱好者指南。ITIL4于2019年发布。最新版本的IT服务管理(ITSM)最佳实践从传统的生命周期方法转变为服务价值体系模型,重点关注价值共创、向业务交付成果以及与其他最佳实践框架的融合。新版本的框架也意味着培训的更新。本文将针对ITIL培训......
  • 基于http方式的portal 认证-对外
    之前portal认证都是使用的portal协议。目前需要支持所有厂商http协议华为:URL:https://support.huawei.com/enterprise/zh/doc/EDOC1100127139/609549d8#ZH-CN_CONCEPT_0176368423 华三:URL:https://www.h3c.com/cn/d_201908/1222239_30005_0.htm 思科:URL:https://github......
  • 基于http方式的portal 认证
    之前portal认证都是使用的portal协议。目前需要支持所有厂商http协议华为:URL:https://support.huawei.com/enterprise/zh/doc/EDOC1100127139/609549d8#ZH-CN_CONCEPT_0176368423 华三:URL:https://www.h3c.com/cn/d_201908/1222239_30005_0.htm 思科:URL:https://github......
  • 云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
    方案概述MSE网关可以为后端服务提供转发路由能力,在此基础上,一些敏感的后端服务需要特定认证授权的用户才能够访问。MSE云原生网关致力于提供给云上用户体系化的安全解决方案,其中JWT认证能力是在JsonWebToken这种结构化令牌的基础上实现了一套基于用户体系对用户的API(服......
  • pycharm available packages为空且找不到manage repositories
    解决办法点击PythonPackage->设置 点击加号 在RepositoryURL中写上以下任意国内镜像源http://pypi.douban.com/simple/http://mirrors.aliyun.com/pypi/simple/https://repo.continuum.io/pkgs/free/https://repo.continuum.io/pkgs/free/https://repo.conti......
  • 婴儿沐浴椅CPC认证 亚马逊沐浴椅子CPC认证
    婴儿沐浴椅如果您在亚马逊商城发布商品,则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策(包括本政策)。本政策适用的婴儿沐浴椅婴儿沐浴椅是一种用于浴缸、盥洗盆或类似沐浴设备中的一种支撑物,可在看护人为婴儿沐浴期间让婴儿坐在上面并为其前、后......
  • 身份证实名认证接口会返回什么?javascript身份核验接口示例
    身份证实名认证接口是通过核验身份证号、姓名、证件头像等一系列的要素信息进行用户身份验证,那么,身份证实名认证接口一般在核验完成后会返回什么参数信息呢?下面翔云API小编为大家答疑解惑!一般情况下,身份核验只会返回一致或者不一致的结果,不一致的情况下会返回那些参数不一致,以翔......
  • MogDB/openGauss数据库package关键字的两种用法
    MogDB/openGauss数据库package关键字的两种用法本文出处:https://www.modb.pro/db/237701package关键字在MogDB数据库里有两种用法:package包,分为PackageSpecification和PackageBody。注意:需要在Oracle兼容下(dbcompatibility=‘A’)package属性,用于存储过程重......