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

Kubernetes学习笔记

云计算三层模型

IaaS(基础设施即服务):提供虚拟化计算资源(如虚拟机、存储、网络)。

PaaS(平台即服务):提供应用开发和部署环境(如数据库、中间件、运行时)。(K8s)

SaaS(软件即服务):提供可直接使用的应用(如邮箱、CRM、协作工具)。

优势:

服务发现和负载均衡

存储编排(添加任何本地或云服务器)

自动部署和回滚

自动分配CPU/内存单元

自我修复(需要时启动新容器)

Secret(安全相关信息)和配置管理

大型规模的支持

开源

K8S组件插件附件

组件:Kubernetes  API Server,Kubernetes  Scheduler,Controller Manager  ,Kube-proxy

插件:Docker,  CoreDNS  , ingress Controller

附件:Prometheus,Dashboard,Federation

K8s平台支持的规模数量

节点数不超过5000

每个节点的Pod数量不超过110

Pod总数不超过150000

容器总数不超过300000

Pod

介绍:Pod 是 Kubernetes 中最小部署模块,包含一个或多个容器

特点:共享网络命名空间、存储卷、IP地址和端口空间

特性:

Pause特性:

Pod内部第一个启动的容器

初始化网络栈

挂载需要的存储卷

回收僵尸进程

其他容器特性:

与Pause容器共享名字空间(NetworkPIDIPC进程间通信)

网络

K8S的网络模型假定了所用的pod都在一个可以直接连通的扁平的网络空间

网络模型原则

在不使用网络地址转换(NAT)的情况下,集群中的pod能够与任意其他pod进行通信,在集群节点上运行的程序能与同一节点上的任何Pod进行通信

每个Pod都有自己的IP地址,并且任意其他Pod都可以通过相同的这个地址访问它

CNI

CNI,容器网络接口。通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信,只要实现CNI标准中定义的核心接口操作(ADD,将容器添加到网络;DEL,从网络中删除一个容器;CHECK,检查容器的网络是否符合预期)。CNI插件通常聚焦在容器到容器的网络通信。

网络模型

非封装网络(underlay):现实的物理基础层网络设备

封装网络(overlay):一个基于物理网络之上构建的逻辑网络

Calico

Calico是一个纯三层的虚拟网络,它没有复用docker的docker0网桥,而是自己实现的,calico网络不对数据包进行额外封装,不需要NAT和端口映射

架构:

Felix 负责节点层面的网络配置与策略执行;

BIRD 借助 BGP 协议完成节点间路由信息交换,构建网络连通性;

confd 动态管理组件配置文件,确保系统能随网络环境变化自动调整。

工作模式:

VXLAN(虚拟可扩展局域网)

VXLAN可以完全在内核态实现封装和解封装工作,通过隧道机制,构建出覆盖网络,基于三层的二层通信(

把整个二层帧当作 "货物",外层重新套上三层的 IP 头和 UDP 头),只要K8S三层互通,可以跨网段

封装过程:原始二层帧 → 添加 VXLAN 头(含 VNI)→ 添加 UDP 头(端口 4789)→ 添加外层 IP 头 → 传输。

IPIP:

原理:将原主机的IP数据包封装在一个新的IP数据包中。只要K8S三层互通,可以跨网段

封装过程:原始 IP 包 → 添加外层 IP 头(源 / 目的为隧道端点 IP)→ 传输。

典型用途:异种网络互联(如 IPv4 隧道传输 IPv6 包)、VPN 等。

BGP:

原理:通过 BGP 协议在节点间动态交换路由信息,直接利用三层网络转发容器流量。可以跨网段

特点:

无隧道:数据包直接通过节点 IP 路由,效率高(不用封装)。

动态路由:自动学习容器 IP 的可达性,无需手动配置。

依赖条件:网络需支持 BGP(如数据中心三层互联)。

K8s安装:

kubeadm:组件通过容器化方式运行

安装:Linux --- >  docker ---> cri-docker  --->  kubeadm kubelet kubctl ---> calico

kubeadm 是用于创建 Kubernetes 集群的工具,在集群搭建过程中,它会自动配置 kubelet 和其他组件,确保它们能够正常工作。

kubelet 作为节点上的代理,负责执行 kubectl 通过控制平面下发的指令,管理节点上的容器

kubectl 则是用户与 Kubernetes 集群进行交互的主要方式,用户可以使用 kubectl 向控制平面发送请求,控制平面再将这些请求转化为具体的操作,由 kubelet 在节点上执行。

资源:

K8s中所有的内容都抽象为资源,资源实例化之后,叫做对象。

资源分类:

名称空间级别

工作负载型资源:Pod、ReplicaSet、Deployment...

服务发现及负载均衡型资源:Service、Ingress...

配置与存储型资源:Volume、CSI...

特殊类型的存储卷:ConfigMap、Secret...

集群级资源

Namespace、Node、ClusterRole、ClusterRoleBinding

元数据型资源

HPA、PodTemplate、LimitRange

编写资源清单:

实例:

结构:

apiVersion     接口组/版本

kind               类别

metadata       元数据

name

namespace

labels

spec               期望

status             状态

常用指令:

查看资源组和版本:kubectl  explain  资源类别

创建pod资源(防覆盖):kubectl  create -f   yaml文件    --record

### --record 参数可以记录命令,我们可以很方便的查看每次 revision 的变化

获取当前的资源

kubectl get kindName

    -A,--all-namespaces 查看当前所有名称空间的资源

    -n  指定名称空间,默认值 default,kube-system 空间存放是当前组件资源

    --show-labels  查看当前的标签

    -l  筛选资源,配合标签(key、key=value)

    -o wide  详细信息包括 IP、分配的节点

    -w  监视,打印当前的资源对象的变化部分

进入 Pod 内部的容器执行命令

 kubectl exec -it podName   -c   容器名   --     command

                      -c  可以省略,默认进入唯一的容器内部

查看资源的描述

kubectl explain pod.spec

查看 pod 内部容器的 日志

kubectl logs podName -c cName

查看资源对象的详细描述

