[K8S]Kubectl命令简介
介绍了Kubernetes客户端CLI工具kubectl命令,及常用命令apply、get、describe、delete、exec、logs、cp等
·
文章目录
kubectl作为客户端CLI工具,可对Kubernetes集群进行操作。
概述
kubectl命令行语法:
kubectl [command] [TYPE] [NAME] [flags]
- command:操作对象的子命令,如create、get、describe、delete等;
- TYPE:资源对象类型(区分大小写),可以是单数、复数或简写形式;
- NAME:资源对象名称(区分大小写),若不指定名称,则返回属于TYPE的全部对象列表;
- 多个相同资源名称用空格分割:如,
get pod pod1 pod2
; - 多种类型资源时,资源与名称通过
/
组合:如get pod/pod1 replicationcontroller/rc1
- 多个相同资源名称用空格分割:如,
- flags:子命令可选参数;
格式化输出
kubectl支持多种查看方式(通过-o={mode}
):
-o=json
:json格式显示结果-o=name
:仅输出资源名称-o=wide
:输出额外信息(对于Pod将输出其所在Node名)-o=yaml
:以yaml格式显示结果
常用命令
资源对象操作命令中都可通过-n {ns-name}
指定要操作的命名空间;
apply(部署或更新资源)
通过yaml文件可创建资源:
kubectl apply -f {yaml-file}
# kubectl create -f {yaml-file}
# 操作目录dir下所有文件(.yaml、.yaml和.json)
kubectl apply -f {dir}
通过create与apply有什么区别:
kubectl apply | kubectl create |
---|---|
根据yaml文件中包含的字段(yaml文件可以只写需要改动的字段),直接升级集群中的现有资源对象 | 首先删除集群对应的所有资源,然后重新根据yaml文件(必须是完整的配置信息)生成新的资源对象 |
yaml文件可以不完整,只写需要的字段 | yaml文件必须是完整的配置字段内容 |
kubectl apply只工作在yaml文件中的某些改动过的字段 | kubectl create工作在yaml文件中的所有字段 |
在只改动了yaml文件中的某些声明时,而不是全部改动,使用kubectl apply | 在没有改动yaml文件时,使用同一个yaml文件执行命令将不会成功(fail掉),因为缺少相关改动信息 |
get(获取对象信息)
get命令常用于查看同一资源类型的一个或多个资源对象:
- 可通过
-o
定义输出格式; - 可通过
-w
开启对资源对象更新的监控;
kubectl get nodes [-n {ns}] # 查看集群中节点
# 显示Pod更多信息,状态、IP、运行在那个节点等
kubectl get pods {pod-name} [-n {ns}] -o=wide
kubectl get po -A # 显示所有Pod
# 查看Pod中的容器名称
kubectl get pods {pod-name} -o jsonpath={.spec.containers[*].name}
# 获取所有Service Account对象
kubectl get sa --all-namespace
describe(显示详细信息)
describe命令侧重于指定资源的各方面详细信息(除返回节点新外,还会返回摘要与节点事件等)
# 显示节点详细信息
kubectl describe nodes {name}
# 显示Pod的详细信息
kubectl describe pods {name}
delete(删除)
delete命令可通过文件或指定对象(可通过标签选择器、名称、资源选择器限定资源范围)删除资源对象。
# 删除namespace下面所有的资源(慎重)
kubectl delete all --all -n {namespace}
# 删除命名空间
kubectl delete ns {name}
# 删除文件中的对象
kubectl delete -f {pod.yaml}
# 删除所有pod
kubectl delete pods -all
# 删除指定的Deployment资源对象与其下关联的Pod
kubectl delete deploy {deploy-name}
# 删除指定的Statefulset资源对象与其下关联的Pod
kubectl delete sts {deploy-name}
# 删除所有带(key=value)label的pod与service
kubectl delete pods,services -l {key=value}
exec(在容器中执行命令)
exec中不指定容器名时,使用第一个容器:
# 在Pod的第一个容器中运行命令
kubectl exec {pod-name} -- date
# 在指定的容器中运行命令
kubectl exec {pod-name} -c {container-name} -- date
# 进入Pod容器内
kubectl exec -it {pod-name} -- bash
logs(查看日志)
logs中不指定容器名时,显示第一个容器的:
# 持续显示Pod中第一个容器的日志
kubectl logs -f {pod-name}
# 显示Pod中指定容器的日志
kubectl logs {pod-name} -c {container-name}
edit(编辑运行中资源对象)
执行命令后,会以yaml格式显示对象的文本格式定义,可对代码进行编辑和保存:
kubectl edit deploy {name}
cp(文件复制)
cp时不指定容器名,默认使用对一个容器:
# 复制Pod中文件到主机
kubectl cp {pod-name}:/data/tmp.txt ./tmp.txt
# 复制本地文件到主机
kubectl cp ./tmp.txt [-c {container-name}] {pod-name}:/data/
端口映射
把Pod的端口映射到宿主机上
# 把Pod的80端口,映射为外部8080
kubectl port-forward --address 0.0.0.0 pod/{pod-name} 8080:80
更多推荐
已为社区贡献2条内容
所有评论(0)