Kubernetes 学习笔记(三):kubectl 常用命令

查询

# 指定 kubeconfig
kubectl --kubeconfig  get pods

# 指定名字空间的 pods
kubectl --namespace  get pods
kubectl -n  get pods

# 显示更多的信息(pod 所在节点,clusterip 等)
kubectl get pods -o wide

# 查询所有名字空间的 pods
kubectl get pods --all-namespace
kubectl get pods -A  # 缩写

# 列出所有的名字空间
kubectl get ns  # ns 是 namespace 的缩写

# 查看 default 空间的所有服务
kubectl get svc

# 查看 ingress
kubectl get ingress

# 查看当前命名空间下的所有资源(不包含CRD)
kubectl  get  all

# 查询 k8s 的资源使用情况 (CPU/Memory/Storage)
kubectl top node
kubectl top deployment

添加/修改

kubectl create 只允许创建原来不存在的资源,而 kubectl apply 可以创建/修改资源(有一部分信息不支持通过 apply 修改)。虽然说官方不推荐使用 apply 进行资源的创建。。

# 临时运行一个 pod/deployment
# 1. 创建一个 nginx pod,并同时为其创建一个 service(ClusterIp)暴露出 80 端口,targetPort 默认和 port 一致
kubectl run nginx --image=nginx --expose=true  --port=80  --generator=run-pod/v1
# 这一句的效果等同上面 run 命令的 --expose=true  --port=80,只是这边的 targetPort 和 port 可以不一致
kubectl expose pod nginx --port=80 --target-port=80

# 为节点添加标签
kubectl label node "disk=ssd"

#删除标签
kubectl  label node disk=ssd-

# 修改已经存在的标签
kubectl label node "disk=hdd" --override

# 递归便利整个文件夹的 yaml 文件
kubectl create --recursive -f .  # 递归遍历当前文件夹中的 yaml,依次 create


# 直接修改资源
kubectl edit pod   # 会直接弹出 vim 界面供修改,内容为 yaml 格式。

在 pod 内执行命令

kubectl exec  --   # -- 用于分隔 kubectl 命令和要在容器内部执行的命令
# 常用调试命令
kubectl exec  -- ping xxx
kubectl exec  -- nslookup xxx
kubectl exec  -- cat xxx

kubectl exec -it  bash  # 使用容器的 shell,如果没有 bash,可以试试使用 sh。如果连 sh 都没有,那就只有上面的方法可用了。

删除

# 删除整个名字空间
kubectl delete ns   # ns 是 namespace 的缩写

# 删除所有的 pods
kubectl delete pod --all

# 删除 default 名字空间中(几乎)所有的资源(不包括 CRD 自定义资源,比如 istio 的 virtualservice/gateway/destinationrule)
kubectl delete all --all  # 第一个 all 表示所有的资源类型(pod/service/ingress,但不包括 secret),第二个 all 表示资源的所有实例。

# 删除默认名字空间中的所有 istio 配置
kubectl delete destinationrules --all
kubectl delete virtualservices --all
kubectl delete gateway --all

污点、驱逐维护

# 添加、删除污点
kubectl taint -h

# 封锁/取消封锁某个节点(将该节点的状态设为 Unschedulable)
kubectl cordon -h
kubectl uncordon -h

# 驱逐该节点上的所有 Pod,仅 Daemonset 除外
kubectl drain -h

常用命令

  1. 列出未完全 Ready 的 pods: kubectl get pods -A | grep -Ev '([0-9]+)/\1'-A--all-namespaces
    • kubectl get pods -A --field-selector=status.phase!=Running 不会列出状态为 CrashBackoffLoop 的 pods!容易使人犯错。。
    • kubectl get -A --field-selector=status.containerStatuses[*].ready!=true 还没用过,不晓得效果是不是一样。
  2. 查看崩溃容器的日志:kubectl logs --previous,即上一个 pod 的日志

推荐的插件

  1. Kubernetes 插件中心 - Krew: 用于管理所有插件,不过因为是直接从 github 下载,在国内速度感人。
  2. K8s 容器 Debug 工具: 容器问题诊断工具,墙裂推荐!
    • 简化 Pod 故障诊断:kubectl-debug 介绍
  3. K8s 终端管理工具: 超级方便,墙裂推荐!

参考

  • 分享几个Kubernetes实用插件和工具
  • issue - 'kubectl get' should have a way to filter for advanced pods status

你可能感兴趣的:(Kubernetes 学习笔记(三):kubectl 常用命令)