kubectl是Kubernetes自带的客户端,你可以用它直接操作Kubernetes集群。在Kubernetes的日常使用中,kubectl工具可能是最常用的工具,所以当我们花费大量时间研究和学习Kubernetes时,了解如何高效的使用它是非常有必要的。从用户的角度来看,kubectl是控制Kubernetes的驾驶舱,它允许你执行所有可能的Kubernetes操作;从技术角度来看,kubectl只是KubernetesAPI的一个客户端。KubernetesAPI是一个HTTPRESTAPI服务,是Kubernetes真正的用户界面,所以Kubernetes是通过API进行实际控制的。这意味着每个Kubernetes操作都将通过API端点暴露出来,当然,可以通过向这些API端口发出HTTP请求来执行相应的操作。因此,kubectl的主要工作就是执行KubernetesAPI的HTTP请求。工具使用参数get#显示一个或多个资源describe#显示资源详细信息create#从文件或标准输入创建资源update#从文件或标准输入更新资源delete#通过文件名、标准输入、资源名称或标签删除资源日志#在pod中输出一个容器的日志rolling-update#执行滚动升级到指定的RCexec#在容器内部执行命令port-forward#将本地端口转发给Podproxy#启动代理服务器为KubernetesAPIserver运行#在集群中使用指定启动容器的镜像expose#将SVC或pod暴露为新的kubernetesservicelabel#更新资源的labelconfig#修改kubernetes配置文件cluster-info#显示集群信息api-versions#输出服务器-sidesupportintheformatof"group/version"APIversionversion#输出服务器和客户端版本信息help#显示每个命令的帮助信息ingress-nginx#管理ingress服务插件(官方安装和使用方法)使用相关配置#kubectlauto-completion$source<(kubectlcompletionzsh)$source<(kubectlcompletionbash)#显示合并后的kubeconfig配置$kubectlconfigview#获取pod和svc文件$kubectlexplainpods,svc一步步创建资源对象#yamlkubectl创建-fxxx-rc.yamlkubectl创建-fxxx-service.yaml#jsonkubectl创建-f./pod.jsoncatpod.json|kubectlcreate-f-#yaml2jsonkubectlcreate-fdocker-registry.yaml--edit-ojson一次创建kubectlcreate-fxxx-service.yaml-fxxx-rc.yaml根据目录下所有yaml文件的定义内容创建kubectlcreate-f使用url创建资源kubectlcreate-fhttps://git.io/vPieo查看资源对象查看所有Node或Namespace对象kubectlgetnodeskubectlgetnamespace查看所有Pod对象#查看子命令帮助信息kubectlget--help#列出默认命名空间中的所有podkubectlgetpods#列出指定命名空间中的所有podkubectlgetpods--namespace=test#列出所有命名空间中的所有podkubectlgetpods--all-namespaces#列出所有pod并显示详细信息kubectlgetpods-owidekubectlgetreplicationcontrollerwebkubectlget-kdir/kubectlget-fpod.yaml-ojsonkubectlgetrc/webservice/frontendpods/web-pod-13je7kubectlgetpods/app-prod-78998bf7c6-ttp9g--namespace=test-owidekubectlget-otemplatepod/web-pod-13je7--template={{.status.phase}}#列出namespace下所有pod,包括未初始化的kubectlgetpods,rc,services--include-uninitialized查看所有RC对象kubectlgetrc查看所有Deployment对象#查看所有部署kubectlgetdeployment#columns指定deploymentkubectlgetdeploymentmy-app查看所有Service对象kubectlgetsvckubectlgetservice查看不同Namespace下的Pod对象kubectlgetpods-ndefaultkubectlgetpods--all-namespace查看资源描述显示Pod详细信息kubectldescribepods/nginxkubectldescribepodsmy-podkubectldescribe-fpod.json查看Node详细信息kubectldescribenodesc1查看PodRC相关信息kubectldescribepodsupdatepatchresourcerollingupdate#rollingupdatepodfrontend-v1kubectlrolling-updatefrontend-v1-ffrontend-v2.json#updateresourcenameandupdateimagekubectlrolling-updatefrontend-v1frontend-v2--image=image:v2#更新前端pod中的imagekubectlrolling-updatefrontend--image=image:v2#退出正在进行的现有滚动更新kubectlrolling-updatefrontend-v1frontend-v2--rollback#强制替换;资源将在删除后重新创建;服务会中断kubectlreplace--force-f./pod.json#添加标签kubectllabelpodsmy-podnew-label=awesome#添加注解kubectlannotatepodsmy-podicon-url=http://goo.gl/XXBTWqPatchresource#部分更新节点kubectlpatchnodek8s-node-1-p'{"spec":{"unschedulable":true}}'#更新容器镜像;spec.containers[*].name是必需的,因为这个是合并关键字kubectlpatchpodvalid-pod-p\'{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"newimage"}]}}'Scaleresource#将名为'foo'的副本集扩展到3kubectlscale--replicas=3rs/foo#将“foo.yaml”中指定的资源扩展到3kubectlscale--replicas=3-ffoo.yaml#如果名为mysql的deployment当前大小为2,则将mysql扩展到3kubectlscale--current-replicas=2--replicas=3deployment/mysql#Scalemultiplereplicationcontrollerkubectlscale--replicas=5rc/foorc/barrc/baz删除资源对象根据xxx.yaml文件删除Pod对象#yaml文件名与你创建的文件相同kubectldelete-fxxx.yaml删除pod对象kubectl包括某个标签deletepods-lname=删除服务对象包括标签kubectldeleteservices-lname=删除pod和服务对象包括标签kubectldeletepods,services-lname=删除所有pod/services对象kubectldeletepods--allkubectldeleteservice--allkubectldeletedeployment--alleditresourcefileeditanyAPIresourceineditor#editservicekubectleditsvc/nameddocker-registrydocker-registry直接在宿主机上执行命令,不进入容器直接执行命令执行pod的date命令。默认情况下,pod的第一个容器用于执行命令。kubectlexecmypod--datekubectlexecmypod--namespace=test--date这一行指定了pod中的一个容器执行date命令kubectlexecmypod-cruby??-container--date进入一个容器kubectlexecmypod-cruby-container-it--bash查看容器日志,直接查看日志#不实时刷新kubectl日志mypodkubectllogsmypod--namespace=test实时查看日志刷新kubectllogs-fmypod-cruby??-containerCommon命令总结!作者:Escape链接:https//www.escapelife.site/posts/2b31e1a2.html