主要内容:
了解Kubernetes的架构、搭建Kubernetes集群
一、Kubernetes 概述
Kubernetes 这个名字来自希腊语,意思是“舵手”或“领航员”;K8S 是 Kubernetes 的缩写,其中“8”代表字母“ubernete”中的8个字母。Kubernetes 是由谷歌(Google)公司制作的,是谷歌10多年大规模容器管理技术 Borg 的开源版本。于2014年6月由谷歌公司正式发布并宣布开源。
功能与特点:
- 容器集群管理系统:Kubernetes 是一个开源的平台,用于管理容器集群
- 自动化部署:Kubernetes 可以实现容器集群的自动化部署
- 自动扩缩容:Kubernetes 支持根据需求自动扩展或缩减容器集群的规模
- 维护功能:Kubernetes 提供维护功能,确保容器集群的稳定运行
1. 自动化部署
- 描述:Kubernetes 可以自动部署应用程序和服务到容器集群中,减少手动操作的复杂性和错误
- 优势:提高部署效率,减少人为错误,确保一致性和可重复性
2. 自动扩缩容
- 描述:Kubernetes 可以根据应用程序的负载情况自动扩展或缩减容器集群的规模
- 优势:优化资源利用率,降低成本,确保应用程序在高负载下仍能稳定运行
3. 维护功能
- 描述:Kubernetes 提供维护功能,包括自动修复、滚动更新、回滚等,确保容器集群的稳定运行
- 优势:减少停机时间,提高系统的可靠性和可用性
1、Kubernetes (K8S) 集群解析
Kubernetes (K8S) 集群是一个由多个节点组成的系统,用于管理和运行容器化应用程序。Kubernetes 集群的核心组件包括控制平面(Control Plane)和工作节点(Worker Nodes)。
核心角色:
- - Master(管理节点、控制平面)
- - Node(计算节点、工作节点)
- - image(镜像仓库)
1)控制平面(Control Plane)
控制平面是 Kubernetes 集群的大脑,负责管理和控制整个集群的状态,对集群进行全局决策,检测和响应集群事件;主要由 API Server、Scheduler、Etcd和Controller manager 组件组成。
① API Server:
- 功能:提供 Kubernetes API,是集群的入口点,负责处理所有 API 请求
- 特点:支持 RESTful API,用于与集群进行交互
- 备注:整个系统的对外接口,提供客户端和其它组件调用,后端运行的所有元数据都会存储于etcd中(键值数据库)
② etcd:
- 功能:分布式键值存储,用于存储集群的所有配置数据和状态信息
- 特点:高可用性和一致性,确保集群状态的可靠存储
- 备注:由kubernetes集群自动管理,用户无需手动干预,etcdctl是etcd的客户端管理程序
③ Scheduler:
- 功能:负责将 Pod(Kubernetes 的最小调度单元)调度到合适的节点上运行
- 特点:根据资源需求、节点状态和策略进行智能调度
- 备注:负责对集群内部的资源进行调度,负责分配容器运行地址
④ Controller Manager:
- 功能:运行各种控制器进程,负责维护集群的状态,如副本控制器、节点控制器等
- 特点:确保集群的实际状态与期望状态一致
⑤ Cloud Controller Manager:
- 功能:与云服务提供商的 API 交互,管理云资源,如负载均衡器、存储卷等
- 特点:特定于云环境的控制器,提供云资源的集成管理
Master相关组件接口:
2)工作节点(Worker Nodes)
工作节点是 Kubernetes 集群中实际运行容器化应用程序的节点,负责维护运行Pod,并提供具体应用的运行环境;每个工作节点包含以下核心组件:
① Kubelet:
- 功能:负责管理节点上的容器,与控制平面通信,确保容器按照 Pod 规范运行
- 特点:节点上的代理,负责执行控制平面的指令
- 备注:用来启动、监视pod及调用Docker去对容器进行操作,包括增删改等操作
② Kube-proxy:
- 功能:负责维护节点上的网络规则,实现服务发现和负载均衡
- 特点:确保 Pod 之间的网络通信和服务的可达性
- 备注:为Pod对象提供代理,并实现kubernetes Service的通信与负载均衡机制
③ 容器运行时(Container Runtime):
- 功能:负责运行容器,如 Docker、containerd、CRI-O 等
- 特点:支持多种容器运行时,提供容器生命周期管理
2、kube-proxy 代理模式解析
kube-proxy 是 Kubernetes 集群中负责网络代理和负载均衡的关键组件。它确保集群内部和外部的网络流量能够正确地路由到相应的 Pod。kube-proxy 支持多种代理模式,每种模式都有其特定的实现方式和适用场景。以下是对 kube-proxy 代理模式的详细解析:
1)用户空间代理模式(User Space Proxy Mode)
版本:Kubernetes v1.0
实现方式:kube-proxy 在用户空间运行,通过切换不同的用户空间来实现对应用的访问。
特点:
- 简单:实现简单,易于理解和调试。
- 性能较低:由于在用户空间和内核空间之间频繁切换,性能较低。
- 适用场景:早期版本中使用,适用于小型集群或测试环境。
2)iptables 模式代理(iptables Proxy Mode)
版本:Kubernetes v1.1
实现方式:kube-proxy 使用 iptables 规则来实现网络流量的转发和映射。
特点:
- 性能较高:直接在内核空间操作,性能优于用户空间代理模式。
- 复杂性:iptables 规则复杂,管理和维护难度较大。
- 适用场景:适用于大多数生产环境,特别是需要高性能和稳定性的场景。
3)IPVS 代理模式(IPVS Proxy Mode)
版本:Kubernetes v1.8
实现方式:kube-proxy 使用 IPVS(IP Virtual Server)来实现负载均衡。IPVS 是 Linux 内核的一部分,提供高性能的负载均衡功能。
特点:
- 高性能:IPVS 在内核空间实现负载均衡,性能非常高。
- 可扩展性:支持多种负载均衡算法(如轮询、加权轮询、最小连接等)。
- 复杂性:需要满足一定的内核和软件包要求。
- 适用场景:适用于大规模集群,特别是需要高性能负载均衡的场景。
启用 IPVS 模式的条件
① 内核支持,内核必须支持以下模块:
- ip_vs:IPVS 核心模块。
- ip_vs_rr:轮询调度算法。
- ip_vs_wrr:加权轮询调度算法。
- ip_vs_sh:源地址哈希调度算法。
- nf_conntrack_ipv4:连接跟踪模块。
② 软件包支持,必须安装以下软件包:
- ipvsadm:IPVS 管理工具。
- ipset:用于管理 IP 集合的工具。
③ 配置文件中开启 IPVS 参数,在 kube-proxy 的配置文件中开启 IPVS 参数,例如:
mode: ipvs
3、Pod 的详细解析
在 Kubernetes 中,Pod 是调度的基本单元,也是最小的部署和管理单元。Pod 的设计理念是将一组紧密关联的容器打包在一起,共享相同的网络命名空间和存储卷。以下是对 Pod 的详细解析:
1)Pod 的基本概念
调度的基本单元:
Pod 是 Kubernetes 调度的基本单元,Kubernetes 通过调度 Pod 来管理容器的运行;
容器组:
一个 Pod 可以包含一个或多个容器,这些容器共享相同的网络命名空间和存储卷;
网络命名空间:
Pod 中的所有容器共享相同的 IP 地址和端口号,容器之间可以通过 localhost 进行通信;
存储卷:
Pod 中的容器可以共享存储卷,实现数据的共享和持久化;
2)Pod 的特点
- 独立部署单元:Pod 是一个独立的部署单元,支持横向扩展和复制。通过复制 Pod,可以实现应用的高可用性和负载均衡。
- 多进程聚合:Pod 可以看作是一个服务的多个进程的聚合单位。例如,一个 Pod 可以包含一个主应用容器和一个辅助容器(如日志收集器)。
- 生命周期管理:Pod 的生命周期由 Kubernetes 管理,支持自动重启、扩缩容等。
- 资源隔离:Pod 中的容器在同一节点上运行,但资源隔离由容器运行时管理。
3)Pod 的管理
在 Kubernetes 中,用户无法单独管理某一个容器。管理容器的时候是以 Pod 为单位,必须先创建 Pod,才能够去创建容器。每个容器都在 Pod 中,没有不在 Pod 的容器。Pod 是容器运行的最小环境。
4)Pod 的创建和使用
① 创建 Pod:
通过定义 YAML 或 JSON 格式的 Pod 配置文件,可以创建 Pod。配置文件中指定 Pod 的名称、容器镜像、端口、存储卷等信息。
② 管理 Pod:
Kubernetes 提供了丰富的命令和 API 来管理 Pod,如 kubectl create、kubectl get、kubectl delete 等。
③ Pod 的扩展:
通过复制 Pod,可以实现应用的横向扩展。Kubernetes 的副本控制器(ReplicaSet 或 Deployment)负责管理 Pod 的副本数量。
二、kubernetes 集群安装部署
1)安装部署方式:
- 源码部署:下载源码或编译好的二进制,手工添加参数启动服务,Kubernetes采用证书认证方式,需要创建大量证书;
- 容器部署:官方把服务做成“镜像”,下载镜像、启动即可;
官方特意根据容器部署方式,制作kubeadm工具,为用户提高下载良好体验度(推荐)
官网地址:Kubernetes
2)部署环境要求:
- ① 内核版本:>= 3.10
- ② 最低配置:2CPU、2G内存
- ③ 节点之中不可以有重复的主机名、MAC地址或product_uuid
- ④ 卸载防火墙、禁用Swap交换分区、禁用SELinux;
安装部署示例:
环境准备:实验集群规划,需购买5台云主机
主机名 |
IP地址 |
最低配置 |
集群角色 |
master |
192.168.1.21 |
2CPU,4G内存 |
管理节点 |
node-0001 |
192.168.1.31 |
2CPU,4G内存 |
计算节点 |
node-0002 |
192.168.1.32 |
2CPU,4G内存 |
|
node-0003 |
192.168.1.33 |
2CPU,4G内存 |
|
registry |
192.168.1.100 |
1CPU,1G内存 |
私有镜像仓库 |
步骤1:私有镜像仓库初始化(registry操作192.168.1.100)
① 安装仓库软件并启动服务
[root@registry ~]# yum makecache
[root@registry ~]# yum install -y docker-distribution //安装私有镜像仓库软件
[root@registry ~]# systemctl enable --now docker-distribution //开启镜像仓库服务
② 使用脚本初始化仓库(init-img.sh)
# 拷贝云盘kubernetes/v1.17.6/registry/myos目录的部署脚本和镜像压缩包到仓库服务器
[root@ecs-proxy ~]# scp /root/kubernetes/v1.17.6/registry/myos/* 192.168.1.100:/root/
[root@registry ~]# mkdir myos //创建存放目录
[root@registry ~]# c