k8s基础

k8s基础

文章目录

  • k8s基础
    • 一、k8s组件
    • 二、k8s组件作用
      • 1.master节点
      • 2.worker node节点
    • 三、K8S创建Pod的工作流程?
    • 四、K8S资源对象
      • 1.Pod
      • 2.Pod控制器
      • 3.service && ingress
    • 五、K8S资源配置信息
    • 六、K8s部署
      • 1.K8S二进制部署
      • 2.K8S kubeadm搭建
    • 七、K8s网络
    • 八、K8s接口
      • 1.CNI(容器网络接口)
        • 1.1flannel3种模式
          • UDP模式工作原理
          • VXLAN模式工作原理
        • 1.2Calico3种模式
        • Calico IPIP模式工作原理
        • Calico BGP模式工作原理
        • 1.3flannel 和 calico 区别
      • 1.4VLAN和VXLAN的区别
      • 2.CoreDNS
      • 3.k8s证书更新

一、k8s组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97UFtqWX-1691657414960)(D:\云计算学习资料\云计算三阶\k8s\第一章\k8s组件.png)]

K8S 有 master 和 worker node 两类节点
master节点上有 apiserver  controller-manager  scheduler 以及使用 etcd 做 k8s 集群的数据库
node节点上有 kubelet  kube-proxy   容器引擎/容器运行时(docker、containerd)

二、k8s组件作用

1.master节点

apiserver:是所有服务请求的统一访问入口controller-manager:控制器管理器,负责管理为Pod副本集、命名空间、端点、node等资源对象以及部署的控制器;通过apiserver监控整个K8S集群的状态,并确保集群处于预期的工作状态scheduler:资源调度器,负责Pod资源的调度,通过调度算法(预选策略、优选策略)为部署的Pod选择最适合的node节点etcd:K8S集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8S集群所有的重要信息,只有apiserver有读写权限

2.worker node节点

kubelet:接收master发来的请求,创建和管理Pod和容器,跟容器引擎交互实现容器的生命周期的管理;收集node节点的资源信息和Pod的运行状态汇报给master的apiserverkube-proxy:作为service资源的载体,实现Pod的网络代理,维护网络规则和四层负载均衡工作容器引擎/容器运行时:运行容器

三、K8S创建Pod的工作流程?

在这里插入图片描述

1)用户通过客户端发送创建Pod的请求到master节点上的apiserver
2)apiserver会先把请求信息写入到etcd中保存,再找controller-manager根据预设的资源配置模板创建Pod资源
3)然后controller-manager会通过apiserver去找scheduler为新创建的Pod选择最合适的node节点
4)scheduler通过调度算法的预选策略和优选策略筛选出最合适的node节点进行调度
5)然后再通过apiserver找到对应的node节点上的kubelet去创建和管理Pod
6)kubelet会跟容器引擎交互来管理Pod/容器的生命周期
7)用户还可通过apiserver在kube-proxy上写入网络规则,创建service资源,实现对Pod的服务发现和负载均衡

四、K8S资源对象

1.Pod

Pod:是K8S能够创建和管理的最小单元。一个Pod里可以包含一个或者多个应用容器,Pod里的容器之间共享网络、存储等资源。

2.Pod控制器

Pod 控制器是 Pod 启动的一种模版,用来保证在K8S里启动的 Pod 应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)
deployment:部署无状态应用。同时也负责管理replicaset(维持Pod副本数量符合期望数量)和Pod(一个容器化的应用进程)
statefulset:部署有状态应用
daemonset:在所有的node节点上部署同一种Pod
job:一次性的部署短期任务的Pod,Pod执行完任务就会自动退出
cronjob:周期性的部署短期任务的Pod,Pod执行完任务就会自动退出

3.service && ingress

service:在K8S集群内部,为通过标签选择器相关联的一组Pod,提供一个统一的访问入口地址(clusterIP),只支持四层代理转发ingress:作为K8S集群外部接入层,可自定义规则根据用户请求的域名或URL访问路径转发给指定的service,支持七层代理转发

五、K8S资源配置信息

Apiversion:每种资源对象在K8S中使用的api接口版本
Kind:      资源对象的类型
Metedata:  资源对象的元数据,比如 name资源名称,namespace命名空间,labels标签,annotations注释
Spec:      资源对象的资源配置清单(配置属性),比如 副本数,镜像名,数据卷,标签选择器 等
Status:    资源对象的当前运行状态信息label:标签,将键值对配置到任何资源对象上,用于选择资源
label selector:标签选择器,用于查询和筛选拥有某些 label 的资源对象
annotation:注释,使用元数据来装饰资源,可用于作资源对象的注释或设置资源对象额外的功能特性配置
name:资源名称,在同一个命名空间中,同类型的资源对象的名称是唯一的

