在容器化技术席卷全球的今天,Kubernetes(简称K8s,以“8”代替“ubernete”八个字母)已成为云原生应用部署和管理的核心基础设施。作为Google基于内部Borg系统开源打造的容器编排引擎,K8s不仅解决了大规模容器管理的难题,更重新定义了现代化应用的交付方式。


一、Kubernetes是什么?为何它成为云原生基石

1. 核心定位

K8s是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它提供了一套完整的工具链,涵盖从服务发现、负载均衡到存储编排、自动修复等关键能力。

2. 核心价值
  • 弹性伸缩:根据负载自动调整容器规模,从零秒级扩容到数千节点
  • 自我修复:自动重启失败容器、替换故障节点,保障服务持续可用
  • 跨环境一致性:应用可在公有云、私有云、混合云间无缝迁移(避免供应商锁定)
  • 声明式配置:通过YAML文件定义应用状态,系统自动收敛至目标状态
3. 与Docker的关系

Docker负责创建容器,K8s负责管理容器集群。二者如同“集装箱与港口调度系统”——Docker打包应用,K8s调度成千上万个容器协同工作。


二、K8s架构核心:掌握Master与Node的协作机制

一个K8s集群由两类节点构成,协同完成容器调度与管理:

1. Master节点:集群的“大脑”
  • API Server:集群统一入口,接收所有REST操作请求
  • Scheduler:为新创建的Pod选择最佳Node(基于资源、策略等)
  • Controller Manager:确保集群状态符合预期(如副本数维持、节点故障恢复)
  • etcd:分布式键值数据库,存储整个集群状态数据
2. Worker Node节点:工作负载执行者
  • Kubelet:管理Pod生命周期,与容器引擎(如Docker)交互
  • Kube-proxy:维护网络规则,实现Service负载均衡
  • 容器运行时:真正运行容器的引擎(Docker/containerd等)

工作流程示例:  
当用户提交一个Pod创建请求→ API Server写入etcd → Scheduler分配Node → 目标Node的Kubelet创建Pod → Kube-proxy配置网络规则


三、核心概念全景图:理解K8s资源对象模型

1. Pod:最小调度单元
  • 一个Pod包含1个或多个容器,共享网络/IPC/存储卷
  • 例如:Web容器与日志收集容器可部署在同一Pod中
2. Controller:Pod的管理器

| 控制器类型       | 适用场景                  | 关键特性                          |  
|------------------|-------------------------|----------------------------------|  
Deployment   | 无状态应用(如Web服务)   | 支持滚动更新、版本回滚            |  
StatefulSet  | 有状态应用(如数据库)    | 固定网络标识、持久存储顺序启动      |  
DaemonSet    | 节点级守护进程(如日志采集)| 每个Node运行一个Pod副本           |  
Job/CronJob  | 批处理任务                | 执行完成后自动退出                |

3. Service:服务的统一入口
  • 为一组Pod提供固定IP和DNS名称
  • 支持ClusterIP(集群内访问)、NodePort(节点端口暴露)、LoadBalancer(云厂商负载均衡器)
