【Kubernetes】如何使用 kubectl 操作 cluster、node、namespace、pod

news2025/1/18 10:41:06

如何使用 kubectl 操作 cluster、node、namespace、pod

在这里插入图片描述

在列出、描述、修改或删除其他命名空间中的对象时,需要给 kubectl 命令传递 --namespace(或 -n)选项。如果不指定命名空间,kubectl 将在当前上下文中配置的默认命名空间中执行操作。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config 命令进行更改。

要想快速切换到不同的命名空间,可以通过以下命令设置别名:

alias kcd='kubectl config set-context $(kubectl config current-context) --namespace

然后,可以使用 kcd some-namespace 在命名空间之间进行切换。

kubectl 中的双横杠 -- 代表着 kubectl 命令项的结束,在两个横杠之后的内容是指在 pod 内部里需要执行的命令,如果不使用双横杠则可能会导致结果异常和歧义错误。如果需要执行的命令并没有以横杠开始的参数,则横杠不是必需的。

展示 k8s 集群信息

kubectl cluster-info

列出所有集群节点

kubectl get nodes

查看节点详细信息

kubectl describe node {nodeName}

使用 alias k = kubectl 创建命令行别名,并添加到 ~/.bashrc 中永久保存。

集群中部署应用

kubectl run {applicationName} --image=fanqisoft/coreqi --port=8080 --generator=run/v1 replicationcontroller "{applicationName}" created
  • --image:指定要运行的容器镜像。
  • --port:告诉 Kubernetes 应用监听的端口。
  • --generator:通常不会使用到它,它让 Kubernetes 创建一个 ReplicationController 而不是 Deployment

列出所有 pod

kubectl get pods

列出所有 pod 以及运行 pod 的节点信息

kubectl get pods -o wide

列出所有 pod 并展示 pod 所携带的标签

kubectl get po --show-labels

✅ 如果只是对某些标签感兴趣,可以使用 -L 选项指定它们并将它们分别显示在自己的列中,而不是列出所有标签。

kubectl get po -L creation_method,env

列出指定命名空间下的 pod (如未指定则默认为 default 命名空间)

kubectl get po --namespace {namespaceName}
# -n 为 --namespace 的简写形式
kubectl get po -n {namespaceName}
  • READY:显示 pod 的就绪情况

查看 pod 的详细信息

kubectl describe pod {podName}

创建一个服务对象。每个 pod 都有自己的 IP 地址,然而这个 IP 地址在集群内部进行访问的,要让 pod 能够从外部访问,需要通过服务对象公开它,要创建一个特殊的 LoadBalancer 类型的服务。因为如果你创建一个常规服务(一个 ClusterIP 服务),比如 pod,它也只能从集群内部访问,通过创建 LoadBalancer 类型的服务,将创建一个外部的负载均衡,可以通过负载均衡的公共 IP 访问 pod

kubectl expose rc {applicationName} --type=LoadBalancer --name {serviceName} service "{serviceName}" exposed
  • rcReplicationController 的缩写。大多数资源类型都有这样的缩写,省去输入全名的繁琐,pods 缩写 poservice 缩写 svc 等等。

列出集群中所有服务

kubectl get services

使用 minikube 的时候,可以通过 minikube service {serviceName} 获取可以访问服务的 IP 和端口。

ReplicationControllerReplicationController 用于复制 pod(即创建 pod 的多个副本)并让它们保持运行,如果没有指定要运行多少个副本,则默认一个副本在运行,如果你的 pod 因为任何原因消失了,那么 ReplicationController 将会创建一个新的副本来替代它。

✅ 列出所有的 ReplicationController

kubectl get replicationcontrollers
kubectl get rc
  • DESIRED:显示希望 ReplicationController 保持的 pod 副本数。
  • CURRENT:显示当前运行的 pod 副本数。

增加副本数,也可以通过 kubectl edit rc {rcName} 命令编辑 replicationcontroller 描述文件的 spec.replicas 字段来变更副本数。

kubectl scale rc[replicationcontroller] {podName} --replicas=3

查看 ReplicationController 的附加信息

kubectl describe rc {rcName}

访问 minikube dashboard

minikube dashboard

✅ 从已有的 pod 获取 YAMLJSON 描述文件

kubectl get po {podName} -o yaml
kubectl get po {podName} -o json

✅ 使用 kubectl 获取描述文件帮助

kubectl explain pods
kubectl explain pod.spec

✅ 使用 YAML 描述文件创建 pod

