首页 > 其他分享 >kubernetes-001

kubernetes-001

时间:2022-11-12 20:31:27浏览次数:61  
标签:kubernetes Kubernetes Service 001 API 集群 Pod 节点

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等完成网络间的流量转发

kubernetes-001_kubernetes

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形式运行;

kubernetes-001_k8s_02

7-1-2、静态Pod模式
  • 控制平面各组件以静态Pod对象运行于Master主机之上
  • kubelet和docker以二进制部署,运行为守护进程
  • kube-proxy等则以Pod形式运行
  • ​registry.k8s.io​​​(2022年前:​​k8s.gcr.io​​)

kubernetes-001_kubernetes_03

7-2、安装工具
  • 原生安装工具kubeadm
  • CNCF认证的安装工具

​https://landscape.cncf.io/​

kubernetes-001_kubernetes_04

7-3、Kubeadm工具

Kubernetes社区提供的集群构建工具

  • 负责执行构建一个最小化可用集群并将其启动等必要的基本步骤
  • Kubernetes集群全生命周期管理工具,可用于实现集群的部署、升级、降级、卸载等
  • Kubernetes仅关心如何初始化并拉起一个集群,其职责仅限于下图中背景着色的部分:

kubernetes-001_kubernetes_05

7-4、部署前提
  • 支持Kubernetes运行的Linux主机,例如Debian、RedHat等
  • 主机2GB以上内存,2核以上CPU(小于此配置,第二主节点加入集群会提示,并且无法加入)
  • 各主机间能够通过网络无障碍通信
  • hostname、MAC地址已经UUIP都是唯一,主机名能相互解析
  • 放行Kubernetes使用的各个端口,或者直接禁用(建议禁用)
  • 禁用swap
  • 时间同步

​因Kubernetes所有镜像都在registry.k8s.io和k8s.gcr.io​​,建议使用国内阿里源或者华为源,或者根据情况,使用代理

kubernetes-001_k8s_06

7-5、部署示例

请查看:​​https://blog.51cto.com/dayu/5825840​

标签:kubernetes,Kubernetes,Service,001,API,集群,Pod,节点
From: https://blog.51cto.com/dayu/5846796

相关文章

  • Java——对象和类—封装001
                                                        ......
  • Win10无法登录微软账号错误代码0x80190001的解决方法
    和控制面板内的“Internet选项”设置有关。进入“Internet选项”的“高级”选项卡。检查“HTTP”设置,不要勾选使用代理使用http;检查“安全”设置,勾选使用TLS1.2。如果仍......
  • 1001 A+B Format
    1001A+BFormatCalculate a+b andoutputthesuminstandardformat--thatis,thedigitsmustbeseparatedintogroupsofthreebycommas(unlessthereare......
  • Kubernetes-1.25 Container Image Download
    一、Kubernetes-1.25ContainerImageDownload1kube-apiserver#sourceregistry.k8s.io/kube-apiserver:v1.25.2#tagdockerpullswr.cn-north-1.myhuaweicloud.co......
  • 云原生之旅 - 10)手把手教你安装 Jenkins on Kubernetes
    前言谈到持续集成工具就离不开众所周知的Jenkins,本文带你了解如何在Kubernetes上安装Jenkins,后续文章会带你深入了解如何使用k8spod作为Jenkins的buildagents。 ......
  • 198 - Docker+Kubernetes(k8s)微服务容器化实践
                生成md5代码  生成token代码 ......
  • Kubernetes应用1
    1、传递环境变量创建mysql[root@master-101~]#kubectlcreateserviceclusteripmydb--tcp=3306:3306--dry-run=client-oyamlapiVersion:v1kind:Servicemetadata:......
  • [oeasy]python0013_ASCII码表_英文字符编码_键盘字符
    ASCII码表回忆上次内容​ord(c)​​和​​chr(i)​这是俩函数这俩函数是一对,相反相成的⚖️​​ord​​通过​​字符​​找到对应的​​数字​​​​chr​​通过​​......
  • Kubernetes服务发现-Service
    1、Service概念Service是一组pod服务的抽象,相当于一组pod的LoadBalance,负责将请求分发给对应的pod。一组Pod可以被Service访问到,通过LabelSelector。缺点Ser......
  • [VP记录]AGC001
    [AGC001A]BBQEasy普及题。排序后把奇数位置上的加上就好了。intn,a[100010],ans;intmain(){scanf("%d",&n);n<<=1;for(inti=1;i<=n;i++)scanf("%d",&a[i......