4. Label与Annotation
  • Label:用于资源分类和选择(如app=frontend
  • Annotation:存储非识别性元数据(如构建信息、监控配置)

四、Kubectl终极命令手册:从入门到高阶

以下命令经生产验证,覆盖90%日常操作场景(按使用频率与功能分类):

1. 资源基础操作(每天必用)
# 查看集群节点状态
kubectl get nodes -o wide# 获取default命名空间所有Pod(含IP和节点信息)
kubectl get pods -o wide# 查看Pod详情(事件、状态、容器配置)
kubectl describe pod/<pod-name># 删除Deployment及其关联Pod
kubectl delete deploy/<deployment-name>
2. 应用部署与更新
# 通过YAML文件创建资源(声明式首选)
kubectl apply -f deployment.yaml# 滚动更新镜像(无需修改YAML)
kubectl set image deploy/nginx nginx=nginx:1.25.1# 查看更新状态
kubectl rollout status deploy/nginx# 回滚到上一个版本
kubectl rollout undo deploy/nginx
3. 故障排查与调试
# 实时查看Pod日志
kubectl logs -f <pod-name> --tail 100# 进入Pod的Shell环境(调试利器)
kubectl exec -it <pod-name> -- /bin/bash# 将本地8080端口转发到Pod的80端口
kubectl port-forward <pod-name> 8080:80# 查看节点事件(定位调度失败原因)
kubectl get events --sort-by='.metadata.creationTimestamp'
4. 集群管理与高级运维
# 扩展Deployment副本数
kubectl scale deploy/nginx --replicas=5# 设置节点不可调度(维护前操作)
kubectl cordon <node-name># 驱逐节点所有Pod并清空节点
kubectl drain <node-name> --ignore-daemonsets# 监控Pod资源消耗(类似Linux top)
kubectl top pod

实用技巧:启用命令自动补全

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

五、实战示例:3分钟部署Nginx服务

# 步骤1:创建Deployment
kubectl create deployment nginx --image=nginx:1.25# 步骤2:暴露为Service(NodePort类型)
kubectl expose deploy/nginx --port=80 --type=NodePort# 步骤3:获取访问端口
NODE_PORT=$(kubectl get svc/nginx -o jsonpath='{.spec.ports[0].nodePort}')
echo "访问地址: http://<任意节点IP>:$NODE_PORT"# 步骤4:扩容到3副本
kubectl scale deploy/nginx --replicas=3

六、安全与最佳实践

  • 最小权限原则:使用ServiceAccount为Pod分配精确权限
  • 非Root用户运行容器:在Dockerfile中设置USER指令
  • 资源限制:为Pod设置requests/limits防止资源抢占
resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"
  • 定期更新:及时升级K8s版本与基础镜像(CVE修复)
  • 网络策略:通过NetworkPolicy限制Pod间通信

七、学习路径推荐

  1. 官方交互式教程:kubernetes.io基础教程
  2. Katacoda在线实验:在浏览器中操作真实集群
  3. 认证体系:  
       - CKAD(Kubernetes应用开发者)  
       - CKA(Kubernetes管理员)
  4. 进阶方向:  
       - Helm包管理  
       - Operator模式开发  
       - 服务网格(Istio/Linkerd)集成

在云原生世界中,Kubernetes已成为新一代的操作系统。它抽象了底层基础设施的复杂性,让开发者聚焦业务价值交付。正如舵手(Kubernetes希腊语原意)引领船队穿越风浪,K8s正带领全球企业驶向智能化运维的未来。

命令速查PDF:K8s命令大全下载  
更多实践:访问 Kubernetes官方文档

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

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

相关文章

基于微信小程序的scratch学习系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

postgresql 流复制中指定同步的用户

postgresql 流复制中指定同步的用户 在创建postgresql流复制的过程中&#xff0c;可以指定用户名。 主库pg_hba.conf配置 vi $PGDATA/pg_hba.conf host replication repl 192.168.56.12/32 md5 host all all 0.0.0.0/0 md5主库创建同步的用户 # 主库创建 replicator 流复制…

基于springboot的运动员健康管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

工具识别系统Python+深度学习+人工智能+卷积神经网络算法+TensorFlow+图像识别

一、介绍 工具识别系统&#xff0c;使用Python作为主要编程语言&#xff0c;基于TensorFlow搭建卷积神经网络算法&#xff0c;通过收集了8种常见的日常工具图片&#xff08;“汽油罐&#xff08;Gasoline Can&#xff09;”, “锤子&#xff08;Hammer&#xff09;”, “钳子&…

2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress

目录 ​​​​​​免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、核心考点 Ingress 资源定义 Ingress Controller 依赖 服务暴露验证 网络层次关系 三、搭建模拟环境 1.创建命名空间 2.安装ingress ingress-nginx-controller 3.创建hello.yaml并部署 四、总结 …

关于uv 工具的使用总结(uv,conda,pip什么关系)

最近要开发MCP 项目&#xff0c;uv工具使用是官方推荐的方式&#xff0c;逐要了解这个uv工具。整体理解如下&#xff1a; 一.uv工具的基本情况 UV 是一个由 Rust 编写的现代化 Python 包管理工具&#xff0c;旨在通过极速性能和一体化功能替代传统工具&#xff08;如 pip、vi…

嵌入式学习笔记 - 新版Keil软件模拟时钟Xtal灰色不可更改的问题

在新版Keil软件中&#xff0c;模拟时钟无法修改XTAL频率&#xff0c;默认只能使用12MHz时钟。‌这是因为Keil MDK从5.36版本开始&#xff0c;参数配置界面不再支持修改系统XTAL频率&#xff0c;XTAL选项变为灰色&#xff0c;无法修改。这会导致在软件仿真时出现时间错误的问题&…

Spring AI Image Model、TTS,RAG

文章目录 Spring AI Alibaba聊天模型图像模型Image Model API接口及相关类实现生成图像 语音模型Text-to-Speech API概述实现文本转语音 实现RAG向量化RAGRAG工作流程概述实现基本 RAG 流程 Spring AI Alibaba Spring AI Alibaba实现了与阿里云通义模型的完整适配&#xff0c;…

Java进阶---JVM

JVM概述 JVM作用&#xff1a; 负责将字节码翻译为机器码&#xff0c;管理运行时内存 JVM整体组成部分&#xff1a; 类加载系统(ClasLoader)&#xff1a;负责将硬盘上的字节码文件加载到内存中 运行时数据区(RuntimeData Area)&#xff1a;负责存储运行时各种数据 执行引擎(Ex…

数据类型检测有哪些方式?

typeof 其中数组 对象 null都会判断为Object,其他正确 typeof 2 // number typeof true //bolean typeof str //string typeof [] //Object typeof function (){} // function typeof {} //object typeof undefined //undefined typeof null // nullinstanceof 判断…

NodeJS全栈开发面试题讲解——P6安全与鉴权

✅ 6.1 如何防止 SQL 注入 / XSS / CSRF&#xff1f; 面试官您好&#xff0c;Web 安全三大经典问题分别从不同层面入手&#xff1a; &#x1f538; SQL 注入&#xff08;Server端&#xff09; 原理&#xff1a;恶意用户将 SQL 注入查询语句拼接&#xff0c;导致数据泄露或破坏…

npm error Cannot find module ‘negotiator‘ 的处理

本想运行npm create vuelatest&#xff0c;但提示&#xff1a; npm error code MODULE_NOT_FOUND npm error Cannot find module negotiator npm error Require stack: npm error - C:\Users\Administrator\AppData\Roaming\nvm\v18.16.1\node_modules\npm\node_modules\tuf-j…

Python爬虫:AutoScraper 库详细使用大全(一个智能、自动、轻量级的网络爬虫)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、AutoScraper概述1.1 AutoScraper介绍1.2 安装1.3 注意事项二、基本使用方法2.1 创建 AutoScraper 实例2.2 训练模型2.3 保存和加载模型2.4 数据提取方法2.5 自定义规则三、高级功能3.1 多规则抓取3.2 分页抓取3.3 代…

【Netty系列】解决TCP粘包和拆包:LengthFieldBasedFrameDecoder

目录 如何使用&#xff1f; 1. 示例代码&#xff08;基于Netty&#xff09; 2. 关键参数解释 3. 协议格式示例 4. 常见配置场景 场景1&#xff1a;长度字段包含自身 场景2&#xff1a;长度字段在消息中间 5. 注意事项 举个例子 完整示例&#xff1a;客户端与服务端交互…

哈尔滨工业大学提出ADSUNet—红外暗弱小目标邻帧检测新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者单位&#xff1a;哈尔滨工业大学空间光学工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

Linux开发追踪(IMX6ULL篇_第一部分)

前言 参数&#xff1a;cortex-A7 698Mhz flash 8GB RAM 512M DDR3 2个100M网口 单核 初期&#xff1a; 一、安装完虚拟机之后&#xff0c;第一步先设置文件之间可以相互拷贝复制&#xff0c;以及通过CRT连接到虚拟机等 折磨死人了啊啊啊啊啊啊 1、关于SSH怎么安装…

【萌笔趣棋】网页五子棋项目测试报告

目录 一.项目介绍 &#xff08;一&#xff09;项目简介 &#xff08;二&#xff09;功能介绍 &#xff08;三&#xff09;页面展示 1.注册页面 2.登录页面 3.游戏大厅页面 4.游戏房间页面&#xff08;对战&#xff09; 二.功能测试 &#xff08;一&#xff09;出现的…

知识图谱增强的大型语言模型编辑

https://arxiv.org/pdf/2402.13593 摘要 大型语言模型&#xff08;LLM&#xff09;是推进自然语言处理&#xff08;NLP&#xff09;任务的关键&#xff0c;但其效率受到不准确和过时知识的阻碍。模型编辑是解决这些挑战的一个有前途的解决方案。然而&#xff0c;现有的编辑方法…

数据库,Spring Boot,数据源

您是对的&#xff0c;我之前的回答解释了Spring Boot在操作MySQL时不一定需要显式配置指定的数据源类型&#xff0c;因为它有自动配置机制&#xff0c;但没有直接点明在自动配置情况下“数据源是什么”。 在Spring Boot自动配置机制下&#xff0c;这个“数据源”指的是一个连接…

数据结构测试模拟题(3)

1、两个有序链表序列的合并 #include<bits/stdc.h> using namespace std;struct node{int num;node* next; };// 创建链表 node* CreatList(){int x;node *head new node(); // 创建头节点head->next NULL;node *tail head; // 尾指针初始指向头节点while…