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 applykubectl 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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