当前位置: 首页 > news >正文

K8S篇之K8S详解

一、K8S简介

k8s全称kubernetes,是为容器服务而生的一个可移植容器的编排管理工具。k8s目前已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地。
k8s是自动化容器操作的开源平台。这些容器操作包括:部署、调度和节点集群间扩展。
具体功能:
1、自动化容器部署和复制
2、实时弹性收缩容器规模
3、容器编排成组,并提供容器间的负载均衡
调度:容器在哪个机器上运行。

二、k8s组成

1、kubectl:客户端命令行工具,作为整个系统的操作入口。
2、kube-apiserver:以REST API 服务形式提供接口,作为整个系统的控制入口。
3、kube-controller-manager:执行整个系统的后台任务,包括节点状况状态、Pod个数、Pods和Service的关联等
4、kube-scheduler:负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点。
5、etcd:负责节点间的服务发现和配置共享。
6、kube-proxy:运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。
7、kubelet:运行在每个计算节点上,作为agent,接收分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。
8、DNS:一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。

三、两地三中心

两地三中心包括本地生产中心、本地灾备中心、异地灾备中心
两地三中心要解决的一个重要问题就是数据一致性问题。K8s使用etcd组件作为一个高可用、强一致性的服务发现存储仓库。用于配置共享和服务发现。
它作为一个受到Zookeeper和doozer启发而催生的项目。除了拥有他们的功能之外,还拥有以下4个特点:
1、简单:基于http+json的api让你用curl命令就可以轻松使用。
2、安全:可选SSL客户认证机制。
3、快速:每个实例每秒支持一千次写操作。
4、可信:使用Raft算法充分实现了分布式。

四、四层服务发现

k8s提供了两种方式进行服务发现:
环境变量:当创建一个Pod的时候,kubelet会在该Pod中注入集群内所有的Service的相关环境变量、要注意的是,要想一个Pod中注入某个Service的环境变量,则必须Service先要比该Pod创建。这一点,几乎使得这种方法进行服务发现不可用。
比如,一个ServiceName为redis-master的Service,对应的ClusterIP:Port为10.0.0.11:6379,则对应的环境变量为:
在这里插入图片描述
DNS:可以通过cluster add-on的方式轻松的创建KubeDNS来对集群内的Service进行服务发现。
以上两种方式,一个是基于tcp,众所周知,DNS是基于UDP的,它们都建立在四层协议之上。

五、五种Pod共享资源

Pod是K8s最基本的操作单元,包含一个或多个紧密相关的容器,一个POD可以被一个容器化的环境看作应用层的“逻辑宿主机”;一个POD中的多个容器应用通常是紧密耦合的,Pod在Node上被创建、启动或者销毁;每个Pod里运行着一个特殊的被称之为Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以利用这一特性将一组密切相关的服务放入同一个Pod中。
在这里插入图片描述
同一个Pod里的容器之间仅需通过localhost就能互相通信。
一个Pod里的应用容器共享五种资源:
PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。
网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。
IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。
UTS命名空间:Pod中的多个容器共享一个主机名。
Volumes(共享存储卷):Pod中的各个容器可以访问在Pod级别定义的Volumes。
Pod的生命周期通过Replication Controller来管理;通过模板进行定义,然后分配到一个Node上运行,在Pod所包含容器运行结束后,Pod结束。
Kubernetes为Pod设计了一套独特的网络配置,包括:为每个Pod分配一个IP地址,使用Pod名作为容器间通信的主机名等。

六、六个CNI常用插件

CNI(Container Network Interface)容器网络接口,是Linux容器网络配置的一组标准和库,用户需要根据这些标准和库来开发自己的容器网络插件。CNI只专注解决容器连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不通的网络模式,并且容器实现。
下图表示六个CNI常用插件:
在这里插入图片描述

七、七层负载均衡

提负载均衡就不得不先提服务器之间的通信
IDC(Internet Data Center),也可称数据中心、机房,用来放置服务器。IDC网络是服务器间通信的桥梁。
在这里插入图片描述

