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

如何使用 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.mzph.cn/news/609878.shtml

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

相关文章

整理的Binder、DMS、Handler、PMS、WMS等流程图

AMS: Binder: Handler: PMS: starActivity: WMS: 系统启动:

1884_emacs ivy minibuffer中上下行导航快捷键修改

全部学习汇总: GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 我自己凑了一组emacs的配置使用了很长一段时间,很大程度上的功能在模仿spacemacs,但是我的配置更加轻量化,因此在使用的时候延…

数据库教程:从基础到进阶

数据库教程:从基础到进阶 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将一同探索一项对于每位程序猿都至关重要的技能——“数据…

梯度提升机(Gradient Boosting Machines,GBM)

什么是机器学习 梯度提升机(Gradient Boosting Machines,GBM)是一种集成学习方法,通过将多个弱学习器(通常是决策树)组合成一个强学习器来提高模型的性能。GBM的训练过程是通过迭代,每一步都根…

设备树在开发板的系统中的体现

一. 简介 设备树文件中的设备节点,可以在开发板系统中看到。 也就说,开发板加载设备树文件,Linux内核启动系统以后,可以在根文件系统里看到设备树的节点信息。在/proc/device-tree/目录下存放着设备树信息。 二. 设备树在开发板…

数据结构单链表定义及例题(上)

本文简要的介绍了单链表的定义,以及单链表的头插法和尾插法的实现 文章目录 一、单链表数据结构的定义 二、头插法建立单链表(带头节点) 三、尾插法建立单链表(带头节点) 四、打印单链表 五、测试及全部代码 总结 前言 单链表是学习,以及考研无论是408还是自命题都是很重…

序列模型(4)—— Scaling Laws

本文介绍 LLM 训练过程中重要的 Scaling Laws,这是一个经验规律,指出了固定训练成本(总计算量FLOPs) C C C 时,如何调配模型规模(参数量) N N N 和训练 Token 数据量 D D D,才能实现…

算法训练day9Leetcode232用栈实现队列225用队列实现栈

今天学习的文章和视频链接 https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 栈与队列理论基础 见我的博客 https://blog.csdn.net/qq_36372352/article/details/135470438?spm1001.2014.3001.5501 232用栈实现…

maven模块化开发部署

之前一直维护迭代的产品,因为有很多客户使用.有些用户有定制化需求,需要添加新的模块功能.因此需要平台主体功能迭代的同时,非主体功能和定制化功能插件化. 一.实现方案 分为开发和部署两个步骤: 1.开发 已经确定肯定是采用maven父子工程,单独的模块可独立开发及独立部署. 原…

Spring中Bean的生命周期

第一、Bean的生命周期 Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程,主要分为以下5个部分: 1.实例化: 给Bean分配内存空间(对应JVM中的“加载”,这里只是分配了内存); 2.设…

ffmpeg[学习(四)](代码实现) 实现音频数据解码并且用SDL播放

0、作者杂谈 CSDN大多数都是落后的,要么是到处复制粘贴的,对于初学者我来说困惑了很久,大多数CSDN文章都是使用旧的API ,已经被否决了,于是我读一些官方文档,和一些开源项目音视频的输出过程,写…

开源的RNA-Seq分析软件Trinity的详细介绍和使用方法

介绍 GitHub - trinityrnaseq/trinityrnaseq: Trinity RNA-Seq de novo transcriptome assembly Trinity是一种开源的RNA-Seq分析软件,用于转录组的de novo组装。转录组de novo组装是通过将RNA-Seq数据中的短序列片段(reads)重新组装成完整的…

模型容器与AlexNet构建

一、模型容器——Containers nn.Sequential 是 nn.module的容器,用于按顺序包装一组网络层 Sequential 容器 nn.Sequential 是 nn.module的容器,用于按顺序包装一组网络层 • 顺序性:各网络层之间严格按照顺序构建 • 自带forward()&#xf…

x-cmd pkg | grex - 用于生成正则表达的命令行工具

目录 简介首次用户生成的正则表达式与 perl 和 rust 兼容支持 Unicode 符号友好的用户体验进一步阅读 简介 grex 是一个旨在简化创作正则表达式的复杂且繁琐任务的库和命令行程序。这个项目最初是 Devon Govett 编写的 JavaScript 工具 regexgen 的 Rust 移植。但 regexgen 在…

二级C语言备考1

一、单选 共40题 (共计40分) 第1题 (1.0分) 题号:6923 难度:较易 第1章 以下叙述中正确的是 A:C语言规定必须用main作为主函数名,程序将从此开始执行 B:可以在程序中由用户指定任意一个函数作为主函数…

Oracle游标深入探讨

Oracle游标深入探讨 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在今天的分享中,我将带大家深入探讨Oracle游标,这是数据库操作中一个极为…

AArch64 Exception Model学习

提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

Python的异常处理案例——网购平台交易案例

需求 假设有多条交易信息,写个raise抛出异常,try…except 负责梳理出正常数据有哪些和非正常数据有哪些 解决 使用 raise 抛出异常并使用 try-except 梳理出正常数据和非正常数据: class InvalidTransactionException(Exception):def __i…

【Rust日报】2024-01-08 async-graphql: 7.0.0 版本发布

认真对待 Rust,多写 Rust 作者通过参与一次黑客马拉松,尝试用Rust重新实现颜色工具,开始了对Rust的深入探索。Rust编译器以友好的错误提示和严格的规则为特点,使作者愈发热衷于写更多Rust代码。Rust社区通过内建lint工具支持新手&…

MySQL基础笔记(3)DML数据操作语句

顾名思义,全称是数据操作语言,用来对数据库中表的数据记录进行增删改操作~ 目录 一.添加数据 1.给指定字段添加数据 2.给全部字段添加数据 3.批量添加数据 二.修改数据 三.删除数据 一.添加数据 1.给指定字段添加数据 insert into 表名 (字段名…