kubectl 命令介绍以及使用

news2024/11/25 11:02:53

文章目录

  • kubectl 基本命令
    • 查看集群信息
    • 管理命名空间
    • 操作节点
  • 操作 Pods
    • 查看 Pods 状态
    • 创建和删除 Pods
    • 调试 Pods
  • 操作 Deployments
    • 创建 Deployment
    • 更新 Deployment
    • 回滚 Deployment
  • 操作 Services
    • 暴露服务
    • 查看服务状态
  • 更多 kubectl 命令
    • 资源描述
    • 资源过滤
    • 日志查看
    • 配置上下文和切换命名空间
    • Pod 的高级操作
    • Jobs 和 CronJobs
    • 资源的水平自动伸缩(Horizontal Pod Autoscaling, HPA)
    • Role-Based Access Control (RBAC)
    • Debug 工具
    • 命令组合和脚本化
    • 如何优化 `kubectl` 性能
    • 常见错误与故障排查
  • 总结


Kubernetes(简称K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源系统,而kubectl是 Kubernetes 的命令行工具,用于管理 Kubernetes 集群和应用。在本文中,我将详细介绍 kubectl 的常用命令,并配以示例,帮助你更好地理解如何管理和操作 Kubernetes 集群。


kubectl 基本命令

查看集群信息

kubectl 提供了多种命令来获取集群的基本信息。

# 查看 Kubernetes 版本
kubectl version

# 查看集群详细信息
kubectl cluster-info

# 获取当前上下文(Context),用于显示集群、命名空间等
kubectl config current-context

示例:
在这里插入图片描述

管理命名空间

命名空间(Namespace)用于将同一个集群中的资源进行逻辑分组。以下是一些常用命令。

# 列出所有命名空间
kubectl get namespaces

# 创建命名空间
kubectl create namespace <namespace-name>

# 删除命名空间
kubectl delete namespace <namespace-name>

示例:

$ kubectl create namespace dev
namespace/dev created

操作节点

在 Kubernetes 集群中,节点是运行容器化应用程序的机器。我们可以使用以下命令查看和管理节点。

# 列出所有节点
kubectl get nodes

# 查看节点详细信息
kubectl describe node <node-name>

# 标记节点
kubectl label node <node-name> <label-key>=<label-value>

# 从节点中移除标记
kubectl label node <node-name> <label-key>-

操作 Pods

Pods 是 Kubernetes 中最小的部署单元,通常表示一个或多个容器的集合。kubectl 提供了操作 Pods 的多种命令。

查看 Pods 状态

# 列出所有 Pods
kubectl get pods

# 查看指定命名空间中的 Pods
kubectl get pods --namespace=<namespace-name>

# 查看 Pod 的详细信息
kubectl describe pod <pod-name>

# 使用自定义列显示
kubectl get pods -o wide

示例:

$ kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
nginx-84b6b54ffb-5mvnv    1/1     Running   0          2m

创建和删除 Pods

创建 Pods 通常通过定义 YAML 文件或使用 kubectl run 命令。

# 通过 YAML 文件创建 Pod
kubectl apply -f pod-definition.yaml

# 通过 kubectl run 创建 Pod
kubectl run nginx --image=nginx --port=80

# 删除 Pod
kubectl delete pod <pod-name>

示例:

# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
$ kubectl apply -f pod-definition.yaml

调试 Pods

# 进入 Pod 中的容器
kubectl exec -it <pod-name> -- /bin/bash

# 查看 Pod 的日志
kubectl logs <pod-name>

# 查看容器中的日志
kubectl logs <pod-name> -c <container-name>

操作 Deployments

Deployments 是用于管理 Pods 和 ReplicaSets 的高层级控制器,帮助用户实现应用的自动化部署、扩展和回滚。

创建 Deployment

# 使用 YAML 文件创建 Deployment
kubectl apply -f deployment.yaml

# 直接通过命令创建 Deployment
kubectl create deployment nginx --image=nginx --replicas=3

示例:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
$ kubectl apply -f deployment.yaml

更新 Deployment

# 滚动更新 Deployment
kubectl set image deployment/nginx-deployment nginx=nginx:1.19

回滚 Deployment

# 查看 Deployment 历史记录
kubectl rollout history deployment/nginx-deployment

# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=<revision-number>

操作 Services

暴露服务

Kubernetes 中的 Service 为 Pod 提供一个稳定的网络端点。我们可以使用以下命令来创建和管理 Service。

# 暴露 Pod 的端口
kubectl expose pod <pod-name> --port=80 --target-port=80 --type=ClusterIP

# 暴露 Deployment 的端口
kubectl expose deployment <deployment-name> --type=NodePort --port=80

示例:

$ kubectl expose deployment nginx-deployment --type=NodePort --port=80

查看服务状态

# 查看所有服务
kubectl get services

# 查看指定服务的详细信息
kubectl describe service <service-name>

更多 kubectl 命令

资源描述

有时我们想要查看某些资源的 YAML 或 JSON 格式定义,可以使用 kubectl get-o 选项。

# 以 YAML 格式显示 Pod 资源
kubectl get pod <pod-name> -o yaml

# 以 JSON 格式显示 Service 资源
kubectl get service <service-name> -o json

资源过滤

# 根据标签过滤 Pods
kubectl get pods -l app=nginx

# 获取特定字段
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase

日志查看

# 查看 Pod 的实时日志
kubectl logs -f <pod-name>

# 查看某个容器的日志
kubectl logs <pod-name> -c <container-name>

配置上下文和切换命名空间

  • 很多用户需要管理多个集群或命名空间,了解如何使用 kubectl config 进行上下文和命名空间管理是非常重要的。
# 查看当前配置的上下文列表
kubectl config get-contexts

# 设置当前上下文
kubectl config use-context <context-name>

# 切换命名空间
kubectl config set-context --current --namespace=<namespace-name>

Pod 的高级操作

  • Pod 资源的重启: Kubernetes 中 kubectl 没有直接的重启命令,但我们可以通过删除或更新的方式来重启 Pod。
  • 排水(Drain)节点: 这是升级或维护节点时的常见操作。
# 驱逐节点上的所有 Pod,标记为不可调度
kubectl drain <node-name> --ignore-daemonsets

# 重新允许节点调度
kubectl uncordon <node-name>

Jobs 和 CronJobs

  • 对于批处理任务,Kubernetes 提供了 Job 和 CronJob 的机制。这是很多用户在日常使用中的核心功能。
# 创建 Job
kubectl create job <job-name> --image=<image-name>

# 创建 CronJob
kubectl create cronjob <cronjob-name> --image=<image-name> --schedule="*/5 * * * *"

示例:

# job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  template:
    spec:
      containers:
      - name: example-job
        image: busybox
        command: ["echo", "Hello, Kubernetes!"]
      restartPolicy: Never

资源的水平自动伸缩(Horizontal Pod Autoscaling, HPA)

  • 自动扩展是 Kubernetes 的强大功能,kubectl 提供了命令来启用和管理 HPA。
# 创建自动伸缩
kubectl autoscale deployment <deployment-name> --min=2 --max=5 --cpu-percent=80

解释
HPA 会根据 CPU 使用率自动扩展或缩减 Pod 数量。还可以基于其他资源使用,如内存。

Role-Based Access Control (RBAC)

  • 安全性是 Kubernetes 中的重要话题,RBAC 允许管理员为不同用户分配特定权限。
# 查看 ClusterRole
kubectl get clusterroles

# 查看 Role
kubectl get roles --namespace=<namespace-name>

# 创建 RoleBinding
kubectl create rolebinding <binding-name> --role=<role-name> --user=<user-name> --namespace=<namespace-name>

示例:

# role.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

Debug 工具

  • Kubernetes 在调试 Pods 时提供了丰富的工具。
# 获取 Pod 的所有环境变量
kubectl exec <pod-name> -- env

# 获取容器中的网络状态
kubectl exec <pod-name> -- netstat -an

# 运行临时 Pod 以调试网络问题
kubectl run -it --rm --image=busybox debug -- /bin/sh

命令组合和脚本化

  • kubectl 命令非常适合结合 shell 脚本进行自动化。这里展示一些简单的组合示例。
# 查看所有运行中的 Pods 的名称
kubectl get pods --field-selector=status.phase=Running -o jsonpath='{.items[*].metadata.name}'

# 批量删除所有的 Pending 状态 Pod
kubectl get pods --field-selector=status.phase=Pending -o name | xargs kubectl delete

如何优化 kubectl 性能

  • 有时 kubectl 操作会较慢,特别是在大规模集群中。这里提供一些优化性能的小技巧:
# 使用 --cache 优化查询速度
kubectl get pods --namespace=<namespace> --cached

# 使用 --limit 和 --chunk-size 分批加载数据
kubectl get pods --limit=500 --chunk-size=200

常见错误与故障排查

  • 列举一些常见的 kubectl 错误及其解决方案,比如 Pod 处于 CrashLoopBackOff 状态、服务无法暴露等。
# 排查 Pod 重启问题
kubectl describe pod <pod-name>

# 查看事件
kubectl get events --sort-by='.metadata.creationTimestamp'

# 查看 kube-system 命名空间中的核心服务状态
kubectl get pods -n kube-system

总结

kubectl 是 Kubernetes 集群管理的核心工具,掌握常用命令可以帮助我们轻松地管理、调试和监控应用。通过本文的示例和命令,希望你能对 Kubernetes 操作有更深入的了解。

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

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

相关文章

热门语音转文字工具大比拼

现在工作、生活的节奏越来越快&#xff0c;很多时候会议上并没有充足的时间来记录会议内容&#xff0c;最快捷的方式就是用录音来记录每一个观点。录音文件后期转化为文字需要花费大力气吗&#xff1f;并不是&#xff0c;现在有着讯飞语音转文字这类高速高效的转换工具可以轻松…

PMP–一、二、三模–分类–13.干系人管理--技巧--1、干系人分析

文章目录 二模13.干系人管理--干系人分析--题干关键词 “干系人信息&#xff08;权力、角色、利益、关系、态度、影响……&#xff09;、识别完干系人、某干系人抵制项目”。5、 [单选] 一家公司启动了一个与开发新服务相关的项目&#xff0c;而该公司并不具有此类专业知识。项…

分布式集群下如何做到唯一序列号

优质博文&#xff1a;IT-BLOG-CN 分布式架构下&#xff0c;生成唯一序列号是设计系统常常会遇到的一个问题。例如&#xff0c;数据库使用分库分表的时候&#xff0c;当分成若干个sharding表后&#xff0c;如何能够快速拿到一个唯一序列号&#xff0c;是经常遇到的问题。实现思…

【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类

一、数据集简介 论文中使用了来自三类不同心电图记录的162条数据&#xff0c;这些数据来自三个公开的数据库&#xff1a; MIT-BIH 心律失常数据库 (ARR) 96条记录&#xff0c;主要包含不同类型的心律失常样本。 MIT-BIH 正常窦性心律数据库 (NSR) 36条记录&#xff0c;包含健…

【springboot】简易模块化开发项目整合MyBatis-plus

接父子工程项目搭建&#xff0c;继续扩展项目 重新调整模块结构 1.删除子模块fast-demo-web中所有无用内容 2.右键fast-demo-web名称->新建&#xff08;news&#xff09;->模块&#xff08;Module&#xff09;&#xff0c;创建新的子模块 3.选择新建Maven工程 4.新建模…

STMCubeMX文件下载后会出现其他项目无法下载的问题

一、问题 二、解决方法 ①、对箭头所指处画√ ②、按住复位键不要松开&#xff0c;你点击下载&#xff0c;1s左右松开即可发现可以重新下载了

计算机毕业设计 教务管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

GD32F4开发 -- JLink使用

之前写过 STM32开发 – Jlink常用命令 &#xff0c;今天遇到需要SEGGER RTT 配置&#xff0c;就再写一下吧。 一、下载并安装JLink 下载&#xff1a; J-Link / J-Trace Downloads 可选择需要的版本下载&#xff1a; 二、SEGGER RTT 包含文件 得到 SEGGER_RTT_V794m.zip …

KTV 包房订房登记表—SAAS本地化及未来之窗行业应用跨平台架构

一、服务员点单 二、服务员自己点单好处 可以自动计算绩效和提成 三、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术共享的浪潮中&#xff0c;不仅仅是作为受益者&#xff0c;更要成为贡献者。无论是…

scene graph generation 计算mean recall数据的过程:

这里写目录标题 前言&#xff1a;计算mean recall的详细过程1. **准备数据**&#xff1a;2. **计算每个类别的recall**&#xff1a;具体代码片段准备groundtruth数据准备预测数据计算recall计算mean recall 前言&#xff1a; 计算流程这里参考maskrcnn_benchmark/data/dataset…

为AppInventor2开发自己的拓展(Extension) - 拓展开发入门篇

//为什么需要开发拓展&#xff1f;// App Inventor 2 是积木式在线安卓开发环境&#xff0c;利用拖拽式的方式实现代码块堆叠&#xff0c;从而完成相应的逻辑。 上手很容易&#xff0c;但是由于代码块提供的功能有限&#xff0c;使用比较单一&#xff0c;在开发上有很大的局限…

计算机视觉的应用32-基于Swin Transformer模型的嵌入混合注意力机制的人脸表情识别的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用32-基于Swin Transformer模型的嵌入混合注意力机制的人脸表情识别的应用。随着深度学习技术的不断演进&#xff0c;计算机视觉领域迎来了诸多变革&#xff0c;其中 Transformer 架构的引入&#xf…

脑电实验打mark【Eprim中打mark】

文章目录 脑电实验打mark一、端口号查询二、并口打mark 脑电实验打mark 一、端口号查询 右击我的电脑–>管理–>设备管理器–>端口 二、并口打mark 在整个流程最前面添加inline控件&#xff1a; 需要打mark的控件名.onsetsignalenabledTrue //去送信 需要打mark的…

助力汽车零部件产业发展,2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会与您相约“羊城”广州

助力汽车零部件产业发展&#xff0c;2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会与您相约“羊城”广州 汽车零部件是支撑汽车工业持续健康发展的必要因素&#xff0c;为汽车的正常运行和安全性能提供了保障。近年来&#xff0c;中国汽车零部件行业受到各级政府的…

基于SpringBoot+Vue的线上考试系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的线上考试…

【C语言】内存函数详细讲解

文章目录 前言strerror的声明和使用字符串分类函数字符转换函数内存拷贝函数&#xff08;memcpy)memcpy的声明和使用memcpy函数的模拟实现 内存拷贝函数&#xff08;memmove&#xff09;memmove的声明和使用memmove模拟实现 内存比较函数&#xff08;memcmp&#xff09;memcmp的…

【数字ic自整资料】常见串行总线协议

参考链接 IIC总线的原理与Verilog实现_iic verilog-CSDN博客 I2C&#xff08;IIC&#xff09;的仲裁、时钟同步和时钟扩展_i2c,clock stretch波形-CSDN博客 精解IIC协议_iic写数据-CSDN博客 串行通信——UART总结-CSDN博客 SPI协议详解&#xff08;图文并茂超详细&#xf…

java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor

更换JDK java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module 0x3302035b) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export …

【大模型推理】大模型前向推理过程详解

文章目录 前期准备环境安装下载模型Qwen2-7b模型架构vscode配置launch.json文件 前向推理debug深入分析预测第一个next_token预测第二个next_token 为了搞清楚&#xff0c;大模型前向推理的具体流程&#xff0c;本文以Qwen2-7B-Instruct为例&#xff0c;通过直接debug官方推理示…

战外网配置——光猫桥接+路由器PPPoE拨号+防火墙外网链路健康检查+外网流量负载均衡

一、适用场景&#xff1a; 1、企业规模较大时&#xff0c;1条公网带宽流量可能不足&#xff0c;需要用到多条公网出口时。 2、企业有业务需要静态ip映射&#xff0c;但是因静态ip专线价格较高&#xff0c;所以需要拨号光纤承载较多的下行流量。 3、当公网出口有多条链路&#…