赞
踩
本次测试的所有问题都必须在指定的cluster配置环境中完成。为尽量减少切换,系统已对问题进行分组,同一cluster内的所有问题将连续显示。
做题前先配置k8s自动补齐功能,否则无法TAB补全命令:
kubectl --help | grep bash
,此步是为了找关键词completionsudo vim /etc/profile
source <(kubectl completion bash)
source /etc/profile
- 设置配置环境 kubectl config use-context k8s
Context
- 为部署管道创建一个新的 ClusterRole 并将其绑定到范围为特定 namespace 的特定 ServiceAccount
1.kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet
2.kubectl create serviceaccount cicd-token -n app-team1
3.kubectl create rolebinding xxx(随便起名字) --clusterrole=deployment-clusterrole --serviceaccount=cicd-token:app-team1 -n app-team1
- 设置配置环境 kubectl config use-context ek8s
- 将名为 ek8s-node-0 (vms25)的 node 设置为不可用,并重新调度该 node 上所有运行的 pods
kubectl drain vms25.rhce.cc --ignore-daemonsets
- 设置配置环境 kubectl config use-context mk8s
- 现有的 kubernetes 集群正在运行的版本是 1.21.0。仅将主节点上的所有 kubernetes 控制平面 和节点组件升级到版本 1.21.1。
- 另外,在主节点上升级 kubelet 和 kubectl。
[start-plane type="4"]确保在升级前 drain 主节点,并在升级后 uncordon 主节点。请不要升级工作节点,etcd,container管理器,CNI 插件,DNS服务或任何其他插件。[/start-plane]--etcd-upgrade=false
kubeadm upgrade apply 1.21.1 --etcd-upgrade=false
1.登陆官网k8s.io,可以右上角更换语言,点击Learn Kubernetes Basics
2.搜索upgrade
3.开始升级,步骤官方文档中都有步骤,步骤如下:
kubectl config use-context mk8s
kubectl get nodes
ssh vms28(28为mk8s的控制平面节点)
sudo su - (需用root用户执行下方命令)
apt-get update && \ apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00 (安装kubeadm包)
kubeadm upgrade apply v1.21.1 –etcd-upgrade=false(题中提示etcd不被升级,所以加后面的参数)
kubectl drain vms28.rhce.cc --ignore-daemonsets (升级kubelet和kubectl前腾空节点,官方文档中流程都有,看着修改就好)
apt-get update && \ apt-get install -y --allow-change-held-packages kubelet=1.21.1-00 kubectl=1.21.1-00(安装kubelet和kubectl包)
systemctl daemon-reload
systemctl restart kubelet
kubectl uncordon vms28.rhce.cc
提供了一下 TLS 证书和密钥,以通过 etcdctl 连接到服务器。 CA 证书:/opt/KUIN00601/ca.crt 客户端证书: /opt/KUIN00601/etcd-client.crt 客户端密钥:/opt/KUIN00601/etcd-client.key
etcdctl –help 查看是否有snapshot命令,有是版本3无为版本2
export ETCDCTL_API=3
不知道命令怎么写可以etcdctl snapshot save --help
主要三个参数为:-–cacert,–cert,–key
考试环境:
#etcdctl snapshot save -–cacert=”/opt/KUIN00601/ca.crt” --cert=” /opt/KUIN00601/etcd-client.crt” --key=”/opt/KUIN00601/etcd-client.key” -- /srv/data/etcd-snapshot.db
练习环境:
#etcdctl snapshot save /srv/data/etcd-snapshot.db
考试环境:
#etcdctl snapshot restore –cacert=”/opt/KUIN00601/ca.crt” --cert=” /opt/KUIN00601/etcd-client.crt” --key=”/opt/KUIN00601/etcd-client.key” /srv/data/etcd-snapshot.db
练习环境:
#etcdctl snapshot restore /srv/data/etcd-snapshot.db
1.先创建题中的命名空间(Namespace)
kubectl configuse-context k8s
kubectl get namespace
kubectl create namespace internal
kubectl create namespace big-corp
kubectl label namespace big-corp name=big-corp
2.打开官网,搜索ingress或egress或networkpolicy,然后第一个网络策略
3.复制上方yaml代码,新建yaml文件,例如networkpolicy.yaml,名字随意起
4.将复制的代码按照题意改为下图所示:
kubectl apply -f networkpolicy.yaml
kubectl get networkpolicies.networking.k8s.io -n internal
kubectl config use-context k8s
kubectl get deployments.apps
kubectl edit deployments.apps front-end (edit编辑时只能使用空格,不要TAB否则保存不了)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0idHrK5-1645525611665)(https://s2.loli.net/2022/02/18/4Xlqp7GiE1NwtyB.png)]
ports:
- name: http
containePort: 80
protocol: TCP
创建front-end-svc服务:
kubectl expose –-name=front-end-svc deployment front-end -–port=80 –-target-port=80 –-type=NodePort
1.kubectl config use-context k8s
2.打开官方文档,搜索ingress,选择第一个结果即可,进入后复制yaml模板并新建一个yaml文件
3.vim ingress.yaml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dAGmkN0Q-1645525611666)(https://s2.loli.net/2022/02/21/JO3p5r6iWqzjvXL.png)]
4.kubectl apply -f 7-ing.yaml
5.kubectl get ing -n ing-internal
kubectl config use-context k8s
kubectl get deploy
kubectl scale deployment webserver –-replicas=6
kubectl get deploy
kubectl run nginx-kusc00401 --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml > 9-pod.yaml
加入如下标红代码
kubectl apply -f 9-pod.yaml
kubectl get pods
Kubectl get nodes
查看节点是否有污点
kubectl describe nodes [vms22.rhce.cc](http://vms22.rhce.cc) | grep Taint
kubectl describe nodes [vms23.rhce.cc](http://vms23.rhce.cc) | grep Taint
echo 1 > /opt/KUSC00402/kusc00402.txt
kubectl run kucc4 1–image=nginx –1image-pull-policy=IfNotPresent –1dry-run=client -o yaml > 11-pod.yaml
vim 11-pod.yaml(将图中标红项复制3次并修改pod名字即可)
kubectl apply -f 11-pod.yaml
kubectl get pod
1.官方文档中搜索persistent volume,第一个案例即可
2.vim 12-pv.yaml,按照题意修改
3.kubectl apply -f 12-pv.yaml
4.kubectl get pv
kubectl config use-context k8s
继续在上题中的官方文档中找到下方案例:
kubectl apply -f 13-pvc.yaml
继续在上题的官方文档中下滑找到下方案例:
kubectl apply -f 13-pvc-pod.yaml
$ kubectl config use-context k8s
$ kubectl logs foo | grpe unable-to-access-website > /opt/KUTR00101/foo
/bin/sh -c tail -n+1 -f /var/log/legacy-app.log
不要更改现有容器。不要修改日志文件的路径,两个容器必须通过/var/log/legacy-app.log 来访问该文件
kubectl config use-context k8s
kubectl get pod legacy-app -o yaml > 15-pod.yaml
vim 15-pod.yaml
1.添加pod及vomuleMount挂载点
2.添加volumes
3.修改挂载目录及名称
4.kubectl apply -f 15-pod.yaml
5.删除legacy-app,否则再运行yaml时会提示legacy-app已存在
kubectl delete pod legacy-app -–force
kubectl top pods -l name=cpu-user
echo “占比最高的机器名” > /opt/KUTR000401/KUTR00401.txt
kubectl get nodes
ssh vms26.rhce.cc
sudo -i
systemctl start kubelet ; systemctl enable kubectl
Exit退出
$kubectl get nodes
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。