K8s笔记整理

一、Kubernetes是什么?

在理解Kubernetes(简称K8s)之前,我们先回顾一下应用部署方式的演变过程。

1. 传统物理部署

早期,我们将软件直接部署在物理服务器上。这种方式简单直接,但问题也很明显:资源分配难以控制,多个程序共享同一台机器的资源,容易产生资源竞争,互相影响。

2. 虚拟化部署

为了解决资源隔离问题,虚拟化技术应运而生。通过虚拟机,我们可以在一台物理机上运行多个相互隔离的虚拟机,每个虚拟机拥有独立的操作系统和资源。但虚拟化带来了新的开销------每个虚拟机都需要完整的操作系统,占用了大量内存和磁盘空间,资源利用率不够高。

3. 容器化部署

容器化是轻量级的虚拟化技术。容器共享宿主机的操作系统内核,但拥有独立的文件系统、进程空间和资源限制。因此容器启动更快、资源消耗更少,成为现代应用部署的主流方式。

容器编排的挑战

当容器化成为主流,新的问题出现了:

  • 如果一个容器意外崩溃,如何快速启动一个新容器接替它?

  • 当访问量激增时,如何横向扩展容器数量?

  • 如何保证容器之间的服务发现和负载均衡?

这些问题统称为 "容器编排" 。而 Kubernetes 正是当前最流行的容器编排平台,它帮助我们自动化地管理容器化应用的生命周期。

Kubernetes能为我们做什么?

Kubernetes提供了以下核心功能:

  • 自我修复:一旦某个容器崩溃,K8s能在秒级内启动新的容器替换它,保证服务不中断。

  • 弹性伸缩:根据实时负载自动调整容器数量。例如,当并发量从4000飙升到8000时,K8s会自动增加容器;流量回落后再自动缩减。

  • 服务发现与负载均衡:服务可以通过自动发现机制找到依赖的其他服务,并且K8s内置负载均衡策略,将流量均匀分发到多个容器。

  • 版本回退与灰度发布:如果新发布的程序版本出现问题,可以快速回滚到旧版本,支持平滑升级。

  • 存储编排:根据容器需求自动创建存储卷,支持多种存储后端。


二、Kubernetes设计原理

1. 集群架构:Master与Node

Kubernetes集群采用主从架构,分为控制节点(Master)工作节点(Node)

  • Master:负责集群的控制平面,做出全局决策(如调度、检测、响应事件)。

  • Node:负责运行容器应用,是实际干活的工作节点。

2. Master组件

  • API Server:所有资源操作的唯一入口,提供认证、授权、API注册和发现机制。

  • Scheduler:负责将新创建的Pod调度到合适的Node上,根据调度策略选择最优节点。

  • Controller Manager:维护集群的状态,处理节点故障、自动扩缩容、滚动更新等。

  • Etcd:分布式键值存储,保存集群所有配置和状态信息,是K8s的数据库。

3. Node组件

  • Kubelet:与容器运行时(如Docker)交互,负责管理Pod和容器的生命周期。

  • Kube-Proxy:实现Service的负载均衡和服务发现,维护网络规则。

  • 容器运行时(Container Runtime):真正运行容器的软件,如Docker、containerd。

4. 工作机制示例

以部署一个Nginx服务为例,看看组件如何协作:

  1. 用户通过kubectl向API Server发送部署Nginx的请求。

  2. API Server将请求写入Etcd,并通知Scheduler。

  3. Scheduler从Etcd读取集群节点信息,选择一个最合适的Node,并将结果返回API Server。

  4. API Server通知Controller Manager,Controller Manager下发指令给目标Node的Kubelet。

  5. Kubelet收到指令后,通知容器运行时启动Nginx容器,容器运行在Pod中(Pod是K8s的最小调度单元)。

  6. 如需对外访问,可创建Service资源,Kube-Proxy负责配置负载均衡规则,将外部流量导入Nginx Pod。

5. 常见名词解释

  • Pod:K8s中最小的部署单元,一个Pod可以包含一个或多个紧密相关的容器。

  • Controller:控制器,负责管理Pod的副本数、滚动更新等,例如Deployment、StatefulSet。

  • Service:定义一组Pod的访问策略,提供稳定的网络入口和负载均衡。

  • Label:键值对标签,用于标识和组织资源,Service通过Label选择对应的Pod。

  • Namespace:命名空间,实现多租户隔离,将资源逻辑分组。


三、Kubernetes环境搭建简介

Kubernetes集群搭建有两种常见模式:

  • 一主多从:一台Master节点,多台Node节点,适合测试和学习。

  • 多主多从:多台Master实现高可用,适合生产环境。

对于初学者,推荐在一台或多台虚拟机(如CentOS 7.6)上搭建一主两从的测试环境。主要步骤包括:

  • 准备三台服务器,配置主机名解析、时间同步、关闭防火墙和SELinux、禁用swap。

  • 安装Docker和Kubernetes组件(kubeadm、kubelet、kubectl)。

  • 使用kubeadm初始化Master节点,生成加入集群的token。

  • Node节点执行join命令加入集群。

  • 安装网络插件(如Flannel),使跨节点Pod通信正常。

完成以上步骤后,一个基本的K8s集群就搭建成功了。


四、快速体验:部署Nginx服务

搭建好集群后,我们可以通过简单的命令体验K8s的部署能力:

bash

复制代码
# 创建一个nginx deployment,运行一个nginx容器
kubectl create deployment nginx --image=nginx:1.14-alpine

# 将deployment暴露为Service,类型为NodePort,以便外部访问
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看Pod和Service的状态
kubectl get pods,service

执行后,K8s会调度Pod到某个Node上启动Nginx,并分配一个随机端口(如31347)。通过任意节点的IP加此端口即可访问Nginx欢迎页。


五、总结

Kubernetes作为容器编排的事实标准,极大地简化了容器化应用的部署、运维和扩展工作。理解其核心概念(Pod、Service、Controller等)和组件(API Server、Scheduler、Kubelet等)是入门的关键。通过亲手搭建集群并部署一个简单应用,能够更快地掌握K8s的基本用法。

相关推荐
largecode4 小时前
打电话时,怎么让号码显示自己的品牌名称?办理号码认证服务流程
笔记·百度·微信·课程设计·微信公众平台·facebook·新浪微博
米罗篮5 小时前
DSU并查集 & 拓展欧几里得-逆元
c++·经验分享·笔记·算法·青少年编程
噜噜噜阿鲁~5 小时前
python学习笔记 | 10.0、面向对象编程
笔记·python·学习
hssfscv6 小时前
软件设计师下午题训练1-3题+2019上上午题错题解析 练习真题训练13
笔记·设计模式·uml
哆哆啦007 小时前
使用 Obsidian + GitHub Actions + GitHub Pages 搭建内容发布流
数据库·笔记·github·obsidian
xuhaoyu_cpp_java9 小时前
SpringMVC学习(五)
java·开发语言·经验分享·笔记·学习·spring
中屹指纹浏览器9 小时前
2026平台集群式风控溯源体系研究与浏览器环境适配应对方案
经验分享·笔记
敲代码的嘎仔10 小时前
力扣高频SQL基础50题详解
开发语言·数据库·笔记·sql·算法·leetcode·后端开发
星恒随风11 小时前
四天学完前端基础三件套(JavaScript篇)
开发语言·前端·javascript·笔记
羊群智妍11 小时前
2026 免费GEO监测:AI搜索优化实用工具推荐
笔记