kubectl执行流程
kubectl命令行补齐
子命令 | 说明 |
---|---|
completion | kubectl为指定的shell(bash或zsh)中的子命令或参数实现自动补齐。建议写入~/.bash_profile,source后立即生效
|
kubectl集群信息检索/维护
api-versions | 以"group/version"的格式,打印当前服务端支持的API版本 |
api-resources | 列出集群支持的API资源 |
cluster-info | 显示整个集群的kubernetes master、kubeDNS、metrics-server等服务组件的endpoints。 使用kubectl cluster-info dump --output-directory分类存放集群信息,进一步调试和诊断集群问题。
|
certificate | 修改证书请求资源的状态,使用kubectl get csr列出证书签名请求。 approve:批准证书签名请求 deny:拒绝证书签名请求 |
top | 显示node或者pod的cpu、memory的使用量,需要提前安装并正确配置metrics-server。 --sort-by=cpu|memory使用cpu或者memory排序
|
cordon | 将指定节点标记为不可被调度,将不会被master节点上的kube-scheduler分配新的pod。被标记的节点(除非发布任务时使用nodeName强制指定标记的节点),使用kubect get nodes查看到的STATUS为Ready,SchedulingDisabled
|
uncordon | 标记指定节点可以被kube-scheduler调度
|
drain | 排空准备维护的节点 1. 给指定的节点标记为SchedulingDisabled,防止被kube-scheduler分配新的pod 2. 尝试把运行的pod迁移到其它node节点,如果无法迁移将删除pod 3. 使用--ignore-daemonsets参数删除由DaemonSet管理的pod,使用--delete-emptydir-data参数删除没有使用共享存储,而是将数据存放在当前node节点的pod 4. drain后的node节点,可以使用kubectl delete node NodeName,从etcd中彻底删除。使用kubeadm reset初始化该节点 5. 也可以把drain后的node点,使用kubectl uncordon NodeName,重新标记为可以被调度
|
kubectl认证与鉴权
config | 修改、配置客户端登录凭证文件。每次执行kubectl命令可以使用--kubeconfig指定登录凭证,或设置KUBECONFIG环境变量。当多个登录凭证存在时,优先级排序 --kubeconfig > $KUBECONFIG > ${HOME}/.kube/config |
auth | 检查当前用户的授权 can-i // 检查当前用户是否可对某种资源执行操作。
|
kubectl POD基本操作
run | 创建一个pod并运行容器 --image=指定镜像名字 --image-pull-policy=指定下载镜像的策略,可选值Always,Never,IfNotPresent,默认为Always -l, --labels=[] "k1=v1,k2=v2,..." 指定pod的标签 --annotations="" 应用于pod的注释,多个注释使用多个--annotations --env="" 设置pod中的环境变量,多个变量使用多个--env --command 在容器中执行的命令 --expose 为pod创建ClusterIP Service --port 指定容器的暴露端口 --attach 等待pod启动运行后,附加命令到pod中执行 --rm 在执行完容器中attach命令后删除pod --record 在资源annotations中记录当前的kubectl命令 --privileged 以特权身份运行容器,默认为false --restart=指定pod的重启策略,可选值:Always,OnFailure,Never,默认为Always
|
port-forward | 将本地的一个或多个端口转发到pod:localPort:podPort,会持续占用一个终端(终端关闭结束端口转发)。支持的资源:pod、deployment、service
|
kubectl调试排错
debug | 创建调试会话以对工作负载和节点进行故障排除,默认资源类型为pod。debug采取的操作因指定的资源而异。支持的行动包括:
|
proxy | 转发kube-apiserver到本地的指定地址和端口,默认为127.0.0.1:8001,随后可通过curl获取集群资源信息 --address 指定转发到本机的IP地址 -p, --port 指定转发到本机的端口。0为随机端口 --accept-hosts 使用正则表达式指定允许访问转发的主机,默认为localhost,'^*$'为放行所有主机
|
kubectl资源管理
label | 以key=value的形式,设置或更新资源的标签
|
annotate | 更新或设置一个或多个资源的注释
|
expose | 给已经存在的pod,service,replicationcontroller,deployment,replicaset资源创建或关联service
|
replace | 通过文本文件或标准命令行替换已经存在的资源
|
patch | 使用JSON补丁更新资源的字段 以下patch方法常用于使用go封装云原生应用部署,即替换image版本、扩缩容副本
以下patch方法常用于admission webhook为工作负载增加配置字段,可参加K8S二次开发系列之三:自定义开发Admission Webhook
|
kubectl更新workload
set | 对现有应用程序的资源进行更改:env, image, resources, selector, serviceaccount, subject |
scale | 对指定的工作负载副本数量进行缩放,如果指定了--current-replicas或--resource-version则会在尝试缩放之前对其进行验证,并保证在将缩放发送到服务器时前提条件为true
|
autoscale | 使用metrics-server对指定的工作负载的cpu-percent指标进行度量,按照预支自动缩放pod副本数量 ```shell # 范例 # 使用默认策略对foo进行最大10最小2的副本缩放 kubectl autoscale deployment foo --min=2 --max=10 # cpu使用率超过80%后进行最大5最小1的副本缩放 kubectl autoscale rc foo --max=5 --cpu-percent=80 |