k8s教程(基础篇)-kubectl详解(下)

简介: k8s教程(基础篇)-kubectl详解(下)

2.5 kubectl 格式化输出

kubectl 命令可以对结果进行多种格式化显示,输出的格式通过-o 参数指定:

kubectl  [command] [TYPE] [NAME] -o= <output format>

根据不同子命令的输出结果,可选的输出格式如图所示:

常用的输出格式示例如下:

① 显示 Pod 的更多信息,例如 Node IP 等:

kubectl get pod  <pod-name> -o wide

② 以 YAML 格式显示 Pod 的详细信息:

kubectl get pod  <pod-name> -o yaml

③ 以自定义列名显示 Pod 的信息:

kubectl get pod  <pod-name>-o
custom-columns=NAME:metadata. Name, RSRC: metadata. Resourceversion

④ 基于自定义列名配置文件进行输出:

kubectl get pods  <pod-name>-o=custom-columns-file=template.txt

template.. txt文件的内容如下:

NAME          RSRC
metadata.Name metadata.Resourceversion

输出结果为如下:

NAME     RSRC
pod-name 52305

⑤ 关闭服务端列名。在默认情况下Kubernetes服务端会将资源对象的某些特定信息显示为列,这可以通过设置-server-print=false 参数进行关闭,例如:

kubectl get pods  <pod-name> --server-print=false

输出结果:

NAME      AGE
pod-name  1m

⑥ 将输出结果按某个字段排序。可以通过--sort-by 参数以 jsonpath 表达式进行指定:

kubectl  [command] [TYPE]  [NAME] --sort-by= <isonpath exp

例如,按照资源对象的名称进行排序:

kubectl get pods --sort-by=.metadata. Name

03 kubectl 操作例子

3.1 kubectl apply

kubectl apply:以文件或 stdin 部署或更新一个或多个资源

基于 example-service.yaml 中的定义创建一个 Service 资源:

kubectl apply -f example-service.yaml

使用 example--controller.yaml 中的定义创建一个 Replication Controller资源:

kubectl apply -f example-controller.yaml

使用<directory>目录下所有yaml、yml 和json 文件中的定义进行创建:

kubectl apply -f  <directory>

3.2 kubectl get

kubectl get:列出一个或多个资源对象的信息

以文本格式列出所有 Pod:

kubectl get pods

以文本格式列出所有 Pod,包含附加信息(如 Node IP):

kubectl get pods -o wide

以文本格式列出指定名称的 RC:

kubectl get replicationcontroller  <rc-name>

以文本格式列出所有 RC Service:

kubectl get rc, services

以文本格式列出所有 Daemonset,包括未初始化的 Daemonset:

kubectl get ds --include-uninitialized

列出在节点 server01 上运行的所有 Pod:

kubectl get pods --field-selector=spec.nodeName=server01

3.3 kubectl describe

kubectl describe:显示一个或多个资源的详细信息)

显示名称为<node-name>的节点的详细信息:

kubectl describe nodes  <node-name>

显示名称为<pod-name>的 Pod 的详细信息:

kubectl describe pods/ <pod-name>

显示名称为<rc-name>RC控制器管理的所有Pod的详细信息:

kubectl describe pods  <rc-name>

描述所有 Pod 的详细信息:

kubectl describe pods

kubectl get kubectl describe 命令说明如下:

  • kubectl get命令 :常用于查看同一资源类型的一个或多个资源对象,可以使用-o-output 参数自定义输出格式,还可以通过-w -watch 参数开启对资源对象更新的监控。
  • kubectl describe 命令:更侧重于描述指定资源的各方面详细信息,通过对 API Server 的多个 API 调用来构建结果视图。例如通过 kubectl describe node 命令不仅会返回节点信息,还会返回在其上运行的 Pod 的摘要、节点事件等信息。

3.4 kubectl delete

kubectl delete:该命令可以使用文件、stdin 的输入删除指定的资源对象,还可以通过标签选择器、名称、资源选择器等条件来限定待删除的资源范围。

使用在 pod.yaml 文件中指定的类型和名称删除 Pod:

kubectl delete -f pod.yaml

删除所有带有<label-key> = <label-value>: 标签的 Pod Service:

kubectl delete pods, services -1  <label-key> = <label-value>

删除所有 Pod,包括未初始化的 Pod

kubectl delete pods -all

3.5 kubectl exec

kubectl exec:在 Pod 的容器中运行命令

在名称为<pod-name>Pod 的第 1 个容器中运行 date 命令并打印输出结果:

kubectl exec  <pod-name> -- date

在指定的容器中运行 date 命令并打印输出结果:

kubectl exec  <pod-name> -c  <container-name> -- date

Pod的第1 个容器中运行bin/bash 命令进入交互式 TTY 终端界面:

kubectl exec -ti  <pod-name> /bin/bash

3.6 kubectl logs

kubectl logs:打印 Pod 中容器的日志

kubectl logs  <pod-name>

显示Pod 中名称为<container-name>的容器输出到 stdout 的日志:

kubectl logs  <pod-name> -c  <container-name>

持续监控显示 pod 中的第 1 个容器输出到 stdout 的日志,类似于 tail -f 命令的功能:

kubectl logs -f  <pod-name>

3.7 kubectl edit

