CKA证书题库-总结

news2024/12/25 15:12:58

CKA真题(考题总结)

文章目录

  • CKA真题(考题总结)
  • 证书
      • 个人考试总结
            • 申诉结果
      • CKA题目参考博主
            • 重点介绍
      • CKA模拟题库
  • 注意事项
      • 考试概要
      • 考试注意事项:
  • CKA题目答案
      • 设置自动补全
            • 方法一
            • 方法二
    • 第⼀题:权限控制RBAC
      • 考试原题
    • image-20230306212454610
      • 参考链接官网
      • 题解
            • 个人理解
            • 考试
            • 练习环境
    • 第⼆题:节点维护,设置节点不可⽤
      • 原题
      • 参考链接官网
      • 题解
    • **第三题:升级 节点kubeadm**
            • 原题
      • 参考官网链接
      • 题解
            • 考试
            • 练习
      • 另一版本
    • 第四题:备份还原 etcd
      • 原题
      • 参考网页
      • 解题
      • 答题技巧
  • **第五题 网络策略**
      • 原题
      • 参考
      • 题解
      • 另一个版本
            • 检查
  • 第六题SVC 暴露应用(强制记忆)
      • 原题
      • 参考
      • 题解
            • 答题技巧
  • 第七题Ingress创建(拷贝yaml)📍(注意yaml位置)
      • 原题
      • 参考
      • 题解
            • 答题技巧
            • 官方yaml代码需要修改的地方
      • 另一版本
  • 第八题-扩容 deployment 副本数量(强制记忆,`送分题`)
      • 原题
        • 参考链接
      • 题解
            • 可以先检查下pod数量
  • 第九题-调度 pod 到指定节点(强制记忆,`送分题`)
      • 原题
      • 参考
      • 题解
            • 答题技巧
      • 另一版本
  • 第10题-查看可用节点数量(强制记忆,`送分题`)
      • 原题
        • 参考链接
      • 题解
            • 答题技巧
      • 另一版本
  • 第11题-创建多容器的 pod(强制记忆,`送分题`)
      • 原题
      • 参考
      • 题解
      • 另一版本
  • 第12题-创建 PV(拷贝yaml)📍(注意yaml位置)
      • 原题
      • 参考
      • 题解
            • 答题技巧
      • 另一版本
      • 第13题 创建PVC(拷贝yaml)📍(注意yaml位置)pvc 的创建 class 属性的使用,–record 记录变更
      • 原题
      • 参考
      • 题解
            • 解题技巧
      • 另一版本
  • 第14题 获取 Pod 错误日志(强制记忆,`送分题`)
      • 原题
            • 参考
      • 题解
            • 答题技巧
      • 第15题-使用 sidecar 代理容器日志(边车)(强制记忆)要注意下
      • 原题
            • 参考
      • 题解
            • 解题yaml:
            • 答题技巧
      • 另一版本
    • 16-统计使用 CPU 最高的 Pod(强制记忆,`送分题`)
      • 原题
        • 参考链接
      • 题解
            • 答题技巧
    • 第17题-节点NotReady处理
            • 排查集群中故障节点(强制记忆,`送分题`,一定要做完这道题,分值最高,最简单)
      • 原题
        • 参考链接
      • 题解
            • 答题技巧
      • 原题
        • 参考链接
      • 题解
            • 答题技巧
    • 第17题-节点NotReady处理
            • 排查集群中故障节点(强制记忆,`送分题`,一定要做完这道题,分值最高,最简单)
      • 原题
        • 参考链接
      • 题解
            • 答题技巧

证书

image-20230426140720531

个人考试总结

我总结了一下今天考试的问题?
我是凌晨5点考试的,当时选择了一个VPN节点是美国 400ms,然后连接上去,进入psi浏览器,然后出现英文的界面,选择一些东西,客服也是英文老师,等到4.50出现的一个中文监考老师,让后检测各种考试环境,进入到考试界面,刚切换成中文,然后点击了一下终端就掉了,等了30分钟从新连接上去,显示已经完成考试,等待考试结果,这里进行申诉给官方,申诉邮箱不方便贴出来,大家可以私信找我拿。

第二次考试,准备也是早上5点,网络状态好用,不用开启VPN,上去正常考试

image-20230426140622217

申诉结果

image-20230426140357536

CKA题目参考博主

https://blog.csdn.net/april_4/article/details/123233845  #3月1日刚过
https://blog.csdn.net/qq_41847894/article/details/128477688?spm=1001.2014.3001.5506

#写的比较细一位小姐姐,带官网报名流程介绍
https://blog.51cto.com/u_14907428/4803641
#51cto博主写的,还可以
https://blog.csdn.net/weixin_72758284/article/details/128142352?spm=1001.2014.3001.5501

#12月,题目稍微不一样
https://blog.51cto.com/u_15966109/category3.html
#51cto博主写的6-10题,还有模拟题库
https://blog.csdn.net/weixin_39246554/article/details/126874141?spm=1001.2014.3001.5506

#比较细可以参考,推荐
https://blog.csdn.net/qq_33680297/article/details/123074501  #带官网搜答案教程
重点介绍
https://www.yuque.com/wangzilong-4omf5/mid93s/rzizm8cq2gb2zn7r

#语雀CKA考题解析,做的很细很细,可以参考,带模拟题,还有小笔记

CKA模拟题库

https://blog.51cto.com/u_15966109/category3.html

注意事项

1. 12月份考试的时候kubectl已经可以Tab补全了,不需要背指令source <(kubectl completion bash).

