kubectl主要用于与K8s API服务器通讯,以在K8s中建立、更新和删除工做负载。很多IT人员经过kubectl与K8s交互。本文将介绍如何安装kubectl、与K8s环境进行通讯以及一些经常使用命令,给您提供管理K8s的良好起点。node
对很多IT人员来讲,天天与Kubernetes交互的机制通常是经过kubectl——一种命令行工具。kubectl主要用于与Kubernetes API服务器通讯,以在Kubernetes中建立、更新和删除工做负载。本教程的目的是概述您可使用的一些经常使用命令,并提供管理Kubernetes的良好起点。nginx
咱们将介绍如何在您的计算机上安装kubectl,如何与您的Kubernetes环境进行通讯并执行一些常见操做。大多数常见的kubectl命令会提供某特定的操做,如建立、删除等。此方法一般须要解释描述Kubernetes中的对象(如POD、服务、资源等)的文件(YAML或JSON)。这些文件一般被用做模板以及环境的持续文档,并有助于保留Kubernetes对声明性配置的关注。命令行上给出的操做将传递给API服务器,而后根据须要与Kubernetes中的后端服务进行通讯。docker
咱们将介绍一些最多见的kubectl命令并提供一些示例。有关每一个命令的更多详细信息,包括全部支持的标志和子命令,请查看kubectl参考文档:后端
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands。api
安装kubectl安全
kubectl是一个独立的程序,所以不须要复杂的安装过程。它是一个须要位于操做系统PATH中的单个文件。有许多方法能够得到kubectl二进制文件,例如经过操做系统的本机包管理器或经过curl。下表中的一些示例就是如何为各类操做系统安装kubectl:服务器
注意: 随着新版本的发布,最佳版本的kubectl for Windows将随着时间的推移而发生变化。要查找当前最佳二进制文件,请点击此连接查找最新的稳定版本,并根据须要调整上述URL: https://storage.googleapis.com/kubernetes-release/release/stable.txtcurl
环境中使用的kubectl版本,须要与Kubernetes服务器的版本保持一致。您能够经过键入如下内容来查看正在使用的kubectl客户端的版本:工具
kubectl在各方面都会保持与一个版本的兼容性。其中客户端版本会比服务器版本领先一步。这为服务器版本:v1.13.4中提供的功能和命令提供了支持。若是客户端版本不是服务器版本以后的各版本中的一个,那么在尝试访问相应服务器版本中可用的功能时,可能会遇到错误或不兼容。google
kubectl语法
kubectl 的语法使用以下:
Command(命令):指你想要执行的操做(建立、删除等等)
Type(类别):指你正在执行命令的资源类型(Pod、Service等)
Name(名称):对象的名称(需区分大小写)。若是未指定名称,则能够获取有关命令匹配的全部资源的信息(例如Pod)
Flags(标志):这个能够按需选择(非必须),不过它在查找特定资源时很是有用。例如,--namespacespace可让你指定要在哪一个特定的命名空间中执行操做。
kubeconfig
kubectl使用配置文件来访问Kubernetes集群。默认的kubectl配置文件位于〜/ .kube / config,称为kubeconfig文件。
kubeconfig文件组织有关集群、用户、命名空间和身份验证机制的信息。kubectl命令使用这些文件来查找它在选择集群并与之通讯时所须要的信息。
加载顺序遵循如下规则:
若是设置了--kubeconfig标志,则仅加载给定文件。该标志只能设置一次,不会发生合并。
若是设置了$ KUBECONFIG环境变量,则根据系统的正常路径分隔规则,将其解析为文件系统路径列表。
不然,若是上述两项都未设置,则使用${HOME}/.kube/config 文件,不进行任何合并。
若是您看到相似于如下内容的消息,则意味着kubectl配置不正确或没法链接到Kubernetes集群
The connection to the server <server-name: port> was refused - did you specify the right host or port?
你能够经过多种方式建立配置文件,具体取决于你使用何种Kubernetes发行版。如下列出的是不一样的K8S发行版及其位置:
RKE
使用RKE建立Kubernetes集群时,RKE会在本地目录中建立一个kube_config_rancher-cluster.yml文件,该文件包含使用kubectl等工具链接到新集群所需的凭据。
您能够将此文件复制到$ HOME / .kube / config,或者,若是您正在使用多个Kubernetes集群,请将KUBECONFIG环境变量设置为kube_config_rancher-cluster.yml的路径,以下所示:
Rancher统一管理的Kubernetes集群
在Rancher中,您能够经过Web UI下载kubeconfig文件,并使用它经过kubectl链接到Kubernetes环境。
在Rancher UI中,单击要经过kubectl链接的集群。在页面的右上角,单击Kubeconfig File按钮:
单击按钮以详细查看配置文件以及放置在~/.kube/config中的方向。
将配置复制到~/.kube/config后,你无需指定--kube-config文件位置,就能够运行kubectl命令:
一些基本命令的示例
如下我将重点介绍在典型环境中会用到的许多命令。咱们将从概述集群开始,一直到探索Kubernetes环境中当前正在运行的内容的各类场景。
相信下文的内容将帮助您熟悉kubectl和典型输出的命令。
管理kubectl配置
kubectl命令包含一些不一样的命令,可用来帮助查看和管理本身的配置。这些在初始设置期间,或在你须要处理的集群集发生变化时,将很是有用。
要查看当前配置,请键入:
apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://www.<yoururl>.com/k8s/clusters/<cluster> name: gcpcluster - cluster: certificate-authority-data: DATA+OMITTED server: https://10.240.0.41:6443 name: gcpcluster-k8s-1 - cluster: certificate-authority-data: DATA+OMITTED server: https://10.240.0.42:6443 name: gcpcluster-k8s-2 - cluster: certificate-authority-data: DATA+OMITTED server: https://10.240.0.43:6443 name: gcpcluster-k8s-3 contexts: - context: cluster: gcpcluster namespace: rancher user: user-qkvpz name: gcpcluster
你将能看到的输出内容汇总展示了你所配置的集群和及上下文。cluster键包含每一个可用集群的列表,以及相关的链接和验证详细信息。contexts键将用户、集群和可选的命名空间组合在一块儿,以造成用于与集群交互的惟一标识和使用上下文。
要得到每一个可用上下文的更简洁摘要,你能够键入:
输出的内容显示了每一个已定义上下文的详细信息以及当前选定的上下文,由星号(*)表示。
要快速检查当前使用的上下文,请键入:
虽然咱们不会在本摘要中介绍它,但除此以外你还可使用kubectl set-cluster、kubectl set-credentials和kubectl set-context以及各类标志来定义集群和上下文,不过咱们在本文中就不赘述了。
要更改要链接的上下文,请使用use-context命令:
检查集群组件的状态
为集群选择好适当的上下文后,可使用get componentstatuses(缩写为get cs)命令检查核心主组件的状态:
输出的内容将显示调度程序、控制器管理器和etcd节点的状态以及从每一个服务收集的最新消息和错误。若是你的集群运行不正常,这是一个很好的、进行第一次诊断检查的机会。
可使用cluster-info命令收集其余链接和服务信息:
Kubernetes master is running at https://www.<yoururl>.com/k8s/clusters/<cluster> KubeDNS is running at https://www.<yoururl>.com/k8s/clusters/<cluster>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
这里,输出显示了咱们的Kubernetes master的端点以及KubeDNS服务端点的端点。
要查看有关做为集群成员的每一个单个节点的信息,需使用get nodes命令:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-1 Ready controlplane,etcd,worker 34d v1.13.5 <IP> <none> Ubuntu 18.10 4.18.0-1011-gcp docker://18.9.5 k8s-2 Ready controlplane,etcd,worker 34d v1.13.5 <IP> <none> Ubuntu 18.10 4.18.0-1011-gcp docker://18.9.5 k8s-3 Ready controlplane,etcd,worker 34d v1.13.5 <IP> <none> Ubuntu 18.10 4.18.0-1011-gcp docker://18.9.5
这列出了在每一个节点上运行的核心软件的状态、角色、链接信息和版本号。若是须要在集群节点上执行维护或登陆以调试问题,此命令能够帮助您提供所需的信息。
查看资源和事件信息
要概述集群中可用的命名空间,请使用get namespaces命令:
这显示了当前集群中定义的命名空间分区。
要跨全部命名空间概述集群上运行的全部资源,使用如下命令:
输出的内容会显示部署了每一个资源的命名空间信息,以及加上了资源类型前缀的资源名称(例如上面显示的示例中的pod)。以后,有关每一个资源的就绪和运行状态的信息将有助于肯定进程是否运行正常。
要查看与资源关联的事件,请使用get events命令:
NAMESPACE LAST SEEN TYPE REASON KIND MESSAGE cattle-system 9m31s Normal BackOff Pod Back-off pulling image "miguelgt/k8s-demo:v2" cattle-system 24m Warning Failed Pod Error: ImagePullBackOff cattle-system 14m Normal BackOff Pod Back-off pulling image "miguelgt/k8s-demo:v2" cattle-system 9m30s Warning Failed Pod Error: ImagePullBackOff
输出内容将列出资源记录的最新事件,包括事件消息及其触发的缘由。
示 例
为了更具体地演示您在使用kubectl时可能参与的工做流程,咱们将在这一部分介绍将容器部署到集群的快速方案,并将其部署到非默认命名空间中。
默认状况下,若是在未指定命名空间的状况下部署集群,kubectl会将资源放在名为default的命名空间中。若是要部署到其余名称空间,则须要指定所需的替代项。
虽然咱们能够为建立命令提供命名空间,但若是咱们要使用命名空间来处理多个命令,更改上下文的方法会更为容易。更改与上下文关联的命名空间将自动将命名空间规范应用于任何其余命令,直到更改上下文。
要更改当前上下文的命名空间,请使用带有--currentand --namespace标志的set-context命令:
这将改变当前上下文,以自动将将来的操做应用于rancher命名空间。
接下来,咱们能够建立一个名为nginx的部署,它基于默认的nginx容器镜像运行容器。由于咱们改变了咱们的上下文,因此它会在rancher命名空间中运行:
您能够经过列出当前部署的pod来检查部署是否成功:
在这里,咱们能够看到Nginx部署正常运行。READY那一列显示容器已就绪,状态是“正在运行”,没有出现故障。
虽然咱们已经验证了pod正在运行,但咱们尚未获得关于它部署到了哪一个命名空间的信息。可是,咱们能够经过添加--all-namespaces标志来稍微改变输出:
这将显示在每一个命名空间中运行的pod,并另外添加一个NAMESPACE列,列出每一个资源部署到了哪一个命名空间。在这里,咱们看到Nginx pod已正确部署到咱们的rancher命名空间而不是一般的default命名空间。
这代表咱们的上下文操做和咱们的部署都按预期工做了。
你还能够经过键入如下内容来清理已部署的资源:
其余参考信息
虽然本章中深刻讨论这些内容可能超出了本文原意的范围,但咱们仍是为你们列出了一些很是有用的命令。
Pod
资源删除
服务
事件&指标
命名空间&安全
中级命令
其余资源
kubectl的官方概述:
https://kubernetes.io/docs/reference/kubectl/overview/
kubectl的官方命令文档:
https://kubernetes.io/docs/reference/kubectl/kubectl/
kubectl的官方备忘单:
https://kubernetes.io/docs/reference/kubectl/cheatsheet/
Rancher kubeconfig文档:
https://rancher.com/docs/rancher/v2.x/en/cluster-admin/kubeconfig/
有关使用kubectl访问集群的Rancher文档:
https://rancher.com/docs/rancher/v2.x/en/cluster-admin/kubectl/
kubectl配置命令:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#config
使用kubeconfig文件组织集群:
https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/