kubectl
2022-07-27 16:21:13 18 举报
AI智能生成
k8s kubectl命令
作者其他创作
大纲/内容
定义
是使用K8S API与K8S集群控制平面进行通信的命令行工具
JSONPath支持
有效语法
JSONPath 模板由 {} 包起来的 JSONPath 表达式组成
使用双引号将 JSONPath 表达式内的文本引起来
使用 range,end 运算符来迭代列表
使用负片索引后退列表。负索引不会“环绕”列表,并且只要 -index + listLength> = 0 就有效
json对象=>
text
@
. or []
..
*
[start:end :step]
[,]
?()
range, end
''
示例
kubectl get pods -o json
kubectl get pods -o=jsonpath='{@}'
kubectl get pods -o=jsonpath='{.items[0]}'
kubectl get pods -o=jsonpath='{.items[0].metadata.name}'
kubectl get pods -o=jsonpath="{.items[*]['metadata.name', 'status.capacity']}"
kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
用法约定
在可重用脚本中使用 kubectl
Main Topic
Subresources
可以将 --subresource alpha 标志用于 kubectl 命令
针对子资源的 API 协定与完整资源相同
最佳实践
kubectl run
kubectl apply
与docker等效的kubectl命令
docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx
# 启动运行 nginx 的 Pod
kubectl create deployment --image=nginx nginx-app
# 添加环境变量到nginx-app Pod
kubectl set env deployment/nginx-app DOMAIN=cluster
# 通过服务公开端口
kubectl expose deployment nginx-app --port=80 --name=nginx-http
kubectl create deployment --image=nginx nginx-app
# 添加环境变量到nginx-app Pod
kubectl set env deployment/nginx-app DOMAIN=cluster
# 通过服务公开端口
kubectl expose deployment nginx-app --port=80 --name=nginx-http
docker ps -a
kubectl get po
docker ps #获取容器ID
docker attach 55c103fa1296
docker attach 55c103fa1296
kubectl get pods #获取Pod名字nginx-app-5jyvm
kubectl attach -it nginx-app-5jyvm
kubectl attach -it nginx-app-5jyvm
语法
kubectl [command] [TYPE] [NAME] [flags]
command
指定要对一个或多个资源执行的操作
基本命令
create
从文件或stdin创建资源。
kubectl create -f FILENAME [flags]
expose
将replication controller, service, deployment 或 pod作为一个新的Kubernetes服务公开
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]
run
在集群上运行一个特定的镜像
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags]
set
设置对象的特定特性
kubectl set SUBCOMMAND [options]
explain
显示资源文档
kubectl explain [--recursive=false] [flags]
get
显示一个或多个资源
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
kubectl get pods
以纯文本输出格式列出所有 Pod
kubectl get pods -o wide
以纯文本输出格式列出所有 Pod,并包含附加信息(如节点名)
kubectl get replicationcontroller <rc-name>
以纯文本输出格式列出具有指定名称的副本控制器
kubectl get rc,services
以纯文本输出格式列出所有副本控制器和服务
kubectl get ds --include-uninitialized
以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集
kubectl get pods --field-selector=spec.nodeName=server01
列出在节点 server01 上运行的所有 Pod
edit
在服务器上编辑资源
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
delete
按文件名、标准输入、资源和名称或按资源和标签选择器删除资源
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
kubectl delete -f pod.yaml
使用 pod.yaml 文件中指定的类型和名称删除 Pod
kubectl delete pods,services -l <label-key>=<label-value>
删除所有带有 '<label-key>=<label-value>' 标签的 Pod 和服务
kubectl delete pods --all
删除所有 Pod,包括未初始化的 Pod
部署命令
rollout
管理资源的上线
kubectl rollout SUBCOMMAND [options]
scale
为Deployment, ReplicaSet 或 Replication Controller设置新的大小
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
autoscale
自动扩展Deployment、ReplicaSet、StatefulSet或ReplicationController
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
集群管理命令
certificate
修改证书资源
kubectl certificate SUBCOMMAND [options]
cluster-info
显示集群信息
kubectl cluster-info [flags]
top
显示资源(CPU/内存)使用情况
kubectl top [flags] [options]
cordon
将节点标记为不可调度
kubectl cordon NODE [options]
uncordon
将节点标记为可调度
kubectl uncordon NODE [options]
drain
腾空节点为维护做准备
kubectl drain NODE [options]
taint
更新一个或多个节点上的污点
kubectl taint NODE-NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]
故障排除和调试命令
describe
显示指定资源或一组资源的详细信息
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
kubectl describe nodes <node-name>
显示名为 <pod-name> 的 node 的详细信息
kubectl describe pods <pod-name>
显示名为 <pod-name> 的 Pod 的详细信息
kubectl describe pods <rc-name>
显示由名为 <rc-name> 的副本控制器管理的所有 Pod 的详细信息。
记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
kubectl describe pods
描述所有的 Pod
logs
打印 Pod 中容器的日志
kubectl logs POD [-c CONTAINER] [--follow] [flags]
kubectl logs <pod-name>
查看名为 <pod-name> 的Pod日志
kubectl logs -f <pod-name>
从 Pod <pod-name> 开始流式传输日志。这类似于 'tail -f' 的Linux 命令
attach
挂接到正在运行的容器,查看输出流或与容器(stdin)交互
kubectl attach POD -c CONTAINER [-i] [-t] [flags]
exec
对 Pod 中的容器执行命令
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
kubectl exec <pod-name> -- date
从 Pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器
kubectl exec <pod-name> -c <container-name> -- date
运行输出 'date' 获取在 Pod <pod-name> 中容器 <container-name> 的输出
kubectl exec -ti <pod-name> -- /bin/bash
获取一个交互 TTY 并在 Pod <pod-name> 中运行 /bin/bash。默认情况下,输出来自第一个容器
port-forward
将一个或多个本地端口转发到一个 Pod上
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
proxy
运行访问 Kubernetes API 服务器的代理
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
cp
从容器复制文件、目录或将文件、目录复制到容器
kubectl cp <file-spec-src> <file-spec-dest> [options]
auth
检查授权
kubectl auth [flags] [options]
debug
创建调试会话,用于排除工作负载和节点故障
高级命令
diff
将正在运行的版本与将要应用的版本进行对比
kubectl diff -f FILENAME [flags]
kubectl diff -f pod.json
“pod.json”中包含的差异资源
cat service.yaml | kubectl diff -f -
从标准输入读取的差异文件
apply
从文件或 stdin 对资源应用配置更改
kubectl apply -f FILENAME [flags]
kubectl apply -f example-service.yaml
使用 example-service.yaml 中的定义创建服务
kubectl apply -f example-controller.yaml
使用 example-controller.yaml 中的定义创建 replication controller
kubectl apply -f <directory>
使用 <directory> 路径下的任意 .yaml、.yml 或 .json 文件 创建对象
patch
使用策略合并流程更新资源的一个或多个字段
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
replace
通过文件或标准输入替换资源
kubectl replace -f FILENAME
wait
实验特性:等待一种或多种资源的特定状况
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options]
kustomize
列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。
设置命令
label
添加或更新一个或多个资源的标签
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
annotate
添加或更新一个或多个资源的注解
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
completion
为指定的 Shell(Bash 或 Zsh)输出 Shell 补齐代码
kubectl completion SHELL [options]
其他命令
api-resources
列出可用的 API 资源
kubectl api-resources [flags]
api-versions
列出可用的 API 版本
kubectl api-versions [flags]
config
修改 kubeconfig 文件
kubectl config SUBCOMMAND [flags]
plugin
提供用于与插件交互的实用程序
kubectl plugin [flags] [options]
version
显示运行在客户端和服务器上的 Kubernetes 版本
kubectl version [--client] [flags]
TYPE
资源类型
不区分大小写
可以单数
例: kubectl get pod pod1
可以复数
例: kubectl get pods pod1
可以缩写
例: kubectl get po pod1
NAME
资源的名称
名称区分大小写
省略名称,则显示所有资源的详细信息
操作多个资源时
要按类型和名称指定资源
要对所有类型相同的资源进行分组
语法:TYPE1 name1 name2 name<#>
例:kubectl get pod example-pod1 example-pod2
分别指定多个资源类型
语法: TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
用一个或多个文件指定资源
语法: -f file1 -f file2 -f file<#>
建议使用yaml文件
flags
--add-dir-header
设置为 true 表示添加文件目录到日志信息头中
--alsologtostderr
表示将日志输出到文件的同时输出到 stderr
--as
以指定用户的身份执行操作
string
--as-group
模拟指定的组来执行操作,可以使用这个标志来指定多个组
stringArray
--azure-container-registry-config
包含 Azure 容器仓库配置信息的文件的路径
string
--cache-dir
缓存目录
string
默认值: "$HOME/.kube/cache"
--certificate-authority
证书颁发机构的证书文件路径
string
--client-certificate
TLS 使用的客户端证书路径
string
--client-key
TLS 使用的客户端密钥文件路径
string
--cloud-provider-gce-l7lb-src-cidrs
在 GCE 防火墙中开放的 CIDR,用来进行 L7 LB 流量代理和健康检查
默认值: 130.211.0.0/22,35.191.0.0/16
值类型: cidrs
--cloud-provider-gce-lb-src-cidrs
在 GCE 防火墙中开放的 CIDR,用来进行 L4 LB 流量代理和健康检查
默认值: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16
值类型: cidrs
--cluster
要使用的 kubeconfig 集群的名称
string
--context
要使用的 kubeconfig 上下文的名称
string
--default-not-ready-toleration-seconds
为notReady:NoExecute设定tolerationSeconds的容忍值,该值默认添加到每个没有这种容忍值的pod
int
默认值: 300
--default-unreachable-toleration-seconds
为unreachable:NoExecute设定tolerationSeconds的容忍值,该值默认添加到每个没有这种容忍值的pod
int
默认值: 300
-h, --help
查看kubectl 操作的帮助命令
--insecure-skip-tls-verify
设置为 true,则表示不会检查服务器证书的有效性,这样会导致 HTTPS 连接不安全
--kubeconfig
CLI 请求使用的 kubeconfig 配置文件的路径
string
--log-backtrace-at traceLocation
当日志机制运行到指定文件的指定行(file:N)时,打印堆栈跟踪信息
--log-dir
如果不为空,则将日志文件写入此目录
string
--log-file
如果不为空,则将使用此日志文件
string
--log-file-max-size
定义日志文件的最大尺寸。单位为兆字节。如果值设置为 0,则表示日志文件大小不受限制。
uint
默认值: 1800
--log-flush-frequency
两次日志刷新操作之间的最长时间(秒)
duration
默认值: 5s
--logtostderr
日志输出到 stderr 而不是文件中
默认值: true
--match-server-version
要求客户端版本和服务端版本相匹配
-n, --namespace
如果有值,CLI 请求将使用此命名空间
string
--one-output
如果为真,则仅将日志写入其本机严重性级别(而不是写入每个较低的严重性级别
--password
API 服务器进行基本身份验证的密码
string
--profile
要捕获的配置文件的名称。
默认值: "none"
可选值: none|cpu|heap|goroutine|threadcreate|block|mutex
--profile-output
用于转储所记录的性能信息的文件名
默认值: "profile.pprof"
string
--request-timeout
放弃单个服务器请求之前的等待时间
非零值需要包含相应时间单位(例如:1s、2m、3h)
零值则表示不做超时要求
默认值: "0"
-s, --server
Kubernetes API 服务器的地址和端口
string
--skip-headers
设置为 true 则表示跳过在日志消息中出现 header 前缀信息
--skip-log-headers
设置为 true 则表示在打开日志文件时跳过 header 信息
--stderrthreshold
达到或超过此阈值的日志将被转到stderr
severity
默认值: 2
--token
用于对 API 服务器进行身份认证的持有者令牌
string
--user
指定使用 kubeconfig 配置文件中的用户名
string
--username
用于 API 服务器的基本身份验证的用户名
string
-v, --v Level
指定输出日志的日志详细级别
--version
打印 kubectl 版本信息并退出
version[=true]
--vmodule
以逗号分隔的 pattern=N 设置列表,用于过滤文件的日志记录
moduleSpec
--warnings-as-errors
将从服务器接收到的警告视为错误,并使用非零退出码退出
0 条评论
下一页