【云原生 | 从零开始学Kubernetes】二十五、kubectl深入理解

简介: kubectl 是操作 k8s 集群的命令行工具,安装在 k8s 的 master 节点,使用 kubectl 它会在 $HOME/.kube 目录中查找一个名为 config 的文件, 你可以通过设置 Kubeconfig 环境变量或设置特定的 kubeconfig,kubectl 也可以使用特定的 kubeconfig 文件操作 k8s 集群。

一、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.对多个资源执行操作


可以按类型、名称、一个或者多个文件指定每个资源:


1.按类型和名称指定资源


要对所有类型相同的资源进行分组,请执行以下操作:


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-deploy
NAME                                 READY   STATUS    RESTARTS   AGE
pod/tomcat-deploy-6b65dd5799-88676   1/1     Running   5          2d21h
NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tomcat-deploy   0/2     2            0           2d21h


4.kubectl –-help


可查看 kubectl 的帮助命令


二、kubectl 操作命令演示


参考:http://docs.kubernetes.org.cn/477.html


下面讲解和 kubectl 操作相关的命令和语法:


annotate


1.描述:添加或更新一个或多个资源的注释。


Annotations 由 key/value 组成,Annotations 的目的是存储辅助数据,特别是通过工具和系统扩展操作的数据,如果–overwrite 为 true,现有的 annotations 可以被覆盖,否则试图覆盖 annotations 将会报错,如果设置了–resource-version,则更新将使用此 resource version,否则将使用原有的 resource version。


2.语法:


kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags]


3.示例:


更新“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-88676
Name:         tomcat-deploy-6b65dd5799-88676
Namespace:    default
Priority:     0
Node:         k8snode1/192.168.11.136
Start Time:   Thu, 11 Aug 2022 02:17:38 -0700
Labels:       app=tomcat
              pod-template-hash=6b65dd5799
              release=canary
Annotations:  cni.projectcalico.org/podIP: 10.244.249.28/32
              cni.projectcalico.org/podIPs: 10.244.249.28/32
              description: my kubectl-pod


api-versions


1.语法:


kubectl api-versions [flags]


2.描述:列出可用的 api 版本


3.各种 apiVersion 的含义:


alpha: 内测版,包含很多错误,使用可能会有 bug,如果这个版本废弃,不会通知客户


eta: 公测版,该版本经过大量的测试已经可以被正常使用,可能某些细节会有变化,但是不会废弃这个版本


stable: 稳定版:此版本很稳定,可以放心使用,之后的版本会一直包含这个稳定版,命名方式如 v1


4.kubectl api-versions 显示的结果如下


admissionregistration.k8s.io/v1 #准入控制相关的 api


v1 # Kubernetes API 的稳定版本,包含很多核心对象:pod、service 等


apps/v1 #包含一些通用的应用层的 api 组合,如:Deployments,Statefulset,Daemonset 等


[root@k8smaster ~]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1


apply


1.语法:


kubectl apply -f FILENAME [flags]


从文件对资源的应用配置进行更改。声明式的更新配置文件。


autoscale


自动扩缩容由副本控制器管理的一组 pod。


1.语法:


kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [–min=MINPODS] --max=MAXPODS [–cpu-percent=CPU] [flags]


cluster-info


1.语法:


kubectl cluster-info [flags] 显示有关集群中的主服务器和服务的端点信息。


[root@k8smaster ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.11.129:6443
KubeDNS is running at https://192.168.11.129:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://192.168.11.129:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy


config


1.语法:


kubectl config SUBCOMMAND [flags] 修改 kubeconfig 文件


create,一般不用,用 apply 替代这个


1.语法:


kubectl create -f FILENAME [flags] 从文件或标准输入创建一个或多个资源。


delete


1.语法:


kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] 从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。


[root@k8smaster ~]# kubectl delete deployment tomcat-deploy
deployment.apps "tomcat-deploy" deleted


describe


1.语法:


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


1.语法:


kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] 使用默认编辑器编辑和更新服务器上一个或多个资源的定义,动态的更改。


exec


1.语法:


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


1.语法:


kubectl explain [–recursive=false] [flags] 获取多种资源的文档。例如 pod, node, service 等,相当于帮助命令,可以告诉我们怎

么创建资源


expose


1.语法:


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


1.语法:


kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [–watch] [–sortby=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]

列出一个或多个资源。


label


1.语法:


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=b
pod/tomcat-deploy-6b65dd5799-88676 labeled


logs


1.语法:


kubectl logs POD [-c CONTAINER] [–follow] [flags] 打印容器的日志,-c可以指定容器


[root@k8smaster ~]# kubectl logs tomcat-deploy-6b65dd5799-88676


patch


1.语法:


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


1.语法:


kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–apiprefix=prefix] [flags] 运行 Kubernetes API 服务器的代理。


replace


1.语法:kubectl replace -f FILENAM 从文件或标准输入中替换资源。


run


1.语法:


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


1.语法:


kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] 更新指定副本控制器的大小(更改副本数)。


version


1.语法:


kubectl version [–client] [flags] 显示运行在客户端和服务器上的 Kubernetes 版本


资源类型


下表列出所有受支持的资源类型及其缩写别名:


