零基础理解k8s - 实践

news/2026/1/14 21:16:49/文章来源:https://www.cnblogs.com/gccbuaa/p/19343375
# Kubernetes入门指南
##  目录
- [1. Kubernetes是什么](#1-kubernetes是什么)
- [2. 快速上手实践](#2-快速上手实践)
- [3. 适用场景](#3-适用场景)
- [4. 实现机制与系统架构](#4-实现机制与系统架构)
- [5. 功能模块及作用](#5-功能模块及作用)
- [6. 最佳实践](#6-最佳实践)
- [7. 总结](#7-总结)
---
## 1. Kubernetes是什么
### 1.1 基本概念
**Kubernetes(简称K8s)** 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由Google开发,现在由云原生计算基金会(CNCF)维护。
### 1.2 为什么需要Kubernetes?
在容器化时代,我们面临以下挑战:
- **容器管理复杂性**:手动管理大量容器变得困难
- **服务发现**:容器间如何相互发现和通信
- **负载均衡**:如何分配流量到多个容器实例
- **自动扩缩容**:根据负载自动调整容器数量
- **故障恢复**:容器崩溃时如何自动重启
- **滚动更新**:如何零停机更新应用
Kubernetes解决了这些问题,让容器管理变得简单高效。
### 1.3 核心特性
- ✅ **自动化部署**:一键部署应用到集群
- ✅ **服务发现**:自动发现和注册服务
- ✅ **负载均衡**:智能分配流量
- ✅ **自动扩缩容**:根据CPU/内存使用率自动调整
- ✅ **滚动更新**:零停机更新应用
- ✅ **故障自愈**:自动重启失败的容器
- ✅ **配置管理**:统一管理配置和密钥
- ✅ **存储编排**:自动挂载存储卷
---
## 2. 快速上手实践
### 2.1 在线体验环境
我们将使用 [Killercoda Kubernetes Playground](https://killercoda.com/playgrounds/scenario/kubernetes) 进行实践,这是一个免费的在线Kubernetes学习环境。
### 2.2 环境准备
1. **访问在线环境**- 打开浏览器,访问:https://killercoda.com/playgrounds/scenario/kubernetes- 点击"Start Scenario"开始
2. **验证环境**```bash# 检查Kubernetes版本kubectl version --client# 查看集群信息kubectl cluster-info# 查看节点状态kubectl get nodes

2.3 第一个应用部署

步骤1:创建Deployment
# 创建一个nginx部署
kubectl create deployment nginx-app --image=nginx:1.20
# 查看部署状态
kubectl get deployments
# 查看Pod状态
kubectl get pods
步骤2:暴露服务
# 创建Service暴露应用
kubectl expose deployment nginx-app --port=80 --type=NodePort
# 查看服务
kubectl get services
# 获取访问地址
kubectl get service nginx-app -o wide
步骤3:访问应用
# 获取节点IP和端口
kubectl get nodes -o wide
kubectl get service nginx-app
# 使用curl访问(替换为实际的IP和端口)
curl http://<NODE_IP>:<NODE_PORT>

2.4 扩缩容实践

# 扩容到3个副本
kubectl scale deployment nginx-app --replicas=3
# 查看Pod分布
kubectl get pods -o wide
# 缩容到1个副本
kubectl scale deployment nginx-app --replicas=1

2.5 滚动更新

# 更新镜像版本
kubectl set image deployment/nginx-app nginx=nginx:1.21
# 查看更新状态
kubectl rollout status deployment/nginx-app
# 查看更新历史
kubectl rollout history deployment/nginx-app
# 回滚到上一版本
kubectl rollout undo deployment/nginx-app

2.6 清理资源

# 删除部署和服务
kubectl delete deployment nginx-app
kubectl delete service nginx-app
# 确认删除
kubectl get all

3. 适用场景

3.1 微服务架构

场景描述:将单体应用拆分为多个微服务

K8s优势

示例

用户服务 (user-service)     → 2个副本
订单服务 (order-service)    → 3个副本
支付服务 (payment-service)  → 2个副本

3.2 云原生应用

场景描述:构建云原生、可扩展的应用

K8s优势

  • 自动扩缩容应对流量波动
  • 多云部署避免厂商锁定
  • 声明式配置管理

3.3 DevOps和CI/CD

场景描述:自动化部署和持续集成

K8s优势

3.4 大数据和机器学习

场景描述:运行大数据处理和ML训练任务

K8s优势

  • 支持GPU资源调度
  • 批处理作业管理
  • 资源隔离和配额管理

3.5 不适合的场景

简单应用:单机应用不需要容器编排
资源受限:小团队或预算有限的项目
学习成本:团队缺乏容器化经验


4. 实现机制与系统架构

4.1 整体架构

┌─────────────────────────────────────────────────────────────┐
│                    Kubernetes集群                            │
├─────────────────────────────────────────────────────────────┤
│  Master节点 (控制平面)                                        │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ API Server  │ │ Scheduler   │ │ Controller  │            │
│  └─────────────┘ └─────────────┘ └─────────────┘            │
│  ┌─────────────┐                                           │
│  │ etcd        │                                           │
│  └─────────────┘                                           │
├─────────────────────────────────────────────────────────────┤
│  Worker节点 (数据平面)                                        │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐            │
│  │ kubelet     │ │ kube-proxy  │ │ Container   │            │
│  │             │ │             │ │ Runtime     │            │
│  └─────────────┘ └─────────────┘ └─────────────┘            │
└─────────────────────────────────────────────────────────────┘

4.2 Master节点组件

API Server
etcd
  • 作用:分布式键值存储,保存集群状态
  • 功能:配置存储、服务发现、协调
  • 特点:强一致性、高可用
Scheduler
Controller Manager
  • 作用:控制器管理器,维护集群期望状态
  • 功能:节点管理、副本控制、端点管理
  • 特点:多控制器、自动修复

4.3 Worker节点组件

kubelet
  • 作用:节点代理,管理Pod生命周期
  • 功能:容器启动、健康检查、资源监控
  • 特点:与API Server通信、本地执行
kube-proxy
Container Runtime
  • 作用:容器运行时,运行容器
  • 支持:Docker、containerd、CRI-O
  • 功能:镜像管理、容器生命周期

4.4 工作流程

  1. 用户提交请求 → API Server
  2. API Server验证 → 存储到etcd
  3. Scheduler调度 → 选择合适节点
  4. kubelet执行 → 启动容器
  5. Controller监控 → 维护期望状态

5. 功能模块及作用

5.1 核心资源对象

Pod
# Pod示例
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80

作用

  • 最小部署单元
  • 包含一个或多个容器
  • 共享网络和存储
Deployment
# Deployment示例
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:1.20

作用

  • 管理Pod副本
  • 滚动更新
  • 回滚功能
Service
# Service示例
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: ClusterIP

作用

  • 服务发现
  • 负载均衡
  • 网络抽象

5.2 配置管理

ConfigMap
# ConfigMap示例
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "mysql://localhost:3306"
debug_mode: "true"

作用

  • 存储配置数据
  • 环境变量注入
  • 配置文件挂载
Secret
# Secret示例
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
username: YWRtaW4=  # base64编码
password: cGFzc3dvcmQ=

作用

  • 存储敏感信息
  • 加密存储
  • 安全传输

5.3 存储管理

PersistentVolume (PV)
# PV示例
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
hostPath:
path: /data/mysql
PersistentVolumeClaim (PVC)
# PVC示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: slow

作用

  • 持久化存储
  • 动态供应
  • 存储抽象

5.4 网络功能

Ingress
# Ingress示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80

作用

  • HTTP/HTTPS路由
  • SSL终止
  • 域名管理

5.5 监控和日志

资源监控
日志管理
  • Fluentd:日志收集
  • Elasticsearch:日志存储
  • Kibana:日志分析

6. 最佳实践

6.1 应用设计原则

容器化最佳实践
# 多阶段构建
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

原则

  • 使用多阶段构建减小镜像大小
  • 非root用户运行
  • 健康检查配置
  • 资源限制设置
应用配置
# 资源限制示例
apiVersion: v1
kind: Pod
spec:
containers:
- name: app
image: myapp:latest
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10

6.2 安全最佳实践

RBAC权限控制
# Role示例
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
# RoleBinding示例
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
网络安全
  • Network Policies:网络隔离
  • Pod Security Standards:Pod安全标准
  • 镜像扫描:安全漏洞检测

6.3 运维最佳实践

监控和告警
# ServiceMonitor示例(Prometheus)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: app-monitor
spec:
selector:
matchLabels:
app: myapp
endpoints:
- port: metrics
interval: 30s
备份和恢复
  • etcd备份:定期备份集群状态
  • 应用数据备份:PV数据备份
  • 配置备份:YAML文件版本控制
灾难恢复

6.4 性能优化

资源优化
# HPA自动扩缩容
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
网络优化
  • Service Mesh:Istio/Linkerd
  • CNI插件:Calico/Flannel
  • 负载均衡:优化流量分配

7. 总结

7.1 学习路径建议

  1. 基础阶段(1-2周)

    • 理解容器和Docker基础
    • 学习Kubernetes基本概念
    • 完成在线实验
  2. 实践阶段(2-4周)

    • 部署真实应用
    • 学习YAML配置
    • 掌握常用命令
  3. 进阶阶段(1-2个月)

    • 学习高级功能
    • 掌握运维技能
    • 了解生态工具

7.2 推荐资源

官方文档
学习平台
认证考试
  • CKA:Certified Kubernetes Administrator
  • CKAD:Certified Kubernetes Application Developer
  • CKS:Certified Kubernetes Security Specialist

7.3 常见问题

Q: Kubernetes学习曲线陡峭吗?
A: 初期有一定难度,但通过实践和系统学习可以掌握。

Q: 小团队是否需要Kubernetes?
A: 取决于应用复杂度和团队规模,简单应用可能不需要。

Q: 如何选择Kubernetes发行版?
A: 根据需求选择,云厂商托管服务通常更适合初学者。

Q: Kubernetes与Docker Swarm的区别?
A: Kubernetes功能更强大但复杂,Docker Swarm更简单但功能有限。


下一步行动

  1. 立即开始:访问 Killercoda 进行实践
  2. 深入学习:阅读官方文档和教程
  3. 项目实践:在个人项目中应用Kubernetes
  4. 社区参与:加入Kubernetes社区,参与讨论

本文档将持续更新,欢迎反馈和建议。祝您Kubernetes学习之旅愉快!

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

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

相关文章

连接2026:十款远程控制软件真实力横评与选择指南

目录引&#x1f4c8; 选择前必读&#xff1a;明确你的核心需求&#x1f3c6; 综合王者&#xff1a;ToDesk&#xff08;评分 9.6/10&#xff09;&#x1f3af; 细分领域佼佼者&#x1f3ae; 为游戏而生&#xff1a;网易UU远程&#xff08;评分 8.4/10&#xff09;&#x1f3ac; …

openvela——动态管理日志输出通道及其实现原理

在《Vela rpmsg log 实现原理》中提到 vela 日志输出支持多通道日志输出&#xff0c;它们是在系统运行前期配置好的&#xff0c;所以无法将它们动态删除。但是可以控制使能、禁用某通道&#xff0c;达到相应通道输出、不输出日志的目的。接下来篇章将讲述”动态管理日志输出通道…

JavaScript 引擎中的分支预测器(Branch Predictor)友好性:如何写出减少 CPU 误判的代码

各位开发者、架构师们&#xff0c;晚上好&#xff01;今天&#xff0c;我们将深入探讨一个在高性能计算领域至关重要&#xff0c;但在日常JavaScript开发中却常常被忽视的议题&#xff1a;JavaScript引擎中的分支预测器友好性。我们将学习如何编写代码&#xff0c;以减少CPU的误…

Draco 3D压缩终极指南:如何高效处理大型3D模型文件

Draco 3D压缩终极指南&#xff1a;如何高效处理大型3D模型文件 【免费下载链接】draco Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics. 项目地址: h…

可以把 Windows 从 C盘迁移到 SSD 吗?

可以把 Windows 从 C盘迁移到 SSD 吗&#xff1f;yes, you can move windows from the c: drive to an ssd, and doing so can make your computer faster. the process usually means copying the operating system, programs, and settings from an old hard drive to a new …

Overleaf插件定制实战指南:3分钟搞定编辑器功能优化

Overleaf插件定制实战指南&#xff1a;3分钟搞定编辑器功能优化 【免费下载链接】overleaf A web-based collaborative LaTeX editor 项目地址: https://gitcode.com/GitHub_Trending/ov/overleaf 你是不是也遇到过这样的困扰&#xff1a;用Overleaf写论文时&#xff0c…

Day 37 - 早停策略与模型权重的保存

在深度学习的训练过程中&#xff0c;我们经常面临两个核心问题&#xff1a;“训练到什么时候停止&#xff1f;” 和 “训练好的模型怎么存&#xff1f;”。如果训练时间太短&#xff0c;模型欠拟合&#xff1b;训练时间太长&#xff0c;模型过拟合。手动盯着Loss曲线决定何时停…

JavaScript 的数值计算精度:Kahan 求和算法在处理大量浮点数累加时的应用

各位同学&#xff0c;各位同仁&#xff0c;大家好&#xff01; 今天&#xff0c;我们将深入探讨一个在日常编程中常常被忽视&#xff0c;但在处理大量数值数据时又至关重要的话题&#xff1a;JavaScript 中的浮点数计算精度。特别是&#xff0c;我们将聚焦于一个巧妙的算法——…

15、Linux 系统下的邮件与即时通讯使用指南

Linux 系统下的邮件与即时通讯使用指南 1. Linux 系统中的邮件客户端 在人们提及互联网时,往往首先想到的是万维网,但实际上电子邮件可能是最常用且最受欢迎的互联网应用之一。对于 Linux 用户而言,有众多的电子邮件程序可供选择,不同的 Linux 发行版默认的邮件客户端也各…

微信遥控Mac:WeChatPlugin远程控制终极指南

微信遥控Mac&#xff1a;WeChatPlugin远程控制终极指南 【免费下载链接】WeChatPlugin-MacOS 微信小助手 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPlugin-MacOS 你是否曾经想过&#xff0c;躺在沙发上就能控制远在书房里的Mac电脑&#xff1f;或者在外出时突…

为什么 C盘空间会莫名其妙减少(即使没装新软件)?

为什么 C盘空间会莫名其妙减少&#xff08;即使没装新软件&#xff09;&#xff1f;你有没有注意到c盘空间在减少&#xff0c;即使你没有安装新程序, 这个常见问题可能让人担心, 但通常有明确原因, windows和其他软件会定期创建临时文件、系统备份和更新, 占用磁盘空间而不会每…

16、探索 Linux:网络应用与文件管理指南

探索 Linux:网络应用与文件管理指南 在当今数字化时代,Linux 系统凭借其强大的功能和高度的可定制性,受到了越来越多用户的青睐。本文将深入介绍 Linux 系统中的网络应用和文件管理操作,帮助你更好地利用 Linux 系统的优势,提升工作和学习效率。 网络应用:即时通讯、文…

【SOVD】软件定义汽车时代的诊断新范式

目录 一、为什么传统诊断体系正在“失效” 二、SOVD 是什么? 三、SOVD 的定位:不是替代 UDS,而是“包裹” UDS 四、SOVD 解决的核心问题 1️⃣ 诊断访问的“现代化” 2️⃣ 跨 ECU、跨域的统一视图 3️⃣ 云端与远程诊断的安全边界 五、SOVD 的核心概念:资源模型 常见资源类…

javet 的使用

第一版使用的是j2v8,但是已经不维护了,部署到liunx后报错 J2V8 native library not loaded ,之后切换到这个库了 https://github.com/caoccao/Javenode 引入依赖 <!-- Core (Must-have) --><dependency><groupId>com.caoccao.javet</groupId><art…

用户目录能不能放到其他盘?

用户目录能不能放到其他盘&#xff1f;是的, 你可以把用户文件夹移动到另一个磁盘, 但你应该小心操作. 许多人想要腾出系统盘空间或把个人文件放在单独的磁盘上. 移动用户文件夹可以缓解空间限制并简化备份, 但如果方法不当也可能引发问题. 本文解释了安全的选项, 需要遵循的步…

数据分析工具对比:SPSS vs Tableau vs DataEase

工具概览 SPSS 全称&#xff1a;Statistical Package for the Social Sciences 描述&#xff1a;是一款专业的统计分析软件&#xff0c;广泛应用于社会科学、医学、市场研究等领域。 Tableau 描述&#xff1a;一款强大的数据可视化工具&#xff0c;能够将复杂的数据转化为直观、…

【OTA】自动化测试方案

目录 基于 Python + PyQt5 的 OTA 自动化测试工具方案 1. 背景与问题定义 2. 工具整体架构设计 2.1 架构分层 2.2 核心设计思想 3. OTA 自动化流程拆解(状态机) 4. PyQt5 UI 设计(任务控制台) 4.1 UI 功能 4.2 主窗口代码示例(PyQt5) 5. OTA 状态机与调度实现 5.1 Worker…

哪些文件夹里的文件是可以安全删除的?比如Temp、Download这些?

哪些文件夹里的文件是可以安全删除的&#xff1f;比如Temp、Download这些&#xff1f;files accumulate on every computer and phone, some of those files are safe to remove, and deleting them can free space and make your device run smoother, this article explains,…

最全词典整合收录:打造专业英语学习利器

最全词典整合收录&#xff1a;打造专业英语学习利器 【免费下载链接】最全词典整合收录词典刺客 本仓库提供了一个名为“最全词典整合收录(词典刺客)”的资源文件下载。该资源文件包含了以下词典的整合收录&#xff1a;- 柯林斯双解&#xff08;mddmdx&#xff09;- 朗文双解&a…

SuperDesign:在IDE中唤醒你的设计创造力

SuperDesign&#xff1a;在IDE中唤醒你的设计创造力 【免费下载链接】superdesign 项目地址: https://gitcode.com/gh_mirrors/su/superdesign 你是否曾经在深夜对着空白的代码编辑器&#xff0c;脑海中浮现出完美的UI设计&#xff0c;却不知道如何快速实现&#xff1f…