2.  指令多用-h查询,答案不唯一,指令或yaml解出来都可以。

3. 题目中蓝色字在考试都会有所变动(我考试只变了1,2题参数,其他没变)。

4. 考试只允许访问官网查询,不能使用收藏网页,考试都是使用官网浏览器,浏览器会要求你关闭远程工具,虚拟机vm等进程(要我关闭进程显卡控制台???)

5. 注意切换集群。

考试概要

考试模式:线上考试

考试时间:2小时

题目数量:17题

分数:一般总分100分有时99、98,66分及格

题目说明:国内访问一般会自动切换中文

考试系统界面:

image-20230307201148638

答题结束后,在Exam Controls里结束考试

考试注意事项:

1. yaml文件名字可以用01.yaml,02.yaml等对应相应题,方便排错。yaml文件里面必须使用空格来缩进
2. vim编辑yaml文件,如果粘贴官网yaml过来需要设置:set paste
3. 题目能复制就复制。
4. 考试环境会在节点node进行,如遇到权限不够加sudo。

CKA题目答案

设置自动补全

方法一
登陆管理节点
kubectl --help | grep bash,此步是为了找关键词completion

sudo vim /etc/profile
添加source <(kubectl completion bash)
file


5.保存退出,source /etc/profile

方法二
自动补全:echo "source <(kubectl completion bash)" >> ~/.bashrc; source ~/.bashrc

1. 12月份考试的时候kubectl已经可以Tab补全了,不需要背指令source <(kubectl completion bash).

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tC7vtScB-1682489659975)(C:\Users\艾克\AppData\Roaming\Typora\typora-user-images\image-20230306212043611.png)]

第⼀题:权限控制RBAC

考试原题

image-20230306212454610

Task
创建一个名为deployment-clusterrole	且允许创建以下资源类型的新ClusterRole:
Deployment
StatefulSet
DaemonSet
在现有的namespace app-team1中创建一个名为cicd-token的新ServiceAccount
限于namespace app-team1,将新的ClusterRole deployment-clusterrole绑定到新的ServiceAccount cicd-token

参考链接官网

https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/#kubectl-create-clusterrole
https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/authentication-resources/service-account-v1/#create-%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA-serviceaccount

题解

个人理解
没必要参考网址,使用-h 帮助更方便。

kubectl create clusterrole -h

kubectl create serviceaccount -h

kubectl create rolebinding -h
考试
1、切换环境
kubectl config use-context kubernetes

2、配置
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create serviceaccount cicd-token -n app-team1
# 题目中写了“限于 namespace app-team1 中”,则创建 rolebinding。没有写的话,则创建 clusterrolebinding。
kubectl create rolebinding cicd-token-rolebinding --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
# rolebinding 后面的名字 cicd-token-rolebinding 随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。

3、验证
#稍微验证下
kubectl describe rolebinding cicd-token-rolebinding -napp-team1

kubectl get serviceaccout -n 命名空间
练习环境

备注 命令空间会变,题目顺序也会变,我这里命令空间自己定义的cka

1、创建namespace
kubectl create namespace  cka #考试里面已经有了

2、创建serviceaccount
kubectl create serviceaccount cicd-token -n cka

3、创建role或者clueterrole

kubectl create role deployment-role --verb=create,delete  --resource=deployment,statefulset,saemonset -n cka

4、创建rolebinding或者clusterrolebinding

kubectl create rolebinding cicd-rolebinding --role=deployment-role --serviceaccount=cka:cicd-token -n cka

验证

kubectl auth can-i list  pod  --as system:serviceaccount:cka:cka-1202-sa -n cka

image-20230306215133630

第⼆题:节点维护,设置节点不可⽤

考点:cordon 和 drain 命令的使用

原题

image-20230306215233712

Task
将名为ek8s-node-1的node设置为不可用,并重新调度该node上所有运行的pods

参考链接官网

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/safely-drain-node/

题解

1、将节点设置为不可用

kubectl get node 

kubectl cordon master01

2、重新调度节点上所有pod

**kubectl drain master01 --delete-emptydir-data --ignore-daemonsets --force

小技巧,不加参数,驱逐不成功,报错就显示要添加的参数了,如果还有报错就看后面提示,添加参数就可以了
.#先进入指定集群
kubectl drain ek8s-node-1 --ignore-daemonsets   #设置不可调度并驱逐节点上pod
注:如果执行了drain提示错误,根据提示再加上选项,例如--delete-local-data  --force

#检查
kubectl  get pod -o wide

image-20230306215554733

image-20230307112813841

第三题:升级 节点kubeadm

原题

image-20230306215829264

Task
设置配置环境:
kubectl config use-context mk8s
现有的Kubernetes集群正在运行版本1.20.0,仅将主节点上的所有Kubernetes控制平面和节点组件升级到版本1.20.1
确保在升级之前drain主节点,并在升级后uncordon主节点
可使用以下命令通过ssh连接到主节点:
ssh mk8s-master-0
可使用以下命令在该主节点上获取更高权限:
sudo -i
另外,在主节点上升级kubelet和kubectl。(不需要升级etcd)

参考官网链接

1.登陆官网k8s.io,可以右上角更换语言,点击Learn Kubernetes Basics
2.搜索upgrade

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

题解

考试
1、切换环境
kubectl config use-context mk8s

2、配置
#升级kueadm
kubectl drain mk8s-master-0 --ignore=daemonsets

ssh mk8s-master-0
sudo -i 

