kubectl 管控黑屏命令

实用命令:

一、查看Pod调度在哪个节点

for i in 0 1 2; do kubectl get pod zk-$i --template {{.spec.nodeName}}; echo ""; done

二、设置服务不可调度

1、直接指定node节点不可调度

kubectl  cordon 

2、指定同Pod的节点不可调度

kubectl  cordon $(kubectl  get pod zk-0 --template {{.spec.nodeNmae}})

三、逐步耗尽资源

1、直接指定消耗node节点

kubectl drain node节点   --ignore-daemonsets --force --delete-local-data

2、耗尽同Pod节点上的node节点

kubectl drain $(kubectl get pod zk-0 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data

四、强制删除Pod

kubectl delete pods <pod> --grace-period=0 --force

如果仍停留在Unknown状态中,请使用以下命令从集群中删除该pod:

kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'  

五、强制删除pv

kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'

六、查看控制器名称缩写

kubectl  api-resources

七、删除不是Running状态的Pod

kubectl get  po  -A  |grep -v  Running  |awk  '{print $2}' |xargs   kubectl delete   pods  --grace-period=0 --force 

八、开启 kubectl 自动补全

echo "source <(kubectl completion bash)" >> ~/.bashrc

九、查看容器日志

1、仅输出pod nginx中最近的20条日志
kubectl  logs  --tail=20 nginx-6f66f89b57-55kp8

2、持续输出pod 容器的日志
kubectl  logs -f nginx-6f66f89b57-55kp8 

十、查看控制器的缩写名称

 kubectl  api-resources

基础命令:

create、delete、get、run、expose、set、explain、edit、cp

create: 根据文件或者输入来创建资源

kubectl  create  -f mysa-pod.yaml

delete:删除资源

1、删除单个对象
kubectl  delete  -f mysa-pod.yaml

2、删除多个资源
kubectl  delete  -f mysa-pod.yaml -f mysa-pods.yaml

3、删除对应资源
kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options]

get:获得资源信息

1、查看所有的资源信息
kubectl get all

2、查看pod列表
kubectl get pod

3、显示pod节点的标签信息
kubectl get pod --show-labels

4、根据指定标签匹配到具体的pod
kubectl get pods -l app=example

5、查看node节点列表
kubectl get node 

6、查看pod详细信息,并且显示标签
kubectl  get po  -o wide  --show-labels

7、查看名称空间下的Pod
kubectl  get  pod  -n kube-system

8、查看deployment详细信息(可以查看使用的镜像)
kubectl get  deployment -o wide --show-labels 

run: 在集群中创建并运行一个或多个容器镜像。

1、运行一个Pod
kubectl run nginx --image=nginx

2、创建一个deployment的nginx.yaml且不运行
kubectl run nginx  --image=nginx  --dry-run=client  -o yaml > nginx.yaml

