考试常用命令大全
设置自动补全
登陆管理节点
kubectl --help | grep bash,此步是为了找关键词completion
sudo vim /etc/profile
添加source <(kubectl completion bash)
file
5.保存退出,source /etc/profile
题目一. RBAC
Task
创建一个名为deployment-clusterrole 且允许创建以下资源类型的新ClusterRole:
Deployment
StatefulSet
DaemonSet
在现有的namespace app-team1中创建一个名为cicd-token的新ServiceAccount
限于namespace app-team1,将新的ClusterRole deployment-clusterrole绑定到新的ServiceAccount cicd-token
参考答案:
没必要参考网址,使用-h 帮助更方便。
kubectl create clusterrole -h
kubectl create serviceaccount -h
kubectl create rolebinding -h
# kubectl config use-context k8s #切换集群
# kubectl create rolebinding -h
# kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets #注意:要写小写,每个需要添加一个s
# kubectl create serviceaccount -h
# kubectl create serviceaccount cicd-token -n app-team1
# kubectl create clusterrole -h
# kubectl create rolebinding cicd-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1
# 注意cicd-binding (这个名字可以任意,叫abc也行。)
查看
kubectl describe clusterrole deployment-clusterrole
kubectl describe rolebinding -n app-team1
kubectl get serviceaccout -n 命名空间
题目二. Top
Task
通过pod label name=cpu-utilizer,找到运行时占用大量cpu的pod,并将占用cpu最高的pod名称写入文件/opt/KUTR00401.txt(已存在)
参考答案:
# kubectl config use-context k8s #切换集群
# kubectl top pod -h
# kubectl top pod -l name=cpu-utilizer --sort-by='cpu' -A
# echo <podname> >/opt/KUTR00401/KUTR00401.txt #注意:这里由于翻译问题可能文件名字不存在,可以先进去/opt下,确认这个文件具体目录在写入进去,别新建文件目录,否则没分。
题目三. Networkpolicy
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/
官网->概念->服务->网络策略
或 在搜索写入 network policy
# kubectl config use-context hk8s
#kubectl get namespaces --show-labels 查看命名空间
# kubectl label namespace big-corp name=big-corp #将命名空间标签
#如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用
# vim 03.yaml
内容参考下方
# kubectl apply -f networkpolicy.yaml
# kubectl get networkpolicy -nmy-app #查看状态。如果脚本报错,可能是命名空间标记没标注导致脚本报错。
题目四: Service
Task
请重新配置现有的部署front-end 以及添加名为http的端口规范来公开现有容器nginx的端口80/tcp
创建一个名为front-end-svc的新服务,以公开容器端口http
配置此服务,以通过在排定的节点上的NodePort来公开各个Pods
参考答案
官网地址:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
文档主页-->概念-->工作负载-->工作负载资源-->deployments
或搜索 deployment
# kubectl config use-context k8s
# kubectl get svc # 查看服务有没有启动,考试不需要
# kubectl edit deployment front-end # 注意,已经存在pods,修改即可,改动如下:
在name和resources中间插入,然后保存:wq
# kubectl expose -h
# kubectl expose deployment front-end --port=80 --target-port=80 --type=NodePort --name=front-end-svc
#说明,deployment 接的是pod名字,外部端口,容器端口,type别漏了,--name=svc名字
# kubectl get deployment front-end -owide #查看配置
# kubectl get svc #查看服务
# curl svc-ip:端口 #验证是否访问到nginx
题目五. Ingress
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/#the-ingress-resource
文档路径:概念 --> 服务,负载均衡和联网 --> Ingress-->第一个示例
或搜索ingress
# kubectl config use-context k8s
# vim ingress.yml
# kubectl apply -f 05.yaml
# curl -kL ip/hello
3、验证
kubectl get ingress -ning-internal
curl -kL internal_IP/hello
题目六. 副本扩容
Task
将deployment从loadbalancer扩展至5 pods
参考答案:
# kubectl config use-context k8s
#kubectl scale deployment -h 查看帮助
# kubectl get deployment
# kubectl scale deployment loadbalancer --replicas=5 #记住scale既可以
3、验证
kubectl get po
kubectl get deployment
题目七. 分配Pod
Task
按如下要求调度一个pod
名称:nginx-kusc00401
Image: nginx
Node selector: disk=ssd
参考答案:
官网地址:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/
文档主页-->任务-->配置pods和容器-->将 Pod 分配给节点
或搜索pod
# kubectl config use-context k8s
# kubectl get node --show-labels 查看标签
# kubectl label node k8s-node1 disk=ssd 没有就打标签
# kubectl apply -f 07.yaml
# kubectl get pods nginx-kusc004001 -owide
od
kubectl config use-context k8s
kubectl get node --show-labels 查看标签
kubectl label node k8s-node1 disk=ssd 没有就打标签
kubectl apply -f 07.yaml
kubectl get pods nginx-kusc004001 -owide
[外链图片转存中...(img-wbONEg0l-1682489908177)]
## 题目八: 统计污点