03-kubectl 命令之集群管理命令

kubectl cetificate

修改证书资源对象

官方文档

kubectl cluster-info

查看集群信息

官方文档

kubectl top

显示资源 cpu 内存 存储使用情况

官方文档

示例

1
2
3
4
5
6
7
8
# 查看所有
kubectl top pod --all-namespaces

# 查看指定pod
kubectl top pod -n 命名名称 【命名名称查看:kubectl get ns】

# 查看node的使用情况
kubectl top nodes

kubectl cordon

标记节点为不可调度

官方文档

示例

1
2
# 标记 my-node 为 unschedulable,禁止pod被调度过来。注意这时现有的pod还会继续运行,不会被驱逐。
kubectl cordon my-node

kubectl uncordon

指定节点为可调度

官方文档

示例

1
2
# 与cordon相反,标记 my-node 为 允许调度。
kubectl uncordon my-node

kubectl drain

安全的驱逐节点的所有pod

官方文档

示例

1
2
3
4
5
6
7
8
9
10
# drain字面意思为排水,实际就是把my-node的pod平滑切换到其他node,同时标记pod为unschedulable,也就是包含了cordon命令。
kubectl drain my-node


# 但是直接使用命令一般不会成功,建议在要维护节点时,加上以下参数:
kubectl drain my-node --ignore-daemonsets --force --delete-local-data

--ignore-daemonsets 忽略daemonset部署的pod
--force 直接删除不由workload对象(Deployment、Job等)管理的pod
--delete-local-data 直接删除挂载有本地目录(empty-dir方式)的pod

kubectl taint(污点和容忍)

官方文档

含义

  • Taint(污点)和 Toleration(容忍)可以作用于 node 和 pod 上,其目的是优化 pod 在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有 taint 的 node 和 pod 是互斥关系,而具有节点亲和性关系的 node 和 pod 是相吸的。另外还有可以给 node 节点设置 label,通过给 pod 设置 nodeSelector 将 pod 调度到具有匹配标签的节点上。
  • Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有相应 taint 的节点上。
  • 每个污点的组成如下: key=value:effect 每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。
  • 当前 taint effect 支持如下三个选项:
    • NoSchedule :表示k8s将不会将Pod调度到具有该污点的Node上
    • NoExecute :表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去
    • PreferNoSchedule :表示k8s将尽量避免将Pod调度到具有该污点的Node上

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 为 node 设置 taint
kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:NoSchedule


# 删除上面的 taint:
kubectl taint nodes node1 key1:NoSchedule-
kubectl taint nodes node1 key1:NoExecute-
kubectl taint nodes node1 key2:NoSchedule-


# 查看 node1 上的 taint:
kubectl describe nodes node1

为 pod 设置 toleration 只要在 pod 的 spec 中设置 tolerations 字段即可,可以有多个 key,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
- key: "node.alpha.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 6000

03-kubectl 命令之集群管理命令
https://flepeng.github.io/042-云原生-02-kubernetes-13-命令-kubectl-03-kubectl-命令之集群管理命令/
作者
Lepeng
发布于
2023年3月1日
许可协议