六、K8s部署

1.K8S二进制部署

1)etcd集群
使用cfssl签发证书和私钥
解压etcd软件包,获取二进制文件 etcd  etcdctl
准备etcd配置文件
启动etcd服务进程,加入到etcd集群2)master
使用cfssl签发证书和私钥
准备bootstrap-token认证文件
解压服务端软件包,获取二进制文件 kube-apiserver  kube-controller-manager  kubectl  kube-scheduler
准备apiserver、controller-manager、scheduler的服务配置文件
准备controller-manager、scheduler、kubectl的 kubeconfig 集群配置文件(加入K8S集群的引导文件)
依次启动apiserver、controller-manager、scheduler服务进程3)node
获取二进制文件 kubelet  kube-proxy
准备 kube-proxy、kubelet 的 kubeconfig 集群配置文件 kube-proxy.kubeconfig  bootstrap.kubeconfig(kubelet初次访问apiserver加入集群的引导文件)
准备 kubelet、kube-proxy 的服务配置文件
启动 kubelet 服务进程,发起 csr 请求证书,master 通过 csr 请求,颁发证书给 kubelet
加载 ipvs 模块,启动 kube-proxy 服务进程4)多 master 高可用
复制 master 的 k8s 相关的 证书、配置文件、二进制文件 和 etcd 的证书
修改 配置文件启动参数 启动 master 组件(apiserver、controller-manager、scheduler)的服务进程
部署 负载均衡器 和 keepalived 高可用
修改 node 组件(kubelet、kube-proxy)和 kubectl 的 kubeconfig 配置文件中的 server 参数地址为 VIP

2.K8S kubeadm搭建

kubeadm init:在使用kubeadm方式安装K8S集群时,可根据初始化配置文件或者配置参数快速的初始化生成一个K8S的master管理平台kubeadm join:根据kubeadm init初始化的提示信息快速的将一个节点作为node节点或者其它的master节点加入到K8S集群当中1)所有节点进行初始化,安装docker引擎和kubeadm kubelet kubectl 
2)生成集群初始化配置文件并进行修改
3)使用kubeadm init根据初始化配置文件生成K8S的master控制管理节点
4)安装CNI网络插件(flannel、calico等)
5)在其他节点使用kubeadm join将节点以node或者master角色加入K8S集群

七、K8s网络

节点网络         Node节点网卡的IP  nodeIP
Pod网络         podIP
Service网络     clusterIP

八、K8s接口

CRI  容器运行时接口    docker  containerd  podman  cri-0
CNI  容器网络接口      flannel  calico  cilium 
CSI  容器存储接口      ceph  nfs  gfs  s3

1.CNI(容器网络接口)

1.1flannel3种模式

UDP        出现最早,性能较差,基于flanneld应用程序实现数据包的封装/解封装
VXLAN      默认模式,推荐使用的模式,性能比UDP模式更好,基于内核实现数据包的封装/解封装
Host-gw    性能最好,但是配置复杂,不能跨网段
UDP模式工作原理
1)应用数据包从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel0虚拟接口
2)flanneld服务会监听flannel0接口接收到的数据,flanneld服务会将内部数据包封装到UDP报文里
3)flanneld会根据在etcd中维护的路由表查到目标Pod所在的Node节点IP,在UDP报文外再封装Node节点IP报文、MAC报文后,通过物理网卡发送到目标Node节点
4)UDP报文通过8285号端口送到目标主机的flanneld进程进行解封装,再通过flannel0接口转发到cni0网桥,然后通过cni0网桥转发到目标Pod容器
VXLAN模式工作原理
1)原始数据帧从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel.1虚拟接口
2)flannel.1接口接收到数据帧后添加VXLAN头部,在内核封装成UDP报文
3)flanneld会根据在etcd维护的路由表通过物理网卡发送到目标Node节点
4)UDP报文通过8472号端口送到目标主机的flannel.1接口在内核进行解封装,然后将原始报文通过cni0网桥转发到目标Pod容器

1.2Calico3种模式

IPIP模式、 BGP模式、 混合模式

Calico IPIP模式工作原理

