k8基础知识

news2025/4/21 23:59:11

总述

在构成扁平化网络的基础上实现Pod编排(控制、管理)、调度,再构成服务;对服务的管理有所欠缺;可以说k8s重点解决资源的问题
服务管理、应用管理;istio重点解决服务的问题

功能

开源、动态伸缩、负载均衡、轻量、有状态服务

架构

在这里插入图片描述
Control Plane (master):api-server controller scheduler etcd
node:kubelet kubeproxy pod(container)
client:kubectl webUI

docker:一种CRI,宿主机容器创建和管理工作
pod:包含容器,pause容器>>init C容器>>主容器
svc:由pod构成的服务
controller:控制pod的副本数目
kubelet:通过CRI(容器运行时接口)管理pod的生命周期
kubeproxy:

  • svc构成:监控pod和svc的变化,操作网络代理(iptable或者ipvs)为pod构成svc服务
  • 负载均衡
    CoreDNS:为svc提供域名解析
    Ingress Controller:本质书写网络代理方案(默认nginx规则);官方只能实现四层代理,ingress 可以实现七层代理;nginx代理
    etcd:分布式键值存储服务;为整个集群提供存储服务
    Dashboard:网页面板;web UI
    Promethus:提供K8S集群的监控能力
    KubeSphere:在 Kubernetes 之上构建的面向云原生应用的分布式操作系统
    Federation:管理多个k8s;提供一个可以跨集群中心多K8S统一管理功能

网络

CNI(container network interface)

  • Flannel:为集群中的Pod构成了一张网络,为Pod提供全集群唯一的内部IP
  • Calico:基于BGP的纯L3的网络通信架构
  • Cilium:支持L3/L4/L7,基于BPF进行数据包过滤

CNI(container network interface) Flannel:

- L3的网络通信架构
- 不同节点主机创建的pod都具有"全集群唯一的虚拟IP地址",
- 使用etcd管理IP地址段资源,维护pod路由表;
- 基于 Iptables或者ipvs 进行进行数据包过滤;
- 集群内部不同节点主机创建的容器都具有全集群唯一的虚拟IP地址;避免ip相同,调整docker0 设置不同docker为不同网段。internet还是使用的真实IP
- Flannel使用UDP协议承载虚拟iP

负载均衡

  • iptables:为防火墙而设计的,也有负载均衡能力
  • IPVS:专用于高性能负载均衡,并使用更高效的数据结构(Hash表)

网络代理:

  • nginx:ingress默认使用nginx

不同实体通信过程:

  • 同一pod不同容器:通过pause容器
  • pod与svc之间:kubeproxy感知Pod和svc的变化,生成的iptables规则或ipvs规则
  • 同一节点不同pod:通过docker0
  • 不同节点不同pod:通过Flannel0

账户

ServiceAccount

私有镜像仓库,镜像拉取所需服务账号

存储

存储分类:

  • ConfigMap:环境变量env使用cm,command参数使用cm,volume使用cm;热更新,volume使用了configMap,configMap修改后可以热更新到volume中(10s);更新 ConfigMap 目前并不会触发相关 Pod 的滚动更新
  • Secret:密码
  • volume:数据卷。emptyDir空目录,生命周期与pod一致;hostPath,持久化到k8s的node(主机)目录
  • PV:持久化卷

StatefulSet

  • 存储(NFS)>>PV>>StatefulSet(PVC>>pod)
  • 存储构成PV;PVC选择PV;Pod挂载PVC;StatefulSet创建PVC;StatefulSet引用headless SVC

Pod

pod构成:自定义容器(容器A 容器B)共用pause容器的“网络栈”和“挂载卷”;
pod状态:Pending Running Successed Failed Unknown
Pod生命周期:

  • 过程:pause容器>>init C>>启动主容器
  • init C:顺序执行
  • main C状态:start, liveness (readiness, stop)
  • main C状态liveness:主容器是否存活
  • main C状态readiness:主容器是否可以对外提供服务
  • main C探针:readinessProbe, livenessProbe
  • main C探针类型:http, exec, tcpSocket, grpc
  • main C启动/停止:postStart, preStop

Service(svc)