3、创建格式
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json]
[--command] -- [COMMAND] [args...] [options

expose命令:创建一个service服务,并且暴露端口让外部可以访问

set命令: 配置应用的一些特定资源,也可以修改应用已有的资源

kubectl set --help
Available Commands:
  env            Update environment variables on a pod template
  image          更新一个 pod template 的镜像
  resources      在对象的 pod templates 上更新资源的 requests/limits
  selector       设置 resource  selector
  serviceaccount Update ServiceAccount of a resource
  subject        Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding
1 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi

2、为nginx中的所有容器设置 Requests和Limits
kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi

3、删除nginx中容器的计算资源值
kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

explain:用于显示资源文档信息(学习都是用此命令学习k8s)

kubectl  explain  pods.spec.containers

edit:用于编辑资源信息

kubectl  edit  deployment  deploycpuandmemorynginx

cp命令:拷贝文件或者目录到pod容器中

kubectl  cp  /tmp/nginx.yaml  nginx-6f66f89b57-55kp8:/tmp/

用于pod与宿主机的文件复制,类似于docker 的cp命令

设置命令:

label,annotate,completion

label命令:用于更新(增加、修改或删除)资源上的 label(标签)

  • label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。
  • 如果--overwrite 为 true,则可以覆盖已有的 label,否则尝试覆盖 label 将会报错。
  • 如果指定了–resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
# 给名为foo的Pod添加label unhealthy=true
kubectl label pods foo unhealthy=true
# 给名为foo的Pod修改label  'status' / value 'unhealthy',且覆盖现有的value
kubectl label --overwrite pods foo status=unhealthy
#  namespace 中的所有 pod 添加 label
kubectl label  pods --all status=unhealthy
# 仅当resource-version=1时才更新 名为foo的Pod上的label
kubectl label pods foo status=unhealthy --resource-version=1
# 删除名为“bar”的label 。(使用“ - ”减号相连)
kubectl label pods foo bar-

annotate命令:更新一个或多个资源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作。

  • Annotations由key/value组成。Annotations的目的是存储辅助数据,特别是通过工具和系统扩展操作的数据。
  • 如果--overwrite为true,现有的annotations可以被覆盖,否则试图覆盖annotations将会报错。
  • 如果设置了–resource-version,则更新将使用此resource version,否则将使用原有的resource version。
# 更新Pod“foo”,设置annotation “description”的value “my frontend”,如果同一个annotation多次设置,则只使用最后设置的value值
kubectl annotate pods foo description='my frontend'
# 根据“pod.json”中的type和name更新pod的annotation
kubectl annotate -f pod.json description='my frontend'
# 更新Pod"foo",设置annotation“description”的value“my frontend running nginx”,覆盖现有的值
kubectl annotate --overwrite pods foo description='my frontend running nginx'
# 更新 namespace中的所有pod
kubectl annotate pods --all description='my frontend running nginx'
# 只有当resource-version为1时,才更新pod ' foo '
kubectl annotate pods foo description='my frontend running nginx' --resource-version=1
# 通过删除名为“description”的annotations来更新pod ' foo '#不需要- overwrite flag。
kubectl annotate pods foo description-

completion命令:用于设置kubectl命令自动补全

source <(kubectl completion bash)

kubectl 部署命令:

rollout,rolling-update,scale,autoscale

集群管理命令:

certificate,cluster-info,top,cordon,uncordon,drain,taint

certificate命令:用于证书资源管理,授权等(目前没有接触过)

kubectl certificate --help
Available Commands:
  approve     同意一个自签证书请求
  deny        拒绝一个自签证书请求

Usage:
  kubectl certificate SUBCOMMAND [options]

cluster-info:显示集群信息

kubectl cluster-info
Kubernetes master is running at https://192.168.76.132:6443
KubeDNS is running at https://192.168.76.132:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://192.168.76.132:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

top命令:查看资源的cpu、内存磁盘等资源的使用率(涉及HPA)

kubectl top pod --all-namespaces

cordon命令:用于标记某个节点不可调度

kubectl  cordon  node

在这里插入图片描述

uncordon命令:恢复节点可以被调度

kubectl  uncordon   node

在这里插入图片描述

drain命令: 用于在维护期间排除节点。

kubectl drain node node   --ignore-daemonsets --force --delete-local-data

在这里插入图片描述

taint: 为节点打上污点

Kubernetes 污点和容忍度

集群故障排查和调试命令:

describe、logs、exec、attach、port-foward、proxy、auth

describe:显示资源的详细信息

kubectl  describe   po deploycpuandmemorynginx-6f66f89b57-55kp8

logs:查看容器的日志信息

1、输出pod 最近一小时内产生的所有日志
kubectl  logs nginx-6f66f89b57-55kp8 --since=1h 

2、仅输出pod nginx中最近的20条日志
kubectl  logs  --tail=20 nginx-6f66f89b57-55kp8

3、持续输出pod 容器的日志
kubectl  logs -f nginx-6f66f89b57-55kp8 

exec命令:进入容器进行交互,在容器中执行命令

kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
#命令选项
  -c, --container="": 容器名。如果未指定,使用pod中的一个容器。
  -p, --pod="": Pod名。
  -i, --stdin[=false]: 将控制台输入发送到容器。
  -t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 进入nginx容器,执行一些命令操作
kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