1)源Pod容器发出的原始数据IP包通过内核的IPIP驱动直接封装在宿主机网络的IP包中
2)根据tunnel接口的路由通过物理网卡发送到目标Node节点
3)数据包到达目标节点后再通过IPIP驱动解包得到原始数据IP包
4)然后通过路由规则发送给 veth pair 设备到达目标Pod容器

Calico BGP模式工作原理

1)源Pod容器发出的原始数据IP包会通过 veth pair 设备到达宿主机网络空间
2)然后根据原始数据IP包的目标IP和宿主机的路由规则,找到目标Node节点的IP,再通过物理网卡发送到目标Node节点
3)根据目标Node节点的路由规则,直接通过目标Pod容器的 veth pair 设备发送到目标Pod容器

1.3flannel 和 calico 区别

flannel: UDP   VXLAN   Host-gw
默认网段:10.244.0.0/16
通常使用VXLAN模式,采用的是叠加网络、IP隧道方式传输数据,对性能有一定的影响
功能简单配置方便利于管理,但是不具备复杂的网络策略规则配置能力calico: IPIP  BGP  混合模式(CrossSubnet)
默认网段:192.168.0.0/16
使用IPIP模式可以实现跨子网传输,但是传输过程中需要封包和解包,对性能有一定的影响
使用BPG模式,把Node节点看作成路由器,根据Felix、BIRD分发和维护的路由规则,可直接实现BGP路由转发,传输过程中不需要封包和解包,因此性能较好,但只能在同一个网段内使用,无法跨子网传输
具有更丰富的网络策略配置管理能力、性能更好、功能更全面,但是维护起来较为复杂所以对于较小规模且网络要求简单的K8S集群,可以采用flannel。对于集群规模较大且要求更多的网络策略配置时,可以采用性能更好、功能全全面的calico

1.4VLAN和VXLAN的区别

1.ID数
vlan可以有2的12次方个vlan,即4094个
vxlan可以2的24次方个vxlan
2.网络路径利用效率
vlan使用spanning tree protocol避免环路,会将一半的网络路径阻塞
vxlan的数据包封装成UDP通过网络层传输,可以使用所有的网络路径
3.Mac表
vlan需要在交换机的Mac表中记录Mac物理地址
vxlan采用隧道机制,Mac物理地址不需记录在交换机

2.CoreDNS

CoreDNS 是 K8S 的默认 DNS 实现
根据 service 资源名称 解析出 Cluster IP
根据 statefulset 控制器创建的 Pod 资源名称 解析出 Pod IP

3.k8s证书更新