svc功能:多个pod组成一个service;service向外提供IP服务
svc分类:

  • clusterIP(默认):分配内网IP,svcIP映射到PodIp(iptables规则、ipvs规则);kubeproxy管理这个svc;iptables或ipvs进行负载均衡
  • nodeport:分配外网IP
  • headless:clusterIP: “None” 就是Headless;不分配内网IP,svc域名解析到PodIP;kubeproxy不会管理这个svc,不会使用iptables或ipvs进行负载均衡
  • ExternalName:由集群内到外;从集群重定向到集群外部;重定向发生在DNS层
  • LoadBalancer:由外到集群内;云提供商去创建LB 来向节点导流;loadBalancer比nodePort多了一步,就是可以调用 云提供商去创建LB 来向节点导流

容器

容器重启策略:restartPolicy

  • Always:总是重启;容器失效时,kubelet 自动重启该容器。
  • OnFailure:失败退出重启;容器终止运行且退出码不为0时重启。
  • Never:不重启;不论状态为何,kubelet 都不重启该容器。

镜像拉取策略:imagePullPolicy

  • IfNotPresent:本地没有使用远程;默认值。
  • Never:只使用本地,不适用远程。
  • Always:不使用本地,只使用远程。

CoreDNS

CoreDNS为svc提供内网域名解析(svc域名-svc ip);集群外部无法访问因为仍然是ClusterIP类型

Ingress

作用:提供nginx能力,nginx有的能力ingress都有
本质:ingress把我们定义的网络代理方案写入到创建的ingress pod(ingress-nginx名称空间中的ingress-pod)主容器中的nginx配置文件中
流程

  • 请求域名+端口
  • ingress的pod构成的svc(nodeport(低版本k8s)或loadBalancer(高版本k8s))外部端口
  • ingress的pod,nginx配置文件(ingressSVC外部端口 自己的SVC内部端口)
  • 自己的pod构成的svc(ClusterIP)内部端口
  • 自己的pod

Controller

一般就是用ReplicaSet;无状态服务就用Deployment;有状态服务就用StatefulSet
ReplicaSet:维持服务数量(支持创建副本时添加选择器)
Deployment:发布等功能(支持滚动更新);deployment通过RS去控制pod;创建新RS>>创建新Pod>>删除旧Pod>>关闭旧RS
StatefulSet:有状态服务(Deployments 和 ReplicaSets 只支持无状态服务);将部署顺序、网络等信息存储下来。
DaemonSet:node节点上有且只有一份pod;公共服务;支持pod (确保全部(或者一些) Node节点(非master节点)上都运行一个 Pod 的副本(有且只有一个))比如ELK;与RS无关
Job:负责批处理任务,即仅执行一次的任务;job执行完后不会自动删除
Cron Job:在job基础上加了定时调度;Cronjob>>job>>pod;定时执行一次;删除cronjob会自动删除job和pod

Deployment

deployment、rs、pod名称之间关系:

# kubectl get deployment
deployment-rsjapp
# kubectl get rs
deployment-rsjapp-6665f85c58
# kubectl get pod
deployment-rsjapp-6665f85c58-6cbmz

StatefulSet

存储>>PV>>StatefulSet(PVC>>pod)
存储构成PV;PVC选择PV;Pod挂载PVC;StatefulSet创建PVC;StatefulSet引用headless SVC

CronJob

cronjob、job、pod名称之间关系:

cronjob-pi
cronjob-pi-1608196200
cronjob-pi-1608196200-chjpc

Job

job、pod名称之间关系:

job-pi
job-pi-pqx6p

简介

pod网络

总述:Kubernetes 的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中

  1. Flannel:基于L2,构建用于各个pod通信的网络架构。使用iptables进行数据包过滤。
  2. Calico:纯L3,构建用于各个pod通信的网络架构。使用iptables进行数据包过滤。

组件

  1. Master节点:
    • API Server(kube-apiserver):提供了HTTP Rest接口的关键服务进程,是kubernetes里所有资源的增删改查等操作的唯一入口,也是集群中的入口进程
    • Controller Manager(kube-controller-manager):kubernetes里所有资源对象的自动化控制中心,可以理解成为资源对象的“大总管”
    • Scheduler:(kube-scheduler):负责资源调度(pod调度)的进程,相当于公交公司的“调度室”
    • Etcd:所有资源对象的数据被会被保存到etcd中,持久化
  2. Node节点:
    • docker engine:docker引擎,负责本主机的容器创建 和管理工作
    • kubelet:负责pod对应容器的创建,启停等任务,另外kubelet与master紧密协作,随时报告给master自身的情况,如CPU,内存,操作系统,docker版本等
    • kube-proxy:实现kubernetes server的通信与负载均衡机制的重要组件;提供svc服务(服务发现);负责写入规则至 IPTABLES(ip数据包过滤)、IPVS(负载均衡) 实现服务映射访问的;
  3. k8s其它组件:
    • kubectl:命令行工具
    • DASHBOARD:网页面板;给 K8S 集群提供一个 B/S 结构访问体系

