kubectl 命令详解与使用

管理k8s核心资源的三种基本方法

  • 陈述式管理方法---主要依赖命令行工具CTL进行管理 http://docs.kubernetes.org.cn/683.html
  • 声明式管理方法---主要依赖统一资源配置清单(manifest) 进行管理
  • GUI式管理方法 --- 主要依赖图形化界面(web页面)进行管理

1.陈述式管理方法

  • Kubernetes集群管理集群资源的唯一 入口是通过相应的方法调用apiserver的接口
  • kubectl是官方的CLI命令行工具,用于与apiserver进行通信, 将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理K8S各种资源的-种有效途径
  • kubectl的命令大全

             kubectl --help
             http://docs.kubernetes.org.cn

  • 陈述式资源管理方法可以满足90%以上的资源管理需求,但它的缺点也很明显

          1.命令冗长、复杂、难以记忆
          2.特定场景下,无法实现管理需求
          3.对资源的增、删、查操作比较容易,改就很痛苦

2.声明式管理方法

  • 声明式资源管理方法依赖于一资源配置清单 (yaml/json)
  • 查看资源配置清单的方法     kubectl get SVC nginx dp -0 yaml -n kube _public
  • 解释资源配置清单      kubectl explain service
  • 修改资源配置清单并应用

           在线修改
           离线修改

  • 删除资源配置清单

           陈述式删除
           声明式删除

一、kubectl语法

kubectl [command] [TYPE] [NAME] [flags]

说明:

1、command:指定在一个或多个资源上要执行的操作。例如:create、get、describe、delete、apply等

2、TYPE:指定资源类型(如:pod、node、services、deployments等)。资源类型大小写敏感,可以指定单数、复数或缩写形式。

3、NAME:指定资源的名称。名称大小写敏感。如果省略名称空间,则显示默认名称空间资源的详细信息或者提示:No resources found in default namespace.。

3、flags:指定可选的标记。例如,可以使用 -s 或 --server标识来指定Kubernetes API服务器的地址和端口;-n指定名称空间;等等。

注意:你从命令行指定的flags将覆盖默认值和任何相应的环境变量。优先级最高。

4、在多个资源上执行操作时,可以通过类型 [TYPE] 和名称 [NAME] 指定每个资源,也可以指定一个或多个文件。

kubectl get svc,node
kubectl get pod -n kube-system podname  podname
kubectl get pod -f file1 -f file2 -f file

二、kubectl语法中的command操作

