写在前面
这就是证书的样子了。
准备考试
在这里我想说的是中文网报名还是很香的,不用非得上英文,因为最终考试是一样的,考官那是那一批人。
最重要的是中文网相对折扣大,我只花了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
觉得有用顶,评论,预祝考试通过
桂林牛批,奥利给~
谢谢,谢谢~~这名字太熟悉了,难道是?
學習
厉害
牛批,学一下考试过程
向大佬学习一下
干货,非常好,很有用
学习
学习学习
向大佬学习一下