Kubernetes教程FG001-Kubernetes架构原理与官方核心特性生产实战解析
本文档风哥主要介绍Kubernetes的架构原理与核心特性,包括Kubernetes的核心概念、架构组成、核心组件等内容,风哥教程参考Kubernetes官方文档Understanding Kubernetes内容,适合DevOps工程师和系统管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 Kubernetes核心概念
Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。Kubernetes的核心概念包括:
- Pod:Kubernetes的最小部署单元,包含一个或多个容器
- Service:提供稳定的网络访问方式,将流量路由到后端Pod
- Deployment:管理Pod的副本数量,确保指定数量的Pod运行
- ReplicaSet:确保指定数量的Pod副本运行
- Namespace:为资源提供隔离的命名空间
- ConfigMap:存储配置信息
- Secret:存储敏感信息
- PersistentVolume:持久化存储
1.2 Kubernetes架构组成
Kubernetes采用主从架构,主要由控制平面(Control Plane)和工作节点(Worker Nodes)组成:
# Kubernetes架构组成
– 控制平面:负责集群的管理和决策
– 工作节点:负责运行应用容器
– 集群服务:提供集群内部的服务发现和通信
# 控制平面组件
– kube-apiserver:API服务器,集群的控制入口
– etcd:分布式键值存储,存储集群配置数据
– kube-scheduler:调度器,负责Pod的调度
– kube-controller-manager:控制器管理器,管理各种控制器
– cloud-controller-manager:云控制器管理器,与云服务提供商交互
# 工作节点组件
– kubelet:节点代理,管理节点上的容器
– kube-proxy:网络代理,管理网络规则
– 容器运行时:如Docker、containerd等
– 控制平面:负责集群的管理和决策
– 工作节点:负责运行应用容器
– 集群服务:提供集群内部的服务发现和通信
# 控制平面组件
– kube-apiserver:API服务器,集群的控制入口
– etcd:分布式键值存储,存储集群配置数据
– kube-scheduler:调度器,负责Pod的调度
– kube-controller-manager:控制器管理器,管理各种控制器
– cloud-controller-manager:云控制器管理器,与云服务提供商交互
# 工作节点组件
– kubelet:节点代理,管理节点上的容器
– kube-proxy:网络代理,管理网络规则
– 容器运行时:如Docker、containerd等
1.3 Kubernetes核心组件
Kubernetes的核心组件及其功能:
核心组件功能:
- kube-apiserver:提供REST API接口,是集群的控制中心
- etcd:存储集群的配置数据和状态信息
- kube-scheduler:根据资源需求和约束条件调度Pod
- kube-controller-manager:管理各种控制器,如ReplicaSet控制器、Deployment控制器等
- kubelet:管理节点上的容器,确保容器按照Pod规范运行
- kube-proxy:管理节点上的网络规则,实现服务发现和负载均衡
,学习交流加群风哥微信: itpux-com。
Part02-生产环境规划与建议
2.1 硬件要求
生产环境Kubernetes集群的硬件要求:
# 控制平面节点硬件要求
– CPU:至少2核,推荐4核或以上
– 内存:至少4GB,推荐8GB或以上
– 存储:至少100GB SSD,推荐200GB或以上
# 工作节点硬件要求
– CPU:根据应用需求,至少2核,推荐4核或以上
– 内存:根据应用需求,至少4GB,推荐8GB或以上
– 存储:根据应用需求,至少100GB,推荐200GB或以上
# 生产环境建议
– 控制平面节点:至少3个,实现高可用
– 工作节点:根据应用需求,至少2个
– 存储:使用SSD提高性能
– 网络:使用高速网络,推荐10Gbps
– CPU:至少2核,推荐4核或以上
– 内存:至少4GB,推荐8GB或以上
– 存储:至少100GB SSD,推荐200GB或以上
# 工作节点硬件要求
– CPU:根据应用需求,至少2核,推荐4核或以上
– 内存:根据应用需求,至少4GB,推荐8GB或以上
– 存储:根据应用需求,至少100GB,推荐200GB或以上
# 生产环境建议
– 控制平面节点:至少3个,实现高可用
– 工作节点:根据应用需求,至少2个
– 存储:使用SSD提高性能
– 网络:使用高速网络,推荐10Gbps
2.2 操作系统要求
生产环境Kubernetes集群的操作系统要求:
- 主要系统:Oracle Linux 9.3 / RHEL 9.3 / 8.x / 7.x
- 可选系统:国产麒麟操作系统 Kylin v10 SP3、欧拉
- 内核版本:推荐4.19或以上
- 系统配置:关闭防火墙、关闭SELinux、配置时间同步
2.3 网络要求
生产环境Kubernetes集群的网络要求。,风哥提示:。
# 网络要求
– 所有节点之间网络互通
– 控制平面节点需要开放6443端口(API服务器)
– 工作节点需要开放10250端口(kubelet)
– 集群网络CIDR:需要为Pod和Service分配CIDR
– 网络插件:需要选择合适的网络插件,如Calico、Flannel等
# 网络插件选择
– Calico:功能丰富,支持网络策略
– Flannel:简单易用,适合小型集群
– Cilium:基于eBPF,性能优异
– Weave Net:易于部署,适合测试环境
– 所有节点之间网络互通
– 控制平面节点需要开放6443端口(API服务器)
– 工作节点需要开放10250端口(kubelet)
– 集群网络CIDR:需要为Pod和Service分配CIDR
– 网络插件:需要选择合适的网络插件,如Calico、Flannel等
# 网络插件选择
– Calico:功能丰富,支持网络策略
– Flannel:简单易用,适合小型集群
– Cilium:基于eBPF,性能优异
– Weave Net:易于部署,适合测试环境
Part03-生产环境项目实施方案
3.1 集群设计
,学习交流加群风哥QQ113257174。
生产环境Kubernetes集群设计:
# 集群规模设计
– 小型集群:3个控制平面节点 + 2-5个工作节点
– 中型集群:3个控制平面节点 + 6-20个工作节点
– 大型集群:5个控制平面节点 + 20个以上工作节点
# 高可用设计
– 控制平面高可用:至少3个控制平面节点
– etcd高可用:至少3个etcd节点
– 工作节点高可用:至少2个工作节点
# 存储设计
– 控制平面存储:使用SSD,推荐使用本地存储
– 工作节点存储:根据应用需求选择存储类型
– 持久化存储:使用PV/PVC,支持动态 provisioning
– 小型集群:3个控制平面节点 + 2-5个工作节点
– 中型集群:3个控制平面节点 + 6-20个工作节点
– 大型集群:5个控制平面节点 + 20个以上工作节点
# 高可用设计
– 控制平面高可用:至少3个控制平面节点
– etcd高可用:至少3个etcd节点
– 工作节点高可用:至少2个工作节点
# 存储设计
– 控制平面存储:使用SSD,推荐使用本地存储
– 工作节点存储:根据应用需求选择存储类型
– 持久化存储:使用PV/PVC,支持动态 provisioning
3.2 高可用架构
生产环境Kubernetes高可用架构。
# 控制平面高可用
– 3个控制平面节点,分布在不同的物理主机
– 负载均衡器:前端配置负载均衡器,如HAProxy、Nginx
– etcd集群:3个etcd节点,分布在不同的物理主机
# 工作节点高可用
– 至少2个工作节点,分布在不同的物理主机
– Pod副本分布:通过Deployment确保Pod副本分布在不同的节点
– 服务发现:使用Service实现服务的负载均衡
# 网络高可用
– 多网络路径:配置多网卡,实现网络冗余
– 网络插件:选择支持高可用的网络插件
– 3个控制平面节点,分布在不同的物理主机
– 负载均衡器:前端配置负载均衡器,如HAProxy、Nginx
– etcd集群:3个etcd节点,分布在不同的物理主机
# 工作节点高可用
– 至少2个工作节点,分布在不同的物理主机
– Pod副本分布:通过Deployment确保Pod副本分布在不同的节点
– 服务发现:使用Service实现服务的负载均衡
# 网络高可用
– 多网络路径:配置多网卡,实现网络冗余
– 网络插件:选择支持高可用的网络插件
3.3 安全设计
生产环境Kubernetes安全设计:
安全设计要点:
- RBAC:使用基于角色的访问控制
- Pod安全策略:限制Pod的权限
- 网络策略:限制Pod之间的网络通信
- Secret管理:使用Secret存储敏感信息
- 镜像安全:使用私有镜像仓库,定期扫描镜像
- API服务器安全:配置TLS,限制访问
Part04-生产案例与实战讲解
4.1 集群健康检查
,更多视频教程www.fgedu.net.cn。
生产环境Kubernetes集群健康检查。
# 检查集群状态
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.1.100:6443
CoreDNS is running at https://192.168.1.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.
# 检查节点状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
fgedu-master1 Ready control-plane,master 1d v1.28.0
fgedu-master2 Ready control-plane,master 1d v1.28.0
fgedu-master3 Ready control-plane,master 1d v1.28.0
fgedu-worker1 Ready 1d v1.28.0
fgedu-worker2 Ready 1d v1.28.0
# 检查集群组件状态
$ kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy ok
etcd-1 Healthy ok
etcd-2 Healthy ok
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.1.100:6443
CoreDNS is running at https://192.168.1.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.
# 检查节点状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
fgedu-master1 Ready control-plane,master 1d v1.28.0
fgedu-master2 Ready control-plane,master 1d v1.28.0
fgedu-master3 Ready control-plane,master 1d v1.28.0
fgedu-worker1 Ready
fgedu-worker2 Ready
# 检查集群组件状态
$ kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy ok
etcd-1 Healthy ok
etcd-2 Healthy ok
4.2 组件状态检查
生产环境Kubernetes组件状态检查:
# 检查控制平面组件状态
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6d4b75cb6d-7f5f8 1/1 Running 0 1d
coredns-6d4b75cb6d-8k45d 1/1 Running 0 1d
etcd-fgedu-master1 1/1 Running 0 1d
etcd-fgedu-master2 1/1 Running 0 1d
etcd-fgedu-master3 1/1 Running 0 1d
kube-apiserver-fgedu-master1 1/1 Running 0 1d
kube-apiserver-fgedu-master2 1/1 Running 0 1d
kube-apiserver-fgedu-master3 1/1 Running 0 1d
kube-controller-manager-fgedu-master1 1/1 Running 0 1d
kube-controller-manager-fgedu-master2 1/1 Running 0 1d
kube-controller-manager-fgedu-master3 1/1 Running 0 1d
kube-proxy-4q7k8 1/1 Running 0 1d
kube-proxy-7c9x6 1/1 Running 0 1d
kube-proxy-8d2k3 1/1 Running 0 1d
kube-proxy-9f5g7 1/1 Running 0 1d
kube-proxy-b7c4d 1/1 Running 0 1d
kube-scheduler-fgedu-master1 1/1 Running 0 1d
kube-scheduler-fgedu-master2 1/1 Running 0 1d
kube-scheduler-fgedu-master3 1/1 Running 0 1d,更多学习教程公众号风哥教程itpux_com。
# 检查etcd状态
$ kubectl exec -n kube-system etcd-fgedu-master1 — etcdctl –endpoints=https://127.0.0.1:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key member list
8211f1d0f64f3269, started, fgedu-master1, https://192.168.1.101:2380, https://192.168.1.101:2379, false
9127b0a199f849f1, started, fgedu-master2, https://192.168.1.102:2380, https://192.168.1.102:2379, false
c584a6c43164f17c, started, fgedu-master3, https://192.168.1.103:2380, https://192.168.1.103:2379, false
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6d4b75cb6d-7f5f8 1/1 Running 0 1d
coredns-6d4b75cb6d-8k45d 1/1 Running 0 1d
etcd-fgedu-master1 1/1 Running 0 1d
etcd-fgedu-master2 1/1 Running 0 1d
etcd-fgedu-master3 1/1 Running 0 1d
kube-apiserver-fgedu-master1 1/1 Running 0 1d
kube-apiserver-fgedu-master2 1/1 Running 0 1d
kube-apiserver-fgedu-master3 1/1 Running 0 1d
kube-controller-manager-fgedu-master1 1/1 Running 0 1d
kube-controller-manager-fgedu-master2 1/1 Running 0 1d
kube-controller-manager-fgedu-master3 1/1 Running 0 1d
kube-proxy-4q7k8 1/1 Running 0 1d
kube-proxy-7c9x6 1/1 Running 0 1d
kube-proxy-8d2k3 1/1 Running 0 1d
kube-proxy-9f5g7 1/1 Running 0 1d
kube-proxy-b7c4d 1/1 Running 0 1d
kube-scheduler-fgedu-master1 1/1 Running 0 1d
kube-scheduler-fgedu-master2 1/1 Running 0 1d
kube-scheduler-fgedu-master3 1/1 Running 0 1d,更多学习教程公众号风哥教程itpux_com。
# 检查etcd状态
$ kubectl exec -n kube-system etcd-fgedu-master1 — etcdctl –endpoints=https://127.0.0.1:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key member list
8211f1d0f64f3269, started, fgedu-master1, https://192.168.1.101:2380, https://192.168.1.101:2379, false
9127b0a199f849f1, started, fgedu-master2, https://192.168.1.102:2380, https://192.168.1.102:2379, false
c584a6c43164f17c, started, fgedu-master3, https://192.168.1.103:2380, https://192.168.1.103:2379, false
4.3 资源监控
生产环境Kubernetes资源监控。
# 检查节点资源使用情况
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
fgedu-master1 125m 6% 1638Mi 20%
fgedu-master2 112m 5% 1542Mi 19%
fgedu-master3 108m 5% 1498Mi 18%
fgedu-worker1 256m 12% 3245Mi 40%
fgedu-worker2 234m 11% 3012Mi 37%
# 检查Pod资源使用情况
$ kubectl top pods -n kube-system
NAME CPU(cores) MEMORY(bytes)
coredns-6d4b75cb6d-7f5f8 2m 12Mi
coredns-6d4b75cb6d-8k45d 2m 11Mi
etcd-fgedu-master1 25m 198Mi
etcd-fgedu-master2 23m 192Mi
etcd-fgedu-master3 24m 195Mi
kube-apiserver-fgedu-master1 56m 324Mi
kube-apiserver-fgedu-master2 54m 318Mi
kube-apiserver-fgedu-master3 55m 321Mi
kube-controller-manager-fgedu-master1 22m 124Mi
kube-controller-manager-fgedu-master2 21m 121Mi
kube-controller-manager-fgedu-master3 23m 125Mi
kube-scheduler-fgedu-master1 8m 45Mi
kube-scheduler-fgedu-master2 7m 43Mi
kube-scheduler-fgedu-master3 8m 44Mi
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
fgedu-master1 125m 6% 1638Mi 20%
fgedu-master2 112m 5% 1542Mi 19%
fgedu-master3 108m 5% 1498Mi 18%
fgedu-worker1 256m 12% 3245Mi 40%
fgedu-worker2 234m 11% 3012Mi 37%
# 检查Pod资源使用情况
$ kubectl top pods -n kube-system
NAME CPU(cores) MEMORY(bytes)
coredns-6d4b75cb6d-7f5f8 2m 12Mi
coredns-6d4b75cb6d-8k45d 2m 11Mi
etcd-fgedu-master1 25m 198Mi
etcd-fgedu-master2 23m 192Mi
etcd-fgedu-master3 24m 195Mi
kube-apiserver-fgedu-master1 56m 324Mi
kube-apiserver-fgedu-master2 54m 318Mi
kube-apiserver-fgedu-master3 55m 321Mi
kube-controller-manager-fgedu-master1 22m 124Mi
kube-controller-manager-fgedu-master2 21m 121Mi
kube-controller-manager-fgedu-master3 23m 125Mi
kube-scheduler-fgedu-master1 8m 45Mi
kube-scheduler-fgedu-master2 7m 43Mi
kube-scheduler-fgedu-master3 8m 44Mi
Part05-风哥经验总结与分享
5.1 最佳实践
Kubernetes生产环境最佳实践。
- 集群设计:采用高可用架构,至少3个控制平面节点
- 资源管理:为Pod设置资源请求和限制
- 网络配置:选择合适的网络插件,配置网络策略
- 存储管理:使用持久化存储,配置存储类
- 安全加固:启用RBAC,配置Pod安全策略
- 监控告警:部署监控系统,设置告警阈值
- 备份恢复:定期备份etcd,制定灾难恢复计划
- 版本管理:定期升级Kubernetes版本
5.2 常见问题
,from K8S+DB视频:www.itpux.com。
Kubernetes生产环境常见问题及解决方案:
# 常见问题及解决方案
## 1. 节点NotReady
– 原因:kubelet服务未运行、网络问题、资源不足
– 解决方案:检查kubelet服务状态、检查网络连接、检查资源使用情况
## 2. Pod调度失败
– 原因:资源不足、节点亲和性冲突、调度器问题
– 解决方案:增加节点资源、调整Pod资源请求、检查调度器状态
## 3. 服务不可访问
– 原因:网络问题、Service配置错误、Pod未就绪
– 解决方案:检查网络连接、检查Service配置、检查Pod状态。
## 4. etcd集群故障
– 原因:网络分区、磁盘故障、内存不足
– 解决方案:检查网络连接、检查磁盘状态、增加内存资源
## 5. 集群升级失败
– 原因:版本兼容性问题、资源不足、配置错误
– 解决方案:检查版本兼容性、确保资源充足、验证配置正确性
## 1. 节点NotReady
– 原因:kubelet服务未运行、网络问题、资源不足
– 解决方案:检查kubelet服务状态、检查网络连接、检查资源使用情况
## 2. Pod调度失败
– 原因:资源不足、节点亲和性冲突、调度器问题
– 解决方案:增加节点资源、调整Pod资源请求、检查调度器状态
## 3. 服务不可访问
– 原因:网络问题、Service配置错误、Pod未就绪
– 解决方案:检查网络连接、检查Service配置、检查Pod状态。
## 4. etcd集群故障
– 原因:网络分区、磁盘故障、内存不足
– 解决方案:检查网络连接、检查磁盘状态、增加内存资源
## 5. 集群升级失败
– 原因:版本兼容性问题、资源不足、配置错误
– 解决方案:检查版本兼容性、确保资源充足、验证配置正确性
5.3 学习路径
Kubernetes学习路径。
- 基础概念:了解Kubernetes的核心概念和架构
- 环境搭建:搭建Kubernetes集群,熟悉常用命令
- 应用部署:学习如何部署和管理应用
- 网络配置:了解Kubernetes网络模型和配置
- 存储管理:学习持久化存储的配置和管理
- 安全管理:了解Kubernetes的安全机制和最佳实践
- 监控告警:部署监控系统,设置告警
- 故障排查:学习如何排查和解决常见问题
- 高级特性:了解Kubernetes的高级特性,如StatefulSet、DaemonSet等
- 生产实践:在生产环境中应用Kubernetes,积累实战经验
持续学习:Kubernetes是一个快速发展的技术,建议持续关注官方文档和社区动态,不断学习和实践,提升Kubernetes的使用和管理能力。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
