1. RBAC

#创建角色
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployment,statefulset,daemonset
#创建namespace
kubectl create namespace app-team1
#创建serviceaccount
kubectl create serviceaccount cicd-token  -n app-team1
#创建账户绑定
kubectl create clusterrolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1

清理试验环境

kubectl delete namespaces app-team1
kubectl delete clusterrole deployment-clusterrole

2.drain node

kubectl drain cka003 --ignore-daemonsets --force --delete-emptydir-data

3.kubeadm downgrade&upgrade

记得东西太多,所以需要借助文档了:kubeadm upgrade
参照题目应该是先需要执行ssh cka001再执行sudo -i切换root用户
downgrade

apt update
apt-cache madison kubeadm
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.24.2-00 && \
apt-mark hold kubeadm
kubeadm version
kubeadm upgrade plan
sudo kubeadm upgrade apply v1.24.2 --etcd-upgrade=false
kubectl drain cka001 --ignore-daemonsets
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.24.2-00 kubectl=1.24.2-00 --allow-downgrades && \
apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon cka001
记得两次exit退出sudo、ssh
ssh cak001
sudo -i
apt update
apt-cache madison kubeadm
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.24.3-00 && \
apt-mark hold kubeadm
kubeadm version
kubeadm upgrade plan
sudo kubeadm upgrade apply v1.24.3 --etcd-upgrade=false
kubectl drain cka001 --ignore-daemonsets
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.24.3-00 kubectl=1.24.3-00 && \
apt-mark hold kubelet kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon cka001
exit
exit

核心点三个:

--etcd-upgrade=false
--ignore-daemonsets
exit
exit

4.关于ectd的备份与还原


本地测试熟记:/etc/kubernetes/pki/etcd/xxxx
#执行etcd备份
etcdctl snapshot save -h
etcdctl snapshot save /data/backup/etcd-snapshot.db --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --endpoints=127.0.0.1:2379
#执行etcd目录文件mv
mv /var/lib/etcd  /var/lib/etcd.bak2
#执行还原文件
etcdctl snapshot restore -h
etcdctl snapshot restore /data/backup/etcd-snapshot.db --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" --data-dir="/var/lib/etcd"
核心点:
1、上面的kubeadm时不要给etcd升级,不然会导致etcdctl报异常
2、cert/key/cacert/endpoints使用命令行定位

5.networkPolicy

题目要求:允许现有namespace internal 中的所有pod都可以连接到对应pod的8080端口。不允许非 internal的namespace访问到。

# 模拟环境
kubectl create ns internal
kubectl create deploy nginx --image=nginx --port=80 -n internal
kubectl create deploy tomcat --image=tomcat --port=8080 -n internal
kubectl run centos --image=centos -n internal -- "/bin/sh" "-c" "sleep 3600"

搜索 kubernetes.io/docs/关键词:


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-port-from-namespacenamespace: internal
spec:podSelector:{}policyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:kubernetes.io/metadata.name: internalports:- protocol: TCPport: 6379

功能验证,感觉这里的功能验证更加重要。

kubectl get pods -n internal
# 查看pod对应IP地址
kubectl describe pods nginx -n internal
kubectl describe pods tomcat -n internal
# 登陆测试机centos
kubectl exec centos -n internal -i -t -- bash
$ curl <nginx_ip>:80
$ curl <tomcat_ip>:8080

核心点:
1、podSelector必填用 {} 即可
2、namespaceSelector 筛选要用 kubectl get ns interal --show-label

6.Service创建

模拟环境

kubectl create deployment front-end --image=nginx

巧用explain获取参数

kubectl explain deploy.spec.template.spec.containers.portscontainerPortnameprotocol
kubectl edit deployment front-end
ports:- containerPort: 80name: httpprotocol: TCP

创建服务

kubectl expose deployment front-end --port=80 --target-port=http --name=front-end-svc

更新服务配置

kubectl edit svc front-end-svc
......
internalTrafficPolicy: Local
type: NodePort
......

核心点:
1、不知道内容可以使用kubectl explain deploy.spac.template.spac.containers.ports
2、expose时–target-port要使用http,而不是80

重置环境

kubectl delete deployment front-end
kubectl delete svc front-end-svc

7.创建一个ingress服务

配置模拟环境,实际考试时不占用时间。

kubectl patch ingressclass nginx -p '{"metadata": {"annotations":
{"ingressclass.kubernetes.io/is-default-class": "true"}}}'
kubectl create ns ing-internal
kubectl create deploy hi --image=nginx --port=80 -n ing-internal
kubectl expose deploy hi --port=5678 --target-port=80 -n ing-internal

官方文件直接搜索 kind: ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: pingnamespace: ing-internalannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginxrules:- http:paths:- path: /hipathType: Prefixbackend:service:name: hiport:number: 5678

配置并获取clusterIP信息。

