- 序言
- Roadmap
- 部署指南
- 集群方案
- 最佳实践
- 排错指南
- 领域应用
- 开发指南
- 在线阅读
- 项目源码
- 贡献
- License
- Roadmap
序言
Roadmap
本书正在起草初期,内容将包含大量 Kubernetes 实践干货,大量规划内容还正在路上,可以点击的表示是已经可以在左侧导航栏中找到的并预览的文章,但不代表已经完善,还会不断的补充和优化。
部署指南
自建的 k8s 集群有很多种方式部署方式,k8s 知识库将列举手工二进制部署与各种辅助工具部署的方法,可以根据自己使用场景选择对应合适的部署方法。除此之外,还会包含大量的常用应用的部署方法,比如各种数据库和存储基础设施部署,不同的业务场景和解决方案都可能依赖这些应用,每种应用部署方法都可能被书内其它多处地方引用。
- 部署方案选型
- 单机部署
- 手工部署
- 部署前的准备工作
- 部署 ETCD
- 部署 Master
- 部署 Worker 节点
- 部署关键附加组件
- 使用 Kubeadm 部署集群
- 使用 Minikube 部署测试集群
- 使用 Bootkube 部署集群
- 使用 Ansible 部署集群
- 部署附加组件
- 部署 CoreDNS
- 以 Daemonset 方式部署 kube-proxy
- 常见应用部署
- ElasticSearch 与 Kibana
- 使用 elastic-oparator 部署
- ETCD
- Zookeeper
- Consul
- Kafka
- Redis
- TiKV
- MySQL
- TiDB
- PostgreSQL
- MongoDB
- Cassandra
- InfluxDB
- OpenTSDB
- ElasticSearch 与 Kibana
集群方案
k8s 拥有惊人的扩展能力,针对不同环境和场景可以使用不同的方案,涵盖网络、存储、运行时、Ingress、Metrics 等。k8s 知识库会帮助你彻底理清这些机制,并深入剖析各种方案的原理、用法与使用场景。
- 网络方案
- 彻底理解集群网络
- Network Policy
- 开源网络方案
- Flannel
- Flannel 网络原理
- 部署 Flannel
- Macvlan
- Calico
- Cilium
- Kube-router
- Kube-OVN
- OpenVSwitch
- 运行时方案
- Docker
- Docker 介绍
- Docker 安装
- Containerd
- containerd 介绍
- 安装 containerd
- CRI-O
- CRI-O 介绍
- CRI-O 安装
- Docker
- 存储方案
- Rook
- OpenEBS
- Ingress 方案
- Nginx Ingress
- 安装 nginx ingress controller
- Traefik Ingress
- 安装 traefik ingress controller
- Contour
- Ambassador
- Kong
- Gloo
- HAProxy
- Istio
- Skipper
- Nginx Ingress
- LoadBalancer 方案
- MetalLB
- Porter
- Metrics 方案
- 安装 metrics server
最佳实践
k8s 有先进的设计理念,也包含了大量概念,并提供了非常丰富的能力,用法琳琅满目,但入门比较困难,k8s 知识库将提供使用 k8s 的各种场景里的最佳实践,帮助大家少走弯路,比如如何管理和运维集群、如何进行动态伸缩、如何保证部署的服务高可用、如何在更新服务或扩缩容节点保证业务零感知、如何部署有状态服务、如何针对大规模集群进行优化、如何对资源进行隔离和共享以及针对各种需求和问题的解决方案等。
- 服务高可用
- 本地 DNS 缓存
- 泛域名动态转发 Service
- 集群权限控制
- 利用 CSR API 创建用户
- 控制用户权限
- 控制应用权限
- 有状态服务部署
- 实用工具和技巧
- kubectl 高效技巧
- 实用 yaml 片段
- 实用命令与脚本
- 集群证书管理
- 安装 cert-manager
- 使用 cert-manager 自动生成证书
- 集群配置管理
- Helm
- 安装 Helm
- Helm V2 迁移到 V3
- 使用 Helm 部署与管理应用
- 开发 Helm Charts
- Kustomize
- Kustomize 基础入门
- Helm
- 大规模集群优化
- 弹性伸缩
- 使用 HPA 对 Pod 水平伸缩
- 使用 VPA 对 Pod 垂直伸缩
- 使用 Cluster Autoscaler 对节点水平伸缩
- 资源分配与限制
- Master 高可用
- 资源隔离与共享
- 利用 kata-container 隔离容器资源
- 利用 gVisor 隔离容器资源
- 利用 lvm 和 xfs 实现容器磁盘隔离
- 利用 lxcfs 隔离 proc 提升容器资源可见性
- 共享存储
- 共享内存
- Pod 原地重启
- 集群升级
- 固定 IP
- 备份与恢复
- ETCD 性能优化
- 内核参数优化
- CPU 亲和性
- 使用大页内存
- 离在线混合部署
- 集群监控
- Prometheus
- Grafana
- 日志搜集
- EFK/ELK
- 集群安全
- 使用 PodSecurityPolicy 配置全局 Pod 安全策略
- 集群审计
- 集群可视化管理
- Kubernetes Dashboard
- KubSphere
- Weave Scope
- Rancher
- Kui
- Kubebox
- 集群镜像管理
- Harbor
- Dragonfly
- Kaniko
- kpack
排错指南
正是 k8s 功能如此丰富强大,迭代速度如此之快,其复杂性和不确定性也非常之大。知识库会总结出各种问题的排查思路与可能原因,还有对应解决方案的最佳实践,也分享一些踩坑案例与排错技巧,与排错技巧,让大家少走弯路。
- 问题排查
- Pod 排错
- Pod 一直处于 Pending 状态
- Pod 一直处于 ContainerCreating 或 Waiting 状态
- Pod 一直处于 CrashLoopBackOff 状态
- Pod 一直处于 Terminating 状态
- Pod 一直处于 Unknown 状态
- Pod 一直处于 Error 状态
- Pod 一直处于 ImagePullBackOff 状态
- Pod 一直处于 ImageInspectError 状态
- Pod 健康检查失败
- 容器进程主动退出
- 网络排错
- LB 健康检查失败
- DNS 解析异常
- Service 不通
- 网络性能差
- 集群排错
- Node 全部消失
- Daemonset 没有被调度
- Apiserver 响应慢
- ETCD 频繁选主
- Node 异常
- 经典报错
- no space left on device
- arp_cache: neighbor table overflow!
- Cannot allocate memory
- 其它排错
- Job 无法被删除
- kubectl 执行 exec 或 logs 失败
- 内核软死锁
- Pod 排错
- 处理实践
- 高负载
- 内存碎片化
- 磁盘爆满
- inotify watch 耗尽
- PID 耗尽
- arp_cache 溢出
- 踩坑总结
- cgroup 泄露
- tcp_tw_recycle 引发丢包
- 使用 oom-guard 在用户态处理 cgroup OOM
- conntrack 冲突导致丢包
- 案例分享
- 驱逐导致服务中断
- DNS 5 秒延时
- arp_cache 溢出导致健康检查失败
- 跨 VPC 访问 NodePort 经常超时
- 访问 externalTrafficPolicy 为 Local 的 Service 对应 LB 有时超时
- Pod 偶尔存活检查失败
- DNS 解析异常
- Pod 访问另一个集群的 apiserver 有延时
- LB 压测 NodePort CPS 低
- kubectl edit 或者 apply 报 SchemaError
- 排错技巧
- 分析 ExitCode 定位 Pod 异常退出原因
- 容器内抓包定位网络问题
- 使用 Systemtap 定位疑难杂症
- 使用 kubectl-debug 帮助定位问题
- 分析 Docker 磁盘占用
领域应用
k8s 在各个领域都发挥了巨大作用,我们会将 k8s 在这些领域的应用汇总,给出各种场景化应用的指南,比如近年来如火如荼的 DevOps 领域,其中 CI/CD 的应用更是大家迫切期望想要的。还有 AI,大数据,微服务架构,Service Mesh,Serverless 等。
- 微服务架构
- 服务发现
- 服务治理
- 分布式追踪
- Jaeger
- Service Mesh
- Istio
- Maesh
- Kuma
- Serverless
- Knative
- Kubeless
- Fission
- DevOps
- Jenkins X
- Tekton
- Argo
- GoCD
- Argo
- GitLab CI
- Drone
- AI
- nvidia-docker
- Kubeflow
- 大数据
- Spark on K8S
- Hadoop on K8S
开发指南
k8s 开放了很多扩展能力,基于这些扩展机制可以开发出各种功能的应用,比如集群管理应用、部署有状态服务的应用(Operator)等,知识库将介绍如何开发这些应用。
- 开发环境搭建
- Go 语言编译原理与优化
- Operator
- Operator 概述
- operator-sdk
- kubebuilder
- client-go
- 社区贡献
在线阅读
本书将支持中英文两个语言版本,通常文章会先用中文起草并更新,等待其内容较为成熟完善,更新不再频繁的时候才会翻译成英文,点击左上角切换语言。
- 中文: https://k8s.imroc.io
- English: https://k8s.imroc.io/v/en
项目源码
项目源码存放于 Github 上: https://github.com/imroc/kubernetes-practice-guide
贡献
欢迎参与贡献和完善内容,贡献方法参考 CONTRIBUTING
License
署名-非商业性使用-相同方式共享 4.0 (CC BY-NC-SA 4.0)