kubeadm 部署的K8S集群更新证书
1)备份老证书和kubeconfig配置文件
mkdir /etc/kubernetes.bak
cp -r /etc/kubernetes/pki/ /etc/kubernetes.bak
cp /etc/kubernetes/*.conf /etc/kubernetes.bak2)重新生成证书
kubeadm alpha certs renew all --config=kubeadm.yaml3)重新生成kubeconfig配置文件
kubeadm init phase kubeconfig all --config kubeadm.yaml4)重启kubelet和其他K8S组件的Pod容器
systemctl restart kubeletmv /etc/kubernetes/manifests  /tmp
mv /tmp/*.yaml  /etc/kubernetes/manifests 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/88385.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型(LLM)与 Jupyter 连接起来了

现在,大语言模型(LLM)与 Jupyter 连接起来了! 这主要归功于一个名叫 Jupyter AI 的项目,它是官方支持的 Project Jupyter 子项目。目前该项目已经完全开源,其连接的模型主要来自 AI21、Anthropic、AWS、Co…

Spring AoP 详解

目录 一、概述二、Spring AOP 和 AspectJ AOP 的区别三、AspectJ 定义的通知类型四、多个切面的执行顺序控制方法 一、概述 AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志…

【c语言】指针进阶(超详细)

文章目录 ✈ 指向函数指针数组的指针📌指向函数指针数组的指针的定义📌指向函数指针数组的数组指针的使用 ✈回调函数📌 回调函数的定义📌 回调函数的使用 ✈qsort函数📌 qsort函数的作用📌qsort函数的定义…

【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档

使用Swagger生成Web API文档 高质量的API文档在系统开发的过程中非常重要。本节介绍什么是Swagger,如何在Spring Boot项目中集成Swagger构建RESTful API文档,以及为Swagger配置Token等通用参数。 1.什么是Swagger Swagger是一个规范和完整的框架&…

Docker desktop使用配置

1. 下载安装 https://www.docker.com/ 官网下载并安装doker desktop 2. 配置镜像 (1)首先去阿里云网站上进行注册:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors (2)注册完成后搜索:容…

go入门实践四-go实现一个简单的tcp-socks5代理服务

文章目录 前言socks协议简介go实现一个简单的socks5代理运行与压测抓包验证 前言 SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。协议在应用层和传输层之间。 本文使用先了解socks协议。然后实现一个socks5的tcp代理服务端。最后&#…

opencv实战项目 手势识别-手部距离测量

手势识别系列文章目录 手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪(定位手部关键点) 2.opencv实战项目 实现手势跟踪并返回位置信息&…

MySQL索引和事务

目录 索引的作用 与 概念 MySQL有哪几种索引类型 如何提高查找效率 聚簇索引与非聚簇索引 覆盖索引 索引的优点和缺点 索引的一些基本操作 索引优化 B树、B树、Hash、红黑树的区别 B树与B树的区别 MySQL为什么使用B树作为索引 联合索引中的顺序 MySQL的最左前缀原…

第三节:在WORD为应用主窗口下关闭EXCEL的操作(1)

【分享成果,随喜正能量】夏日里的遗憾,一定都会被秋风温柔化解。吃素不难,难于不肯捨贪口腹之心。若不贪口腹,有何吃素之不便乎。虽吃华素,不吃素日,亦须少吃。以一切物类,皆是贪生怕死&#xf…

Spring Boot集成Mybatis Plus通过Pagehelper实现分页查询

文章目录 0 简要说明Pagehelper1 搭建环境1.1 项目目录1.2 项目搭建需要的依赖1.3 配置分页插件拦截器1.4 源代码启动类实体类数据层xml映射文件业务层业务层实现类控制层接口配置swagger请求体 2 可能出现的疑问或者问题2.1 关于total属性疑问2.2 分页不生效问题 3 案例说明3.…

Dynamic Web TWAIN Crack

Dynamic Web TWAIN Crack 文件编辑 提供 GUI 和非 GUI 图像编辑器 内置基本图像编辑界面,如旋转、裁剪、镜像、翻转、擦除和更改图像大小 支持向图像添加彩色矩形 支持文字注释 提供图像交换功能 支持清除图像的指定区域并用颜色填充清除的区域 内置变焦 提供多图像…

VUE3组件

组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件…

pyscenic分析:视频教程

我们之前更新过pyscenic的教程:pySCENIC单细胞转录因子分析更新:数据库、软件更新。我们也说过,我们号是放弃R语言版的SCENIC的分析了,因为它比较耗费计算资源和时间,所以我们的单细胞转录因子分析教程都是基于pysceni…

JavaScript算法【入门】

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。…

openocd调试esp32(通过FT232H)

之前在学习ESP32,其中有一部分课程是学习openocd通过JTAG调试程序的,因为我用的是ESP32-wroom,usb端口没有集成对应的usb转jtag的ft232,查了ESP32相关的资料(JTAG 调试 - ESP32 - — ESP-IDF 编程指南 latest 文档 (es…

React如何配置env环境变量

React版本: "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述:编译时文件的base-href 官方描述: // We use PUBLIC_URL environment variable …

使用 PyTorch 逐步检测单个对象

一、说明 在对象检测任务中,我们希望找到图像中对象的位置。我们可以搜索一种类型的对象(单对象检测,如本教程所示)或多个对象(多对象检测)。通常,我们使用边界框定义对象的位置。有几种方法可以…

netty基础与原理

Netty线程模型和Reactor模式 简介:reactor模式 和 Netty线程模型 设计模式——Reactor模式(反应器设计模式),是一种基于 事件驱动的设计模式,在事件驱动的应用中,将一个或多个客户的 服务请求分离&#x…

windows任务栏右下角不显示网络图标解决方法

1、背景 我运行windows诊断服务之后,然后重启了一把电脑,结果发现电脑无法上网了,进一步发现任务栏右下角的网络显示图标也没有了,网络状态显示也是一条横线。 几经折腾终于给解决了,遇到了不少坑,记录一…

三、web核心防御机制(下)

文章目录 核心防御机制2.3处理攻击者2.3.1 处理错误2.3.2 维护审计日志2.3.3 向管理员发出警报2.3.4 应对攻击 2.4 管理应用程序 核心防御机制 2.3处理攻击者 任何设计安全应用程序的开发人员必须基于这样一个假设:应用程序将成为蓄意破坏且经验丰富的攻击者的直接…