apt install kubeadm=1.20.1-00 -y
kubeadm upgrade plan
#这里可以先查下的:apt-cache show|grep kubeadm
#kubeadm upgrade install v1.20.1 #。。。淦,这个写错了。。。。。。。是apply,并且要加上--ectd-ugrade=false。。。。。。题目要求不升级 etcd; 注意下这2个版本号写法的区别。。。。
kubeadm upgrade apply v1.20.1 --etcd-upgrade=false

#升级kubelt
apt install kubelet=1.20.1-00 kubectl=1.20.1-00 -y
systemctl restart kubelet #这里要重启下kubelt的,切记。。。

exit
exit

kubectl uncordon mk8s-master-0

3、验证
kubectl get node -owide
kubectl --version
kubelet --version

练习
文档主页-->任务-->管理集群-->用 kubeadm 进行管理-->升级 kubeadm 集群

1、驱逐节点上的pod

kubectl cordon master

kubectl drain master01  --ignore-daemonsets 

2、查看现有版本和可升级的版本  #ubuntu操作系统

kubeadm version

apt-cache madison kubeadm|grep 1.22

3、升级kubeadm

apt-get install kubeadm=1.22.3-00 -y --allow-change-held-packages

kubeadm upgrade plan

sudo kubeadm upgrade apply v1.22.3 --etcd-upgrade=false      不升级etcd

4、升级kubelet和kubectl

apt-get install -y kubelet=1.22.3-00 kubectl=1.22.3-00  --allow-change-held-packages

sudo systemctl daemon-reload

sudo systemctl restart kubelet

5、配置节点可调度

kubectl uncordon k8s-master
  • 答题技巧
03 升级 kubernetes 版本; 7分 简单;有链接但 强制记忆;

这个使用的是ubuntu操作系统;(唯一 一个需要用到ubuntu命令的考题;)
ubuntu使用sudo -i 切换root,使用apt-get安装软件包;
ununtu默认禁止root登录;
因此,考试时,只有升级kubernetes这一道题需要用到ubuntu系统,其他都不需要用到;
直接用sudo -i切换到root用户,再开始答题;(不需要输入密码)

注意:这里切换kubernetes集群后,直接使用`kubectl drain kubernetes-master-0 --ignore-daemonsets`命令进行配置,不需要先ssh到mkubernetes-master-0节点;(这个需要注意下)

确定要升级到哪个版本
使用操作系统的包管理器找到最新的稳定 1.21:
apt update
apt-cache policy kubeadm
# 在列表中查找最新的 1.21 版本
# 它看起来应该是 1.21.x-00,其中 x 是最新的补丁版本

#ubuntu和centos查看kubeadm最新版本的方法
apt-cache policy kubeadm #ubuntu查看方式
1.20.5-00

yum list --showduplicates kubeadm --disableexcludes=kubernetes #centos查看方式
1.21.2-0

#注意如下的2种格式:
ubuntu系统:1.20.5-00
centos系统:1.21.2-0 

#注意:
ubuntu中apt install kubeadm=1.20.1-00 –y或者apt-get install kubeadm=1.20.1-00 –y都是可以的;(我们这里使用apt install方式)

image-20230306223054282

另一版本

img

1
img

2
img

3
img

4
img

5
img

6
img

第四题:备份还原 etcd

原题

img

Task
首先,为运行在https://127.0.0.1:2379上的现有etcd实例创建快照并将快照保存到/data/backup/etcd-snapshot.db
为给定实例创建快照预计能在几秒钟内完成。如果该操作似乎挂起,则命令可能有问题。用ctrl+c来取消操作,然后重试。
然后还原位于/data/backup/etcd-snapshot-previous.db的现有先前快照。
提供了以下TLS证书和密钥,以通过etcdctl连接到服务器。
CA证书:/opt/KUIN00601/ca.crt
客户端证书:/opt/KUIN00601/etcd-client.crt
客户端密钥:/opt/KUIN00601/etcd-client.key

参考网页

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

image-20230307204242658

img

解题

⚠️ 如下2条命令很容易忘记呀,要多次记忆呀。。。。。(特别注意下这个题目。。。)

1、确定当前环境
kubectl get node

2、配置
#备份
ETCDCTL_API=3 etcdctl snapshot save /data/backup/etcd-snapshot.db --endpoints=https://127.0.0.1:2379   --cacert=xx --cert=xx --key=xx

#还原
sudo -i
systemctl stop etcd
systemctl cat etcd #。。。。。淦:注意这里是systemctl cat etcd
mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak # 。。。。淦:注意这里是default.etcd

exit
ll /data/backup/etcd-snapshot-previous.db
sudo ETCDCTL_API=3 etcdctl restore /data/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd/default.etcd
chown -R etcd:etcd /var/lib/etcd #淦。。。。注意,不要忘记了。。。。

syetmctl start etcd

注:执行备份命令如果提示没证书文件,exit 退回上一步操作
参考资料 : https://kubernetes.io/zh/docs/tasks/administer-cluster/configureupgrade-etcd/

验证
练习环境,把集群里面随便一个pod删除,恢复etcd的实话看看pod有没有恢复过来
crictl ps  #查看容器

答题技巧

04 etcd 备份与恢复 ;7分 简单;有链接但 强制记忆;(此题可先搁置)!!!

#备份etcd
etcdctl snapshot save --cacert  --cert --key

#恢复etcd
关闭etcd服务
确认etcd数据目录:systemctl cat etcd
etcdctl snapshot restore --data-dir
给权限: /var/lib/etcd
启动etcd

查看帮助,仔细检查证书目录,还有要复制的目录,练习环境集群跟考试不一样,但是操作命令都是一样的,改变的就是参数

