当前位置: 首页 > ops >正文

Kubernetes简介及常用命令

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。

一、起源与背景

随着微服务架构的兴起,应用程序被拆分为多个小型、独立的服务模块,每个模块可以独立开发、测试和部署。容器技术(如 Docker)使得这些服务的打包和运行变得高效便捷。然而,管理系统中大量的容器、调度它们的运行位置、处理容器故障以及实现容器之间的通信等成为复杂的问题。Kubernetes 应运而生,它最初是由谷歌开发的,谷歌在大规模数据中心管理和容器编排方面有丰富的经验,后来捐赠给云原生计算基金会(CNCF),现在已经成为云计算和容器编排领域的一个重要标准。

二、Kubernetes主要功能

  1. 自动化部署和回滚

    • 可以根据预定义的配置文件自动部署容器化的应用程序。当需要更新应用程序时,Kubernetes 可以逐步替换旧的容器实例,同时监控应用程序的健康状况。如果在更新过程中出现问题,它还可以自动回滚到之前的稳定版本。例如,一个电商网站在更新购物车服务时,Kubernetes 能够逐步将流量从旧版本的服务容器切换到新版本,一旦发现新版本出现问题(如响应时间过长、出现错误代码等),就将流量切回旧版本,保证了购物体验的连续性。
  2. 扩展和负载均衡

    • Kubernetes 能够根据应用程序的实际需求(如 CPU 使用率、内存使用率等指标或者请求流量)自动扩展容器的数量。它内置了负载均衡机制,可以将网络流量均匀地分配到多个容器实例,避免单点过载。以一个视频流媒体服务为例,当大量用户同时观看热门视频时,Kubernetes 会根据服务器的负载情况自动增加视频服务容器的数量,通过负载均衡器将请求分散到这些容器上,确保每个用户都能流畅地观看视频。
  3. 存储编排

    • 它可以挂载本地存储或者云存储系统(如 Amazon EBS、Google Persistent Disk 等)到容器中。这使得容器化的应用程序能够方便地访问持久化存储,就像在传统服务器环境中一样。比如一个数据库容器需要存储数据,Kubernetes 可以将一个持久化的存储卷挂载到该容器,保证数据在容器重新调度或者重启后不会丢失。
  4. 自我修复

    • Kubernetes 能够持续监控容器的运行状态。如果一个容器出现了故障(如进程崩溃、健康检查失败等),系统会自动重新启动该容器。如果是容器所在的节点出现故障,它会将该节点上的容器重新调度到其他健康的节点上。例如,一个分布式计算任务运行在多个容器上,当其中一个容器所在的物理服务器出现硬件故障时,Kubernetes 会迅速将该容器在其他正常服务器上重新启动,保证了计算任务的继续进行。

三、Kubernetes架构

K8s架构

  1. Master 节点(控制节点)

    • API Server :这是 Kubernetes 的前端,用于接收和处理客户端的请求(如用户通过kubectl命令行工具发送的请求),并将其存储到数据存储系统中。它是集群内部组件之间通信的桥梁。
    • Controller Manager :负责管理各种控制器,这些控制器是集群的调节器,它们确保集群的实际状态与用户期望的状态一致。例如,副本控制器(Replication Controller)会根据用户设置的副本数量确保一定数量的容器实例在运行。如果发现实例数量不足,它会创建新的容器;如果实例过多,它会删除多余的容器。
    • Scheduler :它的主要任务是将新创建的容器分配到合适的节点上。它会根据节点的资源情况(如 CPU、内存等)、容器的资源需求以及其他策略(如亲和性和反亲和性规则)来做出调度决策。例如,一个需要大量内存的容器会被调度到内存资源充足的节点上。
  2. Worker 节点(Node工作节点)

    • Kubelet :这是运行在每个工作节点上的代理,它负责管理该节点上的容器,确保容器按照 Master 节点的指令运行。它与 Docker 等容器运行时交互,执行容器的启动、停止等操作。
    • Kube - proxy :用于实现集群内部的网络通信和负载均衡。它管理网络规则,保证容器之间可以互相通信,并且根据定义的规则将网络流量正确地分发到目标容器。例如,在一个容器服务集群中,Kube - proxy 会根据服务的配置将外部请求转发到后端的多个容器实例。
    • Pod: 这是 Kubernetes 中最基本的部署单位,它通常包含一个或者多个紧密相关的容器。这些容器共享网络、存储和操作系统命名空间。Pod 内的容器可以方便地相互通信,就像它们运行在同一个主机上一样。例如,一个 Web 应用程序可能由一个 Web 服务器容器和一个日志分析容器组成,它们可以被封装在一个 Pod 中,共享存储卷用于日志存储和网络接口用于内部通信。

Kubernetes 凭借其强大的功能和灵活的架构,为现代云计算和分布式系统提供了可靠的容器编排解决方案,已经被广泛应用于企业级的微服务架构和云原生应用开发中。

四、Kubernetes常用指令

4.1. 查看类命令

1. 获取节点相应服务的信息

kubectl get nodes

如果需要按selector名来查找相应的pod信息, 可以通过以下命令查看:

