写在前面
这就是证书的样子了。
准备考试
在这里我想说的是中文网报名还是很香的,不用非得上英文,因为最终考试是一样的,考官那是那一批人。
最重要的是中文网相对折扣大,我只花了1252元就考了,香不。
另外不用纠结名字怎么填,与证件一致就OK,用身份证也是可以的,有人说用拼音高大上一点,我看未必,相反我觉得用拼音还不如用中文,现在中国的月亮也很圆,有些朋友可能还不知道,2020年上半年联合国已将中文列入全球通用语言。哈哈。不过用中文可能会乱码这是真的,但是不影响考试,拿到证后,可以联系客服改一下名字就OK,这都不是什么大事。
提前准备一间房间出来,墙上不要有字画相关,周围不要有字,提前盖一下。省得麻烦。
桌子上全部清空,除了电脑,还有桌下。可以放一个无字水杯,考试中途可以上一次厕所。
网络保证通顺,谷歌浏览器有时候可能无法共享桌面,这个要注意,我是遇到了,当时以为凉了,结果考官给了一个。
请注意考试中你所占用的时候是你的考试时间,不要试图问考官无关问题,他也不会回你。
考试余下时间在左上角有个进度条
进去直接和考官说中文,你是花了钱的。
另外最好使用命令补全,节省时间,如果你和我一样打字快,就无视吧。
默认进入的是node-1机器,这个机器上可以直接使用kubectl操作集群,只有需要操作master主机的文件时,才ssh过去,记得exit ,不支持再次ssh
另外需要输入密码请按ctrl+c 执行sudo -i提权
考试时不要出声,不要出现别的人,头不能乱看乱动
基本就这些
第一题
kubectl config use-context k8s
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets.statefulsets
kubectl create serviceaccount cicd-token -n app-team1
kubectl create rolebinding read-secrets-global --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
#https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
第二题
kubectl config use-context ek8s
kubectl cordon ek8s-node-1
kubectl drain ek8s-node-1 --ignore-daemonsets
#如果不能驱逐pod根据提示是否添加后面两个选项,反正我是没加可以正常执行 --delete-local-data --force
#https://kubernetes.io/zh/docs/concepts/architecture/nodes/
#https://kubernetes.io/zh/docs/tasks/administer-cluster/safely-drain-node/
第三题
- 设置mk8s-master-1不可调度并驱逐POD
- 升级mk8s集群的master节点mk8s-master-1,不升级work节点
- 升级master时, etcd,coredns,CNI plugin,container manager及其他组件不做升级
kubectl config use-context mk8s
kubectl get node
kubectl cordon mk8s-master-1
kubectl drain mk8s-master-1 --ignore-daemonsets
#这两个选项根据需要添加,我考试没有加 --delete-local-data --force
ssh mk8s-master-1 # 记得一定要在master主机上去操作
sudo -i
apt install kubeadm=1.19.0-00 -y
kubeadm version (检查kubeadm版本)
kubeadm upgrade plan
kubeadm upgrade apply v1.19.0 --etcd-upgrade=false # 这一项很关键,不然没分
apt install kubelet=1.19.0-00 kubectl=1.19.0-00 -y
systemctl restart kubelet
exit
exit (如果使用sudo -i,这里一定要退出两次)
kubectl get node (确认只升级了master节点到1.19.0版本)
#https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
第四题
ETCDCTL_API=3 etcdctl snapshot save snap.db --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key
ETCDCTL_API=3 etcdctl snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd
#https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/
第五题
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: internal
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: internal
- podSelector: {}
ports:
- protocol: TCP
port: 8080
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: bigcotp
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: internal
ports:
- protocol: TCP
port: 8080
kubectl config use-context hk8s
vi netwokpolicy.yaml
#将上面的yaml内容粘贴进来
kubectl apply -f netwokpolicy.yaml
#https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/
第六题
kubectl edit deployment front-end
#在image同级添加以下代码
...
您暂时无权查看此隐藏内容!
kubectl config use-context k8s
kubectl expose deployment front-end --port=80 --target-port=80 --protocol=TCP --type=NodePort --name=front-end-svc
#https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/expose/expose-intro/
#https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/expose/expose-interactive/
第七题
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ping
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello # 我考试时这里是hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
kubectl config use-context k8s
vi ping-ingress.yaml
#将上面的yaml内容粘贴进来
kubectl apply -f ping-ingress.yaml
#验证
kubectl get ingress -n ing-internal # 获取ingress的IP地址
curl -kL $(获取ingress的IP地址)/hi
#返回 hi 即为成功
#https://kubernetes.io/zh/docs/concepts/services-networking/ingress/
第八题
kubectl config use-context k8s
kubectl scale deployment webserver --replicas=6
#https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
第九题
apiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disk: ssd
kubectl config use-context k8s
vi pod-nginx.yaml
#将上面的yaml内容粘贴进来
kubectl apply -f pod-nginx.yaml
#验证
kubectl get po nginx-kusc00401 -o wide
#https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/
第十题
kubectl config use-context k8s
kubectl get node # 查看有几个 Ready 状态节点
kubectl describe <K8S-NODE> | grep -i noschedule
#拿眼瞅一下有几个 Ready 状态并且没有 noschedule 污点的节点,将数量写入指定文件
echo $NUM > /opt/KUSC00402/kusc00402.txt #记得cat文件看一下,我有一次不知道为啥就没写进去
#https://kubernetes.io/zh/docs/concepts/architecture/nodes/#condition
第十一题
这题要注意,每个人创建的容器数量不一样,我当时就只创建nginx+redis
apiVersion: v1
kind: Pod
metadata:
name: kucc4
spec:
containers:
- name: nginx
image: nginx
- name: redis
image: redis
- name: memcached
image: memcached
- name: consul
image: consul
kubectl config use-context k8s
vi pod-kucc4.yaml
#将上面的yaml内容粘贴进来
kubectl apply -f pod-kucc4.yaml
#验证
kubectl get po kucc4
#https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/
第十二题
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-data
spec:
capacity:
storage: 2Gi
accessModes:
- ReadOnlyMany
hostPath:
path: "/srv/app-data"
kubectl config use-context hk8s
vi app-data-pv.yaml
#将上面的yaml内容粘贴进来
kubectl apply -f app-data-pv.yaml
#验证
kubectl get pv
#https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
第十三题
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 config use-context ok8s
vi pv-volume-pvc.yaml
#将上面的yaml内容粘贴进来
kubectl apply -f pv-volume-pvc.yaml
#验证
kubectl get pvc
#修改pvc 10Mi --> 70Mi
您暂时无权查看此隐藏内容!
#https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
第十四题
kubectl config use-context k8s
kubectl logs foobar | grep unable-to-access-website > /opt/KUTR00101/foobar
#https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
第十五题
apiVersion: v1
kind: Pod
metadata:
name: big-corp-app
spec:
containers:
- name: count
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date)" >> /var/log/big-corp-app.log;
sleep 1;
done
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-log
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/big-corp-app.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
kubectl config use-context k8s
kubectl get po big-corp-app -o yaml > big-corp-app.yaml # 导出后修改big-corp-app.yaml文件
kubectl delete po big-corp-app
kubectl apply -f big-corp-app.yaml
#https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
第十六题
kubectl config use-context k8s
kubectl top po -l name=cpu-user -A # 将CPU资源消耗最大的那个pod名称写入指定文件
echo <podname> > /opt/KUR00401.txt
第十七题
kubectl config use-context wk8s
kubectl get node
ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
您暂时无权查看此隐藏内容!
exit
exit
kubectl get node #确认wk8s-node-0状态是否已经为Ready
觉得有用顶,评论,预祝考试通过
xie xie xie xie !
学习下
向大佬学习一下
学习学习
第3题升级集群,如何才能不升coredns呢?
按题上的解答方法不会升级DNS,升级DNS是需要应用yaml的
膜拜大佬
第13题学习一下。谢谢
感谢!刚想问第5题,发现已经有答案了,赞!
学习一下
厉害,学习学习
厉害了,大佬。学习一下。
感谢桂林哥无私分享,好人一生平安。
赞赞赞那
大佬威武
赞一个
已过谢谢
恭喜恭喜
赞,太棒了
赞大佬
赞赞赞
不错
必须赞
可以
桂林哥牛逼!!来取经
通关取经,感谢大佬!
可以可以
支持
通关取经,感谢大佬
厉害了,来观摩
第五题有点瑕疵
第五题目前已知的有两种可能性,你有什么新的看法,欢迎补充一下
可以
据说评论可以查看,我不得看一下嘛
keyi
各位好啊
据说评论可以查看,我不得看一下嘛
牛逼1
据说评论可以查看,我不得看一下嘛
5题有2个截图?
第五题的第二个解答是12月份最新的,我没有截图
截图不是12月最新的,第二个作答,我是按12月份最新题目
1题的create rolebinding 名字是自己取的吗?题中好像没有名字的要求,自己取名吗?
这个名字自定义就好了,我使用的是deployment-clusterrole,这个没有要求的。
恢复那题停止静态pod和etcd是在两个不同的机子上?
是的
4题restore的时候,可以成功吗?…/etcd,目录以及存在,不容许吧?
没问题的,重启pod时需要ssh到主节点
备份是在node1节点,restore是在master节点?分别执行上边的2个命令?
备份和还原均在node-1上面完成即可,但是重启apiserver的POD你是需要到master中完成,考试环境的k8s集群均是则kubeadm创建。
到master上,如何重启apiserverpod,修改/etc/kubernetes/manifests/etcd.yaml 文件?
有关重启方法,你看一下ppt上面那个,或私聊一下
针不戳啊啊啊啊
针不戳
写的很详细
真不错
大佬威武
keyi
厉害
墙都不扶,就服大佬啊!
顶起来,墙都不扶,就服大佬啊!
我已在此恭候你多时了