kubectl describe pod podName

删除资源对象

kubectl delete kindName objName

    --all 删除当前所有的资源对象

pod生命周期:

initC:

initcontainers:

线性执行

只有前一个初始化容器成功完成(退出码 0),才会执行下一个

initC执行完成,才会执行mainC

mainC:

承载实际业务逻辑的容器,如 Web 服务、数据库服务等。

需等待所有 initC 执行成功后,才会启动。

区别:

维度

initContainers(初始化容器)

containers(主容器)

执行顺序

先于主容器执行,全部完成后主容器启动。

后于 initC 启动。

功能定位

处理前置依赖、环境准备等初始化工作。

运行核心业务逻辑。

重启策略

遵循 Pod 的 restartPolicy(默认 Always,失败会重试)。

按 Pod 的 restartPolicy 执行(如 Always 时失败会重启)。

探针:

执行主体:探针由当前pod所在节点的 kubelet 对容器执行定期诊断,通过调用容器实现的 Handler 执行。

处理程序类型:

Exec:在容器内执行指定命令,若命令退出返回码为 0,则诊断成功。

HTTPGet:对容器指定端口和路径的 IP 地址执行 HTTP Get 请求,响应状态码 ≥200 且 <400 时,诊断成功。

TCPSocket:对容器指定端口的 IP 地址进行 TCP 检查,端口打开则诊断成功。

探测结果内容提取:

成功:容器通过诊断。

失败:容器未通过诊断。

未知:诊断失败,不采取任何行动。

分类:

启动探测(Startup Probe)

就绪探测(ReadinessProbe)

存活探测(Liveness Probe)

参数;

initialDelaySeconds:容器启动后等待多久开始第一次检测。

periodSeconds:检测的时间间隔(默认 10 秒)。

timeoutSeconds:单次检测的超时时间(默认 1 秒)。

successThreshold:从失败恢复为成功所需的连续成功次数(默认 1)。

failureThreshold:连续失败次数达到阈值后触发动作(默认 3)

钩子:

钩子(hook),由当前pod所在节点的 kubelet 发起的,当容器中的进程启动前或者终止前,包含在容器的生命周期之中,可同时为pod中的所用容器配置hook

类型:

exec:执行一段命令

HTTP:发送HTTP请求

格式:

lifecycle:

postStart(启动后钩子)

preStop(关闭前钩子)

pod控制器:

常用指令:

修改标签:kubectl   label   pod  objname  修改label

重建(命名式):kubectl  replace  -f   yaml

更新(声明式):   kubectl  apply  -f   yaml

不同:kubectl  diff  -f   yaml

调整副本数量:

kubectl    scale   kindName    objname  --replicas=num

kubectl autoscale <资源类型> <资源名称> --min=<最小副本数> --max=<最大副本数> --<指标类型>-percent=<目标值> 

更新容器镜像:

kubectl set image <资源类型/名称> <容器名>=<镜像>:用于更新 Deployment 中容器镜像,触发滚动更新。

修改部署策略(补丁方式):

补丁内容可参考-o json书写

kubectl patch <资源类型/名称> -p|--patch '补丁内容':用补丁修改 Deployment 配置,如滚动更新策略。

回滚命令:

暂停与恢复滚动更新:

kubectl rollout pause <资源类型/名称>:暂停滚动更新。

kubectl rollout resume <资源类型/名称>:恢复滚动更新(与 pause 配合使用)。

查看滚动更新状态        

kubectl rollout status <资源类型/名称>        检查部署的滚动更新进度和状态

查看部署历史记录        

kubectl rollout history <资源类型/名称>        展示部署的历史版本、更新时间等信息

回滚部署        

kubectl rollout undo <资源类型/名称>       回滚 Deployment 到上一版本。

kubectl rollout undo <资源类型/名称> --to-revision=<版本号>        回滚到指定历史版本(Revision)

快速生成yaml模板:

kubectl create deployment [NAME] --image=[IMAGE]   --dry-run  -o   yaml

分类:

守护进程类型:

ReplicationController 和 ReplicaSet

RC 控制器

 保障当前的 Pod 数量与期望值一致

RS 控制器

                功能与 RC 控制器类似,但是多了标签选择的运算方式

Deployment

支持了声明式表达

支持滚动更新和回滚

原理:deployment  控制  RS 控制  pod

清理策略:修改spec.revisionHistoryLimit的值,来确定revision的记录条数

当使用  Deployment 创建 Pod 时,如果直接删除某个 Pod,Deployment 控制器会检测到当前运行的 Pod 数量未达到期望的副本数,自动创建一个新的 Pod 来替代被删除的 Pod。因此,除非删除整个 Deployment,否则 Pod 会被持续维持。

DaemonSet

保障每个节点有且只有一个 Pod 的运行,动态

批处理任务类型:

Job/CronJob

Job

保障批处理任务一个或多个成功为止

特殊说明:

RestartPolicy:仅支持 Never 或 OnFailure

单个 Pod 场景:默认 Pod 成功运行后,Job 即结束

.spec.completions:标志 Job 结束需成功运行的 Pod 个数,默认值为 1

.spec.parallelism:标志并行运行的 Pod 个数,默认值为 1

.spec.activeDeadlineSeconds:标志失败 Pod 的重试最大时间,超此时长不再重试

CronJob

.spec.schedule:

调度字段,为必需项,用于指定任务运行周期,格式与 Cron 表达式一致。

.spec.jobTemplate:

Job 模板字段,为必需项,用于定义需运行的任务,格式与普通 Job 资源一致。

.spec.startingDeadlineSeconds:

可选字段,表示启动 Job 的期限(单位:秒)。若因任何原因错过调度时间,对应 Job 会被判定为失败;若不指定,则无启动期限限制。

.spec.concurrencyPolicy:

并发策略字段,可选,用于处理 CronJob 创建的 Job 并发执行情况,仅支持以下策略:

Allow(默认):允许 Job 并发运行。

Forbid:禁止并发,若前一个 Job 未完成,直接跳过下一个 Job 的执行。