1.安装etcd 这个命令进行备份,考试环境是安装好的
2.ETCDCTL_API=3 etcdctl -h #查看帮助,需要添加那些参数

恢复:这里需要给大家强调一下
	1.这里恢复用的是已经存在的一个备份文件,而不是说我们之前备份的那个文件;
	2.这里的etcd是二进制方式部署的,重启需要使用systemctl start etcd命令;
	3.这个ectd的备份与恢复考题:恢复这里一直是个坑;你恢复了之后,这个etcd起不来了,这个就JJ了。。。。;
	4.这个题是个坑:可以直接放弃,把稳起见;(可以做个etcd备份,恢复就不需要做了。。。可以看情况)

第五题 网络策略

原题

image-20230307205102768

Task
在现有的namespace my-app中创建一个名为allow-port-from-namespace的新NetworkPolicy
确保新的NetworkPolicy允许namespace my-app中的Pods来连接到namespace big-corp中的端口8080
进一步确保新的NetworkPolicy:
不允许对没有在监听端口8080的pods的访问
不允许不来自namespace my-app中的pods的访问

双重否定就是肯定,所以最后两句话的意思就是:
仅允许端口为 8080 的 pod 访问。
仅允许 my-app命名空间中的 pod 访问。

参考

https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/

image-20230307205250424

题解

1、切换环境
kubectl config use-context hk8s


2、配置
#如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
给命名空间打标签:kubectl label namespace big-corp name=big-corp


编写一个 yaml 文件
vim networkpolicy.yaml
#注意 :set paste,防止 yaml 文件空格错序。

apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: my-app #被访问者的命名空间
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: big-corp #访问者的命名空间的标签
    ports:
    - protocol: TCP
      port: 8080 #被访问者公开的端口
      
kubectl apply -f   networkpolicy.yaml

3、验证
kubectl get networkpolicy -nmy-app

官方yaml

apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

image-20230307205504693

删除egress,ingress里的ipBlock,podSelector部分,修改spec.podSelector后面为空。

另一个版本

image-20230307205538104

2
image-20230307205553452

检查

image-20230307205618302

第六题SVC 暴露应用(强制记忆)

考点:将现有的 deploy 暴露成 nodeport 的 service。

原题

image-20230307205732083

Task
请重新配置现有的部署front-end 以及添加名为http的端口规范来公开现有容器nginx的端口80/tcp
创建一个名为front-end-svc的新服务,以公开容器端口http
配置此服务,以通过在排定的节点上的NodePort来公开各个Pods

参考

https://kubernetes.io/zh-cn/docs/tutorials/services/source-ip/#source-ip-for-services-with-type-nodeport

题解

1、切换环境
kubectl config use-context kubernetes


2、配置
kubectl edit deployment front-end
…
    containers:
    - image: nginx
      imagePullPolicy: Always
      name: nginx
      ports:
      - name: http #额额,这里要加一个-横杠的。。。
        protocol: TCP #protocol不写也是可以的,因为默认就是TCP
        containerPort: 80
…
kubectl expose deployment front-end --port=80 --target-port=80 --type=NodePort --name=front-end-svc #注意:这里--name(不要忘记了。。。。)svc类型:NodePort/ClusterIP;  --port是svc的端口号,--target-port是deployment里pod的容器的端口号


#验证:(看下他们的SELECTOR标签是否一致)
kubectl get svc front-end-svc -owide
kubectl get deployment front-end -owide

curl 节点名/节点ip:NodePort
curl svcIP:port

答题技巧

image-20230307205923477

第七题Ingress创建(拷贝yaml)📍(注意yaml位置)

原题

image-20230307210456057

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

参考

https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/

image-20230307210616504

2
image-20230307210640629

题解

1、切换环境
kubectl config use-context k8s

2、配置
vim ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678
 #如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
 # 注意,如果等待5min后,这个还是出不来Ip时,可以看下那个hello服务类型是不是ClusterIP类型,如果不是,请修改为ClusterIp
 
3、验证
kubectl get ingress -ning-internal
curl -kL internal_IP/hello

答题技巧
1.直接从官方代码复制过来修改下即可;
2.如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
3.注意,一般自己的学习环境是看不到这个ingress 的 IP 地址的,而考试环境是可以的;
官方yaml代码需要修改的地方

注意:ingress资源还要加上一个namesapce的。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678

image-20230307210845793

另一版本

image-20230307210944999

2
image-20230307211000688

3
image-20230307211011523

4
image-20230307211048058

5
image-20230307211105188

