Kubernetes系列---Kubernetes 理论知识 | 初识 | 超详细
Kubernetes1.K8s 是什么?2.K8s 特性3.小拓展(业务升级)4.K8s 集群架构与组件①架构拓扑图:②Master 组件③Node 组件5.K8s 核心概念6.官方提供的三种部署方式minikube:kubeadm:二进制包:7.flannel 网络Kubernetes,简称 K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用其技术难度与入门门槛较高,学习之前,建议掌
Kubernetes
Kubernetes,简称 K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用
其技术难度与入门门槛较高,学习之前,建议掌握以下基础:
*熟悉 Linux 基础命令
*熟悉 Docker 基本管理
*了解 SSL 证书工作原理
*了解负载均衡工作原理(L4/L7)
*了解群集(分布式概念)
*了解域名解析原理(Pod)
*了解网络协议(网络组件)
*Kubernetes/K8s 理论详解
1.K8s 是什么?
Kubernetes 是 Google 在 2014 年开源的一个容器集群管理系统,使用 Go 开发,简称为 K8s,用于容器化应用程序的部署,扩展和管理
K8s 提供了容器编排(yml),资源调度,弹性伸缩,部署管理,服务发现等一系列功能,目标是让部署容器化应用简单高效
K8s 兼容多种容器类型,市场占用率最高,官网:https://kubernetes.io/
2.K8s 特性
自我修复
: 在节点故障时替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器(探针),并且在未准备好之前不会处理客户端请求,确保线上服务不中断
弹性伸缩
: 使用命令(字符界面)或 UI(图形化界面),基于 CPU 使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务
自动部署和回滚
: K8s 采用滚动更新策略更新应用,一次更新一个 Pod,而不是同时删除所有 Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务
服务发现和负载均衡
: K8s 为多个容器提供一个统访问入口(内部 IP 地址和一个 DNS 名称),并且负载均衡关联的所有容器,使得用户无需考虑容器 IP 问题
机密和配置管理
: 管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性;并可以将一些常用的配置存储在 K8s 中,方便应用程序使用(身份验证:命名空间,逻辑划分权限管理)
存储编排
: 挂载外部存储系统,无论是来自本地存储,公有云(如 AWS),还是网络存储(如NFS、GlusterFS、Ceph)都作为集群资源的一部分使用, 极大提高存储使用灵活性
批处理
: 提供一次性任务,周期性任务;满足批量数据处理和分析的场景
3.小拓展(业务升级)
灰度发布(金丝雀)
:
指在黑与白之间,能够平滑过渡的一种发布方式,灰度发布可以有效保证整体系统的稳定,降低产品升级所影响的用户范围
例如,让一部分用户继续使用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐渐扩大范围,把所有用户都迁移到B上面来
蓝绿发布
:
例如,项目逻辑上分为A/B组,首先把A组从负载均衡中摘除,进行新版本部署,B组继续提供服务
当A组升级完毕,负载均衡重新接入A组,再将B组从负载列表中摘除进行新版本部署,A组重新提供服务
最终,B组完成升级,负载均衡重新接入B组,至此,A/B组皆升级完毕,对外提供服务,达到用户无感知、平滑过渡的效果
滚动发布
:
指每次只升级一个或多个服务,升级完成后加入生产环境
不断执行这个过程,直到集群中的全部旧版本升级为新版本
4.K8s 集群架构与组件
①架构拓扑图:
②Master 组件
Kube-apiserver
:
Kubernetes API,集群的统一入口, 各组件协调者
以 RESTful API提供接口服务(支持网站标准协议)
所有对象资源的增删改查和监听操作都交给 APIServer 处理后再提交给 Etcd 存储数据
Kube-controller-manager
:
处理集群中常规后台任务
一个资源对应一个控制器,比如容器资源(pod)挂了,若控制器还存活,则会重新创建该资源,所以修复能力依赖于控制完成
controllerManager 负责管理这些控制器
kube-scheduler
:
根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署可以部署在同
一个节点上,也可以部署在不同的节点上
所有资源的创建不一定都要经过调度器
etcd
:
分布式键值存储系统
用于保存集群状态数据,比如 Pod、Service 等对象信息
③Node 组件
kubelet
:
kubelet 是 Master 在 Node 节点上的 Agent(代理),管理本机运行容器的生命周期,比如创建容器、Pod 挂载数据卷、下载 secret、获取容器和节点状态等工作
kubelet 将每个 Pod 转换成一组容器
kube-proxy
:
在 Node 节点上实现 Pod 网络代理
维护网络规则和四层负载均衡工作
docker 或 rocket(容器类型)
:
容器引擎
运行容器
5.K8s 核心概念
Pod
:
*K8s 中最小的部署单元,是一组容器的集合
*一个 Pod 中的容器共享网络命名空间,像一个小型局域网一样,所以其中容器之间可以彼此通讯
*Pod 是短暂的,因为其一旦故障,会重新创建新的
*K8s 管理的基本都是业务,而业务都是跑在 Pod 上
Controllers(控制器)
:
ReplicaSet:创建资源,确保预期的 Pod 副本数量
Deployment:无状态应用部署
StatefulSet:有状态应用部署
DaemonSet:确保所有 Node 运行同一个 Pod,即管理进程资源
Job:一次性任务
Cronjob:周期性计划定时任务
Service
:
对外提供服务,防止 Pod 失联,定义一组 Pod 的访问策略,方便访问
Label
:
标签,附加到某个资源上,用于关联对象、查询和筛选
Namespaces
:
命名空间,将对象逻辑上隔离,用于角色管理和控制
Annotations
:
注释,方便阅读
6.官方提供的三种部署方式
minikube:
可以在本地快速运行一个单节点的 K8s,用于测试或开发,使用率较少
部署地址:https://kubernetes.io/docs/tasks/tools/
kubeadm:
提供 kubeadm init(构建 master 端)和 kubeadm join(node 端,连接),用于快速部署 K8s 集群
部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/
二进制包:
推荐,从官方下载发行版的二进制包,手动部署每个组件,组成 K8s 集群
下载地址:https://github.com/kubernetes/kubernetes/releases
7.flannel 网络
K8s 与 docker 容器的生态系统阶层
:
Overlay Network 虚拟化网络技术
:
覆盖网络,在基础网络上叠加的一种虚拟网路技术模式,与硬件服务息息相关,首先得有物理网络设备,然后才能在上面做逻辑网络得划分,例如 VLAN
该网络中的主机通过虚拟链路连接起来,规划成为一个整体
VXLAN 技术
:
将源数据包封装至 UDP 中,并使用基础网络得 IP/MAC 作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封并将数据发送给目标地址
即在网络通讯中多封装一层 IP/MAC(虚拟)
Flannel 组件
:
是 Overlay 虚拟化网络技术的一种,也就是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已支持 UDP、VXLAN、AWS、VPC 和 GCE 路由等数据转发方式
其就像套娃一样
K8S 中不同节点之间通讯概述:
K8S 中不同节点之间通讯详解:
8. 单节点部署
单master集群架构图
前文环境中最后部署了flannel网络组件,并实现了容器间的通信,本次实验,首先需要部署Master组件,也是核心组件:
1.kube-apiserver
作用:集群的统一入口,各组件协调者,所有对象资源的增删改查和监听操作都交给 APIServer 处理后再提交给 Etcd 存储
2. kube-controller-manager
作用:处理群集中常规后台任务,一个资源对应一个控制器,而 controller-manager 负责管理这些控制器
3. kub-scheduler
作用:只要不是人为指定,则均由调度器根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同节点上。
***配置思路:配置文件----》systemd管理组件—》启动
master节点apiserver 启动流程
kubelet :基础的命令
1.我们在使用此命令的时,例如 kubelet get nodes 查看节点信息时首先会经过master 节点查看各个node点的业务信息,过程中需要bootstrap的授权(bootstrap.kubeconfig权限配置)
2. 当有了以上的权限配置且通过以上权限许可之后才会去找apiserver进行操作
3. apiserver 首先会验证node节点中的令牌(token)
如果验证成功,则令牌会释放出其中的证书,将证书再次进行身份验证(CA验证),身份验证就需要通过csr的签名,签名成功之后,再给与对应的证书颁发,颁发许可之后才会启动apiserver、授权给与请求命令相对于的服务。(最终授权给bootstrap)
如果在以上的验证中有一部失败,apiserver则不会进行启动
4. Api会最终授权给bootstrap,而命令请求过来之后,必须要有bootstarp的授权才能进行,否则无法输出结果
我们在本次实例中,就需要生成apiserver的token、证书和签名,最后要将证书制作出来
9.双maste集群
双master集群架构图
二进制集群
1.与单master的二进制集群相比,双master集群具备高可用的特性,当一个master宕机时,load Blance就会将VIP虚拟地址转移到另一只master上,保证了master的可靠性
2.双master的核心在于,需要指向一个核心地址,上一篇做单节点的时候,在证书生成等脚本中已定义了VIP地址(192.168.78.100),VIP开启apiserver,双master节点开启端口接收node节点的apiserver请求,其实如果有新的节点加入,不会直接找master节点,而且是直接找到vip进行apiserver请求,然后vip再进行调度,分发到某一个master中执行,此时master收到请求后会给新增的node节点颁发证书
3.shuangmaster集群还简历了nginx负载均衡,缓解了node对master请求的压力,减轻了master对资源的使用(负担)。
更多推荐
所有评论(0)