Operation Syntax Description
create kubectl create -f FILENAME [flags] 从文件或标准输入创建一个或多个资源★★★
expose kubectl expose (-f FILENAME TYPE NAME
run kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] 在集群上运行指定的镜像★★★
explain kubectl explain [–recursive=false] [flags] 获取各种资源的文档。例如pods、nodes、services等。★★★★★
get kubectl get (-f FILENAME TYPE [NAME
edit kubectl edit (-f FILENAME TYPE NAME
delete kubectl delete (-f FILENAME TYPE [NAME
rollout kubectl rollout SUBCOMMAND [options] 对资源进行管理。有效的资源类型包括:deployments,daemonsets 和statefulsets
scale kubectl scale (-f FILENAME TYPE NAME
autoscale kubectl autoscale (-f FILENAME TYPE NAME
cluster-info kubectl cluster-info [flags] 显示集群信息,显示关于集群中的主机和服务的端点信息。★★★
top kubectl top node、kubectl top pod 需要heapster 或metrics-server支持 显示资源(CPU/内存/存储)使用情况★★★
cordon kubectl cordon NODE [options] 将node标记为不可调度
uncordon kubectl uncordon NODE [options] 将node标记为可调度
drain kubectl drain NODE [options] 排除指定node节点,为维护做准备
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
logs kubectl logs POD [-c CONTAINER] [–follow] [flags] 打印pod中一个容器的日志★★★★★
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] 对pod中的容器执行命令或进入Pod容器★★★★★
proxy kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] 运行Kubernetes API服务的代理
cp kubectl cp [options] 从宿主机复制文件和目录到一个容器;或则从容器中复制文件和目录到宿主机★★★
auth kubectl auth [flags] [options] 检查授权
apply kubectl apply -f FILENAME [flags] 通过文件名中的内容或stdin将配置应用于资源★★★★★
patch kubectl patch (-f FILENAME TYPE NAME
replace kubectl replace -f FILENAME 通过文件或stdin替换资源
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE -f NEW_CONTROLLER_SPEC) [flags]
label kubectl label (-f FILENAME TYPE NAME
annotate kubectl annotate (-f FILENAME TYPE NAME
api-resources kubectl api-resources [flags] [options] 打印支持的API资源★★★
api-versions kubectl api-versions [flags] 列出可用的API版本★★★
config kubectl config SUBCOMMAND [flags] 修改kubeconfig文件。有关详细信息,请参见各个子命令
plugin kubectl plugin [flags] [options] 提供与插件交互的实用工具
version kubectl version [–client] [flags] 显示在客户端和服务器上运行的Kubernetes版本★★★

三、kubectl语法中的TYPE资源

下表包含常用的资源类型及其缩写别名的列表。

也可以在命令行通过kubectl api-resources得到。

Resource Name Short Names Namespaced Resource Kind
bindings   TRUE Binding
componentstatuses cs FALSE ComponentStatus
configmaps cm TRUE ConfigMap
endpoints ep TRUE Endpoints
events ev TRUE Event
limitranges limits TRUE LimitRange
namespaces ns FALSE Namespace
nodes no FALSE Node
persistentvolumeclaims pvc TRUE PersistentVolumeClaim
persistentvolumes pv FALSE PersistentVolume
pods po TRUE Pod
podtemplates   TRUE PodTemplate
replicationcontrollers rc TRUE ReplicationController
resourcequotas quota TRUE ResourceQuota
secrets   TRUE Secret
serviceaccounts sa TRUE ServiceAccount
services svc TRUE Service
mutatingwebhookconfigurations   FALSE MutatingWebhookConfiguration
validatingwebhookconfigurations   FALSE ValidatingWebhookConfiguration
customresourcedefinitions crd, crds FALSE CustomResourceDefinition
apiservices   FALSE APIService
controllerrevisions   TRUE ControllerRevision
daemonsets ds TRUE DaemonSet
deployments deploy TRUE Deployment
replicasets rs TRUE ReplicaSet
statefulsets sts TRUE StatefulSet
tokenreviews   FALSE TokenReview
localsubjectaccessreviews   TRUE LocalSubjectAccessReview
selfsubjectaccessreviews   FALSE SelfSubjectAccessReview
selfsubjectrulesreviews   FALSE SelfSubjectRulesReview
subjectaccessreviews   FALSE SubjectAccessReview
horizontalpodautoscalers hpa TRUE HorizontalPodAutoscaler
cronjobs cj TRUE CronJob
jobs   TRUE Job
certificatesigningrequests csr FALSE CertificateSigningRequest
leases   TRUE Lease
endpointslices   TRUE EndpointSlice
events ev TRUE Event
ingresses ing TRUE Ingress
networkpolicies netpol TRUE NetworkPolicy
runtimeclasses   FALSE RuntimeClass
poddisruptionbudgets pdb TRUE PodDisruptionBudget
podsecuritypolicies psp FALSE PodSecurityPolicy
clusterrolebindings   FALSE ClusterRoleBinding
clusterroles   FALSE ClusterRole
rolebindings   TRUE RoleBinding
roles   TRUE Role
priorityclasses pc FALSE PriorityClass
csidrivers   FALSE CSIDriver
csinodes   FALSE CSINode
storageclasses sc FALSE StorageClass
volumeattachments   FALSE VolumeAttachment

四、kubectl 输出选项

1. 格式化输出

所有kubectl命令的默认输出格式是人类可读的纯文本格式。

要将详细信息以特定的格式输出到终端窗口,可以将 -o 或 --output标识添加到受支持的kubectl命令中。

2. 语法

kubectl [command] [TYPE] [NAME] -o <output_format>

根据kubectl操作,支持以下输出格式:

Output format Description
-o custom-columns= 使用逗号分隔的自定义列列表打印表
-o custom-columns-file= 使用文件中的自定义列模板打印表
-o json 输出一个JSON格式的API对象
-o jsonpath= 打印jsonpath表达式中定义的字段
-o jsonpath-file= 通过文件打印jsonpath表达式定义的字段
-o name 只打印资源名,不打印其他任何内容
-o wide 以纯文本格式输出,包含附加信息。对于pods,包含节点名
-o yaml 输出一个YAML格式的API对象

查看类命令

# 获取节点和服务版本信息
kubectl get nodes
# 获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide

# 获取pod信息,默认是default名称空间
kubectl get pod
# 获取pod信息,默认是default名称空间,并查看附加信息【如:pod的IP及在哪个节点运行】
kubectl get pod -o wide

# 获取指定名称空间的pod
kubectl get pod -n kube-system
# 获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName
# 获取所有名称空间的pod
kubectl get pod -A
# 查看pod的详细信息,以yaml格式或json格式显示
kubectl get pods -o yaml
kubectl get pods -o json

# 查看pod的标签信息
kubectl get pod -A --show-labels
# 根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"

# 查看运行pod的环境变量
kubectl exec podName env
# 查看指定pod的日志
kubectl logs -f --tail 500 -n kube-system kube-apiserver-k8s-master

# 查看所有名称空间的service信息
kubectl get svc -A
# 查看指定名称空间的service信息
kubectl get svc -n kube-system

# 查看componentstatuses信息
kubectl get cs
# 查看所有configmaps信息
kubectl get cm -A

# 查看所有serviceaccounts信息
kubectl get sa -A
# 查看所有daemonsets信息
kubectl get ds -A
# 查看所有deployments信息
kubectl get deploy -A

# 查看所有replicasets信息
kubectl get rs -A

# 查看所有statefulsets信息
kubectl get sts -A

# 查看所有jobs信息
kubectl get jobs -A
# 查看所有ingresses信息
kubectl get ing -A
# 查看有哪些名称空间
kubectl get ns   &&    kubectl get namespaces 

# 查看pod的描述信息
kubectl describe pod podName
kubectl describe pod -n kube-system kube-apiserver-k8s-master
# 查看指定名称空间中指定deploy的描述信息
kubectl describe deploy -n kube-system coredns

# 查看node或pod的资源使用情况
# 需要heapster 或metrics-server支持
kubectl top node
kubectl top pod

# 查看集群信息
kubectl cluster-info   或  kubectl cluster-info dump
# 查看各组件信息【172.16.1.110为master机器】
kubectl -s https://192.168.210.50:6443 get componentstatuses

watch -n 1 "kubectl descride deployment podname -n nsname | grep -C 5 Event"

操作类命令

# 创建资源
kubectl create -f xxx.yaml
# 应用资源
kubectl apply -f xxx.yaml
# 应用资源,该目录下的所有 .yaml, .yml, 或 .json 文件都会被使用
kubectl apply -f <directory>
# 创建test名称空间
kubectl create namespace test

# 删除资源
kubectl delete -f xxx.yaml
kubectl delete -f <directory>
# 删除指定的pod
kubectl delete pod podName
# 删除指定名称空间的指定pod
kubectl delete pod -n test podName
# 删除其他资源
kubectl delete svc svcName
kubectl delete deploy deployName
kubectl delete ns nsName
# 强制删除
kubectl delete pod podName -n nsName --grace-period=0 --force
kubectl delete pod podName -n nsName --grace-period=1
kubectl delete pod podName -n nsName --now

# 编辑资源
kubectl edit pod podName

进阶命令操作

# kubectl exec:进入pod启动的容器
kubectl exec -it podName -n nsName /bin/sh    #进入容器
kubectl exec -it podName -n nsName /bin/bash  #进入容器

# kubectl label:添加label值
kubectl label nodes k8s-node01 zone=north  #为指定节点添加标签
kubectl label nodes k8s-node01 zone-       #为指定节点删除标签
kubectl label pod podName -n nsName role-name=test    #为指定pod添加标签
kubectl label pod podName -n nsName role-name=dev --overwrite  #修改lable标签值
kubectl label pod podName -n nsName role-name-        #删除lable标签

# kubectl滚动升级; 通过 kubectl apply -f myapp-deployment-v1.yaml 启动deploy
kubectl apply -f myapp-deployment-v2.yaml     #通过配置文件滚动升级
kubectl set image deploy/myapp-deployment myapp="registry.cn-beijing.aliyuncs.com/google_registry/myapp:v3"   #通过命令滚动升级
kubectl rollout undo deploy/myapp-deployment 或者 kubectl rollout undo deploy myapp-deployment    #pod回滚到前一个版本
kubectl rollout undo deploy/myapp-deployment --to-revision=2  #回滚到指定历史版本

# kubectl scale:动态伸缩
kubectl scale deploy myapp-deployment --replicas=5  # 动态伸缩
kubectl scale --replicas=8 -f myapp-deployment-v2.yaml  #动态伸缩【根据资源类型和名称伸缩,其他配置「如:镜像版本不同」不生效】

猜你喜欢

转载自blog.csdn.net/kaikai136412162/article/details/108124996