kubectl
kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。
kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。这里不再罗列各种子命令的格式,而是介绍下如何查询命令的帮助
kubectl -h查看子命令列表kubectl options查看全局选项kubectl <command> --help查看子命令的帮助kubectl [command] [PARAMS] -o=<format>设置输出格式(如 json、yaml、jsonpath 等)kubectl explain [RESOURCE]查看资源的定义
配置
使用 kubectl 的第一步是配置 Kubernetes 集群以及认证方式,包括
cluster 信息:Kubernetes server 地址
用户信息:用户名、密码或密钥
Context:cluster、用户信息以及 Namespace 的组合
示例
kubectl config set-credentials myself --username=admin --password=secret
kubectl config set-cluster local-server --server=http://localhost:8080
kubectl config set-context default-context --cluster=local-server --user=myself --namespace=default
kubectl config use-context default-context
kubectl config view常用命令格式
创建:
kubectl run <name> --image=<image>或者kubectl create -f manifest.yaml查询:
kubectl get <resource>更新
kubectl set或者kubectl patch删除:
kubectl delete <resource> <name>或者kubectl delete -f manifest.yaml查询 Pod IP:
kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'容器内执行命令:
kubectl exec -ti <pod-name> sh容器日志:
kubectl logs [-f] <pod-name>导出服务:
kubectl expose deploy <name> --port=80Base64 解码:
注意,kubectl run 仅支持 Pod、Replication Controller、Deployment、Job 和 CronJob 等几种资源。具体的资源类型是由参数决定的,默认为 Deployment:
Pod
--restart=Never
Replication Controller
--generator=run/v1
Deployment
--restart=Always
Job
--restart=OnFailure
CronJob
--schedule=<cron>
命令行自动补全
Linux 系统 Bash:
MacOS zsh
自定义输出列
比如,查询所有 Pod 的资源请求和限制:
日志查看
kubectl logs 用于显示 pod 运行中,容器内程序输出到标准输出的内容。跟 docker 的 logs 命令类似。
注:kubectl 只可以查看单个容器的日志,如果想要同时查看多个 Pod 的日志,可以使用 stern。比如:
stern --all-namespaces -l run=nginx。
连接到一个正在运行的容器
kubectl attach 用于连接到一个正在运行的容器。跟 docker 的 attach 命令类似。
在容器内部执行命令
kubectl exec 用于在一个正在运行的容器执行命令。跟 docker 的 exec 命令类似。
多容器 Pod 可通过
kubectl.kubernetes.io/default-containerannotation 配置 kubectl 命令的默认容器。
端口转发
kubectl port-forward 用于将本地端口转发到指定的 Pod。
也可以将本地端口转发到服务、复制控制器或者部署的端口。
API Server 代理
kubectl proxy 命令提供了一个 Kubernetes API 服务的 HTTP 代理。
可以通过代理地址 http://localhost:8080/api/ 来直接访问 Kubernetes API,比如查询 Pod 列表
注意,如果通过 --address 指定了非 localhost 的地址,则访问 8080 端口时会报未授权的错误,可以设置 --accept-hosts 来避免这个问题( 不推荐生产环境这么设置 ):
文件拷贝
kubectl cp 支持从容器中拷贝,或者拷贝文件到容器中
注意:文件拷贝依赖于 tar 命令,所以容器中需要能够执行 tar 命令
kubectl drain
它会删除该 NODE 上由 ReplicationController, ReplicaSet, DaemonSet, StatefulSet or Job 创建的 Pod
不删除 mirror pods(因为不可通过 API 删除 mirror pods)
如果还有其它类型的 Pod(比如不通过 RC 而直接通过 kubectl create 的 Pod)并且没有 --force 选项,该命令会直接失败
如果命令中增加了 --force 选项,则会强制删除这些不是通过 ReplicationController, Job 或者 DaemonSet 创建的 Pod
有的时候不需要 evict pod,只需要标记 Node 不可调用,可以用 kubectl cordon 命令。
恢复的话只需要运行 kubectl uncordon NODE 将 NODE 重新改成可调度状态。
权限检查
kubectl auth 提供了两个子命令用于检查用户的鉴权情况:
kubectl auth can-i检查用户是否有权限进行某个操作,比如
kubectl auth reconcile自动修复有问题的 RBAC 策略,如
模拟其他用户
kubectl 支持模拟其他用户或者组来进行集群管理操作,比如
这实际上就是在请求 Kubernetes API 时添加了如下的 HTTP HEADER:
查看事件(events)
kubectl 插件
kubectl 插件提供了一种扩展 kubectl 的机制,比如添加新的子命令。插件可以以任何语言编写,只需要满足以下条件即可
插件放在
~/.kube/plugins或环境变量KUBECTL_PLUGINS_PATH指定的目录中插件的格式为
子目录 / 可执行文件或脚本且子目录中要包括plugin.yaml配置文件
比如
你也可以使用 krew 来管理 kubectl 插件。
原始 URI
kubectl 也可以用来直接访问原始 URI,比如要访问 Metrics API 可以
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodeskubectl get --raw /apis/metrics.k8s.io/v1beta1/podskubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/<node-name>kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/<namespace-name>/pods/<pod-name>
附录
kubectl 的安装方法
最后更新于