kubectl 命令备忘
2020-09-25 tech kubernetes command 9 mins 3494 字
即使作为 kubernetes 的研发工程师,有时候急需一两个简单的命令运行容器、或者查看相关配置而不得的时候,非常头疼。这篇文章做个笔记,记一些常见的命令。
一、开发篇
-
自动补全
source <(kubectl completion bash)
-
创建Pod
kubectl run cka --image=nginx --restart=Never
-
通过单个命令创建一个deployment并暴露Service
kubectl run cka2 --image=nginx --port=80 --expose=true
-
暴露资源service
kubectl expose pod cka1 --port=80 --target-port=80
-
查询域名信息
kubectl exec -ti busybox -- nslookup nginx
-
扩展副本
kubectl scale --replicas=4 deployment nginx-app
-
设置节点不可调度
kubectl drain node node1 --ignore-daemonsets --delete-local-data
二、运维篇
可以用来设置成 shell 的 alias。
-
获得节点IP
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name} {.status.addresses[?(@.type=="InternalIP")].address}{"\n"}{end}'
-
查看pod日志
kubectl logs my-pod -c my-container --previous # 获取 Pod 中某容器的上个实例的日志(标准输出, 多容器场景) kubectl logs -f -l name=myLabel --all-containers # 流式输出含 name=myLabel 标签的 Pod 的所有日志(标准输出)
-
系统事件
kubectl get events --sort-by=.metadata.creationTimestamp
-
交互式 Shell运行测试容器
kubectl run -i --tty busybox --image=busybox -- sh
-
显示所有 Pods 的标签
kubectl get pods --show-labels
-
列出被一个 Pod 使用的全部 Secret
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
-
pod cpu/内存 排序
kubectl top pods --all-namespaces | sort --reverse --key 4 --numeric kubectl top pods -A | sort --reverse --key 3 --numeric
-
pod镜像名
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
-
查看每个node上运行了多少pod
kubectl get pods --all-namespaces -o json | jq '.items[] | .spec.nodeName' -r | sort | uniq -c
-
查看node上运行的具体pod
kubectl get pods --all-namespaces -o json | jq '.items | map({podName: .metadata.name, nodeName: .spec. nodeName}) | group_by(.nodeName) | map({nodeName: .[0].nodeName, pods: map(.podName)})'
-
集群交互
kubectl cordon my-node # 标记 my-node 节点为不可调度 kubectl drain my-node # 对 my-node 节点进行清空操作,为节点维护做准备 kubectl uncordon my-node # 标记 my-node 节点为可以调度 kubectl top node my-node # 显示给定节点的度量值 kubectl cluster-info # 显示主控节点和服务的地址 kubectl cluster-info dump # 将当前集群状态转储到标准输出
-
资源类型
kubectl api-resources --namespaced=true # 所有命名空间作用域的资源 kubectl api-resources --namespaced=false # 所有非命名空间作用域的资源 kubectl api-resources -o name # 用简单格式列举所有资源(仅显示资源名称) kubectl api-resources -o wide # 用扩展格式列举所有资源(又称 "wide" 格式) kubectl api-resources --verbs=list,get # 支持 "list" 和 "get" 请求动词的所有资源 kubectl api-resources --api-group=extensions # "extensions" API 组中的所有资源
三、与 shell 交互的命令
-
批量为 ns 设置资源
nsArray2=( abc def ) for ns in ${nsArray2[@]} do cat <<EOF | kubectl apply -n $ns -f - apiVersion: v1 kind: ResourceQuota metadata: name: default-resourcequota spec: hard: limits.cpu: "10m" requests.cpu: "10m" limits.memory: 10Mi requests.memory: 10Mi persistentvolumeclaims: "20" pods: "100" requests.storage: 1Mi services: "100" EOF done
-
查看何种资源使用了hostpath,并打印到excel表格中
kubectl get deployment -A|awk '{print $1,$2}'|grep -v NAMESPACE|while read vns vpod; do vres=`kubectl get deployment -n $vns $vpod -oyaml|grep hostPath|wc -l`; if [ $vres -gt 0 ];then echo "hostpath,www,deployment,$vns,$vpod">>/tmp/www.csv fi; done