使用Kubectl命令
文章目录
- 使用Kubectl命令
- @[toc]
- 一、Kubectl命令的基本用法
- 二、Kubectl常用子命令
- 三、Kubectl命令支持的资源类型
- 四、Kubectl命令支持的输出格式
- 五、熟悉kubectl命令的用法
- 1.获取kubectl命令的帮助信息
- 2.使用kubectl命令行补全功能
- 3.使用kubectl命令辅助生成YAML配置文件
文章目录
- 使用Kubectl命令
- @[toc]
- 一、Kubectl命令的基本用法
- 二、Kubectl常用子命令
- 三、Kubectl命令支持的资源类型
- 四、Kubectl命令支持的输出格式
- 五、熟悉kubectl命令的用法
- 1.获取kubectl命令的帮助信息
- 2.使用kubectl命令行补全功能
- 3.使用kubectl命令辅助生成YAML配置文件
一、Kubectl命令的基本用法
kubectl
是 Kubernetes 的命令行工具,用于管理集群和资源。
语法格式:kubectl [command] [type] [name] [flags]
- command:操作指令(如
get
、create
、delete
)。 - type:资源类型(支持单数/复数/简写,如
pod
/pods
/po
)。 - name:资源名称(不指定则显示全部)。
- flags:可选参数(如
-n
指定命名空间,-o
定义输出格式)
二、Kubectl常用子命令
kubectl
提供了大量子命令,方便管理 Kubernetes 集群中的各种功能,以下是一些常用子命令分类介绍:
分类 | 子命令 | 功能描述 | 示例 |
---|---|---|---|
基础命令 | create | 根据文件或者输入来创建资源 | kubectl create -f demo-deployment.yaml |
基础命令 | get | 用于获得资源信息 | kubectl get pod --all - namespaces |
基础命令 | describe | 显示特定资源的详细信息 | kubectl describe pod podName |
基础命令 | delete | 根据 yaml 文件或具体资源名称删除资源 | kubectl delete -f demo - deployment.yaml |
基础命令 | run | 创建并运行一个或多个容器镜像 | kubectl run NAME --image = image |
基础命令 | expose | 将 Deployment、Service 等资源暴露为新的 Service | - |
基础命令 | edit | 使用默认编辑器编辑服务器上定义的资源对象 | - |
部署命令 | rollout | 对资源进行管理,如回滚 Deployment | kubectl rollout undo deployment |
部署命令 | rolling - update | 执行指定 ReplicationController 的滚动更新 | - |
部署命令 | scale | 扩容或缩容 Deployment、ReplicaSet 等中 Pod 数量 | kubectl scale deployment --replicas = 3 |
部署命令 | autoscale | 根据流量自动进行扩展或者缩容 | kubectl autoscale deployment foo --min=2 --max=10 --cpu-percent=80 |
集群管理命令 | cluster - info | 显示集群信息,如 API Server 和其他服务地址 | - |
集群管理命令 | top | 查看资源的 CPU、内存、磁盘等资源的使用率 | kubectl top pod |
集群管理命令 | cordon | 标记某个节点不可调度 | - |
集群管理命令 | uncordon | 标记节点可以调度 | - |
集群管理命令 | drain | 在维护期间排除节点 | - |
集群管理命令 | taint | 给某个 Node 节点设置污点 | - |
故障排查和调试命令 | logs | 在一个 Pod 中打印一个容器的日志 | kubectl logs -f --tail 500 -n kube - system kube - apiserver - k8s - master |
故障排查和调试命令 | exec | 进入容器进行交互,在容器中执行命令 | kubectl exec -it podName -n nsName /bin/bash |
故障排查和调试命令 | attach | 连接到一个正在运行的容器 | - |
故障排查和调试命令 | port - forward | 将本地端口转发到 Pod 的端口 | - |
故障排查和调试命令 | proxy | 创建一个代理服务器,用于访问 Kubernetes API | - |
故障排查和调试命令 | cp | 拷贝文件或者目录到 Pod 容器中 | - |
其他命令 | config | 修改 kubeconfig 配置文件 | kubectl config current - context |
其他命令 | help | 查看命令帮助 | - |
其他命令 | version | 打印客户端和服务端版本信息 | - |
其他命令 | apply | 通过文件名或者标准输入对资源应用配置 | kubectl apply -f pod.json |
其他命令 | patch | 使用补丁修改、更新资源的字段 | - |
其他命令 | replace | 通过文件或者标准输入替换原有资源 | - |
其他命令 | convert | 在不同的版本之间转换配置文件 | - |
三、Kubectl命令支持的资源类型
Kubectl命令支持的资源类型丰富多样,可通过kubectl api-resources
命令获取完整列表。以下是部分常见资源类型及其缩写、所属API组和命名空间相关信息:
资源类型 | 缩写 | API组 | 命名空间相关 | 说明 |
---|---|---|---|---|
bindings | v1 | true | 绑定资源,用于将 Pod 绑定到节点 | |
componentstatuses | cs | v1 | false | 集群组件状态,如 etcd、scheduler 等 |
configmaps | cm | v1 | true | 存储配置数据,可被 Pod 使用 |
endpoints | ep | v1 | true | 服务端点,关联服务和 Pod |
events | ev | v1 | true | 集群事件记录,用于调试和监控 |
limitranges | limits | v1 | true | 资源配额限制,用于命名空间内 |
namespaces | ns | v1 | false | 资源隔离的逻辑空间 |
nodes | no | v1 | false | 集群中的节点,即物理或虚拟机 |
persistentvolumeclaims | pvc | v1 | true | 持久卷声明,用于请求存储资源 |
persistentvolumes | pv | v1 | false | 持久卷,提供存储资源 |
pods | po | v1 | true | 最小可部署的计算单元,包含一个或多个容器 |
podtemplates | v1 | true | Pod 模板,用于创建 Pod | |
replicationcontrollers | rc | v1 | true | 副本控制器,用于管理 Pod 副本数量 |
resourcequotas | quota | v1 | true | 资源配额,限制命名空间内资源使用 |
secrets | v1 | true | 存储敏感信息,如密码、密钥等 | |
serviceaccounts | sa | v1 | true | 服务账户,用于 Pod 与 API 交互 |
services | svc | v1 | true | 服务抽象,提供稳定的网络访问 |
mutatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | 变异 Webhook 配置,用于修改资源对象 | |
validatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | 验证 Webhook 配置,用于验证资源对象 | |
customresourcedefinitions | crd, crds | apiextensions.k8s.io/v1 | false | 自定义资源定义,用于扩展 Kubernetes API |
apiservices | apiregistration.k8s.io/v1 | false | API 服务,用于注册和管理 API 扩展 | |
controllerrevisions | apps/v1 | true | 控制器版本,用于记录控制器状态 | |
daemonsets | ds | apps/v1 | true | 守护进程集,确保每个节点运行一个 Pod 副本 |
deployments | deploy | apps/v1 | true | 部署资源,用于管理 Pod 和 ReplicaSet |
replicasets | rs | apps/v1 | true | 副本集,用于管理 Pod 副本数量 |
statefulsets | sts | apps/v1 | true | 有状态集,用于管理有状态应用 |
horizontalpodautoscalers | hpa | autoscaling/v1 | true | 水平 Pod 自动伸缩器,根据负载自动调整 Pod 数量 |
cronjobs | cj | batch/v1 | true | 定时任务,按时间表执行作业 |
jobs | batch/v1 | true | 作业,用于执行一次性任务 | |
certificatesigningrequests | csr | certificates.k8s.io/v1 | false | 证书签名请求,用于获取 TLS 证书 |
ingresses | ing | networking.k8s.io/v1 | true | 入口资源,用于管理外部访问集群内服务 |
networkpolicies | netpol | networking.k8s.io/v1 | true | 网络策略,用于控制 Pod 之间的网络流量 |
poddisruptionbudgets | pdb | policy/v1 | true | Pod 中断预算,确保高可用应用的 Pod 数量 |
clusterrolebindings | rbac.authorization.k8s.io/v1 | false | 集群角色绑定,用于授权集群范围的资源访问 | |
clusterroles | rbac.authorization.k8s.io/v1 | false | 集群角色,定义集群范围的权限 | |
rolebindings | rbac.authorization.k8s.io/v1 | true | 角色绑定,用于授权命名空间内的资源访问 | |
roles | rbac.authorization.k8s.io/v1 | true | 角色,定义命名空间内的权限 | |
priorityclasses | pc | scheduling.k8s.io/v1 | false | 优先级类,用于定义 Pod 的调度优先级 |
四、Kubectl命令支持的输出格式
Kubectl命令默认输出格式是人类可读的明文格式,若要以特定格式输出详细信息,可将-o
或--output
参数添加到受支持的命令中。以下是Kubectl命令支持的输出格式:
输出格式 | 说明 | 示例 |
---|---|---|
-o wide | 以纯文本格式显示资源的附加信息,对于Pod包含节点名称等 。 | kubectl -n kube-system get pods -o wide |
-o name | 仅打印资源的名称 。 | kubectl get pods -o name |
-o yaml | 以YAML格式化输出API对象信息 。 | kubectl -n kube-system get pod calico-node-8n44g -o yaml |
-o json | 以JSON格式展示API对象 。 | kubectl get pod nginx-85b98978db-pv55z -o json |
-o jsonpath=<template> | 输出jsonpath表达式定义的字段信息 。 | kubectl get pods --selector=app=cassandra -o jsonpath='{.items[*].metadata.labels.version}' |
-o jsonpath-file=<filename> | 输出由文件中的jsonpath表达式定义的字段信息 。 | kubectl get pods -o jsonpath-file=path/to/file |
-o custom-columns=<spec> | 使用逗号分隔的自定义列列表打印表格,自定义要输出的字段 。 | kubectl get pod nginx-85b98978db-pv55z -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion,NAMESPACE:.metadata.namespace |
-o custom-columns-file=<filename> | 使用文件中的自定义列模板打印表格 。 | kubectl get pod nginx-85b98978db-pv55z -o custom-columns-file=tmp.txt |
五、熟悉kubectl命令的用法
1.获取kubectl命令的帮助信息
使用kubectl -h命令可以查看子命令列表,通过以下用法可以查看某个子命令的帮助信息。
kubectl <command> --help
例如,查看kubectl run命令的帮助信息
[root@master ~]# kubectl run --help
Create and run a particular image in a pod.Examples:# Start a nginx podkubectl run nginx --image=nginx# Start a hazelcast pod and let the container expose port 5701kubectl run hazelcast --image=hazelcast/hazelcast --port=5701# Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and
"POD_NAMESPACE=default" in the containerkubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster"
--env="POD_NAMESPACE=default"# Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the
containerkubectl run hazelcast --image=hazelcast/hazelcast
--labels="app=hazelcast,env=prod"......
执行kubectl options命令可以查看全局选项。
执行kubectl api-resources命令可以查看支持的资源列表,其中SHORTNAMES列列出的是资源名称的缩写(别名)
[root@master ~]# kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
......
2.使用kubectl命令行补全功能
实现kubectl命令行补全功能需要安装bash-completion包
[root@master ~]# yum install bash-completion -y
上次元数据过期检查:1:18:01 前,执行于 2025年03月30日 星期日 17时39分32秒。
软件包 bash-completion-1:2.7-5.el8.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!
执行以下命令使配置生效
[root@master ~]# source /usr/share/bash-completion/bash_completion
3.使用kubectl命令辅助生成YAML配置文件
从零开始为K8S对象编写YAML配置文件的效率很低,而且容易出错,我们可以利用kubectl命令来辅助生成部署用的YAML配置文件,然后根据需要修改文件。
可以使用kubectl explain命令获取特定资源及其字段的范围
kubectl explain resources[.field]...
查看Deployment资源及其字段的规范
[root@master ~]# kubectl explain deployment
GROUP: apps
KIND: Deployment
VERSION: v1DESCRIPTION:Deployment enables declarative updates for Pods and ReplicaSets.FIELDS:apiVersion <string>APIVersion defines the versioned schema of this representation of an object.Servers should convert recognized schemas to the latest internal value, andmay reject unrecognized values. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resourceskind <string>Kind is a string value representing the REST resource this objectrepresents. Servers may infer this from the endpoint the client submitsrequests to. Cannot be updated. In CamelCase. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kindsmetadata <ObjectMeta>Standard object's metadata. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadataspec <DeploymentSpec>Specification of the desired behavior of the Deployment.status <DeploymentStatus>Most recently observed status of the Deployment.
该命令输出请求的资源及其字段的规范,默认情况下仅显示下一级别的字段,可以使用–recursive选项来显示所有级别的字段
可以查看特定字段的规范
[root@master ~]# kubectl explain pods.spec.containers
KIND: Pod
VERSION: v1FIELD: containers <[]Container>DESCRIPTION:List of containers belonging to the pod. Containers cannot currently beadded or removed. There must be at least one container in a Pod. Cannot beupdated.A single application container that you want to run within a pod.
效率更高的方法是自动生成YAML配置文件,这里给出生成Deployment配置文件的例子
[root@master ~]# kubectl create deployment nginx-deploy \
> --image=nginx \
> -o yaml \
> --dry-run=client > nginx-deploy.yaml //表示在本地尝试运行,但是不会实际部署,即所谓的“干跑”模式
[root@master ~]# ls
anaconda-ks.cfg cri-dockerd-0.3.2-3.el7.x86_64.rpm nginx-deploy.yaml test-ns.yaml
calico.yaml nginx-deployment.yaml nginx-label.yaml
[root@master ~]# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginx-deployname: nginx-deploy
spec:replicas: 1selector:matchLabels:app: nginx-deploystrategy: {}template:metadata:creationTimestamp: nulllabels:app: nginx-deployspec:containers:- image: nginxname: nginxresources: {}
status: {}
[root@master ~]#
这样我们就可以在此文件的基础上进行修改,更轻松地定制要创建的Deployment。