kubectl create -f kubia-manual.yaml
  • kubectl create -f 命令用于从 YAMLJSON 文件创建任何资源(不只是 pod

✅ 使用 YAML 描述文件创建 pod 并指定命名空间

kubectl create -f kubia-manual.yaml -n custom-namespace

✅ 查看 pod 日志(更准确的说是查看容器的日志)

kubectl logs {podName}
  • 每天或者每次日志文件达到 10M 大小时,容器日志都会自动轮替。
  • kubectl logs 命令仅显示最后一次轮替后的日志条目

✅ 如果我们的 pod 包含多个容器,在运行 kubectl logs 命令时则必须通过包含 -c {containerName} 选项来显式指定容器名称。

kubectl logs {podName} -c {containerName}
  • 我们只能获取存在 pod 的日志,当 pod 被删除后,它的日志也会被删除。
  • 如果我们希望在 pod 删除之后仍然可以获取其日志,则需要设置中心化的、集群范围的日志系统,将所有日志存储到中心存储中。

kubectl logs 显示的是当前容器的日志,那么当前容器上一次奔溃的日志是无法通过该命令显示出来的,通过添加 --previous 选项来完成。必要时通过 kubectl describe po {podName} 查看上次奔溃原因。

kubectl logs {podName} --previous

✅ 端口转发(用于主机和 pod 之间通信),也可以使用暴露服务进行通信

kubectl port-forward kubia-manual 8888:8080

✅ 为已创建的 pod 添加标签

kubectl label po {podName} labelKey=labelValue

✅ 为已创建的 pod 修改标签(--overwrite 参数是必要的,否则 kubectl 将只打印出警告并不会更改标签,这样是为了防止我们在想要添加新标签时无意中更改了现有标签的值)

kubectl label po {podName} labelKey=labelValue --overwrite

✅ 使用标签选择器列出指定标签的 pod

# 列出指定标签值的 pod
kubectl get po -l labelKey=labelValue
# 列出在指定标签值范围内的 pod
kubectl get po -l labelKey in (labelValue1,labelValue2)
# 列出不在指定标签值范围内的 pod
kubectl get po -l labelKey notin (labelValue1,labelValue2)
# 列出不等于指定标签值的 pod
kubectl get po -l labelKey!=labelValue
# 列出包含指定标签的 pod,无论其值如何
kubectl get po -l labelKey
# 列出不包含指定标签的 pod(确保使用单引号来包含!labelKey,这样 bash shell 才不会解释感叹号,感叹号在 bash 中有特殊含义,表示事件指示器)
kubectl get po -l '!labelKey'
# 使用多条件
kubectl get po -l labelKey1=labelValue1,labelKey2=labelValue2

✅ 向节点添加标签

kubectl label node {nodeName} labelKey=labelValue

✅ 获取指定标签值的节点

kubectl get nodes -l labelKey=labelValue

✅ 向 pod 中添加注解

kubectl annotate pod {podName} annotateKey="annotateValue"

✅ 查看注解使用 describe 命令即可

kubectl describe pod {podName}

✅ 列出所有的命名空间

kubectl get ns

✅ 创建命名空间

# 创建一个 custom-namespace.yaml
apiVersion: v1   # 指定当前描述文件遵循 v1 版本的 KubernetesAPI
kind: Namespace  # 表示我们正在定义一个命名空间
metadata:
  name: custom-namespace  # 定义命名空间的名称

# 使用 kubectl 执行命令
kubectl create -f custom-namespace.yaml

# 还可以直接使用 kubectl 命令创建命名空间(命名空间名称不允许包含点号)
kubectl create namespace custom-namespace

✅ 删除命名空间(pod 将会伴随命名空间的删除而自动删除)

kubectl delete ns {namespaceName}

✅ 删除命名空间中的(几乎)所有资源(ReplicationControllerpodservice 等将会被删除,而一些资源例如 Secret 等不会被删除,它们需要被明确的指定删除)。

kubectl delete all --all
  • 命令中的第一个 all 指定正在删除所有资源类型,而 --all 选项指定将删除所有资源示例而非按照名称指定它们。
  • kubectl delete all --all 命令也会删除名为 kubernetesservice,但它将在几分钟后自动重新创建。

✅ 根据 pod 名称删除 pod

kubectl delete po {podName1} {podName2}

✅ 根据 pod 标签输出 pod

kubectl delete po -l labelKey=labelValue

✅ 删除当前命名空间下的所有 pod(不会删除命名空间)

kubectl delete po --all

✅ 编辑 ReplicationController

kubectl edit rc {rcName}

这将在你的默认文本编辑器中打开 ReplicationController 的 YAML 配置。保存更改并退出编辑器后,kubectl 将更新 ReplicationController 并打印以下消息:replicationcontroller "kubia" edited

配置 kubectl edit 使用不同的文本编辑器可以通过设置 KUBE_EDITOR 环境变量来告诉 kubectl 使用你期望的文本编辑器。例如,如果你想使用 nano 编辑 Kubernetes 资源,请执行以下命令(或将其放入 ~/.bashrc 或等效文件中):export KUBE_EDITOR="/usr/bin/nano"

如果未设置 KUBE_EDITOR 环境变量,则 kubectl edit 会回退到使用默认编辑器(通常通过 EDITOR 环境变量进行配置)。

✅ 删除 ReplicationController

当你通过 kubectl delete 删除 ReplicationController 时,pod 也会被删除。

但是由于由 ReplicationController 创建的 pod 不是 ReplicationController 的组成部分, 只是由其进行管理,因此可以只删除 ReplicationController 并保持 pod 运行。

kubectl delete rc {rcName} --cascade=false
  • 使用 kubectl delete 删除 ReplicationController 时,可以通过给命令增加 --cascade=false 选项保持 pod 的运行,此时这些 pod 将独立,它们不再被管理,但我们始终可以使用适当的标签选择器创建新的 ReplicationController 并再次将它们管理起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1370519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java进阶||jdk进阶之循环

从18年学java到现在除了各种各样的数据类型和集合烧不了要遍历这些变量, for循环这时就少不了啦(当然还有8后引入的神器泛型) 先来看一段精髓业务代码, 使用了多个新特性当然也少不了循环和分支判断 代码较长解析在后面 private CommonPage<List<Object>> handle…

Apache Doris (六十二): Spark Doris Connector - (2)-使用

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. 将编译jar包加入本地Maven仓库

【重学C语言】一、C语言简介

【重学C语言】一、C语言简介 什么是编程语言&#xff1f;编程语言 C语言发展史C语言标准变迁开发软件CLion安装步骤 VIsual Studio安装步骤 Clion 和 VS2022 绑定 电脑常识 什么是编程语言&#xff1f; 人类语言&#xff1a;语言就是人类进行沟通交流的表达方式&#xff0c;应…

【小工具】pixi-live2d-display,直接可用的live2d的交互网页/桌面应用

效果&#xff1a; <script src"https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js"></script> <script src"https://cdn.jsdelivr.net/gh/dylanNew/live2d/webgl/Live2D/lib/live2d.min.js"></script> <…

【Android Studio】APP练手小项目——切换图片APP

本项目效果&#xff1a; 前言&#xff1a;本项目最终实现生成一个安卓APP软件&#xff0c;点击按钮可实现按钮切换图片。项目包含页面布局、功能实现的逻辑代码以及设置APP图标LOGO和自定义APP名称。 关于Android Studio的下载与安装见我的博文&#xff1a;Android Studio 最新…

v-if控制div内容显示,克隆这个div但是v-if没有效果

问题描述&#xff1a; 我的子页面打印的时候通过isPdf来隐藏“选择参加人员”按钮。 我子页面有个el-dialog&#xff0c;el-dialog里面有个大的div它的id为app-pre-meet-add&#xff0c;在子页面我通过isPdf来显示我想要的内容。现在我在父页面先通过this.$refs.child.control…

服务器组网方案

在当今数字化时代&#xff0c;服务器组网方案不仅是企业信息管理的关键&#xff0c;更是支撑业务运作的核心架构 。为了实现高效的数据处理和存储&#xff0c;服务器组网方案成为企业不可或缺的一部分。本文将深入探 讨服务器组网方案的核心要素和实施策略&#xff0c;明确其在…

Spring boot 3 集成rocketmq-spring-boot-starter解决版本不一致问题

安装RocketMQ根据上篇文章使用Docker安装RocketMQ并启动之后&#xff0c;有个隐患详情见下文 Spring Boot集成 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2…

001 Golang-channel-practice

最近在练习并发编程。加上最近也在用Golang写代码&#xff0c;所以记录一下练习的题目。 第一道题目是用10个协程打印100条信息&#xff0c;创建10个协程。每个协程都会有自己的编号。每个协程都会被打印10次。 package mainimport ("fmt""strconv" )func …

MS3814:DVI/HDMI TMDS FR-4 和电缆均衡器/驱动器

产品简述 MS3814 是一款 TMDS 均衡 / 驱动器芯片&#xff0c;用于补偿 FR-4 和 电缆到 DVI/HDMI 连接器的损耗。提供完全满足 DVI/HDMI TMDS 要求的输出。芯片还可用于 DVI/HDMI 电缆以延长传输距离&#xff0c;提 高连接器接收侧电缆通道的抖动余量。片上 TMDS…

控制台项目和ASP.Net Core 1.项目创建 2.一键启动多个服务 3.引入别的库

感悟&#xff1a; 1.注意选择&#xff1a;.NET/.Net Core下面的控制台或者ASP.NET Core web应用&#xff0c;而且只有.net core的项目是跨平台的&#xff0c;选错的话&#xff0c;是无法发布到linux上的。 2.c#的命名空间和java包的区别&#xff1a; c#中是按照包来的&#x…

达梦数据库的归档模式介绍

几种归档模式 归档是实现数据守护系统的重要技术手段&#xff0c;根据功能与实现方式的不同&#xff0c;DM 数据库的归档可以分为 6 类&#xff1a;本地归档、远程归档、实时归档、即时归档、异步归档和同步归档。 其中&#xff0c;本地归档日志的内容与写入时机与数据库模式…

SpringBoot-开启Admin监控服务

SpringBoot-Admin是一个用于管理和监控SpringBoot应用程序的开源项目。它提供了一个易于使用的Web界面&#xff0c;可以实时监控应用程序的健康状况、性能指标、日志和环境配置等信息。通过Actuator模块来收集和暴露应用程序的监控信息&#xff0c;使用Web Socket或者Server-Se…

苹果电脑RAW图像处理软件Capture One Pro 22 mac软件介绍

Capture One Pro 22 for mac是一款专业的RAW文件转换器和图像编辑软件&#xff0c;拥有更新的处理引擎、市场领先的性能和强大的新功能&#xff0c;可为 500 多台高端相机提供具有美丽色彩和令人难以置信的细节的终极图像质量。 Capture One Pro 22 for Mac版软件介绍 Capture…

qt打包完整详细过程 包你成功

找问题找了一个多小时&#xff0c;不停调试&#xff0c;还修改文件路径&#xff0c;配置路径&#xff0c;开机关机&#xff0c;最后终于做出来了&#xff0c;得出来了一个结论 我绝对是天才 首先 看这个视频 k14 打包发布_哔哩哔哩_bilibili 不出意外&#xff0c;你绝对会在…

西门子PLC联网数据采集:借助HiWoo Box实现高效监控与管理

在工业自动化领域&#xff0c;西门子PLC作为一种广泛应用的控制器&#xff0c;对于工厂的生产线具有至关重要的作用。如何实现西门子PLC的联网数据采集&#xff0c;提高生产效率和管理水平&#xff0c;成为了许多企业的关注焦点。而HiWoo Box作为一款功能强大的工业网关&#x…

Matlab绘制双纵轴图(yyaxis函数)

一、方法一yyaxis函数 x linspace(0,pi); y1 cos(x); yyaxis left; % 激活左边的轴 plot(x,y1) xlabel(X-axis); ylabel(left Y-axis); % 给左y轴添加轴标签hold on yyaxis right; % 激活右边的轴 y2 cos(2*x); plot(x,y2) ylim([-1,1]); % 设置右y轴的界限 ylabel(right Y…

MySQL之导入导出

目录 一、navicat导入导出 1.1 导入 1.2 导出 二、mysqldump命令导入导出 2.1 导出 2.2 导入 三、LOAD DARA INFILR命令导入导出 3.1 设置 3.2 导出 3.3 导入 3.4 查看secure_file_priv设置 四、远程备份 4.1 导出 4.2 导入 五、思维导图 一、navicat导入导出 1…

Vue3技术解析(小册子)

随着 Vue 3 正式版本的发布&#xff0c;未来 Vue 3 将会成为前端的主流框架&#xff0c;这个毋庸置疑。Vue 3 在使用方面会兼容部分 Vue 2.x 的特性&#xff0c;比如 options API。 所以&#xff0c;究竟是要先学习 Vue 2 打好基础&#xff0c;还是直接学习 Vue 3 呢&#xff…

9.建造者模式

文章目录 一、介绍二、代码三、实际使用总结 一、介绍 建造者模式旨在将一个复杂对象的构建过程和其表示分离&#xff0c;以便同样的构建过程可以创建不同的表示。这种模式适用于构建对象的算法&#xff08;构建过程&#xff09;应该独立于对象的组成部分以及它们的装配方式的…