1、介绍
kubernetes(简称K8S)是一个以“应用”为中心,管理容器生命周期,容器之间关系,集群资源调度的容器编排工具,是一个面向平台的平台。
为什么要简称K8S呢?
1、字母k和字母s中间有8个字母;
2、据说需要搭建8遍才能入门;
1、功能
-
容器编排;
-
应用容器的生命周期管理
-
应用容器之间的关系管理
-
集群资源调度
-
构建其它的平台
2、运行逻辑
-
Kubernetes将所有工作节点的资源集结在一起形成一台更加强大的“服务器"
-
计算和存储接口通过Master之上的API Server暴露
-
客户端通过API提交应用程序的运行请求,而后由Master通过调度算法将其自动指派至某特定的工作节点以Pod对象的形式运行
-
Master会自动处理因工作节点的添加、故障或移除等变动对Pod的影响
3、节点类型
-
Master节点:控制节点
-
Worker节点:工作节点
2、Kubernetes组件
2-1、Master节点组件
2-1-1、API Server
-
整个集群的 API 网关,应用程序为 kubekube-apiserver
-
以API形式对外提供服务,服务器程序,监听在某个套接字上
-
基于 http/https 协议以 REST 风格提供,几乎所有功能全部抽象为“资源”及相关的对象
-
声明式 API,用于只需要声明对象的 “终态”,具体业务逻辑由各资源相关Controller 负责完成
-
无状态,数据存储于 etcd 中
2-1-2、Scheduler
-
调度器,负责为那些未能绑定到某节点的Pod,挑选一个最适配的Worker来运行它
-
只会从API接收指令
-
相关程序为 kube -scheduler
2-1-3、Controller Manager
☆ Controller的集合,由一组Kubernetes内置的Controller集结而成
☆ 负责实现客户端通过 API 提交的终态声明,相应用程序为 kubekube-controller-manager
☆ 由相关代码通过一系列步骤驱动 API 对象的“实际状态”接近或等同“期望状态”
☆ 除调度之外的编排决策,几乎都由Controller负责形式
2-1-4、Cluster Store
-
集群状态数据存储系统,通常指的就是 etcd
-
仅会同 API Server交互
2-2、Worker节点组件
2-2-1、kubelet
-
Kubernetes集群于每个 Worker 节点上的代理,相应程序为 kubelet
-
接收并执行 Master 发来的指令,管理由 Scheduler 绑定至当前节点上的 Pod 对象的容器
-
通过 API Server 接收 Pod 资源定义,或从节点本地目录中加载静态 Pod 配置
-
借助于兼容 CRI 的容器运行时管理和监控 Pod 相关的容器
-
2-2-2、kube-proxy
-
运行于每个 Worker 节点上,专用于负责将 Service 资源的定义转为节点本地的实现
-
iptables模式:将 Service 资源的 定义转为适配当前节点视角的iptables 规则
-
ipvs模式:将 Service 资源的 定义转为适配当前节点视角ipvs 和少量 iptables 规则
-
-
是打通 Pod 网络在 Service 网络的关键所在
2-2-3、插件
负责扩展 Kubernetes 集群的功能应用程序,通常以 Pod 形式托管运行于 Kubernetes集群之上
2-2-3-1、必须插件
-
Network Plugin:网络插件,经由CNI接口,负责为Pod提供专用的通信网络,有多种实现,如:flannel、calico等
-
Cluster DNS:通常是指CoreDNS,集群DNS服务器,负责服务注册、发现和名称解析
2-2-3-2、重要插件
-
Ingress Controller:Ingress控制器,负责为Ingress资源提供具体的实现,实现http/https协议的七层路由和流量调度,有多种实现,如:Ingress-Nginx、Contour等
-
Dashboard: 基于Web的UI
-
指标监控系统: prometheus
-
日志系统:ELK、PLG等
3、POD
Kerbernetes本质上是“以应用为中心”的现代基础设施,Pod是其运行应用及应用调度的最小逻辑单元
-
本质上是共享 Network 、IPC 和UTS 名称空间以及存储资源的容器集
-
可将其想象成一台物理机或虚拟,各容器就是该主上的进程
-
各容器共享网络协议栈、 网络设备、路由、IP 地址和端口等,但 Mount 、PID 和USER 仍隔离
-
每个 Pod 上还可附加一个“存储卷( Volume)”作为该“主机”的外部存储,独立于 Pod 的生命周期,可由 Pod 内的 各容器共享
-
-
模拟“不可变基础设施”,删除后可通过资源清单重建 - 具有动态性,可容忍误删除或主机故障等异常 - 存储卷可以确保数据能超远pod的生命周期
4、Service
Pod具有动态性,其IP地址在基于配置清单重构后也会重新分配,因而需要服务发现机制的支撑
Kubernetes使用 Service 资源和 DNS 服务( CoreDNS)进行服务发现
-
Service能够为一组提供了相同服务的 Pod 提供负载均衡机制,其 IP 地址( Service IP ,也称为 Cluster IP)即为客 户端流量入口
-
一个 Service 对象存在于集群中的各节点之上,不会因个别故障而丢失,可为 Pod 提供固定的前端入口
-
Service使用 标签选择器 (Label Selector)筛选并匹配 Pod 对象上的标签( Label),从而发现 Pod(仅具有符合其标签选择器筛条件的 Pod 才可由Service对象作为后端端点使用)
5、工作负载型控制器
Pod 是运行应用的原子单元,其生命周期管理和健康状态监测由 kubelet 负责完成,而诸如更新、扩缩 容和重建等应用编排功能需要由专用的控制器实现,这类控制器即为工作负载型控制器
-
ReplicaSet和Deployment
-
DaemonSet
-
StatefulSet
-
Job和CrontJob
工作负载型控制器也通过标签选择器筛选Pod标签从而完成关联
工作负载型控制器的重心
-
确保选定的 Pod 精确符合期望的数量
-
数量不足时依据 Pod 模板 创建,超出时销毁多余的对象
-
按配置定义进行扩容和缩容
-
依照策略和配置进行应用更新
6、网络模型
Kubernetes集群上会存在三个分别用于节点、 Pod 和Service 的网络,于worker上完成交汇,有节点内核中的路由模块,以及iptables/netfilter和ipvs等完成网络间的流量转发
6-1、节点网络
-
集群节点间的通信网络,并负责打通与集群外部端点间的通信
-
网络及各节点地址需要于Kubernetes部署前完成配置,非由Kubernetes管理, 因而需要由管理员手动进行,或借助于主机虚拟化管理程序进行
6-2、Pod网络
-
为集群上的Pod对象提供的网络
-
虚拟网络,需要经由CNI网络插件实现,例如:Flannel、Calico、Cilium等
6-3、Service网络
-
在部署 Kubernetes 集群时指定,各 Service 对象使用的地址将从该网络中分配
-
Service对象的 IP 地址存在于其相关的 iptables 或ipvs 规则中
-
由Kubernetes集群自行管理
6-4、通信流量
Kubernetes网络中主要存在 4中类型的通信流量
- 同一Pod内的容器间通信
- Pod间的通信
- Pod与Service间的通信
- 集群外部流量与Service间的通信
Pod网络需要借助于第三方兼容CNI规范的网络插件完成,这些插件需要满足一下功能要求:
- 所有Pod间均可不经NAT机制而直接通信
- 所有节点均可不经NAT机制直接与所有Pod通信
- 所有Pod对象都位于同一平面网络中
7、kubernetes集群部署
7-1、部署模式
7-1-1、独立组件模式
-
除Add-ons(插件)以外,个关键组件以二进制方式部署与节点上,并运行于守护进程;
-
各Add-ons以Pod形式运行;
7-1-2、静态Pod模式
-
控制平面各组件以静态Pod对象运行于Master主机之上
-
kubelet和docker以二进制部署,运行为守护进程
-
kube-proxy等则以Pod形式运行
-
registry.k8s.io(2022年前:k8s.gcr.io)
7-2、安装工具
-
原生安装工具kubeadm
-
CNCF认证的安装工具
7-3、Kubeadm工具
Kubernetes社区提供的集群构建工具
-
负责执行构建一个最小化可用集群并将其启动等必要的基本步骤
-
Kubernetes集群全生命周期管理工具,可用于实现集群的部署、升级、降级、卸载等
-
Kubernetes仅关心如何初始化并拉起一个集群,其职责仅限于下图中背景着色的部分:
7-4、部署前提
-
支持Kubernetes运行的Linux主机,例如Debian、RedHat等
-
主机2GB以上内存,2核以上CPU(小于此配置,第二主节点加入集群会提示,并且无法加入)
-
各主机间能够通过网络无障碍通信
-
hostname、MAC地址已经UUIP都是唯一,主机名能相互解析
-
放行Kubernetes使用的各个端口,或者直接禁用(建议禁用)
-
禁用swap
-
时间同步
因Kubernetes所有镜像都在registry.k8s.io和k8s.gcr.io,建议使用国内阿里源或者华为源,或者根据情况,使用代理
7-5、部署示例
请查看:https://blog.51cto.com/dayu/5825840
标签:kubernetes,Kubernetes,Service,什么,API,集群,Pod,节点,作用 From: https://www.cnblogs.com/wdy001/p/16860602.html