零基础理解k8s

# 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优势

  • 每个微服务独立部署和扩展
  • 服务间通信通过Service自动发现
  • 故障隔离,单个服务故障不影响整体

示例

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

3.2 云原生应用

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

K8s优势

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

3.3 DevOps和CI/CD

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

K8s优势

  • 与Jenkins、GitLab CI等工具集成
  • 蓝绿部署、金丝雀发布
  • 环境一致性保证

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
  • 作用:集群的统一入口,处理所有API请求
  • 功能:认证、授权、准入控制、数据验证
  • 特点:RESTful API,支持多种客户端
etcd
  • 作用:分布式键值存储,保存集群状态
  • 功能:配置存储、服务发现、协调
  • 特点:强一致性、高可用
Scheduler
  • 作用:调度器,决定Pod运行在哪个节点
  • 功能:资源评估、亲和性规则、污点容忍
  • 特点:可插拔、可扩展
Controller Manager
  • 作用:控制器管理器,维护集群期望状态
  • 功能:节点管理、副本控制、端点管理
  • 特点:多控制器、自动修复

4.3 Worker节点组件

kubelet
  • 作用:节点代理,管理Pod生命周期
  • 功能:容器启动、健康检查、资源监控
  • 特点:与API Server通信、本地执行
kube-proxy
  • 作用:网络代理,实现Service功能
  • 功能:负载均衡、服务发现、网络规则
  • 特点:iptables/ipvs模式
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 监控和日志

资源监控
  • Metrics Server:收集资源使用指标
  • Prometheus:监控和告警
  • Grafana:可视化仪表板
日志管理
  • 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学习之旅愉快! 🚀


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daxiang12092205

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值