当前位置:主页 > 查看内容

Kubernetes 系列学习笔记 - 理论详解 (初识 K8s)

发布时间:2021-06-04 00:00| 位朋友查看

简介:文章目录 前言 Kubernetes/K8s 理论详解 1.K8s 是什么 2.K8s 特性 3.小拓展业务升级 4.K8s 集群架构与组件 ①架构拓扑图 ②Master 组件 ③Node 组件 5.K8s 核心概念 前言 Kubernetes 简称 K8s 是一个开源的用于管理云平台中多个主机上的容器化的应用 其技术……

前言

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 集群架构与组件

①架构拓扑图:

mark

②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: 注释,方便阅读


;原文链接:https://blog.csdn.net/weixin_51486343/article/details/115573675
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