Kubernetes(K8s)入门与实践指南
Kubernetes,简称 K8s,是一个开源的容器编排平台,用于自动化部署、扩缩容、负载均衡和管理容器化应用。它已经成为云原生应用的核心技术,被广泛应用于生产环境。
本文将从 核心概念、工作原理 到 实践示例,帮你快速理解 Kubernetes 的整体框架与使用方法。
1. 为什么要用 Kubernetes?
在没有 K8s 之前,容器化应用面临以下问题:
- 容器数量多,人工运维成本高。
- 应用升级需要停机,影响业务。
- 突发流量无法快速扩容。
- 容器宕机无法自动恢复。
Kubernetes 的出现解决了这些问题:
- 自动化部署:一次配置,多次部署。
- 自愈能力:Pod 挂掉会自动重建。
- 弹性伸缩:支持根据负载自动扩/缩容。
- 服务发现与负载均衡:应用间通信不再需要硬编码 IP。
- 滚动升级与回滚:零停机部署。
2. 核心概念
Kubernetes 有一套自己的术语体系,掌握这些概念才能理解它的运作逻辑。
| 概念 | 作用 | 类比 |
|---|---|---|
| Pod | 最小部署单元,一个或多个容器的集合 | 一个应用实例 |
| Node | 运行 Pod 的服务器(物理机/虚拟机) | 工厂车间 |
| Cluster | 多个 Node 组成的整体 | 工厂园区 |
| Namespace | 逻辑隔离环境 | 不同部门 |
| Deployment | 定义 Pod 的副本数和版本 | 生产线模板 |
| Service | 为 Pod 提供访问入口 | 前台接待 |
| ConfigMap / Secret | 存储配置和敏感信息 | 配置文件、保险柜 |
| Ingress | 提供 HTTP/HTTPS 访问规则 | 大门和路标 |
3. 架构与工作原理
Kubernetes 集群由两类节点组成:
控制平面(Control Plane)
- kube-apiserver:集群的 API 网关,所有操作都通过它。
- etcd:分布式键值数据库,存储集群状态。
- kube-scheduler:调度 Pod 到合适的 Node。
- kube-controller-manager:管理副本数、故障恢复等。
工作节点(Worker Node)
- kubelet:与控制平面通信,管理本节点的 Pod。
- kube-proxy:实现集群内部的网络转发。
- 容器运行时:运行容器的底层引擎(Docker、containerd、CRI-O)。
4. 本地安装与体验
在本地体验 Kubernetes,有两种常见方式:
- Minikube(适合个人学习)
# 安装 Minikube(Mac) brew install minikube minikube start
Kind(Kubernetes in Docker,轻量级)
bash
复制
编辑
安装 Kind
go install sigs.k8s.io/kind@latest
kind create cluster
5. 第一个应用:Nginx 部署
创建 Deployment
bash
复制
编辑
kubectl create deployment my-nginx --image=nginx:latest
暴露 Service
bash
复制
编辑
kubectl expose deployment my-nginx --port=80 --type=NodePort
查看 Pod 和 Service
bash
复制
编辑
kubectl get pods
kubectl get svc
访问 http://: 即可看到 Nginx 首页。
6. 滚动升级与回滚
升级:
bash
复制
编辑
kubectl set image deployment/my-nginx nginx=nginx:1.25
回滚:
bash
复制
编辑
kubectl rollout undo deployment/my-nginx
7. 实践建议
配置声明化:使用 YAML 文件管理 Deployment、Service,方便版本控制。
命名空间隔离:不同环境(dev/test/prod)用不同 Namespace。
资源限制:为 Pod 设置 requests 和 limits,防止资源抢占。
监控告警:配合 Prometheus + Grafana 监控集群健康。
自动扩缩容:使用 HorizontalPodAutoscaler 自动应对流量变化。
1330

被折叠的 条评论
为什么被折叠?