kubectl apply -f ingress.yaml
# 静等1分钟左右,才能正常显示clusterIP
kubectl get ingress -n ing-interal
root@cka001:~/exam# kubectl get ingress -A
NAMESPACE      NAME        CLASS   HOSTS               ADDRESS          PORTS   AGE
default        nginx-app   nginx   app1.com,app2.com   10.106.186.103   80      24d
ing-internal   ping        nginx   *                   10.106.186.103   80      80s
# 测试请求
root@cka001:~/exam # curl '10.106.186.103:80/hi'

核心注意点:

1、namespace: ing-interal
2、等待ingress配置完成
3、核心关键字 kind: ingress

8.Scale deployment

scale 多多借助自动提示

kubectl create deployment presentation --image nginx
kubectl scale deployment presentation --replicas 3

9.创建pod依赖nodeSelector

从官网搜索 assign pod node,然后搜索 kind: Pod,会得到一个有nodeSelector的yaml,修改核心核心即可。

apiVersion: v1
kind: Pod
metadata:name: nginx-kusc00401
spec:containers:- name: nginx-kusc00401image: nginxnodeSelector:disk: spinning

一定要检查pod是否正常启动,如果启动不正常证明没有设置对node的信息,所以重新设置node 对应的 label即可。

10.统计node节点 Ready 且 非 noschedule 节点总数

查看ready节点总数

kubectl get nodes | grep Ready

记录一下NotReady的节点列表,比如cka005、cka006

设置污点节点

kubectl taint cak003 key=value:NodeScheduler

查看node数据

kubectl get node | egrep 'Name:|:NoSchedule'root@cka001:~# kubectl describe node | egrep "Name:|:NoSchedule"
Name:               cka001
Taints:             node-role.kubernetes.io/control-plane:NoSchedulenode-role.kubernetes.io/master:NoSchedule
Name:               cka002
Name:               cka003
Taints:             key=value:NoSchedulenode.kubernetes.io/unschedulable:NoSchedule

记录一下 有污点的节点列表,比如cka005、cka006。
计算所有NotReady和污点节点总数。
然后用总数减去该值即可。

11.使用一个pod创建多个容器

使用 dry-run 构建yaml文件模板

kubectl run kucc8 --image=nginx --dry-run=client -oyaml > multi_containers.yaml

基于模板做文件修改即可。

apiVersion: v1
kind: Pod
metadata:name: kucc8
spec:containers:- image: nginxname: nginx- image: redisname: redis- image: memcachedname: memcached- image: consulname: consul

12.创建pv

搜索PersistentVolumes typed hostPath,进去查找 an example of hostPath

apiVersion: v1
kind: PersistentVolume
metadata:name: app-config
spec:capacity:storage: 1GiaccessModes:- ReadOnlyManyhostPath:path: "/svc/app-config"

13.创建pod绑定pvc并重新设置pvc存储大小且做记录

查询文档大法好,关键词:kind: PersistentVolumeClaim,选择那个“持久卷: PersistentVolum”
先创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pv-volume
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10MistorageClassName: csi-hostpath-sc

再创建pod

apiVersion: v1
kind: Pod
metadata:name: web-server
spec:containers:- name: web-serverimage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: pv-scvolumes:- name: pv-scpersistentVolumeClaim:claimName: pv-volume

然后执行创建即可。
然后,后面使用kubectl edit pvc pv-volume --record=true记录响应更改即可。

14. kubectl logs

kubectl logs foobal| grep xxx> /opt/foobl
cat /opt/foobl

15.使用sidecar检测其他容器的volumeMount文件更新

busybox 是sidecar
big-corp-app 是已存在pod
logs 是两上容器的公共 mount_path
创建 emptyDir 卷,让两个container挂载上

首先创建big-cop的对应pod的初始化yaml,这部分不要求手动操作,每次测试通了即可。

cat > big-corp-app.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:name: big-corp-app
spec:containers:- name: countimage: busyboxargs:- /bin/sh- -c- >i=0;while true;doecho "$(date) INFO $i" >> /var/log/big-corp-app.log;i=$((i+1));sleep 1;done
EOF

然后其实基于这个做下构建。

kubectl apply -f big-corp-app.yaml
kubectl get pods big-corp-app -oyaml > big-corp-app-full.yaml

然后我们就可以编辑这个文件了

volumes:
- name: logsemptyDir: {}
spec:containers:- name: busyboximage: busybox args: ["/bin/sh","-c","tail -f /log/xxx"]volumeMounts:- mountMounts: /var/logsname: logs

最后执行如下:

kubectl delete pods big-cop
kubectl apply -f big-cop.yaml

记得试验后执行

kubectl delete pods big-cop

16.获取某标签的pod的cpu排行