k8s

  1. pod控制器:Deployment 》ReplicaSet 》pod
    • kubectl run 并不是直接创建一个 Pod,而是先创建一个 Deployment 资源(replicas=1),再由与 Deployment 关联的 ReplicaSet 来自动创建 Pod
  2. CNI(flannel或Calico)将为pod构建网络。
  3. 为pod创建svc 可以获取cluster_ip

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爱奇艺2020校招Java方向笔试题(第一场)

1.计算下列程序的时间复杂度&#xff08;&#xff09; for (i1;i<n;i)for(j1;j<m;j){a1,a2,a3,a4};A.O(n) B.O(mn) C.O(m) D.O(1) 答案:B 2.求递归方程T(n)4T(n/2)n 的解 ( ) A.O(n) B.O(n^2) C.O(n^3) D.O(logn) 答案:B 用Mater公式计算 3.下列关于动态规划算法说法错…

RCWA包:光学模拟的强大工具——用于计算光子 晶体R/T 光谱 的严格耦合波分析

目录 RCWA包&#xff1a;光学模拟的强大工具 RCWA包的功能 如何开始使用RCWA包 RCWA包的特性 RCWA包的应用示例 示例代码 基本的光学概念介绍。 1. 反射率、透射率和散射率 2. 衍射和衍射光栅 3. 光子晶体 4. 布拉格镜 5. 垂直腔面发射激光器&#xff08;VCSEL&…

芒果改进YOLOv8系列:改进特征融合网络 BiFPN 结构,融合更多有效特征

芒果改进YOLOv8系列:改进特征融合网络 BiFPN 结构,融合更多有效特征 在这篇文章中,将 BiFPN 思想加入到 YOLOv8 结构中 该版本为高效简洁版,涨点多、还速度快(实际效果反馈) 本篇博客 不占用 高阶专栏的总篇数计划中 文章目录 一、BiFPN 论文理论二、效果反馈(涨点)…

华为OD机试真题 Java 实现【任务总执行时长】【2023Q1 100分】

一、题目描述 任务编排服务负责对任务进行组合调度。 参与编排的任务有两种类型&#xff0c;其中一种执行时长为taskA&#xff0c;另一种执行时长为taskB。 任务一旦开始执行不能被打断&#xff0c;且任务可连续执行。服务每次可以编排num个任务。请编写一个方法&#xff0c…

Git常用操作:基础命令、生成公钥、webhook同步

这里写目录标题 下载安装GIT基础命令克隆初始化与仓库建立连接下拉代码提交代码清空本地缓存 本地生成GIT公钥webhook&#xff08;本地-码云-服务器代码同步&#xff09; 下载安装GIT 此处只介绍windows系统下的安装&#xff0c;linux一般都是自带git&#xff08;自行百度&…

linux跑python控制台输出日志无内容或者断掉

问题描述 训练时候的输出日志要么没有&#xff0c;要么就是输出了一点点就没有了&#xff08;突然不输出内容了&#xff09;&#xff0c;记得之前也出现过训练中途突然日志不打印了&#xff0c;当时以为服务器原因可能被挤掉了。但这次是还没开始并且试过很多次了。 所用语句…

85. `if __name__ == “__main__“`的作用和原理(适合小白)

85. if __name__ "__main__"的作用和原理&#xff08;适合小白&#xff09; 文章目录 85. if __name__ "__main__"的作用和原理&#xff08;适合小白&#xff09;1. 代码体验2. __name__的作用2.1 模块知识回顾2.2 __name__的作用 3. if __name__ "…

水果手机SJ流程

注册教程 第一步:注册新邮箱。 首先&#xff0c;你需要一个邮箱账号&#xff0c;国内126.QQ.163等都可以&#xff0c;只要你没有用它注册过AppleID。 第二步:注册。 复制链接到浏览器&#xff0c;打开进入appleID注册界面:https://appleid.apple.com/account#&#xff01;&…

采用UWB(超宽频)技术开发的java版智慧工厂定位系统源码