kubectl get pod --selector name=tomcat

2. 查看K8S集群信息

kubectl cluster-info

3. 查看各组件信息

kubectl -s http://localhost:8080 get componentstatuses

4. 查看pods所在的运行节点

kubectl get pods -o wide

如果需要通过某个命名空间查找节点信息, 可以通过以下命令查看:

kubectl get pods -o wide -n kube-system

  • -o wide 选项表示展示更多的Pod节点信息
  • -n <命名空间> 表示查询该命名空间下的Pod节点信息

如果需要查找所有命名空间下的所有Pod信息, 可以通过以下命令:

kubectl get pods --all-namespaces

kubectl get pods -o wide --all-namespaces #列出更多的详细信息

5. 查看pods定义的详细信息

kubectl get pods -o yaml

6. 查看运行的pod的环境变量

kubectl exec <pod名称> env

7. 查看指定pod的日志

kubectl logs -f pods/<pod名称> -n kube-system

8. 查看集群节点信息

kubectl get nodes

如果需要查看集群名称为zone下的集群节点信息, 可以使用以下命令:

kubectl get nodes -l zone

9. 查看某个命名空间(如kube-system)下的所有service

kubectl get services kubernetes-dashboard -n kube-system

10. 查看某个命名空间(如kube-system)下的所有发布信息

kubectl get deployment kubernetes-dashboard -n kube-system

11. 查看资源信息

  • 根据service名查看资源信息
  • kubectl describe service/kubernetes-dashboard --namespace=“kube-system”
  • 根据pod名称查看资源信息
  • kubectl describe pods/kubernetes-dashboard-349859023-g6q8c --namespace=“kube-system”
  • kubectl describe pod nginx-772ai

4.2. 操作类命令

1. 创建资源

kubectl create -f <文件名.yaml>

2. 重建资源

kubectl replace -f <文件名 [–force]

3. 删除资源

  • 强制删除某个文件名命名节点 kubectl delete -f <文件名>
  • 删除某个Pod命令节点 kubectl delete pod <pod名>
  • 删除某个Replication Controller命名节点 kubectl delete rc <rc名>
  • 删除某个服务命名节点 kubectl delete service <service名>
  • 删除所有Pod节点 kubectl delete pod --all

4. 动态伸缩操作

  • 为Replcation Controller名称为nginx动态扩展5个服务节点

kubectl scale rc nginx --replicas=5

  • redis-slave部署5 个服务节点

kubectl scale deployment redis-slave --replicas=5

  • redis-slave-deployment.yaml部署脚本下的服务扩展2个节点

kubectl scale --replicas=2 -f redis-slave-deployment.yaml

5. 进入Pod节点容器内进行操作

kubectl exec -it redis-master-1033017107-q47hh /bin/bash

6. Pod节点容器标签操作

  • 增加Node节点label值

kubectl label nodes node1 zone=north

  • 增加Pod的label值 [key]=[value]

kubectl label pod redis-master-1033017107-q47hh role=master

  • 删除Pod的label值

kubectl label pod redis-master-1033017107-q47hh role-

  • 修改Pod的label值

kubectl label pod redis-master-1033017107-q47hh role=backend --overwrite

7. 滚动升级及版本回滚

  • 配置文件滚动升级

kubectl rolling-update redis-master -f redis-master-controller-v2.yaml

  • 命令升级

kubectl rolling-update redis-master --image=redis-master:2.0

  • Pod版本回滚

kubectl rolling-update redis-master --image=redis-master:1.0 --rollback

http://www.xdnf.cn/news/9281.html

相关文章:

  • 高效大电流缓启动电路设计
  • Manus,AGI 要来临了吗?
  • 电子电路:欧姆定律和电流量子化有关系吗?
  • 深入剖析机器学习之波士顿房价案例
  • 易境通海外仓系统:如何提高仓库尾程派送环节效率?
  • 「Python教案」循环语句的使用
  • 离子风机如何保障汽车电子智造组装车间良品率
  • C语言数据存储
  • 操作系统——第四章(文件共享、保护、层级结构、系统布局..)
  • Docker+MobaXterm+x11实现容器UI界面转发本地
  • Python map()函数详解:批量数据处理的瑞士军刀
  • STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
  • STM32之IIC(重点)和OLED屏
  • Spring Boot整合JWT实现认证与授权
  • screen开启和删除session会话
  • JSONP跨域原理全解析
  • OpenCV 图像像素的读写操作
  • SNMPv3基础概念
  • 02_MQ常见问题
  • 科研课题验收测试报告:用途与类型深度解析~
  • DFS入门刷题c++
  • 工业级UART数据转发芯片EU104 低功耗多串口芯片 1主4从多串口转发
  • 26、请求处理-【源码分析】-Rest映射及源码解析
  • 机器学习知识体系:从“找规律”到“做决策”的全过程解析
  • 走进黑盒:SQL 是如何在数据库中执行的?
  • Linux基础命令掌握-cut命令
  • 0527漏洞原理:SQL注入笔记
  • CSRF和XSS攻击防御指南
  • 院校机试刷题第十三天:代码随想录算法训练营第七天
  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径