kubectl edit 命令:编辑运行中的资源对象,例如使用下面的命令编辑运行中的一个 Deployment

kubectl edit deploy nginx

在命令运行之后,会通过 YAML 格式展示该对象的文本格式定义,用户可以对代码进行编辑和保存,从而完成对在线资源的直接修改。

3.8 kubectl port-forward

kubectl port-forward 命令:将 Pod 的端口号映射到宿主机

Pod 的 80 端口映射到宿主机的 8888 端口,客户端即可通过 http: //<NodeIP>:8888 访问容器服务了:

kubectl port-forward --address 0.0.0.0\
pod/nginx-6ddbbc47fb-sfdcv 8888:80

3.9 kubectl cp

kubectl cp命令: 在容器和 Node之间复制文件

Pod(默认为第1个容器)中的/etc/fstab文件复制到宿主机的/tmp 目录下:

kubectl cp nginx-6ddbbc47fb-sfdcv:/etc/fstab /tmp

3.10 kubectl label

kubectl label命令: 设置资源对象的标签

名为“default“”的命名空间设置“testing-=true”标签:

kubectl label namespaces default testing=true

3.11 创建和使用命令行插件

为了扩展 kubectl 的功能,Kubernetes 1.8 版本开始引入插件机制,在 1.14 版本时达到稳定版。

用户自定义插件的可执行文件名需要以 kubectl-”开头,复制到$PATH中的某 个目录(如/usr/local/bin)下,然后就可以通过kubectl<plugin-name>运行自定义插件了。

例如,通过 Shell 脚本实现一个名为 hello 的插件,其功能为在屏幕上输出字符串“hello world”。创建名为 kubectl-helloShell 脚本文件,内容如下:

#!/bin/sh
echo "hello world"

为该脚本添加可执行权限:

chmod a+x./kubectl-hello

复制kubectl-helo文件到/usr/local/bin/目录下,就完成了安装插件的工作:

cp ./kubectl-hello /usr/local/bin

然后在 kubectl 命令后带上插件名称就能使用该插件了:

kubectl hello
hello world

卸载插件也很简单,只需要删除插件文件即可:

rm /usr/local/bin/kubectl-hello

通过插件机制,可以将某些复杂的kubectl命令简化为运行插件的方式。例如想创建一个命令来查看当前上下文环境(context)中的用户名,则可以通过 kubectl config view 命令进行查看。为此,可以创建一个名为 kubectl--whoami'Shell 脚本,内容如下:

#!/bin/bash
kubectl config view --template=' ({range contexts }) {if eq name "'$ (kubectl config current-context) '"}}Current user: {printf "%s\n"context.user }}{end)) { end }

为该脚本添加可执行权限,并复制到/usr/local/bin/目录下完成插件的安装:

chmod +x ./kubectl-whoami
cp ./kubectl-whoami /usr/local/bin

运行kubectl whoami命令,就能通过插件功能查看上下文环境中的用户名了:

kubectl whoami
Current user: plugins-user

另外,使用kubectl plugin list命令可以查看当前系统中已安装的插件列表:

kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
/usr/local/bin/kubectl-bar
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1287 17
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
Kubernetes 监控 API
在K8S中,什么是 Minikube、Kubectl、Kubelet?
在K8S中,什么是 Minikube、Kubectl、Kubelet?
|
Kubernetes 应用服务中间件 nginx
【赵渝强老师】Kubernetes命令行管理工具:kubectl
kubectl 是 Kubernetes 的命令行工具,用于管理和操作 Kubernetes 集群。本文通过视频讲解和具体示例,介绍了 kubectl 的常用命令,包括显示 Pod 信息、创建 Deployment 和 Service、更新和回滚 Deployment、以及删除资源等操作。
376 0
|
Kubernetes 应用服务中间件 nginx
深入了解 `kubectl`:Kubernetes 命令行工具
深入了解 `kubectl`:Kubernetes 命令行工具
618 1
|
Kubernetes Ubuntu jenkins
超详细实操教程!在现有K8S集群上安装JenkinsX,极速提升CI/CD体验!
超详细实操教程!在现有K8S集群上安装JenkinsX,极速提升CI/CD体验!
|
Kubernetes API 容器
在k8S中,使用kubectl logs无法查看日志是什么原因,如何让其能够查看?
在k8S中,使用kubectl logs无法查看日志是什么原因,如何让其能够查看?
|
Kubernetes 监控 API
在K8S中,Minikube、Kubectl、Kubelet是什么?
在K8S中,Minikube、Kubectl、Kubelet是什么?
|
Kubernetes 容器
Kubernetes(K8S) 安装 Metrics-Server kubectl top (metrics-server) node NotFound
Kubernetes(K8S) 安装 Metrics-Server kubectl top (metrics-server) node NotFound
273 0
|
Kubernetes 监控 Shell
掌握Kubernetes故障排除技巧:kubectl命令的基本指南
以上是使用 `kubectl` 进行故障排除的一些基本指南。熟悉这些命令能够帮助您快速定位和解决在Kubernetes集群中遇到的问题。在实际使用中,您可能还需要结合其他工具和资源,如官方文档、社区论坛以及第三方监控和日志服务来进行更深入的故障诊断和排除。
489 0

推荐镜像

更多