第八题-扩容 deployment 副本数量(强制记忆,送分题

原题

image-20230307211417331

Task
将deployment从loadbalancer扩展至5 pods

参考链接

没必要参考网址,使用-h 帮助更方便。

kubectl scale deployment -h

题解

1、切换环境
kubectl config use-context k8s

2、配置
kubectl scale deployment loadbalancer --replicas=5

3、验证
kubectl get po
kubectl get deployment

可以先检查下pod数量

image-20230307211553822

2
image-20230307211613588

第九题-调度 pod 到指定节点(强制记忆,送分题

原题

image-20230307211739438

Task
按如下要求调度一个pod
名称:nginx-kusc00401
Image: nginx
Node selector: disk=ssd

参考

https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/

题解

1、切换环境
kubectl config use-context k8s

2、配置
vim nodeSelector.yaml

aoiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
spec:
  containers:
  - name: nginx-kusc00401
    image: nginx
  nodeSelector: #这个是和containers同一级别的。
    disk: ssd
    
kubectl apply -f nodeSelector.yaml

# kubectl label node node01 disk=ssd 打标签
# kubectl get node --show-lables

3、验证
kubectl get po -owide

答题技巧
直接打开书签,拷贝yaml,删除2处内容,并修改pod名称即可,很简单;

。。。注意下:这个网址是改变了的。。。

image-20230307211937640

另一版本

image-20230307212003908

2
image-20230307212017526

3
创建
image-20230307212036748

第10题-查看可用节点数量(强制记忆,送分题

考点:检查节点角色标签,状态属性,污点属性的使用

原题

image-20230307212137239

Task
检查有多少worker nodes已准备就绪(不包括被打上Taint:NoSchedule的节点),并将数量写入

参考链接

没必要参考网址,使用-h 帮助更方便。

kubectl -hD

如果实在记不住命令,可以手动往题目文件里面写入2 即可

题解

1、切换环境
kubectl config use-context k8s

2、配置
kubctl describle nodes $(kubectl get node|grep Ready|awk '{print $1}')|grep Taints|grep -vc NoSchedule 

3、验证
cat /opt/KUSC00402/kusc00402.txt
2

答题技巧
1、自己测试过程
#统计all准备就绪的节点
[root@kubernetes-master ~]#kubectl get nodes|grep Ready
kubernetes-master   Ready    control-plane,master   43d   v1.21.2
kubernetes-node1    Ready    <none>                 43d   v1.21.2
kubernetes-node2    Ready    <none>                 43d   v1.21.2
[root@kubernetes-master ~]#kubectl get nodes|grep Ready|awk '{print $1}'
kubernetes-master
kubernetes-node1
kubernetes-node2
[root@kubernetes-master ~]#


#统计没有打上污点的节点
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint
Taints:             node-role.kubernetes.io/master:NoSchedule
Taints:             <none>
Taints:             <none>
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint|grep -v NoSchedule
Taints:             <none>
Taints:             <none>
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint|grep -cv NoSchedule
2

#最终代码
[root@kubernetes-master ~]#kubectl describe node $(kubectl get nodes|grep Ready|awk '{print $1}') |grep Taint|grep -vc NoSchedule
2

kubectl describe node $(kubectl get nodes|grep Ready|awk '{print $1}') |grep Taint|grep -vc NoSchedule > /opt/KUSC00402/kusc00402.txt

2.如果不熟悉shell的话,那么手动统计应该也可以;
[root@kubernetes-master ~]#kubectl get node
NAME         STATUS   ROLES                  AGE   VERSION
kubernetes-master   Ready    control-plane,master   43d   v1.21.2
kubernetes-node1    Ready    <none>                 43d   v1.21.2
kubernetes-node2    Ready    <none>                 43d   v1.21.2
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint
Taints:             node-role.kubernetes.io/master:NoSchedule
Taints:             <none>
Taints:             <none>
[root@kubernetes-master ~]#

3.
-c代表统计个数;
污点tag也不全是NoSchedule;

另一版本

image-20230307212426812

2
image-20230307212440222

3
image-20230307212454717

第11题-创建多容器的 pod(强制记忆,送分题

原题

image-20230307212611169

Task
创建一个名为kucc4的pod,在pod里面分别为以下每个images单独运行一个app container(可能会有1-4个images):
nginx +redis+memcached

参考

https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#using-pods

image-20230307212636931

题解

1、配置环境
kubectl config use-context k8s

2、配置
vim pod.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: kucc4
spec:
  containers:
  - name: nginx
    image: nginx
  - name: redis
    image: redis
  - name: memcached
    image: memcached

kubectl apply -f pod.yaml

3、验证
kuebctl get po

另一版本

image-20230307212720717

2
image-20230307212744336

3

image-20230307212755710

第12题-创建 PV(拷贝yaml)📍(注意yaml位置)

考点:hostPath 类型的 pv

原题

image-20230307213753438

Task
创建名为app-data的persistent volume,容量为2Gi,访问模式为ReadWriteOnce,volume类型hostPath,位于/srv/app-data

参考

https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

image-20230307213830477

题解

1、切换环境
kubectl config use-context hk8s

2、配置
vim pv.yaml 

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-data
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/srv/app-data"
    
kubectl appy -f pv.yaml

3、验证
kubectl get pv

答题技巧
这个是直接创建pv的,不需要去用;
把标签和存储类给去掉;

image-20230307214000016

另一版本

image-20230307214033201

2
image-20230307214043403

第13题 创建PVC(拷贝yaml)📍(注意yaml位置)pvc 的创建 class 属性的使用,–record 记录变更

pvc 的创建 class 属性的使用,–record 记录变更

原题

image-20230307214142876

Task
创建一个新的PersistentVolumeClaim:
名称:pv-volume
Class: csi-hostpath-sc
容量:10Mi
创建一个新的Pod,此Pod将作为volume挂载到PersistentVolumeClaim
名称: web-server
image: nginx
挂在路径:/usr/share/nginx/html
配置新的pod,以对volume具有ReadWriteOnce权限
最后,使用kubectl edit或kubectl patch将PersistentVolumeClaim的容量扩展为70Mi,并记录此更改

参考

https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/

⚠️ 注意:官方yaml位置

官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:

image-20230307214230859

题解

1、切换环境
kubectl config use-context ok8s

2、配置
vim pvc.yaml

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

kubectl apply -f pvc.yaml


3、验证
kubectl get pvc
kubectl get pv
kubectl get po

#kubectl edit pvc pv-volume --config-save #淦。。。。。是--save-config ,自己写错了。。。。
kubectl edit pvc pv-volume --save-config  #可能要等个1分钟的时间才会发生变化;

# kubectl edit pvc pv-volume --record 这种方法也是可以的。。。。
70Mi

解题技巧
这里会用到存储类,会动态的供给;
1.先创建一个pvc
2.再创建一个pod

端口这边写不写都无所谓:在写svc时候,如果你没指定--target-port的话,那么就会以你定义的为准;

volumes定义在上面和下面都无所谓,只要和container同级就好;

kubectl get pvc,可能要等个1分钟的时间才会发生变化;

image-20230307214431739

2
image-20230307214448153

另一版本

image-20230307214511056

2
image-20230307214522729

3
image-20230307214537391

4
image-20230307214843837

5

image-20230307214911348

6
image-20230307214932206

7
image-20230307214946215

第14题 获取 Pod 错误日志(强制记忆,送分题

考点:kubectl logs 命令

原题

image-20230307220022877

Task

监控pod bar的日志并:

提取与错误file-not-found相对应的日志行,将这些日志写入/opt/KUTR00101/bar
参考

https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/

没必要参考网址,使用-h 帮助更方便。

kubectl -h

题解

1、切换环境
kubectl config use-context k8s

2、配置
kubectl logs bar |grep file-not-found > /opt/KUTR00101/bar

3、验证
cat /opt/KUTR00101/bar

答题技巧

image-20230307220222050

第15题-使用 sidecar 代理容器日志(边车)(强制记忆)要注意下

考点:pod 两个容器共享存储卷

原题

image-20230307220327331

Task
使用busybox Image来将名为sidecar的sidecar容器添加到现有的pod legacy-app中。新的sidecar容器必须运行以上命令:
/bin/sh -c tail -n+1 -f /var/log/legacy-app.log
使用安装在/var/log的Volume,使日志文件legacy-app.log可用于sidecar容器。
(注:除了添加所需的volume mount以外,请勿更改现有容器的规格。)
解题
参考

https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/

题解

  • 注:由于 Pod 不能在线增加容器,可先导出 yaml 再添加最后 apply
    原yaml文件:
1、切换环境
kubectl config use-context k8s

2、配置
kubectl get po leagcy-app -oyaml > sidecar.yaml #由于 Pod 不能在线增加容器,可先导出 yaml 再添加最后 apply

kubectl delet po leagcy-app

vim sidecar.yaml
……
metadata:
  name: leagcy-app
spec:
  volumes:
  - name: varlog
    emptyDir: {}
  containers:
  - name: xx
    image: xx
    volumeMounts:
    - name: varlog
      mountPath: /var/log
      
  - name: sidecar
    image: busybox
    args: [/bin/sh, -c, "tail -n+1 -f /var/log/legacy-app.log"] #。。。。里面是单引号。。。
    volumeMounts: #要注意:volumes和volumeMounts这里都是复数。。。
    - name: varlog #这里是有一个name的。。。
      mountPath: /var/log
    
kubectl apply -f sidecar.yaml  

3、验证
kubectl logs legacy-app
kubectl exec legacy-app -c xx -- tail -f /var/log/legacy-app.log
kubectl exec legacy-app -c siecar -- tail -f /var/log/legacy-app.log

解题yaml:
apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: leagcy-app
    image: busybox
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$i: $(date)" >> /var/log/legacy-app.log;
        i=$((i+1));
        sleep 1;
      done      
    volumeMounts:
    - name: varlog
      mountPath: /var/log

  - name: sidecar
    image: busybox
    args: [/bin/sh, -c, 'tail -n+1 -F /var/log/legacy-app.log']
    volumeMounts:
    - name: varlog
      mountPath: /var/log

  volumes:
  - name: varlog
    emptyDir: {}

答题技巧
这个题目也是争议比较的大一个题目,能做出来的人很少;

考题中文翻译描述的问题很奇怪。。;

sidecar边车容器不是作为主容器,而是辅助主容器做一些功能;

注意:kubectl get pod big-corp-app -o yaml > big-corp-app.yaml 这里面的东西一个都不要删;

这个地方也容器出错;
加这一块比较容易出错,加着加着,这个对齐方式找不到了;
导出来,找到你的位置,然后直接粘贴过来修改即可;
这一块,比较考验你的yaml能力;

验证的话:
1.可以查看下kubectl get pod 看刚才那个pod是否有2个容器
2.用tail -f 查看下边车容器是否会有日志文件持续输出;

image-20230307220654041

另一版本

image-20230307220715953

2
image-20230307220730143

3
image-20230307220809589

4
image-20230307220824135

5
image-20230307220833147

6
image-20230307220843318

16-统计使用 CPU 最高的 Pod(强制记忆,送分题

考点:kubectl top -l 命令的使用

原题

image-20230307221016208

Task
通过pod label name=cpu-utilizer,找到运行时占用大量cpu的pod,并将占用cpu最高的pod名称写入文件/opt/KUTR00401.txt(已存在)

参考链接

没必要参考网址,使用-h 帮助更方便。

kubectl top pod -h

题解

1、切换环境
kubectl config use-context kubernetes

2、配置
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" -A #-A是所有namespace 不要忘记写哦,-l也要记得写哦。。。
echo "<podname>" > /opt/KUR00401.txt # 将第一个 Pod 名称写到文件

#写完后记得检查下那个保存结果的文件

3、验证
cat /opt/KUR00401.txt

答题技巧
metric-server已经准备好了,我们不用管;

第17题-节点NotReady处理

排查集群中故障节点(强制记忆,送分题,一定要做完这道题,分值最高,最简单)

原题

image-20230307221357339

Task
名为wk8s-node-0的Kubernetes worker node处于NotReady状态。调查发生这种情况的原因,并采取相应措施将node恢复为Ready状态,确保所做的任何更改永久有效
可使用以下命令通过ssh连接到故障node:
ssh wk8s-node-0
可使用以下命令在该node上获取更高权限:
sudo -i

参考链接

强制记忆。

题解

1、切换环境
kubectl config use-context wk8s #考试时切到这道题的集群后,那个 node 就是异常的。  真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。

2、配置
kubectl get node #查看Not Ready的node节点

ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet

exit #退出root用户
exit #退出故障节点

3、验证
kubectl get node

#jounarlctl -u kubelet 查看kubelet日志

答题技巧
通过 get nodes 查看异常节点,登录节点查看 kubelet 等组件的 status 并判断原因。
真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。

考试时切到这道题的集群后,那个 node 就是异常的。

如果systemctl start kubelet没起来的话,就要看它的日志了;(一般是会起来的)
如果kubelt的日志没起来,该如何看kubelet的日志?
journalctl -u kubelet

ctl top -l 命令的使用

原题

[外链图片转存中…(img-HNs61IJ4-1682489660009)]

Task
通过pod label name=cpu-utilizer,找到运行时占用大量cpu的pod,并将占用cpu最高的pod名称写入文件/opt/KUTR00401.txt(已存在)

参考链接

没必要参考网址,使用-h 帮助更方便。

kubectl top pod -h

题解

1、切换环境
kubectl config use-context kubernetes

2、配置
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" -A #-A是所有namespace 不要忘记写哦,-l也要记得写哦。。。
echo "<podname>" > /opt/KUR00401.txt # 将第一个 Pod 名称写到文件

#写完后记得检查下那个保存结果的文件

3、验证
cat /opt/KUR00401.txt

答题技巧
metric-server已经准备好了,我们不用管;

第17题-节点NotReady处理

排查集群中故障节点(强制记忆,送分题,一定要做完这道题,分值最高,最简单)

原题

[外链图片转存中…(img-7vGftcpi-1682489660009)]

Task
名为wk8s-node-0的Kubernetes worker node处于NotReady状态。调查发生这种情况的原因,并采取相应措施将node恢复为Ready状态,确保所做的任何更改永久有效
可使用以下命令通过ssh连接到故障node:
ssh wk8s-node-0
可使用以下命令在该node上获取更高权限:
sudo -i

参考链接

强制记忆。

题解

1、切换环境
kubectl config use-context wk8s #考试时切到这道题的集群后,那个 node 就是异常的。  真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。

2、配置
kubectl get node #查看Not Ready的node节点

ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet

exit #退出root用户
exit #退出故障节点

3、验证
kubectl get node

#jounarlctl -u kubelet 查看kubelet日志

答题技巧
通过 get nodes 查看异常节点,登录节点查看 kubelet 等组件的 status 并判断原因。
真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。

考试时切到这道题的集群后,那个 node 就是异常的。

如果systemctl start kubelet没起来的话,就要看它的日志了;(一般是会起来的)
如果kubelt的日志没起来,该如何看kubelet的日志?
journalctl -u kubelet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言编程技巧 --- C语言中左移右移与乘除法的比较

C语言中右移与除法的比较 最近在做项目的时候&#xff0c;遇到了一个有趣的现象。那就是&#xff0c;对于除2的整数次幂的操作而言&#xff0c;为了加快计算速度&#xff0c;一般情况下&#xff0c;会用右移&#xff08;>>&#xff09;来替代除法&#xff08;/&#xff0…

SparkSql(RDD、DataFrame、DataSet详解)idea实例+jdbc读取数据库并保存至数据库或本地

DataFrame 是什么 DataFrame 是一种以 RDD 为基础的分布式数据集&#xff0c;类似于传统数据库中 的二维表格。DataFrame 与 RDD 的主要区别在于&#xff0c;前者带有 schema 元信息&#xff0c;即 DataFrame 所表示的二维表数据集的每一列都带有名称和类型。这使得 Spark SQL …

QT Data Visualization 模块概述(数据三维显示的模块)

Data Visualization 是 Qt 提供的用于数据三维显示的模块。在 Ot 5.7 以前只有商业版才有此模块&#xff0c;而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示&#xff0c;包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…

KeepChatGPT插件-提效神器,解决ChatGPT报错!

KeepChatGPT插件-提效神器&#xff0c;解决ChatGPT报错&#xff01; 一、错误提示 最近⼏天&#xff0c;相信不少人在使用OpenAI的ChatGPT时都发现一个问题&#xff0c;就是官⽹报错越来越频繁了。 当你需⽤ChatGPT来处理⼀些⽐较琐碎的任务时&#xff0c;⼀旦你离开⻚⾯时间…

Java多线程基础-7:wait() 和 notify() 用法解析

线程之间是抢占式执行的&#xff0c;线程调度是无序的、随机的&#xff0c;因此线程之间执行的先后顺序是难以预知的。但是&#xff0c;实际开发中&#xff0c;有时我们希望合理地协调多个线程间执行的先后顺序。 虽然 join() 算是一种控制顺序的方式&#xff0c;但它毕竟“功…

4月第3周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年4月17日-4月23日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

【华为机考】模拟题:Words、Vowel、计算字符串重新排列数

前言 刷题之路任重而道远&#xff0c;革命尚未成功&#xff0c;同志仍需努力。由于刷惯了 LeetCode&#xff0c;虽然知道华为机考是需要自己输入输出&#xff0c;也稍稍练了一下&#xff0c;结果真做模拟题的时候&#xff0c;一下子忘了怎么获取字符串了&#xff0c;直接搞了个…

数据降维算法 | Matlab基于局部费歇尔判别(LFDA)的分类数据降维可视化

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 数据降维算法 | Matlab 基于局部费歇尔判别(LFDA)的分类数据降维可视化 部分源码 %--------------------

了解网卡的类型

网卡&#xff0c;即网络接口卡&#xff0c;也叫NIC卡&#xff0c;是一种允许网络连接的计算机硬件设备。网卡应用广泛&#xff0c;市场上有许多不同种类&#xff0c;如PCle网卡&#xff0c;服务器网卡。本文将对网卡的基础&#xff0c;功能&#xff0c;元件与类型进行全方位讲解…

用友自主研发企业商用版TimensionDB时序数据库重磅发布!

2023年4月19日&#xff0c;用友BIP技术大会上&#xff0c;用友自主研发专用企业服务能力的商用版时序数据库——TimensionDB重磅发布&#xff01;源于物联网、工业4.0等场景实践&#xff0c;打造自主、安全、可控的专业服务工业企业的轻量级、高性能、易使用的时序数据管理引擎…

linux-02-软件安装-centos7配置jdk、tomcat、lrzsz、项目部署(Git、Maven)

文章目录 Linux-Day02课程内容1. 软件安装1.1 软件安装方式1.2 安装JDKshell脚本里写 cd命令不生效 1.3 安装Tomcat1.3.1 Tomcat安装好多方便的自定义命令:1.3.2 Tomcat进程查看1.3.3 防火墙操作1.3.4 停止Tomcat 1.4 安装MySQL1.4.1 MySQL安装1.4.2 MySQL启动1.4.3 MySQL登录1…

PYQT5学习笔记04——QObject对象和属性名称设置API以及对应案例

一、QObject对象和属性名称设置API 简单介绍一下PyQt5最上层父类QObject的一些属性方法&#xff0c;并给出具体的使用过程示例。 1、setObjectName(“唯一名称”)和objectName() setObjectName方法的作用是给Qt对象设置一个名称&#xff0c;一般这个名称是唯一的&#xff0c;这…

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧&#xff0c;工作常用&#xff0c;高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度&#xff0c;不如下班学习提效率。能力有成长&#xff0c;效率提上去&#xff0c;自然不用加班。 消化吸收&#xff0c;工作中立马使用&#xff0c;感觉真不错。…

【Java】Eclipse如何创建java项目并运行

前面Eclipse、JDK的安装与JDK环境变量配置好了之后&#xff0c;开始进行基本的使用 一、创建java项目并运行 1、先打开Eclipse IDE 2、创建项目 点击左上角的File—>New—>Project&#xff0c;这样就可以新建一个Java的项目了。也就是说&#xff0c;在Eclipse中&#…

设置ubuntu开机启动脚本

一、新建xx-setpower.service文件 sudo gedit /etc/systemd/system/xx-setpower.service [Unit] DescriptionXX SetPower Service Afternetwork.target Wantsnetwork.target[Service] Typesimple PIDFile/run/take_up_boot.pid ExecStart/usr/bin/take_up_boot.sh Restarton-…

二进制码与格雷码的相互转换原理与Verilog实现

二进制码与格雷码的相互转换原理与Verilog实现 一、写在前面二、二进制码与格雷码的相互转换2.1 二进制码转格雷码原理2.2 异或运算的特性2.3 格雷码转二进制码原理 三、二进制码与格雷码相互转换的Verilog实现四、仿真验证五、写在后面 一、写在前面 二进制码是一种基于二进制…

RibbitMQ之RabbitMQ的介绍与安装

RabbitMQ的介绍与安装 1. MQ 的相关概念1.1 MQ 的概念1.2 MQ 的作用1.3 MQ 的分类1.3.1 ActiveMQ1.3.2 Kafka1.3.3 RocketMQ1.3.4 RabbitMQ 1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 RabibitMQ 的四大核心2.3 RabbitMQ 的核心部分2.4 RabbitMQ 名词介绍2.5 安装 Rabbi…

数学建模第五天:数学建模算法篇之层次分析法AHP

目录 一、前言 1、例题 2、层次分析法用途 二、层次分析法步骤 1、建立层次结构图 2、构造两两比较矩阵 3、确定相对权重向量 ①特征根法 ②和法 4、一致性检验 5、计算层次总排序权值和一致性检验 一、前言 1、例题 有大学生刘昊、小王、阿三、蛋仔四人&#xff0…

闪电加密和隐藏加密文件夹忘记密码怎么办?

闪电加密和隐藏加密是文件夹加密超级大师的两种文件夹加密类型&#xff0c;它们都拥有超快的加密算法&#xff0c;可以瞬间加密超大文件夹。那么这两种文件夹加密类型忘记密码该怎么办呢&#xff1f;下面我们一起来了解一下吧。 闪电加密和隐藏加密文件夹找回密码 首先&#x…

HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂

前置知识 先来看看HashMap中的成员属性 解释&#xff1a; size当前的容器中Entry的数量&#xff0c;也就是当前K-V的数量loadFactory装载因子&#xff0c;用来衡量HashMap满的程度&#xff0c;loadFactory的默认值是0.75threshold临界值&#xff0c;当实际KV数量超过threshol…