Replace:取消当前正在运行的 Job,用新 Job 替换。

补充说明:该策略仅作用于同一 CronJob 创建的 Job;若存在多个 CronJob,它们创建的 Job 之间始终允许并发运行。

Horizontal Pod Autoscaling

StateFulSet

Service

分类:

ClusterIP:默认类型,自动分配仅集群内部可访问的VIP,用于集群内服务通信。

NodePort:基于 ClusterIP,在集群每个节点绑定端口,支持通过 <NodeIP>:NodePort 从外部访问服务。

LoadBalancer:基于 NodePort,借助云服务商创建外部负载均衡器,将请求转发至 <NodeIP>:NodePort,实现外部流量负载均衡。

ExternalName:用于将集群外部服务引入内部直接使用,不创建代理,将集群内的 DNS 名称(如 my-service)映射到外部服务的域名(如 www.baidu.com)。。

作用:

服务发现:为后端 Pod 提供稳定访问入口,即使 Pod 动态创建、销毁或 IP 变更,仍可通过固定的 Service 名称 / IP 访问。

负载均衡:将外部请求流量自动分发到后端多个 Pod,实现流量均衡处理。

定义访问策略:统一配置端口、协议等访问规则,规范服务对外暴露方式。

svc选中pod的逻辑

pod是处于就绪状态

pod的标签是svc标签的集合(同一个名字空间下)

端口关系:

外部请求 → 节点(nodePort)→ Service(port)→ 转发到 Pod 容器(targetPort)→ 最终被 Web 应用处理

底层实现技术

kube-proxy 是 Service 负载均衡的核心组件,支持两种模式:

iptables 模式:通过 Linux iptables 规则实现流量转发(默认)。

IPVS 模式:基于内核级的 IP Virtual Server,支持更高效的负载均衡算法(如加权轮询、最小连接数)。

底层模型

通过 kube-proxy + IPVS/iptables 实现流量转发,结合 DNS 服务和 Endpoint 动态维护服务端点,最终提供稳定的服务访问入口

Endpoints:

Endpoints 是 Service 的“实际后端”,存储了所有匹配 Service 选择器(Selector)的 Pod 的 IP 和端口

自动关联 Endpoints(带 Selector 的 Service)

Service 通过 selector 定义筛选 Pod 的标签规则,持续监控集群中的 Pod,自动将匹配的 Pod IP 和端口存入 Endpoints 对象。

手动关联 Endpoints(无 Selector 的 Service)

        需要手动创建同名 Endpoints 对象,显式指定后端 IP 和端口。

加入NotRead的pod

kubectl patch service <服务名称> -p '{"spec":{"publishNotReadyAddresses": true}}' 

修改kube-proxy:

kubectl edit configmap kube-proxy -n kube-system (修改mode=ipvs)

修改完将之前的删掉kubectl delete pod -n kube-system -l k8s-app=kube-proxy(重建才生效)

LVS持久化连接

kubectl edit  svc  svcname 

进入后修改sessionAffinity为ClientIP,默认3小时

存储

分类:

元数据

configMap:用于保存配置数据(明文)

Secret:用于保存敏感性数据(编码)

Downward API:容器在运行时从Kubernetes  API服务器获取有关它们自身的信息

真实数据

Volume:用于存储临时或者持久性数据

PersistentVolume:申请制的持久化存储

configmap:

创建:

kubectl create configmap <configmap名称> --from-file=<文件名>

kubectl create configmap <configmap名称> --from-literal=<键1>=<值1> ...

热更新:

在不中断服务或重启 Pod 的情况下,将 ConfigMap 中更新后的配置信息应用到正在运行的 Pod 中

操作:

创建configmap文件,挂载到容器内部,当configmap发生改变时,挂载卷也会发生变化(注入)

ConfigMap 热更新限制

默认行为:更新 ConfigMap 不会自动触发关联 Pod 的滚动更新。

强制触发方法:通过修改 Pod 的 annotations 强制 Deployment 触发滚动更新。

kubectl patch deployment deployname  --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config":"66666666"}}}}}'

注意:

环境变量(Env)不会同步更新

卷挂载(Volume)延迟更新

不可改变:

在cm配置文件中加入immutable=true,将无法改变configmap文件,且不可逆,只能重建

优点:防止错误修改以及减少apiserver的请求压力

secret:

加密:echo -n "明文" | base64

解密:echo -n "编码" | base64 -d

volume:

emptyDir卷

emptyDir: {}

不同容器之间的数据共享;当Pod被分配给节点时,首先会创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。

hostpath卷

hostPath卷将主机节点的文件系统中的文件或目录挂载到集群中

特性

emptyDir

hostPath

生命周期

随 Pod 创建/删除

独立于 Pod,与节点共存亡

数据持久性

临时数据(Pod 删除后丢失)

持久化(除非节点数据被清理)

用途

Pod 内容器共享临时数据(如缓存)

访问节点特定资源(如日志、系统文件)

安全性

隔离在 Pod 内部,风险较低

暴露宿主机文件系统,存在安全风险

多节点适用性

无需关注节点位置

Pod 必须调度到特定节点才能访问数据

配置灵活性

支持内存(tmpfs)或磁盘存储

需手动指定节点路径及类型(文件/目录)

目录

云计算三层模型

优势:

K8S组件插件附件

Pod

特性:

Pause特性:

其他容器特性:

网络

网络模型原则

CNI

网络模型

Calico

架构:

工作模式:

K8s安装:

资源:

资源分类:

名称空间级别

集群级资源

元数据型资源

编写资源清单:

实例:

结构:

常用指令:

pod生命周期:

initC:

mainC:

区别:

探针:

处理程序类型:

探测结果内容提取:

分类:

参数;

钩子:

类型:

格式:

pod控制器:

常用指令:

分类:

守护进程类型:

批处理任务类型:

Service

分类:

作用:

svc选中pod的逻辑

底层实现技术

底层模型

修改kube-proxy:

LVS持久化连接

存储

分类:

configmap:

创建:

热更新:

secret:

volume:

PV/PVC


绑定关系:

      PVC 发出存储请求后,卷分配器为其寻找一个合适的 PV 进行绑定。绑定过程会根据 PVC 的存储需求(如容量、访问模式等)和 PV 的可用资源进行匹配。一旦绑定成功,PVC 就可以使用该 PV 提供的存储资源

PV/PVC 关联条件

容量:PV 容量值不小于 PVC 要求,理想情况是两者一致。

读写策略:需完全匹配,具体类型包括:

ReadWriteOnce(RWO):单节点读写。

ReadOnlyMany(ROX):多节点只读。

ReadWriteMany(RWX):多节点读写。

存储类:PV 与 PVC 的存储类必须严格一致,不存在包容或降级关系。

PV/PVC 回收策略

Retain(保留):pvc释放后,pv上的数据保留。

Recycle(回收):pvs释放后,pv上的数据清理,给下一个pvc使用。

Delete(删除):pvc释放后,pv也被释放。

目前仅 NFS 和 HostPath 支持回收策略;AWS EBS、GCE PD、Azure Disk 和 Cinder 卷支持删除策略。

PV/PVC 状态

Available(可用):资源空闲,未被任何声明绑定。

Bound(已绑定):卷已被 PVC 声明绑定。

Released(已释放):PVC 声明被删除,但资源未被集群重新声明。

Failed(失败):卷的自动回收操作失败。

命令行可显示绑定到 PV 的 PVC 名称,便于查看关联关系。

statefulSet:

特性:有序创建,上一个pod没有RUNNING,下一个pod不允许创建。倒序回收

数据持久化pod级别

绑定关系:pod --->pvc--->pv--->nfs

(创建时pv绑定nfs,创建pod时绑定pvc,pvc又绑定pv)

回收策略为 Retain 或者 Recycle时,当pod被删除后,重建后的pod的绑定关系和数据不会丢

稳定的网络访问方式:

podName.headlessSvcName.nsname.svc.domainName

补充:

当pvc被删除,Released 状态的 PV:需手动干预(如删除并重建 PV,或通过 kubectl edit 移除 claimRef 以重置为 Available

StorageClass:

作用:抽象和管理存储资源的动态供给,允许用户按需自动创建不同类型的持久化存储卷(PV

调度器

默认调度器:default-scheduler

自定义调度器:通过‘spec.schedulername’参数指定调度器的名字

过程:

预选

过滤不符合条件的节点

检查节点CPU,内存,GPU是否满足Pod请求

优选

根据优先级算法选择最优节点

优先选择CPU和内存使用率较低的节点

亲和性:

硬策略(requiredDuringSchedulingIgnoredDuringExecution)

软策略(preferredDuringSchedulingIgnoredDuringExecution)

节点亲和性:

软策略:调度器会尽量把 Pod 调度到满足条件的节点,但如果没有符合条件的节点,Pod 也会被调度到其他节点。

硬策略:Pod 必须被调度到满足条件的节点上,若没有符合条件的节点,Pod 会一直处于 Pending 状态。

pod亲和性:

软策略: Pod 尽量和某些具有特定标签的 Pod 调度到同一拓扑域

硬策略: Pod 必须和某些具有特定标签的 Pod 调度到同一拓扑域

pod反亲和性

三者区别:

匹配标签

操作符

拓扑域支持

调度目标

nodeAffinity

主机

In, NotIn, Exists, DoesNotExist, Gt, Lt

指定主机

podAffinity

POD

In, NotIn, Exists, DoesNotExist

POD 与指定 POD 同一拓扑域

podAntiAffinity

POD

In, NotIn, Exists, DoesNotExist

POD 与指定 POD 不在同一拓扑域

污点和容忍

机制:

  1. Taint 和 toleration 共同作用,可防止 Pod 被分配到不合适的节点。
  2. 节点能应用一个或多个 Taint(污点),若 Pod 不能容忍这些污点,该节点就不会接受该 Pod。
  3. 若为 Pod 应用 toleration(容忍),则表示这些 Pod “可以”(但非必须)被调度到具有匹配 Taint 的节点上,即容忍使 Pod 具备了被调度到含对应污点节点的资格,但调度器仍会综合其他因素决定是否真正调度。

污点组成:

Key=value:effect

value可以为空,effect描述污点作用。Taint effect支持如下选项:

NoSchedule:表示不会将Pod调度到具有该污点的Node上

PreferNoSchedule:表示尽量避免将Pod调度到该污点的Node上

NoExecute:与NoSchedule相同,同时会将Node已存在的Pod驱逐

语法:

设置污点:kubectl taint nodes <节点名称> <key>=<value>:<effect> 

移除污点:kubectl taint nodes <节点名称> <key>=<value>:<effect>-

查看污点:kubectl  describe  node  nodeName

设置容忍:

Spec.tolerations:

    - key: "<key>"

      operator: "<operator>"

      value: "<value>"

      effect: "<effect>"

      tolerationSeconds: <seconds>(NoExecute 有效)

固定节点调度:

指定节点调度:

pod.spec.nodeName将Pod直接调度到指定的Node节点上,跳过Scheduler的调度策略,进行强制匹配。

指定节点标签调度:

pod.spec.nodeSelector 通过标签让调度器按规则匹配节点,由调度器调度策略匹配 label,然后调度 Pod 到目标节点,

该匹配规则属于强制约束。无法跳过Scheduler的调度策略

安全机制:

认证:

组件通常通过 HTTPS 双向认证与 API Server 通信而 Pod 主要通过 ServiceAccount(SA)认证来访问 API Server

认证模式类型:

HTTP Token

HTTP Base

CA(最严格https认证)

HTTPS认证:

HTTPS 单向认证(RSA):

          客户端发送请求,服务端产生公钥和私钥,将自己的公钥包含在证书中,发送给客户端,客户端检查证书,并将证书中的公钥提取出来,用公钥加密客户端生成的预主密钥,发送给服务器,服务器用自己的私钥解密预主密钥,客户端和服务端使用生成的会话密钥对要传输的数据进行对称加密。

HTTPS 双向认证(ECDH)

          客户端发送请求,服务端产生公钥和私钥,将自己的公钥包含在证书中,发送给客户端,客户端检查证书,生成自己的非对称密钥对(公钥和私钥),公钥嵌入 客户端证书,发送给服务器,服务器验证客户端证书的合法性,服务端发送临时公钥参数(Server Params)。客户端生成临时公钥参数(Client Params),发送给服务端。双方通过 ECDH 算法协商出预主密钥(无需加密传输),客户端和服务端使用生成的会话密钥对要传输的数据进行对称加密。

kubectl,kubelet,kube-proxy的证书均需要https双向认证

ServerAccout:

SA解决pod访问apiServer认证的问题

默认,每个·namespace都会有一个SA,如果pod创建时没有指SA,就会使用Pod所属的ns的SA

组成:

ca.crt:集群的根证书,用于pod确认apiserver的安全性

token:使用apiServer私钥签发基于JWT标准的字符串,用于确pod的安全性

namespace:用于标识当前的pod的作用域

鉴权:

RBAC:基于角色的访问控制

优势:

对集群中的资源和非资源均拥有完整的覆盖

整个 RBAC 完全由几个 API 对象完成,同其它 API 对象一样,可以用 kubectl 或 API 进行操作

可以在运行时进行调整,无需重启 API Server

资源对象:

ns级别:Role,RoleBinding

cluster级别:ClusterRole,ClusterRoleBinding

HELM

核心概念:

Chart:这是描述一组 Kubernetes 资源的文件集合,可被视为应用的蓝图。

Release:指的是在 Kubernetes 集群中部署的 Chart 的一个实例。同一个 Chart 可以在同一个集群中部署多次,每次部署都会生成一个新的 Release。

Helm cli:helm客户端组件,负责和kubernetes apiS通信

Repository:用于发布和存储Chart的仓库。

helm repo add bitnami-itboon https://helm-charts.itboon.top/bitnami --force-update

helm repo update

常用命令:

仓库管理

添加 Helm 仓库:helm repo add <仓库名称> <仓库地址>

更新仓库缓存:helm repo update

列出已添加的仓库:helm repo list

移除仓库:helm repo remove <repo-name>

Chart 查找与搜索

在已添加仓库中搜索 Chart:helm search repo <关键词>

在 Helm Hub 中搜索 Chart:helm search hub <关键词>

Chart 安装

手动指定名称安装:helm install <发行版名称> <仓库/Chart 名称>

自动生成名称安装:helm install <仓库/Chart 名称> --generate-name

配置传递:

通过 -f/--values 引用 YAML 文件覆盖配置。

通过 --set key=value 从命令行覆盖特定配置项

查看安装信息

列出已安装的发行版:helm list

查看发行版详细状态:helm status <发行版名称>

查看chart默认值:helm show values <repo-name>/<chart-name>

Chart 升级与回滚

升级发行版:helm upgrade <发行版名称> <仓库/Chart 名称>

回滚发行版:helm rollback <发行版名称> [版本号]

Chart 删除

删除发行版:helm uninstall <发行版名称>

Chart 创建与打包

创建新的 Chart 模板:helm create <Chart 名称>

打包 Chart:helm package <Chart 名称>

Chart 验证

验证 Chart 语法和结构:helm lint <Chart 名称>

ingress-nginx

逻辑层:Ingress -> Service -> Pod(逻辑抽象)。

物理层:Ingress Controller 直接转发到 Pod(通过 Endpoints 发现)。

核心角色:Ingress Controller 是实际流量控制者,Service 提供动态服务发现

核心配置:

 .metadata.annotations:

            nginx.ingress.kubernetes.io/xxx:xxx

常见 nginx.ingress.kubernetes.io/ 注解及用途:

流量控制与负载均衡

指定负载均衡算法:nginx.ingress.kubernetes.io/load-balance

会话保持(粘性会话):nginx.ingress.kubernetes.io/affinity

请求限速(每秒请求数):nginx.ingress.kubernetes.io/limit-rps

路径与请求处理

路径重写:nginx.ingress.kubernetes.io/rewrite-target

强制 HTTPS 重定向:nginx.ingress.kubernetes.io/force-ssl-redirect

自定义请求头传递:nginx.ingress.kubernetes.io/proxy-set-headers

安全与证书

后端协议配置(如 HTTPS):nginx.ingress.kubernetes.io/backend-protocol

启用跨域资源共享(CORS):nginx.ingress.kubernetes.io/enable-cors

强制 SSL 重定向:nginx.ingress.kubernetes.io/ssl-redirect

性能优化

客户端请求体大小限制:nginx.ingress.kubernetes.io/proxy-body-size

代理连接超时设置:nginx.ingress.kubernetes.io/proxy-connect-timeout

启用 Gzip 压缩:nginx.ingress.kubernetes.io/enable-gzip

高级配置

自定义错误页面:nginx.ingress.kubernetes.io/custom-http-errors

TCP/UDP 流量转发配置:nginx.ingress.kubernetes.io/tcp-services

灰度/金丝雀发布(Canary 分流):nginx.ingress.kubernetes.io/canary

相关文章:

Kubernetes学习笔记

云计算三层模型 IaaS&#xff08;基础设施即服务&#xff09;&#xff1a;提供虚拟化计算资源&#xff08;如虚拟机、存储、网络&#xff09;。 PaaS&#xff08;平台即服务&#xff09;&#xff1a;提供应用开发和部署环境&#xff08;如数据库、中间件、运行时&#xff09;。…...

【DB2】DB2启动失败报错SQL1042C

在本地某次启动db2时报错SQL1042C&#xff0c;具体报错如下 [db2inst1standby ~]$ db2start 05/07/2025 16:32:53 0 0 SQL1042C An unexpected system error occurred. SQL1032N No start database manager command was issued. SQLSTATE57019在网上百度到说是需要…...

Redis相关命令详解与原理

Redis是什么&#xff1f; Redis 是Remote Dictionary Server(Redis) 的缩写&#xff0c;是一个使用 C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的Key-Value数据库&#xff0c;并提供多种语言的API。 它是一种 NoSQL&#xff08;not-only sql&#xff0c;…...

[吾爱出品][Windows] 产品销售管理系统2.0

[Windows] 产品销售管理系统 链接&#xff1a;https://pan.xunlei.com/s/VOPej1bHMRCHy2np9w3TBOyKA1?pwdgjy7# 使用方法&#xff1a;1、先设置一下图片保存路径 2、维护产品。客户等基础信息。例如&#xff1a;销售类型&#xff1a;一次性 销售编码&#xff1a;RCX。 3、销…...

基于OpenTelemetry的分布式链路追踪Trace‌实现(PHP篇)

目录 引言一、OpenTelemetry是一套可观测性标准协议二、分布式追踪&#xff08;‌Trace‌&#xff09;是OpenTelemetry的核心功能之一三、OpenTelemetry的架构原理四、OpenTelemetry的分布式追踪&#xff08;‌Trace‌&#xff09;实践1、准备PHP环境2、下载SDK3、编写实例代码…...

电气工程中漏源电压Vds的平台电压是什么?

在MOSFET&#xff08;金属 - 氧化物 - 半导体场效应晶体管&#xff09;中&#xff0c;漏源电压 VDS 的平台电压是其输出特性曲线中的一个关键概念。 定义 在MOSFET的输出特性曲线里&#xff0c;当器件工作于饱和区时&#xff0c;漏源电流ID对漏源电压VDS​的变化不太敏感&…...

第35周Zookkeeper+Dubbo Dubbo

Dubbo 详解 一、Dubbo 是什么 官网与定义 Dubbo 是一款高性能、轻量级的开源服务框架&#xff0c;其官网为 double.apache.org&#xff0c;提供中文版本&#xff08;网址含 “zh”&#xff09;。 核心能力 Dubbo 具备六大核心能力&#xff1a; 面向接口代理的高性能 RPC …...

allegro出gerber时,单击Artwork并没有弹窗的问题

使用allegro出gerber时&#xff0c;有时点击 Artwork图标并未如愿以偿的弹出窗口。。。 可按下面尝试恢复&#xff0c;注&#xff0c;删除前可先备份该两支文件。。。 看时间戳&#xff0c;删除最近的下面标红两支文件即可。...

【神经网络与深度学习】VAE 中的先验分布指的是什么

VAE 中的先验分布是什么&#xff1f; 在 变分自编码器&#xff08;VAE&#xff09; 中&#xff0c;先验分布指的是对潜在空间中随机变量的概率分布假设。通常情况下&#xff0c;VAE 设定潜在变量服从 标准正态分布 ( N(0, I) )&#xff0c;其中 ( 0 ) 代表均值为零的向量&…...

信息革命对经济、货币体系及权力结构的颠覆性影响

一、地理束缚的瓦解与权力转移 生产要素去实体化 思想、知识与数据取代实物资产成为核心价值来源&#xff0c;光速传播特性使经济活动突破物理边界。跨境远程医疗、跨国虚拟企业等新形态挑战传统管辖权概念&#xff0c;政府难以通过地域垄断攫取超额收益。 管辖权竞争白热化 …...

leetcode文件级全局变量会在测试用例之间相互影响

背景&#xff1a;在做Leetcode 743使用文件级全局变量idx&#xff0c;不同用例之间idx一直在。参考leetcode的文档&#xff1a; 解决办法&#xff1a;我选择在核心函数的开头&#xff0c;加入初始化代码&#xff08;每次用例调用都会重新初始化至原始状态&#xff09;...

如何查看电脑显卡配置参数 一文读懂

显卡是电脑的重要硬件之一&#xff0c;尤其对于游戏玩家、设计师、视频编辑等用户来说&#xff0c;显卡的性能直接影响电脑的使用体验。如果您想知道电脑的显卡信息&#xff0c;或者打算升级显卡&#xff0c;那么了解如何查看显卡配置是非常必要的。本文将为您提供多种简单实用…...

获取嵌入(Embeddings)的方法与实践

获取嵌入(Embeddings)的方法与实践 摘要 本文详细介绍了获取嵌入(Embeddings)的多种方法&#xff0c;包括降维技术和神经网络训练方法。通过具体的实例和可视化展示&#xff0c;我们将了解如何将高维数据转换为有意义的低维表示&#xff0c;以及如何根据具体任务需求选择合适…...

【国产化】在银河麒麟ARM环境下离线安装docker

1、前言 采用离线安装的方式。 关于离线安装的方式官网有介绍&#xff0c;但是说的很简单&#xff0c;网址&#xff1a;Binaries | Docker Docs 官网介绍的有几种主流linux系统的安装方式&#xff0c;但是没有kylin的&#xff0c;所以在此记录一下。 在安装过程中也遇到了些…...

基于大模型的子宫平滑肌瘤全周期预测与诊疗方案研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术原理与应用现状 2.1 大模型概述 2.2 相关技术原理 2.3 医疗领域应用现状 三、子宫平滑肌瘤术前预测 3.1 预测指标与数据收集 3.2 大模型预测模型构建 3.3 预测结果分析与应用 四、子宫平滑肌…...

SpringBoot 集成 Ehcache 实现本地缓存

SpringBoot 集成 Ehcache 实现本地缓存_springboot ehcache-CSDN博客...

linux下MySql的安装与配置

一键三联&#xff0c;把mysql的安装与配置也写了&#xff0c;供各位参考。 --------------------------------------MySql的安装与配置-------------------------------------- 1 将下载的 压缩包解压到指定目录 tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 卸载…...

普通IT的股票交易成长史--20250507晚复盘

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。价格行为理论学习可参考简介中的几位&#xff0c;感谢他们的无私奉献。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xff01;&…...

准确---Typora配置Gitee图床并实现自动图片上传

下载地址&#xff1a;https://github.com/Molunerfinn/picgo/releases 安装就直接下一步&#xff0c;下一步就行 安装完以后然后回到Typora上偏好设置指定一下路径 默认是 C:\Program Files\PicGo\PicGo.exe 并且还需要选择规则 接下来就需要去PicGo上面配置了 配置之前需要去…...

力扣热题100之回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 代码 方法一&#xff1a; 将链表值复制到数组中&#xff0c;在数组中判断是否是回文列表 # Definition for singl…...

基于Node.js的Web爬虫: 使用Axios和Cheerio抓取网页数据

1. 环境准备 在开始之前&#xff0c;请确保计算机上已安装Node.js mkdir webScraper cd webScraper npm init -y npm install axios cheerio expressaxios: 用于发送HTTP请求。cheerio: 用于解析和操作HTML。express: 用于创建Web服务器。 2. 创建爬虫 在文件夹中创建一个新…...

如何用命令行判断一个exe是不是c#wpf开发的

在powershell下执行 $assembly [Reflection.Assembly]::ReflectionOnlyLoadFrom("你的exe全路径") $references $assembly.GetReferencedAssemblies() echo $assembly $references | Where-Object { $_.Name -match "PresentationFramework|PresentationCore…...

SpringBoot项目接入DeepSeek

在这个demo当中&#xff0c;我使用的是JDK8Spring Boot 2.6.x&#xff0c;下面直接给大家附上完整的代码。 一、项目结构 deepseek - demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── mzl/ │ │ │ …...

C++ lambda表达式的捕获原理

目录 C Lambda表达式捕获机制的详细原理分析Lambda的本质机制关键实现细节特殊捕获方式[ ]空捕获[&]全引用捕获[]全值(拷贝)捕获混合捕获[,&variable]拷贝及部分引用捕获[&,variable]引用及部分拷贝捕获 显式捕获[variable]拷贝捕获部分变量[&variable]引用捕获…...

修改图像分辨率

在这个教程中&#xff0c;您将学习如何使用Python和深度学习技术来调整图像的分辨率。我们将从基础的图像处理技术开始&#xff0c;逐步深入到使用预训练的深度学习模型进行图像超分辨率处理。 一、常规修改方法 1. 安装Pillow库 首先&#xff0c;你需要确保你的Python环境中…...

【面板数据】公开整理-各省刑事案件统计数据集(2011-2023年)

刑事案件数量是衡量一个地区社会治安状况的重要指标。近年来&#xff0c;我国各地在推进法治建设和社会治理现代化的背景下&#xff0c;刑事案件的数量呈现出明显的区域差异和年度波动&#xff0c;通过年度案件数据&#xff0c;可以反映出社会安全水平的变化趋势&#xff0c;为…...

ABAP使用GET_TAX_PERCENTAGE 函数取税率

ABAP使用GET_TAX_PERCENTAGE 函数取税率 今天在做含税价的时候查到的&#xff0c;记录一下。S4 Hana 的环境。 先DATA一个 ftaxp GET_TAX_PERCENTAGE 函数&#xff0c;实例为采购订单进项税。 OK&#xff0c;搞定。...

鞅与停时 - 一种特别的概率论问题

讨论一个有趣的概率问题&#xff1a; [P3334 ZJOI2013] 抛硬币 - 洛谷 实际上是一个猴子打字问题&#xff0c;考虑一直无规律随即打字的猴子&#xff0c;键盘上只有A-Z一共26个字母&#xff0c;对于一个特定的字符串 S S S &#xff1a; ABCABCAB &#xff0c;能否在有限的打…...

Android 有线网开发调试总结

Android 有线网开发调试总结 文章目录 Android 有线网开发调试总结一、前言二、有线网开发1、开关2、相关日志&#xff08;3&#xff09;相关广播&#xff08;4&#xff09;demo示例 三、其他1、Android 有线网开发调试小结2、Android13 有线网开关研究3、Android9、11 有线网络…...

.net在DB First模式使用pgsql

nuget要安装&#xff1a; Npgsql.EntityFrameworkCore.PostgreSQL Microsoft.EntityFrameworkCore.Tools vs2022-->工具-->nuget包管理器-->程序包管理器控制台-->输入命令&#xff1a; Scaffold-DbContext "Hostlocalhost;Databasemydatabase;Usernamemyu…...

Spring Boot 中如何解决 CORS 问题(详解)

在前后端分离的开发模式中&#xff0c;前端调用后端接口时&#xff0c;经常会遇到 跨域资源共享&#xff08;CORS&#xff09; 的问题。Spring Boot 作为常用的后端框架&#xff0c;提供了多种方式来优雅地解决这个问题。本文将全面介绍 Spring Boot 中处理 CORS 的常见方法、原…...

深度学习:智能车牌识别系统(python)

这是一个基于opencv的智能车牌识别系统,有GUI界面。程序能自动识别图片中的车牌号码,并支持中文和英文字符识别,支持选择本地图片文件,支持多种图片格式(jpg、jpeg、png、bmp、gif)。 下面,我将按模块功能对代码进行分段说明: 1. 导入模块部分 import tkinter as tk…...

STM32开发printf函数支持

1、printf函数支持 1、避免使用半主机模式&#xff1a;两种方法:微库法、代码法 2、实现fputc函数&#xff1a;实现单个字符输出 2、半主机模式简介 用于 ARM 目标的一种机制&#xff0c;可将来自应用程序代码的输入/输出请求传送至运行调试器的主机 简单说:就是通过仿真器实…...

解决 Chrome 与 Chromedriver 版本不一致问题的方法

目录 常见错误处理 处理方案&#xff1a; 1. 自动版本匹配方法 使用 webdriver-manager 库&#xff08;推荐&#xff09; 2. 手动版本管理方法 检查并匹配版本 3. 版本兼容性解决方案 使用兼容性表 4. 自动更新策略 定期检查更新脚本 5. Docker 容器化方案 最佳实践建…...

CPU的基本认识

为大家介绍CPU的基本概念&#xff0c;例如&#xff1a;CPU的型号认识、什么是时钟周期、物理核和逻辑核、缓存、TLB缓存的概念&#xff0c;可以帮助大家对cpu有个概念性的认识&#xff0c;选择电脑的时候可以看懂CPU的参数和理解基本原理。 CPU的基本认识 个人CPU型号介绍工作频…...

UGUI如何使用EventTrigger

前言 在 Unity 的 UGUI 系统中,EventTrigger 是一个强大的组件,允许开发者监听和处理多种 UI 交互事件。以下是详细的使用方法、示例代码、优缺点分析以及注意事项。 一、EventTrigger 基本用法 1. 添加 EventTrigger 组件 在 Unity 编辑器中选中 UI 对象(如 But…...

101alpha_第4个

(-1 * ts_rank(rank(low), 9)) 这里的low是每日的最低价。 各函数及整体含义解释 1. rank(low) 在金融分析场景里&#xff0c;low 通常代表股票在每个交易日中的最低价。rank(low) 会对一段时间内的最低价数据进行排序&#xff0c;并为每个数据赋予一个排名。比如&#xff0c;…...

5月13日观测云发布会:这一次,我们不只是发布产品

01&#xff5c;为什么举办这场发布会&#xff1f; 在生成式 AI 席卷一切、业务系统愈发复杂的时代&#xff0c;我们发现&#xff1a; 传统的监控观测已经无法满足企业对性能、安全、智能的统一诉求&#xff1b;每一个企业&#xff0c;都在经历从“看得到”到“看得懂”的跃迁&…...

【IP101】图像分割技术全解析:从传统算法到深度学习的进阶之路

图像分割详解 ✂️ 欢迎来到图像处理的"手术室"&#xff01;在这里&#xff0c;我们将学习如何像外科医生一样精准地"切割"图像。让我们一起探索这个神奇的图像"手术"世界吧&#xff01;&#x1f3e5; 目录 &#x1f4d1; 1. 图像分割简介2. 阈…...

华为设备链路聚合实验:网络工程实战指南

链路聚合就像为网络搭建 “并行高速路”&#xff0c;既能扩容带宽&#xff0c;又能保障链路冗余&#xff0c;超实用&#xff01; 一、实验拓扑速览 图中两台交换机 LSW1 和 LSW2&#xff0c;PC1、PC2 归属 VLAN 10&#xff0c;PC3 归属 VLAN 30。LSW1 与 LSW2 通过 GE0/0/1、…...

C24-数组

数组的引入:方便对同一类型的数据进行管理(一个班级里的45个同学、一个篮子里的12个苹果)数组的定义: 数据类型 数组名[常量表达式(也就是元素的个数)];int a[10]; //这里定义了一个能存放10个元素的整形数组数组初始化 完全初始化 int arr[3]{5,6,8};部分初始化 int arr[10]{…...

Vue 项目中长按保存图片功能实现指南

在移动互联网应用中&#xff0c;用户常常有保存页面特定内容为图片的需求&#xff0c;比如保存二维码、海报等。在 Vue 项目开发中&#xff0c;如何实现长按保存图片的功能&#xff1f;本文将结合具体代码&#xff0c;详细讲解在 Vue 项目中通过长按操作保存图片的技术实现与应…...

行业先锋:六款产品的实战表现

行业先锋&#xff1a;六款产品的实战表现  北京先智先行科技有限公司&#xff0c;销售着“先知大模型”、“先行AI商学院”“先知AIGC超级工场”这三个旗舰产品&#xff0c;在行业内崭露头角。旗下的先知A1、先知大模型等更是备受关注。  先知大模型&#xff0c;作为核心产…...

RS485与Profibus网关自由口数据互换技巧

RS485与Profibus网关自由口数据互换技巧 兴达易控RS485转Profibus网关在自由口模式下的数据互换&#xff0c;是工业自动化领域内一项关键的技术应用&#xff0c;它实现了不同通信协议设备之间的有效连接与数据交换。在现代工业生产中&#xff0c;众多设备和系统往往采用不同的…...

java复杂度,包装类,泛型解析

如何衡量代码的好坏&#xff1f; 评价代码的好坏我们使用算法效率来判断&#xff0c;而算法效率分两种&#xff1a; 算法效率&#xff1a; 第一种是时间效率&#xff0c;第二种是空间效率&#xff0c;时间效率被称为时间复杂度&#xff0c;⽽空间效率被称作空间复杂度。 时间…...

K8S安装部署(v1.27.6)

一、机器配置 系统版本主机名IP基于服务centos 7.9k8s-master192.168.163.104dockerk8s-node1192.168.163.105k8s-node2192.168.163.106注:以上3台机器都是2C4G的虚拟机,仅供测试使用 docker部署可以参考:docker 部署 二、其他环境配置 #1、关闭防火墙 systemctl stop fir…...

Debezium BinaryLogClient详解

Debezium BinaryLogClient详解 1. 类的作用与功能 1.1 核心作用 BinaryLogClient是Debezium中负责与MySQL服务器建立和维护Binlog连接的核心类,主要功能包括: 连接管理:建立和维护与MySQL服务器的Binlog连接事件监听:接收和处理Binlog事件心跳保活:维护连接活跃状态断线…...

Leetcode 刷题记录 09 —— 链表第三弹

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答&#xff0c;01~07为C语言&#xff0c;08及以后为Java语言。 01 合并 K 个升序链表 /*** Definitio…...

加速项目落地(Trae编辑器)

目录 vscode安装python支持 vscode常用插件 Trae编辑器 两个界面合成 补充&#xff08;QT开发的繁琐&#xff09; AI编程哪家强&#xff1f;Cursor、Trae深度对比&#xff0c;超详细&#xff01; - 知乎 Trae兼容vscode的插件&#xff0c;我们可以先在vscode里面装好再一…...

vue3的页面跳转方法汇总(路由跳转,组件跳转)

1.组件跳转 使用router-link组件进行组件导航&#xff08;无需引入该组件&#xff0c;可直接使用&#xff09;&#xff0c;to后面跟组件路由。如果想要在当前页显示跳转的组件&#xff0c;可以通过<router-view>来显示当前路由匹配到的组件&#xff0c;也可以不使用<r…...