kubernetes学习之命令行工具kubectl

1,105 阅读5分钟

概述

kubectl是K8S集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。

kubectl [command] [type] [name] [flags]
  1. commad: 指定要对资源执行的操作,例如create、get、describe和delete
  2. type: 指定资源类型,资源类型是大小写敏感的,
  3. name:指定资源的名称,名称也是大小写敏感的
  4. flags:指定可选的参数。例如,可用-s 或者–server 参数指定 Kubernetes API server 的地址和端口。

kubectl主要命令(command)

  1. 基础命令
操作说明
create通过文件名或者标准输入创建资源
expose将一个资源公布为一个新的Service
run在集群中运行一个特定的镜像
set在对象上设定特定的功能
get显示一个或者多个资源
explain文档参考资料
edit使用默认的编辑器编辑一个资源
delete通过文件名、标准输入、资源名称或者是标签选择器删除一个资源

2.部署命令

操作说明
rollout管理资源的发布
rollout-update对给定的复制控制器滚动更新
scale扩容或者缩容Pod数量、Deployment、ReplicaSet、RC或Job
autoscale创建一个自动选择扩容或缩容并设置Pod数量
  1. 集群管理命令
操作说明
certificate修改证书资源
cluster-info显示集群信息
top显示资源(CPU/Memory/Storage)使用,需要Heapster运行
cordon标记节点不可调度
uncordon标记节点可调度
drain驱逐节点上的应用,准备下线维护
taint修改节点污点(taint)标记

4.故障诊断和调试命令

操作说明
describe显示特定资源或资源组的详细信息
logs在一个pod中打印一个容器日志。如果pod只有一个容器,容器名称是可选的
attach附加到一个运行的容器
exec执行命令到容器
port-forward转发一个或多个本地端口到一个pod
proxy运行一个proxy到kubernetes API server
cp拷贝文件或目录到容器中
auth检查授权
  1. 其他命令
操作说明
apply通过文件名或者标准输入对资源应用配置
patch使用补丁修改、更新资源字段
replace通过文件名或标准输入替换一个资源
convert不同的API版本之间转化配置文件
label更新资源上的标签
annotate更新资源上的注释
completion用于实现kubectl命令自动补全
api-versions打印受支持的API版本
config就该kubeconfig文件(用于访问API,比如配置认证信息)
help打印命令帮助
plugin运行一个命令行插件
version打印客户端和服务版本信息

获取命令的具体语法

kubectl <command> --help

获取服务端目前支持的所有的资源类型

kubectl api-resources

输出当前支持的所有可选标志

kubectl options

例如:-s可以指定Kubernetes API 服务器地址,-n可以指定命名空间,--kubeconfig可以指定kubeconfig配置文件

img (图源网络)

格式化输出命令

默认情况下,所有的kubectl命令默认输出格式是可读的纯文本格式。要以特定格式将详细信息输出到终端窗口,我们需要使用“-o”或多个“-output”标志。

命令格式:

kubectl [command] [TYPE] [NAME] -o=<output_format>

常用输出格式

输出格式描述
-o=custom-columns=<spec>输入指定的逗号分隔的列名列表来打印表格 。
-o=custom-columns-file=<filename>使用文件中的自定义列模板来打印表。
-o=json输出JSON格式的API对象。
-o=jsonpath=<template>打印在jsonpath达式中定义的字段
-o=jsonpath-file=<filename>打印由文件中的jsonpath表达式定义的字段。
-o=name仅打印资源名称。
-o=wide以纯文本格式输出任何附加信息。对于pod,包括节点名称。
-o=yaml输出YAML格式的API对象。

常用命令举例

  1. 创建资源
# 根据yaml文件创建对应的资源,跟record参数会记录更新历史,可加可不加
kubectl apply -f nginx.yaml --record

  1. 查看资源
# 查看指定命名空间下的资源
kubectl get pod -n default

# 查看所有资源
kubectl get pod -A

# 查看pod详情
kubectl get pod nginxdeployment-585449566-h6hng -n default -o wide

  1. 删除资源

kubectl delete pod nginxdeployment-585449566-h6hng -n default -o wide
# 或者
kubectl delete -f nginx.yaml

  1. 手动扩缩容
# replicas大于当前pod数时为扩容,小于时为缩容
 kubectl scale deployment nginxdeployment --replicas=4
  1. 回滚
# 回滚(回退到record中的上一个revision)
kubectl rollout undo deployment nginxdeployment
# 查看历史
kubectl rollout history deployment nginxdeployment

6.编辑更新资源

# 以默认编辑器编辑对应资源文件,保存后将更新资源属性
kubectl edit -f nginx.yaml

原先起了两个pod,通过修改nginx.yaml文件,变为1个pod

日常debug

以pod资源为例

  1. 先看对应的pod存不存在,存在则看状态正不正常
kubectl get pod coredns-f9fd979d6-kvpmn -n kube-system -o wide

  1. 查看需要排查故障的pod详情信息,注意,后面要跟namespace
  2. 如果上一步还排查不出原因,则打印相关日志
# 实时刷新打印日志,参数n后面跟的是namespace 最后才是podName
 kubectl logs -f -n kube-system etcd-minikube
# 显示日志最后50行
kubectl logs --tail=50 -n kube-system etcd-minikube
# 显示过去2h的日志
kubectl logs --since=2h -n kube-system etcd-minikube
# 指定配置文件
kubectl --kubeconfig="log-watcher.kubeconfig" logs -f etcd-minikube -n kube-system
 
  1. 还不能解决就进入容器内部查找原因
   kubectl exec -it -n kube-system etcd-minikube -- sh