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
相关文章:
k8s基础
k8s基础 文章目录 k8s基础一、k8s组件二、k8s组件作用1.master节点2.worker node节点 三、K8S创建Pod的工作流程?四、K8S资源对象1.Pod2.Pod控制器3.service && ingress 五、K8S资源配置信息六、K8s部署1.K8S二进制部署2.K8S kubeadm搭建 七、K8s网络八、K8…...
【自然语言处理】大模型高效微调:PEFT 使用案例
文章目录 一、PEFT介绍二、PEFT 使用2.1 PeftConfig2.2 PeftModel2.3 保存和加载模型 三、PEFT支持任务3.1 Models support matrix3.1.1 Causal Language Modeling3.1.2 Conditional Generation3.1.3 Sequence Classification3.1.4 Token Classification3.1.5 Text-to-Image Ge…...
FFmpeg将编码后数据保存成mp4
以下测试代码实现的功能是:持续从内存块中获取原始数据,然后依次进行解码、编码、最后保存成mp4视频文件。 可保存成单个视频文件,也可指定每个视频文件的总帧数,保存多个视频文件。 为了便于查看和修改,这里将可独立的…...
设置VsCode 将打开的多个文件分行(栏)排列,实现全部显示
目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示 1. 前言 主流编程IDE几乎都有排列切换选择所要查看的文件功能,如下为Visual Studio 2022的该功能界面: 图 1 图 2 当在Visual Studio 2022打开很多文件时,可以按照图1、图2所示找到自…...
Vue.js2+Cesium1.103.0 六、标绘与测量
Vue.js2Cesium1.103.0 六、标绘与测量 点,线,面的绘制,可实时编辑图形,点击折线或多边形边的中心点,可进行添加线段移动顶点位置等操作,并同时计算出点的经纬度,折线的距离和多边形的面积。 De…...
【redis 延时队列】使用go-redis的list做异步,生产消费者模式
分享一个用到的,使用go-redis的list做异步,生产消费者模式,接着再用 go 协程去检测队列里是否有东西去消费 如果队列为空,就会一直pop,空轮询导致 cpu 资源浪费和redis qps无效升高,所以可以通过 time.Sec…...
激光焊接塑料多点测试全画面穿透率测试仪
工程塑料由于其具有高比强度、电绝缘性、耐磨性、耐腐蚀性等优点,已广泛应用于各个重要领域。另一方面,工程塑料还具有良好的焊接性,是制成复合材料的基体材料的优良选择,因此目前已成为国内外新型复合材料的研究热点。 工程塑料…...
用 Uno 当烧录器给 atmega328 烧录 bootloader
用 Uno 当烧录器给 atmega328 烧录 bootloader date: 2023-8-10 https://backmountaindevil.github.io/#/hackaday/arduino/isp 引脚接线 把两个板子的 11(MOSI)、12(MISO)、13(SCK)、5V、GND 两两相连,还要把 Uno(烧录器)的 10 接到atmeg…...
spring boot策略模式实用: 告警模块为例
spring boot策略模式实用: 告警模块 0 涉及知识点 策略模式, 模板方法, 代理, 多态, 反射 1 需求概括 场景: 每隔一段时间, 会获取设备运行数据, 如通过温湿度计获取到当前环境温湿度;需求: 对获取回来的进行分析, 超过配置的阈值需要产生对应的告警 2 方案设计 告警的类…...
Camunda 7.x 系列【10】使用 Rest API 运行流程实例
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. 官方接口文档3. 本地接口文档3.1 Postman3.2 Camunda Platform Run Swagger3.3 S…...
Python-OpenCV中的图像处理-边缘检测
Python-OpenCV中的图像处理-边缘检测 边缘检测Canny算子 边缘检测Canny算子 Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在 1986 年提出的。它是一个有很多步构成的算法:噪声去除、计算图像梯度、非极大值抑制、滞后阀值等。 Canny(i…...
一文了解Java序列化和反序列化:对象的存储与传输
一文了解Java序列化和反序列化:对象的存储与传输 作者:Stevedash 发布时间:2023年8月9日 21点30分 前言 Java序列化是一项强大而重要的技术,它允许我们将对象转换为字节流,以便在存储、传输和重建时使用。在本文中&…...
react-codemirror2 编辑器需点击一下或者延时才显示数据的问题
现象: <Codemirror/>组件的数据已经赋上值的情况下,初始状态不渲染数据,需要点击编辑框获取焦点后才展示,或者延迟了几秒才显示出来。 原因: 指定了一些依赖的版本,可能不兼容了一些功能,…...
火山引擎联合Forrester发布《中国云原生安全市场现状及趋势白皮书》,赋能企业构建云原生安全体系
国际权威研究咨询公司Forrester 预测,2023年全球超过40%的企业将会采用云原生优先战略。然而,云原生在改变企业上云及构建新一代基础设施的同时,也带来了一系列的新问题,针对涵盖云原生应用、容器、镜像、编排系统平台以及基础设施…...
需要数电发票接口的,先熟悉下数电发票基本常识
最近有一些技术小伙伴来咨询数电发票接口的时候,对数电发票的一些常识不太了解, 导致沟通起来比较困难。比较典型的这三个问题: 一、开具数电票时,如何设置身份认证频次? 请公司的法定代表人或财务负责人登录江苏省电…...
node-sass是什么
一、Sass(Syntactically Awesome Style Sheets) 是一种CSS预处理器,它扩展了CSS的功能并提供了更强大的样式表语言。Sass允许开发人员使用变量、嵌套规则、混合(Mixins)、继承等高级功能来编写更简洁、可维护的样式代…...
C语言指针之 进阶
前言 今天来较为深入的介绍一下指针,希望大家能有所收获~ 那么,先进行一些简单的基础知识复习吧。 字符指针 格式:char * 补充: 表达式“abcdef”的值是首字符a的地址 所以当像下面这么使用时,它的含…...
C++单例模式
文章目录 1、什么是单例2、一个好的单例应该具备的条件3、懒汉模式与饿汉模式4、单例实现:线程安全、内存安全的懒汉式单例(基于C11的智能指针和互斥锁) 1、什么是单例 单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类…...
C++ 析构函数
析构函数 析构函数于构造函数相对应,构造函数是对象创建的时候自动调用的,而析构函数就是对象在销毁的时候自动调用的 特点: 1)构造函数可以有多个来构成重载,但析构函数只能有一个,不能构成重载 2&…...
CSS——字体选择
在网页设计和开发中,字体选择是一个非常重要的因素。字体不仅仅是文字的表现形式,它们还能够传达出一种特定的情感和风格。在CSS中,我们可以通过使用字体代码来定义网页中使用的字体。 CSS提供了一种简单而灵活的方式来设置字体。通过使用fo…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
