K8s很难,很多人学了很久都入不了门。
我也是从零基础开始学K8s的。一开始,看官方文档,看得云里雾里;跟着教程操作,又不知道为什么要这么做。踩了很多坑,也走了很多弯路,花了几个月时间,才慢慢入门。
本文分享我的K8s学习路线,包括学习阶段、每个阶段学什么、用什么资源、做什么练习,以及常见的误区。如果你想学K8s但不知道从何入手,希望这篇文章能帮到你。
一、学习K8s的前提
在学K8s之前,需要有一些基础知识。
1. Linux基础
K8s运行在Linux上,很多操作都是命令行。需要掌握:
- 常用命令:ls、cd、cp、mv、rm、grep、awk、sed等
- 文件系统:目录结构、权限、软链接等
- 进程管理:ps、top、kill等
- 网络基础:IP、端口、DNS、iptables等
- 文本编辑器:vim或nano
如果Linux基础不好,学K8s会很吃力。建议先花一两周时间,把Linux基础补一补。
2. Docker基础
K8s是容器编排工具,容器是基础。需要掌握:
- 容器的概念:什么是容器,和虚拟机的区别
- Docker的常用命令:run、ps、images、build、exec、logs等
- Dockerfile:怎么写Dockerfile,怎么构建镜像
- 镜像仓库:怎么推送和拉取镜像
- 网络和存储:容器的网络模式、数据卷
如果连Docker都不会,直接学K8s,会完全听不懂。建议先把Docker学扎实。
3. 网络基础
K8s的网络比较复杂,需要有一定的网络基础:
- TCP/IP协议
- DNS解析
- 端口和端口映射
- 负载均衡
- 虚拟网络(VPC、Overlay网络)
网络是K8s的难点之一,基础不好的话,学起来会很痛苦。
4. 编程基础
不是必须的,但有编程基础会学得更快:
- 能看懂YAML文件
- 能写简单的脚本(Shell、Python等)
- 了解RESTful API
K8s的配置文件都是YAML格式,API是RESTful的,有编程基础会更容易理解。
二、学习路线总览
我把K8s的学习分为五个阶段:
- 入门阶段:了解K8s是什么,能做什么,搭建一个简单的集群
- 基础阶段:掌握核心概念和常用操作
- 进阶阶段:深入理解K8s的原理和高级特性
- 实战阶段:在实际项目中使用K8s
- 专家阶段:源码、二次开发、性能优化
每个阶段,都有不同的学习重点和练习目标。
三、第一阶段:入门(1-2周)
入门阶段的目标是:了解K8s是什么,能做什么,搭建一个简单的集群,部署第一个应用。
1. 了解K8s的基本概念
先了解K8s的基本概念:
- 什么是K8s:容器编排工具,用于自动化部署、扩展和管理容器化应用
- K8s的起源:Google的Borg,2014年开源
- K8s的特点:自动部署、自动扩缩容、自愈、服务发现和负载均衡
- K8s的架构:Master节点和Worker节点
- 核心组件:API Server、etcd、Scheduler、Controller Manager、kubelet、kube-proxy
这一步,不需要深入理解,有个大概印象就行。
推荐资源:
- K8s官方文档的"Concepts"部分
- 《Kubernetes in Action》前两章
- B站的K8s入门视频
2. 搭建本地集群
搭建一个本地的K8s集群,用于学习和练习。
推荐用minikube或kind:
- minikube:单节点集群,适合初学者
- kind:把K8s跑在Docker容器里,启动快
搭建步骤(以minikube为例):
- 安装VirtualBox或Docker
- 安装kubectl
- 安装minikube
- 运行
minikube start - 运行
kubectl get nodes,确认集群正常
这一步,可能会遇到各种问题:网络问题、镜像拉不下来、虚拟化没开等。遇到问题不要怕,搜一下,慢慢解决。
3. 部署第一个应用
集群搭好后,部署第一个应用。
用kubectl run命令,部署一个Nginx:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
minikube service nginx然后在浏览器里访问,看到Nginx的欢迎页面,就成功了。
这一步,让你对K8s有一个直观的感受:原来部署应用这么简单。
4. 了解基本操作
学习一些基本的kubectl命令:
kubectl get:查看资源(pods、services、deployments等)kubectl describe:查看资源的详细信息kubectl logs:查看容器日志kubectl exec:进入容器kubectl delete:删除资源kubectl apply:应用配置文件
这些命令,是日常使用K8s最常用的,要熟练掌握。
四、第二阶段:基础(2-4周)
基础阶段的目标是:掌握K8s的核心概念和常用操作,能独立部署和管理应用。
1. Pod
Pod是K8s的最小调度单位,必须深入理解:
- 什么是Pod:一组容器的集合,共享网络和存储
- Pod的生命周期:Pending、Running、Succeeded、Failed、Unknown
- Pod的重启策略:Always、OnFailure、Never
- 多容器Pod:sidecar模式
- Pod的探针:livenessProbe、readinessProbe、startupProbe
- 资源限制:requests和limits
练习:
- 创建一个单容器Pod
- 创建一个多容器Pod(sidecar模式)
- 配置livenessProbe和readinessProbe
- 配置资源限制
2. Deployment和ReplicaSet
Deployment是管理Pod的控制器,是最常用的资源:
- ReplicaSet:保证Pod的副本数
- Deployment:管理ReplicaSet,支持滚动更新和回滚
- 滚动更新:逐步替换旧版本的Pod
- 回滚:出问题时回滚到上一个版本
- 扩缩容:增加或减少Pod的副本数
练习:
- 创建一个Deployment
- 执行滚动更新
- 执行回滚
- 手动扩缩容
- 配置HPA(自动扩缩容)
3. Service
Service是K8s的服务发现和负载均衡机制:
- Service的类型:ClusterIP、NodePort、LoadBalancer、ExternalName
- Service的原理:kube-proxy、iptables或IPVS
- 服务发现:DNS解析
- 端口:port、targetPort、nodePort
练习:
- 创建ClusterIP类型的Service
- 创建NodePort类型的Service
- 用DNS在Pod之间访问Service
- 理解Service和Pod的关系(通过label selector)
4. ConfigMap和Secret
配置管理:
- ConfigMap:存储非敏感配置
- Secret:存储敏感信息(密码、密钥等)
- 使用方式:环境变量、命令行参数、挂载为文件
练习:
- 创建ConfigMap,通过环境变量注入到Pod
- 创建Secret,通过文件挂载到Pod
5. Volume和持久化存储
存储管理:
- Volume:Pod级别的存储,Pod删除后数据丢失
- PersistentVolume(PV):集群级别的存储
- PersistentVolumeClaim(PVC):用户对存储的请求
- StorageClass:动态存储供给
练习:
- 使用emptyDir Volume
- 使用hostPath Volume
- 创建PV和PVC,挂载到Pod
- 使用StorageClass动态创建PV
6. Namespace
命名空间,用于资源隔离:
- 什么是Namespace:逻辑上的集群分区
- 常用Namespace:default、kube-system、kube-public
- 资源限额:ResourceQuota和LimitRange
- 切换Namespace:
kubectl config set-context
练习:
- 创建Namespace
- 在Namespace中创建资源
- 配置ResourceQuota
推荐资源:
- K8s官方文档的"Tasks"部分
- 《Kubernetes in Action》第3-8章
- 动手实验,每个概念都要亲手操作
五、第三阶段:进阶(4-8周)
进阶阶段的目标是:深入理解K8s的原理,掌握高级特性,能排查和解决问题。
1. K8s架构深入
深入理解K8s的架构和组件:
- API Server:所有请求的入口,负责认证、授权、准入控制
- etcd:分布式键值存储,存储集群的所有数据
- Scheduler:负责Pod的调度
- Controller Manager:各种控制器的集合
- kubelet:运行在每个节点上,管理Pod的生命周期
- kube-proxy:负责Service的网络代理
- CoreDNS:集群内的DNS服务
理解每个组件的作用和工作原理,以及它们之间的交互。
2. 网络模型
K8s的网络是难点,需要深入理解:
- K8s网络模型:每个Pod有独立的IP,Pod之间可以直接通信
- Pod网络:CNI插件(Flannel、Calico、Cilium等)
- Service网络:kube-proxy的iptables/IPVS模式
- Ingress:HTTP层的路由
- 网络策略:NetworkPolicy,控制Pod之间的网络访问
练习:
- 安装Calico或Cilium CNI插件
- 配置Ingress,实现域名路由
- 配置NetworkPolicy,限制Pod之间的访问
3. 调度
理解K8s的调度机制:
- 调度流程:过滤、打分、绑定
- 节点选择:nodeSelector、nodeAffinity
- Pod亲和性:podAffinity、podAntiAffinity
- 污点和容忍:Taint和Toleration
- 资源调度:requests和limits的影响
- 自定义调度器
练习:
- 用nodeSelector把Pod调度到指定节点
- 配置nodeAffinity
- 给节点打污点,配置容忍
4. 控制器和Operator
理解K8s的控制器模式:
- 控制器模式:期望状态 vs 实际状态,不断调和
- 常用控制器:Deployment、StatefulSet、DaemonSet、Job、CronJob
- StatefulSet:有状态应用的部署
- DaemonSet:每个节点运行一个Pod
- Job和CronJob:一次性任务和定时任务
- Operator:自定义控制器,管理复杂应用
练习:
- 用StatefulSet部署有状态应用(如MySQL)
- 用DaemonSet部署日志收集组件
- 用CronJob运行定时任务
- 了解Operator模式,尝试用Operator部署应用
5. 安全
K8s的安全:
- 认证:用户认证、Service Account
- 授权:RBAC(基于角色的访问控制)
- 准入控制:Admission Controller
- Pod安全标准:Privileged、Baseline、Restricted
- 网络安全:NetworkPolicy
- 镜像安全:镜像扫描、私有仓库
练习:
- 创建Role和RoleBinding,限制用户权限
- 创建Service Account,给Pod分配权限
- 配置Pod安全策略
6. 可观测性
监控、日志、追踪:
- 监控:Prometheus + Grafana
- 日志:EFK(Elasticsearch、Fluentd、Kibana)或Loki
- 追踪:Jaeger或Zipkin
- 指标:Metrics Server、cAdvisor
练习:
- 安装Prometheus和Grafana,监控集群
- 安装Loki,收集日志
- 了解分布式追踪
推荐资源:
- K8s官方文档的"Concepts"深入部分
- 《Kubernetes in Action》第9-15章
- K8s源码(可选)
- 技术博客和分享
六、第四阶段:实战(持续)
实战阶段的目标是:在实际项目中使用K8s,积累经验。
1. 搭建生产级集群
搭建一个生产级的K8s集群:
- 多Master节点,高可用
- 独立的etcd集群
- 网络插件(Calico或Cilium)
- 存储(Ceph或云存储)
- 监控和日志
- 安全配置
可以用kubeadm、kubespray或云厂商的托管K8s(EKS、GKE、AKS)。
2. 部署实际应用
把实际的应用部署到K8s上:
- 无状态应用:Web服务、API服务
- 有状态应用:数据库、消息队列
- 微服务架构:服务发现、配置管理、链路追踪
- CI/CD:自动构建、自动部署
3. 运维和排障
积累运维和排障经验:
- 集群升级
- 节点维护
- 应用故障排查
- 性能优化
- 灾难恢复
排障是最能锻炼人的。遇到问题,一步步排查,理解底层原理。
七、第五阶段:专家(持续)
专家阶段:
- 阅读K8s源码,理解核心组件的实现
- 参与K8s社区,贡献代码
- 开发CRD和Operator
- 性能调优和大规模集群管理
- 云原生生态:Service Mesh(Istio)、Serverless(Knative)等
这个阶段,需要长期的积累和实践。
八、常见的误区
说说学K8s常见的误区。
误区一:只看不练
很多人学K8s,只看文档和视频,不动手操作。
K8s是实践性很强的技术,只看不练,永远学不会。一定要动手操作,每个概念都要亲手实验。
误区二:追求大而全
K8s的概念很多,有些人想一次全部学会,结果什么都没学会。
建议循序渐进,先掌握核心概念(Pod、Deployment、Service),再学高级特性。
误区三:跳过基础
有些人Linux和Docker还没学好,就直接学K8s,结果越学越糊涂。
基础很重要。Linux、Docker、网络,这些基础打好了,学K8s会事半功倍。
误区四:死记硬背
K8s的命令和配置很多,有些人死记硬背,结果过几天就忘了。
要理解原理,理解了原理,命令和配置自然就记住了。
误区五:不看官方文档
有些人只看二手教程,不看官方文档。
官方文档是最权威、最及时的。要养成看官方文档的习惯,遇到问题先查文档。
九、学习资源推荐
推荐一些学习资源:
官方文档:
- K8s官方文档:https://kubernetes.io/docs/
- K8s中文文档:https://kubernetes.io/zh/docs/
书籍:
- 《Kubernetes in Action》:最经典的K8s书籍,推荐
- 《Kubernetes权威指南》:国内作者写的,也不错
- 《Kubernetes设计与实现》:深入原理
视频:
- B站搜索"K8s教程",有很多免费视频
- CNCF的官方培训
实践环境:
- minikube:本地学习
- kind:本地多节点集群
- 云厂商免费额度:阿里云、腾讯云、AWS等
社区:
- K8s中文社区
- CNCF中国
- 各种技术微信群、QQ群
十、写在最后
K8s很难,但也不是学不会。
关键是:打好基础,循序渐进,动手实践,持续积累。
我从零基础到入门,花了几个月时间。中间也有过放弃的念头,但坚持下来了。现在,K8s已经成为我工作中不可或缺的工具。
2022年8月,K8s 1.25已经发布(注:K8s 1.25于2022年8月23日发布,本文写作时基于1.25的特性前瞻)。K8s还在不断发展,新特性层出不穷。学习K8s是一个长期的过程,要保持学习的习惯。
最后,用一句话总结:"K8s学习没有捷径,打好基础,动手实践,持续积累,你就能入门。"
愿你在K8s的学习道路上,少走弯路,早日入门。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录