k8s系列之:kubectl子命令详解二

1)Top

显示资源(CPU、内存、存储)的使用情况。top命令用于查看节点或Pod的资源消耗。此命令需要Heapster正确配置并在服务器上正常工作。

Node

#显示所有节点
kubectl top node
#显示指定节点
kubectl top node <NODE_NAME>

pod
显示指定pod的信息

#显示默认命名空间中所有pod的资源使用状态
kubectl top pod

#显示指定命名空间中所有pod的资源使用状态
kubectl top pod --namespace=NAMESPACE

#显示指定Pod以及其容器的资源使用状态
kubectl top pod POD_NAME --containers

#显示所有标签name=myLabel的pod的资源使用状态
kubectl top pod -l name=myLabel

2)cordon

标记节点不可调度,不可调度的节点将从集群的调度列表中删除,不会调度任何资源到该节点中,一般用于节点维护升级任务。标记为不可调度并不会删除节点上的pod,但是失联的Pod也无法与集群通信。

# 标记bigdata1节点为不可调度
kubectl cordon bigdata1

3)uncordon

标记节点为可调度

#标记bigdata1节点为可调度
kubectl uncordon bigdata1

4)drain

drain标记节点,表示准备维护,该命令会删除该节点上的所有Pod(DaemonSet除外,K8s会在其他node上重新启动这些Pod),通常用于节点维护。
直接使用该命令会自动调用kubectl cordon 命令,先标记为不可用,然后删除节点上的Pod。当该节点维护完成后,启动了kubelet后,再使用kubectl uncordon 即可将该节点添加到K8s集群中,重新接受调度。

# 强制删除
kubectl drain bigdata1 --force

#宽限15分钟
#--grace-period会标记节点为不可调度,拒绝新的调度请求,同时等待节点当前任务完成,待节点任务全部完成后才删除Pod
kubectl drain bigdata1 --grace-period=900

5)taint

当节点被标记为taint(变质)时,除非Pod被标识为可以忍受污染(toleration),否则不会有任何Pod被调度到该节点上。用户可能希望把Master节点保留给K8s系统组件使用,或者把一部分节点保留给一组用户,或者把一组具有特殊硬件的服务器(例如GPU)保留给有需求的Pod(例如深度学习)。

taint和toleration用于保证Pod不被调度到不合适的节点上,taint应用于Node上,而toleration则应用于Pod上(toleration是可选的)。

可以用kubectl taint命令为Node设置Taints信息:

kubectl taint nodes node1 key=value:NoSchedule
  • 这个设置为node1加上一个Taint,该Taint的键为key,值为value,Taint的效果是NoSchedule
  • 除非Pod明确声明可以容忍这个Taint,否则就不会被调度到node1上去

被打上taint标记的节点,需要在Pod上声明Toleration,才能被调度到该节点,下面的两个Toleration都设置为可以容忍(Tolerate)具有该Taint的Node,使得Pod能够被调度到node1上:

tolerations:
 - key: "key"
  operator: "Equal"
  value: "Value"
  effect: "NoSchedule"tolerations:
 - key: "key"
  operator: "Exists"
  effect: "NoSchedule"

effect选项有:

  • NoSchedule:新的Pod不调度到该Node上,不影响正在运行的Pod
  • PreferNoSchedule:soft版的NoSchedule,尽量不调度到该Node上
  • NoExecute:新的Pod不调度到该Node上,并且驱逐(evict)已在运行的Pod

Pod的Toleration声明中的key和effect需要与Taint的设置保持一致,并且满足以下条件之一。

  • operator的值是Exists(无需指定value)
  • operator的值是Equal并且value相等

NoExecute意味着taint生效之时,如果该节点内正在运行的Pod没有对应的tolerate设置,会被直接逐出这个节点。Pod可以增加一个忍受污染的时间(toleration seconds),用来应对被驱逐时有足够时间保存数据。

6)describe

显示特定资源或资源组的详细信息。

kubectl describe TYPE NAME_PREFIX
  • 该命令首先匹配资源类型,才匹配名称
# 显示一个节点描述
kubectl describe nodes node1

# 显示一个Pod描述
kubectl describe pods nginx

# 指定包含特定标签的Pod描述
kubectl describe po -l name=myLabel

# 描述由frontend RC管理的所有Pod(rc创建的Pod)
kubectl describe pods frontend

7)logs

打印指定资源中容器的日志。

# 从pod nginx中读取日志
kubectl logs nginx

#打印包含标签app=nginx的Pod的日志
kubectl logs -l app=nginx

# 持续不断打印web-1这个Pod中的ruby容器的日志
kubectl logs -f web-1 -c ruby

# 仅显示pod nginx中最近的20行输出
kubectl logs --tail=20 nginx

# 显示最近一个小时的日志
kubectl logs --since=1h nginx

8)attach

附加到已经在现有容器中运行的进程。

#从指定的Pod中获取里面特定容器的输出
kubectl attach frontend-pod -c nginx

#添加一个交互模式
kubectl attach frontend-pod -c nginx -i -t

9)exec

在容器中执行命令

#默认使用指定Pod的第一个容器
#date是一个命令,返回当前时间
kubectl exec frontend-pod date

# 指定容器
kubectl attach frontend-pod -c nginx date

#添加交互
#--表示返回一个raw terminal
kubectl exec frontend-pod -c nginx -i -t -- bash -il

10)port-forward

将一个或多个本地端口转发到Pod。

kubectl port-forward mypod 8888:5000

11)cp

将文件和目录复制到容器中。cp命令要求容器中存在tar命令,如果tar不存在,kubectl cp将执行失败。

#将/tmp/foo_dir本地目录复制到默认名称空间的远程Pod中的/tmp/bar_dir下
kubectl cp /tmp/foo_dir <podname>:/tmp/bar_dir

#将本地/tmp/foo文件复制到远程Pod中特定容器的/tmp/bar下
kubectl cp /tmp/foo <podname>:/tmp/bar -c <specific-container>

#将本地/tmp/foo文件复制到指定namespace的远程Pod中的/tmp/bar下
kubectl cp /tmp/foo <namespace>/<podname>:/tmp/bar

#将远程Pod的/tmp/foo复制到本地/tmp/bar下
kubectl cp <namespace>/<podname>:/tmp/foo /tmp/bar

12)proxy

在localhost和K8s API Server之间创建代理服务器或应用层网关。proxy允许通过指定的HTTP路径提供静态内容。所有传入数据通过一个端口进入,并被转发到远程K8s API服务器端口中。

设置API server接收所有主机的请求:

(base) [root@bigdata1 data]# kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$' --port=8009
Starting to serve on [::]:8009

在bigdata3上访问bigdata1的API server

[root@bigdata3 data]# curl -X GET -L http://bigdata1:8009
{
  "paths": [
    "/api",
    "/apis/admissionregistration.k8s.io",
    "/apis/admissionregistration.k8s.io/v1",
   ...
    "/readyz/poststarthook/start-kube-aggregator-informers",
    "/readyz/poststarthook/start-kube-apiserver-admission-initializer",
    "/readyz/shutdown",
    "/version"
  ]

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最笨的羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值