常用的命令合集

  |   0 评论   |   173 浏览

获取pods和节点的列表

支持的字段选择器因Kubernetes资源类型而异。所有资源类型都支持metadata.name和metadata.namespace字段

  • 找到所有节点未运行的pod(不是running状态的)
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete
  • 找到所有命名空间的所有pod排除ns名为kube-system和kubernetes-dashboard
    • 排除多个ns使用 , 隔开
kubectl get pod  --all-namespaces --field-selector metadata.namespace!=kube-system,metadata.namespace!=kubernetes-dashboard
  • 找到所有命名空间的所有pod其状态不是running且重启策略等于Always
kubectl get pods -A --field-selector=status.phase!=Running,spec.restartPolicy=Always
  • 找到所有命名空间的daemonset控制器,statefulsets控制器及services且命名空间不是default
kubectl get daemonset,statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
  • 获取节点列表及其内存大小的方法
kubectl get no -o json | \
  jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'
  • 获取节点列表及其CPU大小的方法
kubectl get no -o json |   jq -r '.items | sort_by(.status.capacity.cpu)[]|[.metadata.name,.status.capacity.cpu]| @tsv'
  • 获取节点列表和在其上运行的容器的数量
kubectl get po -o json --all-namespaces | \
  jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
  • 使用kubectl top获取消耗CPU资源的pod列表
kubectl top pods -A | sort --reverse --key 3 --numeric
  • 使用kubectl top获取消耗CPU资源的pod列表(前20)
kubectl top pods -A | sort --reverse --key 3 --numeric | head -20
  • 使用kubectl top获取消耗内存资源的pod列表
kubectl top pods -A | sort --reverse --key 4 --numeric
  • 使用kubectl top获取消耗内存资源的pod列表(前20)
kubectl top pods -A | sort --reverse --key 4 --numeric | head -20
  • 查看所有群集节点的CPU和内存请求和限制
kubectl describe nodes | grep -A 3 "Resource .*Requests .*Limits"
  • 获取命名空间中所有pod的labels
for a in $(kubectl get pods -n ailab -o name); do \
  echo -e "\nPod ${a}"; \
  kubectl -n ailab describe ${a} | awk '/Labels:/,/Annotations/' | sed '/Annotations/d'; \
done
  • 获取所有namespace,podname,containers
kubectl get pod -A -o=jsonpath='{range .items[*]}{.metadata.namespace},{.metadata.name},{.spec.containers[*].image}{"\n"}' | tr -s ' ' '\n'
  • 获取所有HPA(Horizo​​ntal Pod Autoscaler)上的当前副本数
kubectl get hpa -A -o=custom-columns=NAME:.metadata.name,REPLICAS:.status.currentReplicas | sort -k2 -n -r
  • 对Pod列表排序(按重启次数排序)
kubectl get pods --sort-by=.status.containerStatuses[0].restartCount

获得其他数据

  • 打印kube-system命名空间下每个pod的限制和请求
kubectl get pods -n kube-system -o=custom-columns='NAME:spec.containers[*].name,MEMREQ:spec.containers[*].resources.requests.memory,MEMLIM:spec.containers[*].resources.limits.memory,CPUREQ:spec.containers[*].resources.requests.cpu,CPULIM:spec.containers[*].resources.limits.cpu'
kubectl run nginx --image=nginx --port=80 --replicas=2 --labels='app=nginx' -o yaml --dry-run

kubectl run nginx --image=nginx --port=80 --replicas=2 --labels='app=nginx' -o yaml --dry-run > nginx.yaml

kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort --protocol=TCP
  • kubectl explain
kubectl explain hpa
kubectl explain hpa.spec.targetCPUUtilizationPercentage
kubectl explain deploy.spec.template.spec.containers.imagePullPolicy
kubectl explain svc.spec.selector

网络

  • 获取node节点IP
kubectl get nodes -o json | \
  jq -r '.items[].status.addresses[]? | select (.type == "InternalIP") | .address' | \
  paste -sd "\n" -
  • 获取所有群集节点的IP和名称
kubectl get nodes -o json | grep -A 12 addresses
for n in $(kubectl get nodes -o name); do \
  echo -e "\nNode ${n}"; \
  kubectl get ${n} -o json | grep -A 8 addresses; \
done
  • 获取所有服务及其各自的nodePort
kubectl get --all-namespaces svc -o json | \
  jq -r '.items[] | [.metadata.name,([.spec.ports[].nodePort | tostring ] | join("|"))]| @tsv'
  • 获取pod子网
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr " " "\n"

日志

  • 打印带有时间戳的日志
kubectl logs -f -n ailab tensorflow-5-25-bb7d8f464-x2x5z --timestamps
  • 显示尾部行数
kubectl logs -f -n ailab tensorflow-5-25-bb7d8f464-x2x5z --tail=10
  • 打印pod中所有container的日志
kubectl logs -f -n ailab tensorflow-5-25-bb7d8f464-x2x5z --all-containers
  • 使用标签过滤
kubectl logs -f -n default -l app=nginx
  • 获取上一个容器的日志(例如:如果它已经崩溃)
kubectl logs -f -n default dcgm-exporter-9j48q --previous

其他

  • 自创建证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=grafana.mysite.ru/O=MyOrganization"


kubectl create secret -n ns-old tls selfsecret --key tls.key --cert tls.crt
  • 提取并解码
kubectl get secret -n loki grafana -o jsonpath="{.data.admin-password}" | base64 -d

公告滚动栏

你只有不断努力,才能看起来毫不费力!

by Happiness

评论

发表评论