室内定位系统源码&#xff0c;采用UWB定位技术开发的智慧工厂定位系统源码 技术架构&#xff1a;单体服务 硬件&#xff08;UWB定位基站、卡牌&#xff09; 开发语言&#xff1a;java 开发工具&#xff1a;idea 、VS Code 前端框架&#xff1a;vue 后端框架&#xff1a;s…

Linux内核(十七)Input 子系统详解 IV —— 配对的input设备与input事件处理器 input_register_handle

文章目录 input_handle结构体详解配对的input设备与input事件处理器实例input核心层对驱动层和事件层之间的框架建立流程图 本文章中与input子系统相关的结构体可参考input子系统结构体解析 input函数路径&#xff1a;drivers/input/input.c input_handle结构体详解 input_ha…

算法之美:探究左右元素和的差值

本篇博客会讲解力扣“2574. 左右元素和的差值”的解题思路&#xff0c;这是题目链接。 先来审题&#xff1a; 以下是输出示例&#xff1a; 以下是提示&#xff1a; 本题的关键在于&#xff0c;“左和”和“右和”是如何变化的。下面我通过代码来演示。 一上来&#xff0c;…

唐朔飞计算机组成原理常见的寄存器(时不时就更新)

EINT中断允许触发器 如果是1代表开中断就是可以中断 如果0表示关中断 不能触发中断程序&#xff0c;1.响应中断的条件是当设备有请求并且 中断允许触发器为1的时候 时间是指令执行周期结束的时候。2.实现多重中断的条件是 中断允许触发器置为1并且 有更高的服务程序才能除法多重…

【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(上)

文章目录 前言&#x1f31f;一、带头双向循环链表&#x1f31f;二、带头双向循环链表结构图&#xff1a;&#x1f31f;三、带头双向循环链表代码实现&#xff1a;&#x1f30f;3.1头插&#xff1a;&#x1f4ab;3.1.1头插流程图&#x1f4ab;3.1.2 相较于无头单向非循环链表&am…

高边输出和低边输出

文章目录 高边和低边高边驱动&#xff08;HSD&#xff0c;High Side Drive&#xff09;和低边驱动&#xff08;LSD&#xff0c;Low Side Drive&#xff09;应用示例举例高/低边驱动芯片 按照开关闭合时开关输出的电压高低&#xff0c;可以分为高边输出和低边输出开关。 高边和低…

ubuntu 20.04 通过 sshfs 共享文件夹到 windows

功能需求 最近需要 让 ubuntu 共享文件夹&#xff0c;windows 来映射成磁盘或者共享目录的方式使用 windows 的文件夹可以通过 VMware Workstation Pro 虚拟机【共享文件夹】设置&#xff0c;轻松的实现 文件共享&#xff0c;不过这里的共享是 单向的&#xff0c;也就是 文件夹…

Windows服务器加固

文章目录 一、 账户安全要求二、 权限安全要求三、 通用安全管理四、 日志审计安全五、网络协议安全 一、 账户安全要求 1、 账户错误登录锁定 次数&#xff08;8&#xff09; 开始->运行->输入“gpedit.msc”打开本地组策略编辑器&#xff0c;浏览 路径&#xff1a;“…

快来学习SQL数据库,MySQL的保姆级安装,MySQL的入门使用以及DBeaver软件的安装

SQL数据库 无处不在的SQL&#xff0c;不管是何种开发语言&#xff0c;亦或是何种开发方向&#xff0c;SQL都是开发人员无法绕开的话题。除了一门趁手的编程语言外&#xff0c;SQL语言也是开发人员人人必备的开发技能。 数据库有三个层级&#xff1a;库——表——数据 市面上的…

路径规划算法:基于斑点鬣狗优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于斑点鬣狗优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于斑点鬣狗优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

第五十八章 Unity 发布PC平台

本章节我们介绍一些如何打包游戏到PC平台&#xff0c;这里重点介绍如何制作Windows操作系统下的游戏包。首先&#xff0c;我们创建一个“PcDemo”工程&#xff0c;然后简单布置一下场景内容&#xff0c;如下 想要打包发布Unity项目&#xff0c;我们可以在菜单栏选择“File”→ …

PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用

PHP 面向对象&#xff0c;构造函数&#xff0c;析构函数&#xff0c;继承&#xff0c;方法的重写&#xff0c;接口抽象类&#xff0c;static&#xff0c;final&#xff0c;this&#xff0c;parent&#xff0c;self的异同和作用 PHP 面向对象1.构造函数2.析构函数3.继承4.方法重…