具体作用:
路由器、交换机、MGW/NAT都是网络设备,按照性能、内外网划分不通的角色。
内网接入交换机:也称为TOR(top of rack),是服务器接入网络的设备。每台内网接入交换机下联40-48台服务器,使用一个掩码/24的网段作为服务器内网网段。
内网核心交换机:负责IDC内各内网接入交换机的流量转发及跨IDC流量转发。
MGW/NAT:MGW即LVS用来做负载均衡,NAT用于内网设置访问外网时做地址转换。
外网核心路由器:通过静态互联运营商或BGP互联美团统一外网平台。

先说说各层负载均衡:
二层负载均衡:基于MAC地址的二层负载均衡。
三层负载均衡:基于IP地址的负载均衡。
四层负载均衡:基于IP+端口的负载均衡。
七层负载均衡:基于URL等应用层信息的负载均衡。
在这里插入图片描述
上面四层服务发现讲的主要是k8s原生的kube-proxy方式。
K8s关于服务的暴露方式主要是通过NodePort方式,通过绑定minion主机的某个端口,然后进行pod的请求转发和负载均衡。

  • Service可能有很多个,如果每个都绑定一个node主机端口的话,主机需要开放外围的端口进行服务调用,管理混乱。
  • 无法应用很多公司要求的防火墙规则。
    理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然后根据域名或者服务名向后面的Service ip转发,Nginx很好的解决了这个需求,Nginx很好的解决了这个需求,但问题是如果有新的服务加入,如何去修改nginx的配置,并且加载这些配置呢?
    Kubernetes给出的解决方案是Ingress。这是一个基于7层的方案。

八、九个网络模型原则

K8s网络模型要符合4个基础原则,3个网络要求原则,1个架构原则,1个IP原则。
每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问。
K8s中的Pod的IP是最小粒度IP。同一个Pod内所有的容器共享一个网络堆栈,该模型成为IP-per-Pod模型。

  • Pod由docker0实际分配的IP
  • Pod内部看到IP地址和端口与外部保持一致
  • 同一个Pod内的不同容器共享网络,可以通过localhost来访问对方的端口,类似同一个VM内不同的进程。
    IP-per-Pod模型从端口分配、域名解析、服务发现、负载均衡、应用配置等角度看,Pod可以看作是一台独立的VM或物理机。
  • 所有容器都可以不同NAT的方式与别的容器通信
  • 所有节点都可以在不同NAT方式下同所有容器通信,反之亦然。
  • 容器的地址和别人看到的地址是同一个地址

要符合下面的架构:
在这里插入图片描述
由上图架构引申出来IP概念从集群外部到集群内部
在这里插入图片描述

http://www.lryc.cn/news/228335.html

相关文章:

  • 进博会再现上亿大单 EZZ携手HIC海橙嗨选签署2024年度合作备忘录
  • 深度学习基于python+TensorFlow+Django的花朵识别系统
  • Azure 机器学习 - 机器学习中的企业安全和治理
  • Unity - 各向异性 - 丝绸材质
  • MySQL中UUID主键的优化
  • Python实现WOA智能鲸鱼优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战
  • Rust语言代码示例
  • 【SpringBoot3+Vue3】一【基础篇】
  • 麒麟信安登录央视,深度展现为中国信息安全铸“魂”之路
  • Flutter的专属Skia引擎解析+用法原理
  • python poetry的教程
  • jq里的ajax超详细参数讲解
  • 郑州大学2020级信息安全专业——保研小结
  • 【系统架构设计】架构核心知识: 3.6 负载均衡和Session
  • python pip安装特定包,网络慢的问题
  • CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片
  • 设计模式之工厂模式 ( Factory Pattern )(1)
  • OpenCV入门11:轮廓提取和形状识别
  • 竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
  • Java编程--定时器/线程池/工厂模式/ ThreadPoolExecutor
  • 【python】Django——django简介、django安装、创建项目、快速上手
  • 未来之选:为什么向量数据库是您的数据管理利器
  • 隧道施工工艺流程vr线上虚拟展示成为产品3D说明书
  • Nacos(含安装)
  • 本地跑项目解决跨域问题
  • 聊聊logback的isDebugEnabled
  • ChatGPT+Roblox,元宇宙的AI叙事逻辑#Leveling Up
  • Spark算子
  • Containerd接入Harbor仓库
  • Angular 组件介绍及使用(一)