[root@k8smaster ~]# kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
limitranges                       limits       v1                                     true         LimitRange
namespaces                        ns           v1                                     false        Namespace
nodes                             no           v1                                     false        Node
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                     false        PersistentVolume
pods                              po           v1                                     true         Pod
podtemplates                                   v1                                     true         PodTemplate
replicationcontrollers            rc           v1                                     true         ReplicationController
resourcequotas                    quota        v1                                     true         ResourceQuota
secrets                                        v1                                     true         Secret
serviceaccounts                   sa           v1                                     true         ServiceAccount
services                          svc          v1                                     true         Service
mutatingwebhookconfigurations                  admissionregistration.k8s.io/v1        false        MutatingWebhookConfiguration
validatingwebhookconfigurations                admissionregistration.k8s.io/v1        false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds     apiextensions.k8s.io/v1                false        CustomResourceDefinition
apiservices                                    apiregistration.k8s.io/v1              false        APIService
controllerrevisions                            apps/v1                                true         ControllerRevision
daemonsets                        ds           apps/v1                                true         DaemonSet
deployments                       deploy       apps/v1                                true         Deployment
replicasets                       rs           apps/v1                                true         ReplicaSet
statefulsets                      sts          apps/v1                                true         StatefulSet
tokenreviews                                   authentication.k8s.io/v1               false        TokenReview
localsubjectaccessreviews                      authorization.k8s.io/v1                true         LocalSubjectAccessReview
selfsubjectaccessreviews                       authorization.k8s.io/v1                false        SelfSubjectAccessReview
selfsubjectrulesreviews                        authorization.k8s.io/v1                false        SelfSubjectRulesReview
subjectaccessreviews                           authorization.k8s.io/v1                false        SubjectAccessReview
horizontalpodautoscalers          hpa          autoscaling/v1                         true         HorizontalPodAutoscaler
cronjobs                          cj           batch/v1beta1                          true         CronJob
jobs                                           batch/v1                               true         Job
certificatesigningrequests        csr          certificates.k8s.io/v1                 false        CertificateSigningRequest
leases                                         coordination.k8s.io/v1                 true         Lease
bgpconfigurations                              crd.projectcalico.org/v1               false        BGPConfiguration
bgppeers                                       crd.projectcalico.org/v1               false        BGPPeer
blockaffinities                                crd.projectcalico.org/v1               false        BlockAffinity
clusterinformations                            crd.projectcalico.org/v1               false        ClusterInformation
felixconfigurations                            crd.projectcalico.org/v1               false        FelixConfiguration
globalnetworkpolicies                          crd.projectcalico.org/v1               false        GlobalNetworkPolicy
globalnetworksets                              crd.projectcalico.org/v1               false        GlobalNetworkSet
hostendpoints                                  crd.projectcalico.org/v1               false        HostEndpoint
ipamblocks                                     crd.projectcalico.org/v1               false        IPAMBlock
ipamconfigs                                    crd.projectcalico.org/v1               false        IPAMConfig
ipamhandles                                    crd.projectcalico.org/v1               false        IPAMHandle
ippools                                        crd.projectcalico.org/v1               false        IPPool
kubecontrollersconfigurations                  crd.projectcalico.org/v1               false        KubeControllersConfiguration
networkpolicies                                crd.projectcalico.org/v1               true         NetworkPolicy
networksets                                    crd.projectcalico.org/v1               true         NetworkSet
endpointslices                                 discovery.k8s.io/v1beta1               true         EndpointSlice
events                            ev           events.k8s.io/v1                       true         Event
ingresses                         ing          extensions/v1beta1                     true         Ingress
flowschemas                                    flowcontrol.apiserver.k8s.io/v1beta1   false        FlowSchema
prioritylevelconfigurations                    flowcontrol.apiserver.k8s.io/v1beta1   false        PriorityLevelConfiguration
ingressclasses                                 networking.k8s.io/v1                   false        IngressClass
ingresses                         ing          networking.k8s.io/v1                   true         Ingress
networkpolicies                   netpol       networking.k8s.io/v1                   true         NetworkPolicy
runtimeclasses                                 node.k8s.io/v1                         false        RuntimeClass
poddisruptionbudgets              pdb          policy/v1beta1                         true         PodDisruptionBudget
podsecuritypolicies               psp          policy/v1beta1                         false        PodSecurityPolicy
clusterrolebindings                            rbac.authorization.k8s.io/v1           false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io/v1           false        ClusterRole
rolebindings                                   rbac.authorization.k8s.io/v1           true         RoleBinding
roles                                          rbac.authorization.k8s.io/v1           true         Role
priorityclasses                   pc           scheduling.k8s.io/v1                   false        PriorityClass
csidrivers                                     storage.k8s.io/v1                      false        CSIDriver
csinodes                                       storage.k8s.io/v1                      false        CSINode
storageclasses                    sc           storage.k8s.io/v1                      false        StorageClass
volumeattachments                              storage.k8s.io/v1                      false        VolumeAttachment
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1029 17
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
428 10
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
724 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
存储 运维 Kubernetes
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(4)
阿里云数字新基建系列包括5本书,题材涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书中又一套重磅作品! 本书是阿里云容器服务产品线上实践的技术沉淀,主要包括理论篇和实践篇两部分内容。理论篇注重理论介绍,核心是Kubernetes on Cloud,即着重介绍Kubernetes和阿里云产品的结合。实践篇是疑难问题的诊断案例,希望通过案例来和读者分享Kubernetes深度问题诊断......
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(4)
|
运维 Kubernetes Cloud Native
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(3)
阿里云数字新基建系列包括5本书,题材涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书中又一套重磅作品! 本书是阿里云容器服务产品线上实践的技术沉淀,主要包括理论篇和实践篇两部分内容。理论篇注重理论介绍,核心是Kubernetes on Cloud,即着重介绍Kubernetes和阿里云产品的结合。实践篇是疑难问题的诊断案例,希望通过案例来和读者分享Kubernetes深度问题诊断......
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(3)

推荐镜像

更多
下一篇
开通oss服务