date: 2020-06-28title: k8s常用指令 #标题
tags: k8s指令 #标签
categories: k8s # 分类

记录下k8s集群管理常用指令。

群集管理指令

查询集群中node或pod资源使用情况

  1. $ kubectl top node # 将node改为pod,则表示查看pod的资源使用情况,可以加-A选项
  2. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
  3. master 196m 9% 1630Mi 56%
  4. node01 67m 3% 1307Mi 45%
  5. node02 77m 3% 929Mi 32%

显示集群组件信息

  1. $ kubectl cluster-info
  2. Kubernetes master is running at https://apiserver.demo:6443
  3. KubeDNS is running at https://apiserver.demo:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  4. Metrics-server is running at https://apiserver.demo:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
  5. To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

修改节点状态为可调度或不可调度

默认每个worker节点均可调度,但假设现在要重启某个worker节点,就可以暂时将此节点设置为不可调度,此时将阻止新的pod被调度到该节点上,但不影响任何已经在该节点上运行的pod。

  1. # 设置为不可调度
  2. $ kubectl cordon node02 # node02为节点主机名
  3. # 设置为可调度
  4. $ kubectl uncordon node02

注: DaemonSet Controller 创建的 Pod 将绕过 Kubernetes 调度器,并且忽略节点的 unschedulable 属性。也就是说,创建的daemonset资源对象,自动忽略节点的unschedulable属性。

设置所处名称空间

默认kubectl指令操作的是default名称空间的资源,可以通过—namespace来指定其他名称空间,但每条指令都需要指定比较麻烦,此时可以设置所处名称空间,那么后续所有命令都默认在此名称空间下执行。

  1. # 设置所在名称空间为kube-system
  2. $ kubectl config set-context --current --namespace=kube-system
  3. Context "kubernetes-admin@kubernetes" modified.
  4. # 确认
  5. $ kubectl config view --minify | grep namespace:
  6. namespace: kube-system

此时,再执行kubectl get pods,将获取kube-system名称空间下的pod,如下:

k8s常用指令 - 图1

查询在名称空间中的资源对象类型

  1. $ kubectl api-resources --namespaced=true # 改为false即为查询不在名称空间中的资源对象

查询名称空间状态及标签

  1. $ kubectl get ns --show-labels
  2. NAME STATUS AGE LABELS
  3. default Active 7d18h <none>
  4. kube-node-lease Active 7d18h <none>
  5. kube-public Active 7d18h <none>
  6. kube-system Active 7d18h <none>

查询不在某个名称空间中的所有pod

  1. # 查询不在名称空间 kube-system 中的所有pod
  2. $ kubectl get pods -A --field-selector metadata.namespace!=kube-system

查询pod状态不是running且重启策略为always的pod:

  1. $ kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always

获取多种资源对象

查询所有的不在 default 名称空间的 StatefulSet 和 Service资源对象:

  1. $ kubectl get statefulsets,services -A --field-selector metadata.namespace!=default
  2. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 7d18h
  4. kube-system service/kuboard NodePort 10.96.31.229 <none> 80:32567/TCP 7d17h
  5. kube-system service/metrics-server ClusterIP 10.96.20.14 <none> 443/TCP 7d17h

查看service的详细信息

  1. $ kubectl describe svc web-nginx # svc是service的简写
  2. Name: web-nginx
  3. Namespace: default
  4. Labels: k8s.kuboard.cn/layer=web
  5. k8s.kuboard.cn/name=web-nginx
  6. Annotations: k8s.kuboard.cn/displayName: thisisawebnginx
  7. k8s.kuboard.cn/workload: web-nginx
  8. Selector: k8s.kuboard.cn/layer=web,k8s.kuboard.cn/name=web-nginx
  9. Type: NodePort
  10. IP: 10.96.114.119
  11. Port: qgx3hw 80/TCP
  12. TargetPort: 80/TCP
  13. NodePort: qgx3hw 30123/TCP
  14. Endpoints: 10.100.140.65:80,10.100.196.131:80
  15. Session Affinity: None
  16. External Traffic Policy: Cluster
  17. Events: <none>