root@cka001:~/exam# kubectl top pod --sort-by=cpu -l app=podinfo
NAME                       CPU(cores)   MEMORY(bytes)
podinfo-668b5b9b5b-9fcd2   1m           2Mi
podinfo-668b5b9b5b-zk9bc   0m           2Mi
echo 'podinfo-668b5b9b5b-9fcd2' > /opt/maxcpupod.txt

17.设置node有效

ssh cka003
sudo -i
systemctl start kubelet
systemctl enable kubelet

CKA考试笔记,仅做个人学习使用相关推荐

  1. Kubernetes 管理员认证(CKA)考试笔记(四)

    写在前面 嗯,准备考 cka证书,博客是听课后整理的笔记,适合温习. 博客内容涉及: Helm的基本概念及安装,Helm源配置 chart包的安装部署 私有Helm源的搭建及chart包的push和p ...

  2. 【CKA考试笔记】八、deployment控制器

    文章目录 实验环境 一.deployment的介绍 二.创建deploy及yaml的介绍 三.deployment创建的pod的特性 四.伸缩deploy的副本数 五.HPA 六.变更deploy所用 ...

  3. Kubernetes 管理员认证(CKA)考试笔记(一)

    写在前面 嗯,准备考 cka证书,博客是听课后整理的笔记,适合温习. 博文内容涉及 docker ,k8s: 写的有点多了,因为粘贴了代码,所以只能分开发布 本部分内容涉及docker相关复习,k8s ...

  4. 【CKA考试笔记】十五、安全管理:验证与授权

    文章目录 实验环境 一.验证 概述 token 认证方式 kubeconfig 认证方式 oauth2 认证方式 二.授权(鉴权) 三.k8s中的权限.角色.用户 查看角色 查看集群角色 查看角色有哪 ...

  5. 【CKA考试笔记】十三、k8s中的网络

    文章目录 实验环境 一.calico通信的过程 ipip模式: bgp模式 实验:在非k8s环境里,准备两台机器,通过calico实现容器跨主机通信 二.网络策略 创建网络策略 查看网络策略 实验:流 ...

  6. 跟学尚硅学习,趴的老师笔记仅供自己学习和复习无他用途-JavaSE复习笔记

    JavaSE复习笔记 第一章 Java概述 一.计算机语言 机器语言 汇编语言 高级语言:更接近人类语言,方便编写与维护,但相对机器语言执行效率低. 二.跨平台原理 一处编写,到处运行. Java程序 ...

  7. 【CKA考试笔记】三、kubernetes集群管理

    文章目录 实验环境 一.查看集群配置信息 二.查看各节点所使用的runtime是什么 三.集群缩容 四.集群扩容 五.恢复出厂设置reset.重新初始化集群 实验:删除集群中所有节点,并重新初始化集群 ...

  8. 【CKA考试笔记】二十、升级k8s

    文章目录 实验环境 一.概述 二.实验 一:更新master (1)更新kubeadm工具 (2)更新kubelet.kubectl (3)重启kubelet (4)恢复此节点 (5)若有多个mast ...

  9. 天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用)

    天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用) CategoryController: request.getSession().getServletContext()// 获取的是pag ...

最新文章

  1. 货物移动_免费收货(MvT511)
  2. css 带轮廓的圆,CSS3 圆球轮廓动画
  3. typescript 怎么表示当前时间减一个月_TypeScript 入门知识点总结
  4. linux下svn常用指令
  5. 腾讯招.NET,居然要求精通MySQL,而不是SQLServer!
  6. go语言var 和make_Var和语言设计
  7. mysql复制的工作原理及主从复制的实现
  8. 手机java环境_手机端搭建Java编译运行环境
  9. 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
  10. ARM 中断状态和SVC状态的堆栈切换 (异常)【转】
  11. 野人岛华娱java下载_华娱又携惊喜—《野人岛4—四季神器》评测!
  12. Linuxbt下载工具-Transmission-支持命令行
  13. 机器学习:最小二乘支持向量机(Least Squares Support Vector Machine)
  14. 如何快速移除pdf密码?用这个工具就够了
  15. 如何批量删除Word中向下箭头的符号
  16. 随便做各种题(无规律)
  17. uboot drm框架
  18. java ogv格式_COMSOL Multiphysics
  19. Qt开发的开源项目DBA技术介绍
  20. 全局变量和静态变量以及内存堆栈的关系

热门文章

  1. python桌面_python写桌面
  2. 莫比乌斯带catia建模_神奇的莫比乌斯带(mobius)
  3. 前端工作随笔日记 Day02
  4. 游戏服务器需要什么配置?
  5. 已知函数和y值求自变量用matlab,matlab已知函数值求自变量,求助
  6. 学习笔记(1):零基础掌握 Python 入门到实战-用Python操作SQLite数据库
  7. 端口映射工具rinetd
  8. 【福利】【送书第四弹】机器学习知识体系
  9. AC---上网行为管理
  10. 一次日歪了的渗透测试