kubectl
- 一、kubectl 简介
- 1.kubectl 语法
- 2.上述语法解释说明
- 3.对多个资源执行操作
- 4.kubectl –-help
- 二、kubectl 操作命令演示
- annotate
- api-versions
- apply
- autoscale
- cluster-info
- config
- create,一般不用,用 apply 替代这个
- delete
- describe
- edit
- exec
- explain
- expose
- get
- label
- logs
- patch
- port-forward
- proxy
- replace
- run
- scale
- version
- 写在最后
一、kubectl 简介
kubectl 是操作 k8s 集群的命令行工具,安装在 k8s 的 master 节点,使用 kubectl 它会在 $HOME/.kube 目录中查找一个名为 config 的文件, 你可以通过设置 Kubeconfig 环境变量或设置特定的 kubeconfig,kubectl 也可以使用特定的 kubeconfig 文件操作 k8s 集群。
kubectl 通过与 apiserver 交互可以实现对 k8s 集群中各种资源的增删改查。接下来将会介绍 kubectl 语法,命令行的操作,并介绍常见的示例。命令的详细信息、参数和子命令可在 kubectl 参考文档中查看。
1.kubectl 语法
kubectl 语法格式如下,可在 k8s 集群的 master 节点执行:kubectl [command] [TYPE] [NAME] [flags]
2.上述语法解释说明
command:指定要对一个或多个资源执行的操作,例如 create、get、describe、delete等。
type:指定资源类型,可以是 pod、deployment、statefulset、service 等。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
NAME:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息:kubectl get pods。
flags: 指定可选的参数。例如,可以使用-o 查看 pod 在哪个机器上
注意事项说明: 从命令行指定的参数会覆盖默认值和任何相应的环境变量。
3.对多个资源执行操作
可以按类型、名称、一个或者多个文件指定每个资源:
- 按类型和名称指定资源
要对所有类型相同的资源进行分组,请执行以下操作:
TYPE1 name1 name2 name。
例子:kubectl get pod example-pod1 example-pod2
分别指定多个资源类型:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE/name。
例:kubectl get pod/example-pod1 pod/example-pod2 deployment/example-rc1
[root@k8smaster ~]# kubectl get pods/tomcat-deploy-6b65dd5799-88676 deployment/tomcat-deployNAME READY STATUS RESTARTS AGEpod/tomcat-deploy-6b65dd5799-88676 1/1 Running 5 2d21hNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/tomcat-deploy 0/2 2 0 2d21h
4.kubectl –-help
可查看 kubectl 的帮助命令
二、kubectl 操作命令演示
参考:http://docs.kubernetes.org.cn/477.html
下面讲解和 kubectl 操作相关的命令和语法:
annotate
- 描述:添加或更新一个或多个资源的注释。
Annotations 由 key/value 组成,Annotations 的目的是存储辅助数据,特别是通过工具和系统扩展操作的数据,如果–overwrite 为 true,现有的 annotations 可以被覆盖,否则试图覆盖 annotations 将会报错,如果设置了–resource-version,则更新将使用此 resource version,否则将使用原有的 resource version。
- 语法:
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags]
- 示例:
更新“kubectl-pod”这个 pod,设置 annotation “description”的 value 为 “my kubectl-pod”,如果同一个 annotation 多次设置,则只使用最后设置的 value 值。
kubectl annotate pods kubectl-pod description=‘my kubectl-pod’
更新“kubectl-pod”这个 pod,设置 annotation “description”的 value 为 “my tomcat”,覆盖现有的值
kubectl annotate –overwrite pods kubectl-pod description=‘my tomcat’
[root@k8smaster ~]# kubectl annotate pods tomcat-deploy-6b65dd5799-88676 description='my kubectl-pod'pod/tomcat-deploy-6b65dd5799-88676 annotated[root@k8smaster ~]# kubectl describe pods tomcat-deploy-6b65dd5799-88676Name: tomcat-deploy-6b65dd5799-88676Namespace: defaultPriority: 0Node: k8snode1/192.168.11.136Start Time: Thu, 11 Aug 2022 02:17:38 -0700Labels: app=tomcat pod-template-hash=6b65dd5799 release=canaryAnnotations: cni.projectcalico.org/podIP: 10.244.249.28/32 cni.projectcalico.org/podIPs: 10.244.249.28/32 description: my kubectl-pod
api-versions
- 语法:
kubectl api-versions [flags]
描述:列出可用的 api 版本
各种 apiVersion 的含义:
alpha: 内测版,包含很多错误,使用可能会有 bug,如果这个版本废弃,不会通知客户
eta: 公测版,该版本经过大量的测试已经可以被正常使用,可能某些细节会有变化,但是不会废弃这个版本
stable: 稳定版:此版本很稳定,可以放心使用,之后的版本会一直包含这个稳定版,命名方式如 v1
- kubectl api-versions 显示的结果如下
admissionregistration.k8s.io/v1 #准入控制相关的 api
v1 # Kubernetes API 的稳定版本,包含很多核心对象:pod、service 等
apps/v1 #包含一些通用的应用层的 api 组合,如:Deployments,Statefulset,Daemonset 等
[root@k8smaster ~]# kubectl api-versionsadmissionregistration.k8s.io/v1admissionregistration.k8s.io/v1beta1apiextensions.k8s.io/v1apiextensions.k8s.io/v1beta1
apply
- 语法:
kubectl apply -f FILENAME [flags]
从文件对资源的应用配置进行更改。声明式的更新配置文件。
autoscale
自动扩缩容由副本控制器管理的一组 pod。
- 语法:
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags]
cluster-info
- 语法:
kubectl cluster-info [flags] 显示有关集群中的主服务器和服务的端点信息。
[root@k8smaster ~]# kubectl cluster-infoKubernetes control plane is running at https://192.168.11.129:6443KubeDNS is running at https://192.168.11.129:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyMetrics-server is running at https://192.168.11.129:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
config
- 语法:
kubectl config SUBCOMMAND [flags] 修改 kubeconfig 文件
create,一般不用,用 apply 替代这个
- 语法:
kubectl create -f FILENAME [flags] 从文件或标准输入创建一个或多个资源。
delete
- 语法:
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | –all]) [flags] 从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。
[root@k8smaster ~]# kubectl delete deployment tomcat-deploydeployment.apps "tomcat-deploy" deleted
describe
- 语法:
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] 显示一个或多个资源的详细状态。
[root@k8smaster ~]# kubectl describe pods tomcat-deploy-6b65dd5799-88676[root@k8smaster ~]# kubectl describe pod/tomcat-deploy-6b65dd5799-88676
edit
- 语法:
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] 使用默认编辑器编辑和更新服务器上一个或多个资源的定义,动态的更改。
exec
- 语法:
kubectl exec POD-name [-c CONTAINER-name] [-i] [-t] [flags] [– COMMAND [args…]] 对 pod 中的容器执行命令。
下面的命令就是登录到 pod 中的容器的命令,-c是容器的名字,如果只有一个不用写也没事。
kubectl exec calico-node-cblk2 -n kube-system -i -t – /bin/sh
explain
- 语法:
kubectl explain [–recursive=false] [flags] 获取多种资源的文档。例如 pod, node, service 等,相当于帮助命令,可以告诉我们怎
么创建资源
expose
- 语法:
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [–port=port] [–protocol=TCP|UDP] [–target-port=number-or-name] [–name=name] [–externalip=external-ip-of-service] [–type=type] [flags] 将副本控制器、服务或 pod 作为新的 Kubernetes 服务进行暴露。
get
- 语法:
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [–watch] [–sortby=FIELD] [[-o | –output]=OUTPUT_FORMAT] [flags]
列出一个或多个资源。
label
- 语法:
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 添加或更新一个或多个资源的标签。
[root@k8smaster ~]# kubectl label pods tomcat-deploy-6b65dd5799-88676 a=bpod/tomcat-deploy-6b65dd5799-88676 labeled
logs
- 语法:
kubectl logs POD [-c CONTAINER] [–follow] [flags] 打印容器的日志,-c可以指定容器
[root@k8smaster ~]# kubectl logs tomcat-deploy-6b65dd5799-88676
patch
- 语法:
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) –patch PATCH [flags] 更新资源的一个或多个字段
port-forward
1)语法:
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] 将一个或多个本地端口转发到 Pod。
proxy
- 语法:
kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–apiprefix=prefix] [flags] 运行 Kubernetes API 服务器的代理。
replace
- 语法:kubectl replace -f FILENAM 从文件或标准输入中替换资源。
run
- 语法:
kubectl run NAME –image=image [–env=“key=value”] [–port=port] [–dryrun=server | client | none] [–overrides=inline-json] [flags] 在集群上运行指定的镜像
kubectl run nginx –image=nginx
可以创建一个 nginx 应用,实际创建 pod 应用都是通过编写资源清单文件进行创建
scale
- 语法:
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] 更新指定副本控制器的大小(更改副本数)。
version
- 语法:
kubectl version [–client] [flags] 显示运行在客户端和服务器上的 Kubernetes 版本
资源类型
下表列出所有受支持的资源类型及其缩写别名:
[root@k8smaster ~]# kubectl api-resourcesNAME SHORTNAMES APIVERSION NAMESPACED KINDbindings v1 true Bindingcomponentstatuses cs v1 false ComponentStatusconfigmaps cm v1 true ConfigMapendpoints ep v1 true Endpointsevents ev v1 true Eventlimitranges limits v1 true LimitRangenamespaces ns v1 false Namespacenodes no v1 false Nodepersistentvolumeclaims pvc v1 true PersistentVolumeClaimpersistentvolumes pv v1 false PersistentVolumepods po v1 true Podpodtemplates v1 true PodTemplatereplicationcontrollers rc v1 true ReplicationControllerresourcequotas quota v1 true ResourceQuotasecrets v1 true Secretserviceaccounts sa v1 true ServiceAccountservices svc v1 true Servicemutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfigurationvalidatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfigurationcustomresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinitionapiservices apiregistration.k8s.io/v1 false APIServicecontrollerrevisions apps/v1 true ControllerRevisiondaemonsets ds apps/v1 true DaemonSetdeployments deploy apps/v1 true Deploymentreplicasets rs apps/v1 true ReplicaSetstatefulsets sts apps/v1 true StatefulSettokenreviews authentication.k8s.io/v1 false TokenReviewlocalsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReviewselfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReviewselfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReviewsubjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReviewhorizontalpodautoscalers hpa autoscaling/v1 true HorizontalPodAutoscalercronjobs cj batch/v1beta1 true CronJobjobs batch/v1 true Jobcertificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequestleases coordination.k8s.io/v1 true Leasebgpconfigurations crd.projectcalico.org/v1 false BGPConfigurationbgppeers crd.projectcalico.org/v1 false BGPPeerblockaffinities crd.projectcalico.org/v1 false BlockAffinityclusterinformations crd.projectcalico.org/v1 false ClusterInformationfelixconfigurations crd.projectcalico.org/v1 false FelixConfigurationglobalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicyglobalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSethostendpoints crd.projectcalico.org/v1 false HostEndpointipamblocks crd.projectcalico.org/v1 false IPAMBlockipamconfigs crd.projectcalico.org/v1 false IPAMConfigipamhandles crd.projectcalico.org/v1 false IPAMHandleippools crd.projectcalico.org/v1 false IPPoolkubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfigurationnetworkpolicies crd.projectcalico.org/v1 true NetworkPolicynetworksets crd.projectcalico.org/v1 true NetworkSetendpointslices discovery.k8s.io/v1beta1 true EndpointSliceevents ev events.k8s.io/v1 true Eventingresses ing extensions/v1beta1 true Ingressflowschemas flowcontrol.apiserver.k8s.io/v1beta1 false FlowSchemaprioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta1 false PriorityLevelConfigurationingressclasses networking.k8s.io/v1 false IngressClassingresses ing networking.k8s.io/v1 true Ingressnetworkpolicies netpol networking.k8s.io/v1 true NetworkPolicyruntimeclasses node.k8s.io/v1 false RuntimeClasspoddisruptionbudgets pdb policy/v1beta1 true PodDisruptionBudgetpodsecuritypolicies psp policy/v1beta1 false PodSecurityPolicyclusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBindingclusterroles rbac.authorization.k8s.io/v1 false ClusterRolerolebindings rbac.authorization.k8s.io/v1 true RoleBindingroles rbac.authorization.k8s.io/v1 true Rolepriorityclasses pc scheduling.k8s.io/v1 false PriorityClasscsidrivers storage.k8s.io/v1 false CSIDrivercsinodes storage.k8s.io/v1 false CSINodestorageclasses sc storage.k8s.io/v1 false StorageClassvolumeattachments storage.k8s.io/v1 false VolumeAttachment
写在最后
创作不易,如果觉得内容对你有帮助,麻烦给个三连关注支持一下我!如果有错误,请在评论区指出,我会及时更改!
目前正在更新的系列:从零开始学k8s
感谢各位的观看,文章掺杂个人理解,如有错误请联系我指出~