糖呀糖啦~Pleiades
首页
归档
关于
友链
切换模式
返回顶部
首页
技术实践
书斋絮语
晴天札记
糖呀糖啦~Pleiades
首页
技术实践
书斋絮语
晴天札记
首页
归档
关于
友链
【Kubernetes】kubectl 命令行工具用法
技术实践
·
22 天前
糖呀糖 xyz
# kubectl 用法概述 kubectl 命令行的语法如下: ```bash kubectl [command] [TYPE] [NAME] [flags] ``` - `command`:子命令,用于操作 Kubernetes 集群资源对象的命令,如 create、delete、describe、get、apply 等 - `TYPE`:资源对象的类型,区分大小写,能以单数。复数或简写形式表示,如,以下三种 TYPE 是等价的: ```bash kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1 ``` - `NAME`:资源对象的名称,区分大小写,如果不指定名称,系统则将返回属于 TYPE 的全部对象的列表 - `flags`:kubectl 子命令的可选参数,如使用 `-s` 指定 API Server 的 URL 地址而不用默认值 # kubectl 可操作的资源对象类型 及其缩写 | 资源对象类型 | 缩写 | 资源对象类型 | 缩写 | | ------------------------ | ------ | ---------------------- | ----- | | cluster | | statefulsets | | | componentstatuses | cs | persistentvolumeclaims | pvc | | configmaps | cm | persistentvolumes | pv | | daemonsets | ds | pods | po | | deployments | deploy | podsecuritypolicies | psp | | endpoints | ep | podtemplates | | | events | eb | replicasets | rs | | horizontalpodautoscalers | hpa | replicationcontrollers | rc | | ingresses | ing | resourcequotas | quota | | Jobs | | cronjob | | | limitranges | limits | secrets | | | nodes | no | serviceaccounts | | | namespaces | ns | services | svc | | networkpolicies | | storageclasses | sc | | nodes | no | thirdpartyresources | | 在一个命令行中也可以同时对多个资源对象进行操作,以多个 TYPE 和 NAME 的组合表示,eg. 获取多个 Pod 的信息: ```bash kubectl get pods pod1 pod2 ``` 获取多种对象的信息: ```bash kubectl get pod/pod1 rc/rc1 ``` 同时应用多个 YAML 文件,以多个 `-f file` 参数表示: ```bash kubectl get pod -f pod1.yaml -f pod2.yaml kubectl create -f pod1.yaml -f rcl.yaml -f servicel.yaml ``` # kubectl 子命令详解 常用的 kubectl 子命令: | 子命令 | 语法 | 说明 | | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | | apply | kubectl apply -f FILENAME [flags] | 从配置文件或 stdin 中对资源对象进行配置更新 | | get | kubectl get [资源类型] [NAME] [flags] | 显示一个或多个资源的信息 | | describe | kubectl describe [资源类型] [NAME] [flags] | 显示特定资源或资源组的详细信息 | | delete | kubectl delete [资源类型] [NAME] [flags] | 从文件、stdin 或指定标签选择器、名称删除资源 | | create | kubectl create -f FILENAME [flags] | 从文件或 stdin 创建一个或多个资源 | | edit | kubectl edit [资源类型] [NAME] [flags] | 编辑服务器上的资源 | | exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] -- COMMAND [args...] | 在容器中执行命令 | | logs | kubectl logs POD [-c CONTAINER] [flags] | 打印 Pod 中容器的日志 | | scale | kubectl scale [--resource-version=版本] [--current-replicas=数量] --replicas=数量 [资源类型] [NAME] [flags] | 扩缩容 Pod、ReplicaSet、Deployment、ReplicationController 或 Job | | port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | 将一个或多个本地端口转发到 Pod | | rollout | kubectl rollout SUBCOMMAND [flags] | 管理资源的发布(如 deployment 的升级回滚) | | label | kubectl label [--overwrite] (-f FILENAME \| 资源类型 NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [flags] | 更新资源上的标签 | | config | kubectl config SUBCOMMAND [flags] | 修改 kubeconfig 文件(用于访问 API,配置认证信息等) | | expose | kubectl expose (-f FILENAME \| 资源类型 NAME) [--port=端口] [--protocol=TCP\|UDP] [--target-port=数字\|名称] [--name=名称] [--external-ip=外部IP地址] [flags] | 将资源暴露为新的 Kubernetes Service | | set | kubectl set SUBCOMMAND [flags] | 在资源对象上设置特定功能(如镜像、环境变量等) | | taint | kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [flags] | 更新一个或多个节点上的污点 | | top | kubectl top [flags] [OPTIONS] | 显示资源(CPU/内存/存储)使用情况 | | cordon | kubectl cordon NODE [flags] | 标记节点为不可调度 | | uncordon | kubectl uncordon NODE [flags] | 标记节点为可调度 | | drain | kubectl drain NODE [flags] | 排空节点以准备维护 | | auth | kubectl auth [flags] [OPTIONS] | 检查授权 | | cluster-info | kubectl cluster-info [flags] | 显示集群信息 | | api-resources | kubectl api-resources [flags] | 打印服务器上支持的 API 资源 | | api-versions | kubectl api-versions [flags] | 打印服务器上支持的 API 版本 | | version | kubectl version [flags] | 显示客户端和服务器的版本信息 | 常用的 flags(参数): |参数|说明| |---|---| |-n, --namespace|指定命名空间| |-o, --output|输出格式(json\|yaml\|wide\|name)| |--all-namespaces|列出所有命名空间的资源| |-l, --selector|标签选择器| |-f, --filename|指定包含配置的文件名、目录或 URL| |--force|强制执行操作| |-h, --help|获取帮助信息| |-v, --v|日志级别| |--dry-run|仅打印将要执行的操作,而不实际执行| |-w, --watch|监视资源变化| 这些命令和参数涵盖了 kubectl 的主要功能,可以满足日常 Kubernetes 集群管理和操作的需求。每个命令都支持 `--help` 参数来获取更详细的使用说明。 # kubectl 参数列表 kubectl 命令行的公共启动参数如下: | 参数名 | 取值示例 | 说明 | |--------|----------|------| | --kubeconfig | ~/.kube/config | 指定 kubeconfig 配置文件的路径 | | --context | my-context | 指定要使用的 kubeconfig 上下文名称 | | --cluster | production-cluster | 指定要使用的 kubeconfig 集群名称 | | --namespace, -n | default | 指定命名空间,默认为 "default" | | --user | admin-user | 指定要使用的 kubeconfig 用户名称 | | --server, -s | https://10.0.0.1:6443 | 指定 Kubernetes API 服务器的地址和端口 | | --certificate-authority | /path/to/ca.crt | 指定用于验证 API 服务器的 CA 证书路径 | | --client-certificate | /path/to/client.crt | 指定用于 TLS 的客户端证书文件路径 | | --client-key | /path/to/client.key | 指定用于 TLS 的客户端密钥文件路径 | | --token | eyJhbGc...token | 指定用于认证的 Bearer 令牌 | | --username | admin | 基本认证的用户名 | | --password | secret | 基本认证的密码 | | --insecure-skip-tls-verify | true | 是否跳过 TLS 证书验证(不建议在生产环境使用) | | --request-timeout | 30s | API 服务器请求超时时间 | | --v, -v | 0-9 | 日志级别,数字越大输出信息越详细(0-9) | | --alsologtostderr | true | 同时将日志输出到标准错误和文件 | | --log-dir | /path/to/logs | 指定日志文件目录 | | --log-file | kubectl.log | 指定日志文件名称 | | --log-file-max-size | 1800 | 日志文件的最大大小(MB) | | --logtostderr | true | 仅将日志输出到标准错误 | | --match-server-version | true | 要求服务器版本与客户端版本匹配 | | --profile | profile-name | 要使用的性能分析名称 | | --profile-output | profile.pprof | 性能分析输出文件路径 | | --cache-dir | ~/.kube/cache | HTTP 缓存目录 | | --api-version | v1 | 要使用的 API 版本 | | --as | other-user | 以其他用户身份执行操作 | | --as-group | system:masters | 以其他用户组身份执行操作 | | --tls-server-name | kubernetes | 用于验证服务器证书的主机名 | | --proxy-url | http://proxy.example.com:8080 | 要使用的代理服务器的 URL | 一些使用示例: ```bash # 使用特定的 kubeconfig 文件 kubectl --kubeconfig=/path/to/config get pods # 使用特定的上下文 kubectl --context=prod-cluster get nodes # 指定命名空间和日志级别 kubectl -n kube-system --v=6 get pods # 使用特定的认证信息 kubectl --server=https://k8s.example.com:6443 \ --client-certificate=/path/to/cert.crt \ --client-key=/path/to/key.key \ get pods # 以其他用户身份执行操作 kubectl --as=system:serviceaccount:default:myapp get pods ``` 注意事项: 1. 这些参数可以在命令行中指定,也可以在 kubeconfig 文件中配置 2. 某些参数(如认证相关的)通常建议配置在 kubeconfig 文件中,而不是在命令行中暴露 3. 生产环境中要谨慎使用 --insecure-skip-tls-verify 4. 日志级别(-v)通常用于调试,生产环境建议使用默认值 # kubectl 输出格式 kubectl 命令可以用多种格式对结果进行显示,输出的格式通过 `-o` 参数指定: ```bash kubectl [command] [TYPE] [NAME] -o=
``` 根据不同子命令的输出结果,可选的输出格式如下: | 输出格式 | 语法示例 | 说明 | | ------------------- | ---------------------------------------------------------- | ------------------------ | | json | -o json | 以 JSON 格式输出 | | yaml | -o yaml | 以 YAML 格式输出 | | wide | -o wide | 以纯文本格式输出附加信息 | | name | -o name | 仅输出资源名称 | | custom-columns | -o custom-columns=NAME:.metadata.name,STATUS:.status.phase | 自定义列输出,可以使用 JSONPath 表达式 | | custom-columns-file | -o custom-columns-file=columns.txt | 从文件中读取自定义列格式 | | jsonpath | -o jsonpath='{.items[*].metadata.name}' | 使用 JSONPath 表达式提取特定字段 | | jsonpath-file | -o jsonpath-file=template.json | 从文件中读取 JSONPath 模板 | | template | -o template="{{range .items}}{{.metadata.name}}{{end}}" | 使用 Go 模板进行自定义输出 | | template-file | -o template-file=template.txt | 从文件中读取 Go 模板 | **custom-columns 常用示例** ```bash # Pod 名称和状态 kubectl get pods -o custom-columns=POD:metadata.name,STATUS:status.phase # 显示节点名称和 CPU 容量 kubectl get nodes -o custom-columns=NAME:.metadata.name,CPU:.status.capacity.cpu # 显示 deployment 名称、副本数和可用副本数 kubectl get deployments -o custom-columns=NAME:.metadata.name,REPLICAS:.spec.replicas,AVAILABLE:.status.availableReplicas ``` **jsonpath 常用示例** ```bash # 获取所有 Pod 的名称 kubectl get pods -o jsonpath='{.items[*].metadata.name}' # 获取所有节点的 IP kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}' # 获取所有容器的镜像 kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}' ``` **template 常用示例** ```bash # 自定义格式输出 Pod 信息 kubectl get pods -o template --template='{{range .items}}{{.metadata.name}} {{.status.phase}}{{"\n"}}{{end}}' # 输出带表头的列表 kubectl get pods -o template --template='NAME STATUS\n{{range .items}}{{.metadata.name}} {{.status.phase}}{{"\n"}}{{end}}' ``` 常用的输出格式实例: 显示 Pod 的更多信息: ```bash kubectl get pod
-o wide ``` 以 YAML 格式显示 Pod 的详细信息: ```bash kubectl get pod
-o yaml ``` 以自定义列明显示 Pod 的信息: ```bash kubectl get pod
-o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion ``` 基于文件的自定义列名输出: ```bash kubectl get pods
-o=custom-columns-file=template.txt ``` 将输出结果按某个字段排序,通过 `--sory-by` 参数以 jsonpath 表达式进行指定: ```bash kubectl [command] [TYPE] [NAME] --sort-by=
``` # kubectl 操作实例 ## 执行容器的命令 执行 Pod 的 date 命令,默认使用 Pod 中的 第一个容器 执行: ```bash kubectl exec
date ``` 指定 Pod 中的某个容器执行 date 命令: ```bash kubectl exec
-c
date ``` 通过 bash 获得 Pod 中 某个容器的 TTY,相当于登录容器: ```bash kubectl exec -ti
-c
/bin/bash ``` ## 查看容器的日志 查看容器输出到 sudout 的日志: ```bash kubectl logs
``` 跟踪查看容器的日志,相当于 `tail -f` 命令的结果: ```bash kubectl logs -f
-c
``` ## 在线编辑运行中的资源对象 可以使用 kubectl edit 命令编辑运行中的资源对象,例如使用下面的命令编辑运行中的一个 Deployment: ```bash kubectl edit deploy nginx ``` 在命令执行之后,会通过 YAML 格式展示该对象的定义和状态,用户可以对代码进行编辑和保存,从而完成对在线资源的直接修改。 ## 将 Pod 的开放端口映射到本地 将集群上 Pod 的 80 端口映射到本地的 8888 端口,在浏览器 http://127.0.0.1:8888 中就能访问到容器提供的服务 ```bash kubectl port-forward --address 0.0.0.0 | pod/podname 8888:80 ``` ## 在 Pod 和本地之间复制文件 把 Pod 上的 `/etc/fstab` 复制到本地的 `/tmp` 目录: ```bash kubectl cp podname:/etc/fstab /tmp ``` ## 资源对象的标签设置 为 default namespace 设置 testing=true 标签: ```bash kubectl label namespaces default testing=true ``` ## 检查可用的 API 资源类型列表 该命令经常用于检查特定类型的资源是否已经定义,列出所有资源对象类型 ```bash kubectl api-resources ``` # References - claude 3.5 sonnet - Kubernetes 权威指南:从 Docker 到 Kubernetes 实践全接触(第 4 版)
Kubernetes
取消回复
提交评论
糖呀糖 xyz
我们谈论生活,讨论技术,借由文字,抵达心灵。
热门文章
【Kubernetes】第一个实例 - Java Web 应用
Obsidian 迁移全记录(又名:纯小白的闭坑指南)
使用宝塔面板对网站、数据库等进行定时备份到腾讯云 COS 对象存储
2025 年
在细雨中呼喊,在困顿中挣扎
Ubuntu 22.04 server 安装教程
Debian 12.2 安装方法
最新评论
tl.s: 很实用 🦆🦆
tl.s: 绘图很清晰,图示质量很高
tl.s: 写的很详细,赞👍
Deep Router: 大佬好强!!!
tls: 写的很详细,很清晰!
tl.s: 讲的很清楚,语言组织很好 🦆🦆🦆🦆🦆🦆🦆🦆🦆🦆
tl.s: 好棒🦆🦆🦆🦆🦆🦆🦆🦆🦆🦆🦆
热门标签
Kubernetes
Ubuntu
Linux
Python3
生活
2025
Debian
技术实践
在细雨中呼喊
读书笔记
笔记软件
Obsidian
2024
openEuler
Kuboard
粤ICP备2024349207号