问题背景:经常有在TKE部署了metrics-server后,发现通过kubectl top 或者k9s看不到超级节点pod的cpu/mem,这些工具都依赖v1beta1.metrics.k8s.io 问题原因社区metrics-server默认是从<node_ip>:10251/stats/summary接口获取pod cpu/mem监控,但是超级节点没有暴露这个接口,所以无法获取。 TKE自身默认数据源已经做了适配,主要有2类apiservice:v1beta1.custom.metrics.k8s.io: 暴露所有pod层级的指标v1beta1.metrics.k8s.io: 暴露节点 /pod cpu,内存使用量解决方案所以只需要修改apiservice v1beta1.metrics.k8s.io,指向TKE默认数据源kube-system/metrics-service修改为:kubectl
问题现象tke集群添加了超级节点,然后部署的服务通过LoadBalancer模式的servcie对外提供服务,当客户端pod调度到普通节点上,可以通过clb的vip访问到后端服务,当pod调度到超级节点上 图片图片当pod调度在正常节点上,是可以直接通过vip访问到后端nginx服务的,下面我们将客户端pod调度到超级节点上测试下。 为什么客户端pod在普通节点就可以正常访问,调度到超级节点就不行了。2. 问题原因解释说明这个现象前,这里简单的说明下超级节点的pod底层的是一个什么样构成,因为超级节点底层是没有物理资源的,其实只是k8s的一个对象而且。 nginx pod调度到超级节点后,客户端pod就能正常通过vip访问了,但是这里因为我是测试集群,只有一个超级节点,因此会在同一个节点上,如果是集群有多个超级节点,为了让服务端pod和客户端pod在同一个超级节点
超级节点 是 TKE 集群中的一种节点类型,保证客户在集群中资源不足的情况下(pod发生了 pending 现象),依然有算力资源可以满足pod运行。 当 TKE 集群使用了 VPC-CNI 网络模式,在非固定 ip 模式下,可能会出现 ip 资源(关联的子网ip资源)充足,但是还是调度到了超级节点上的情况。 相关知识超级节点:https://cloud.tencent.com/document/product/457/74014非固定ip模式:https://cloud.tencent.com/document 而在整个扩容期间,pod是会一直停在 pending 状态。超级节点的调度是由调度器(scheduler)负责的,与负责ip扩容组件(tke-eni-ipamd)是相互独立的组件。 超级节点的调度策略也是观察 pod 是否发生了 pending 现象,而观察的时间对比上面的 ip 扩容时间是有差异的,就会发生 pod 被调度到了超级节点上的情况。
一、指定固定节点:Pod.spec.nodeName Pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策略,该匹配规则是强制匹配: ,因为我们指定了具体的运行节点,所以全部在 node-1 上进行了创建。 二、指定固定节点标签:Pod.spec.nodeSelector Pod.spec.nodeSelector:通过 kubernetes 的 label-selector 机制选择节点,由调度器调度策略匹配 label,而后调度 Pod 到目标节点,该匹配规则属于强制约束: vim node-2.yaml apiVersion: apps/v1 kind: Deployment metadata: image: docker.io/nginx ports: - containerPort: 80 这个时候我们来看一下创建的情况: 因为没有对应标签的节点
一、节点亲和性策略介绍 pod.spec.nodeAffinity preferredDuringSchedulingIgnoredDuringExecution:软策略 requiredDuringSchedulingIgnoredDuringExecution 一直处于 Pending 的状态,这是因为我们没有Node-3这个节点,且采用的是硬亲和性策略的原因所导致的。 三、节点与Pod软亲和性 preferredDuringSchedulingIgnoredDuringExecution 为了解决上述因为硬亲和性创建Pod不成功的问题,我们通过设置软亲和性策略后再次创建一个 ,这个时候我们创建看一下: 我们再将 node-3 修改为 node-1 看一下: 通过实验我们得出关于节点与pod亲和力策略 硬限制是:我必须在某个节点或我必须不在某个节点。 软限制是:我想在某个节点或我不想在某个节点,实在不行,我也可以将就。
早在1981的时候,David Cope 创造了人工智能音乐作曲系统(EMI,Experiments in Musical Intelligence)。
在高可用的k8s集群中,当Node节点挂掉,kubelet无法提供工作的时候,pod将会自动调度到其他的节点上去,而调度到节点上的时间需要我们慎重考量,因为它决定了生产的稳定性、可靠性,更快的迁移可以减少我们业务的影响性 5.当 node 失联一段时间后,kubernetes 开始删除原 node 上的 pod,这段时长是通过--pod-eviction-timeout参数配置,默认 5m0s。 kube-controller-manager 和 kubelet 是异步工作的,这意味着延迟可能包括任何的网络延迟、apiserver 的延迟、etcd 延迟,一个节点上的负载引起的延迟等等。 社区默认的配置参数值–node-status-update-frequency10s–node-monitor-period5s–node-monitor-grace-period40s–pod-eviction-timeout5m
前一段时间发了一篇 Shell Operator 的介绍,搓例子的时候,就想起个需求,我想把 Pod 所在节点上的特定标签复制给 Pod,例如机架、虚拟机节点所在的物理机等,都可以用标签的形式来表达,并可以用这些标签进行选择和统计等 使用 jqFilter 关注 .spec.nodeName 字段的变化,仅变化时触发 给对象 Pod 提供两个标签 node-dc 用于标注该对象是否已经完成标签复制,完成的不触发。 用这个配置文件生成 ConfigMap,预备给 Pod 进行加载。 这个功能需要读取 Node 信息,并为 Pod 打标签,Pod 中的 Kubectl 会用 ServiceAccount 凭据对集群进行操作。所以需要进行 RBAC 配置。 以上步骤都完成之后,部署工作组件(例如 operator.yaml),就可以进行测试了, 测试 首先给各个节点打入标签,例如: kubectl label node \ gke-gcp-vlab-k8s-default-pool
目录 一、绪论 二、情景再现 三、解决方案 一、绪论 产生问题的原因是master节点部署Pod,导致无法启动; 问题描述: Warning FailedScheduling 40s (x28 over 二、情景再现 部署环境,k8s中的master节点创建Pod 命令kubectl run 自定义pod名字 --image=基础镜像 示例 [root@VM-4-8-centos kubernetes 中; 命令kubectl get pod my-nginx一直处于Ping状态; 查看Pod描述信息 命令kubectl describe pod 自定义的Pod名称 原因:kubeadm no -o yaml | grep taint -A 5 三、解决方案 删除master节点污点 命令kubectl taint nodes --all node-role.kubernetes.io Normal Started 38s kubelet Started container my-nginx 再次开启master节点污点
如下总结了超级节点的特点:超级节点向用户提供可用区级别的、支持自定义规格的节点能力,使用超级节点类似于使用一台超大规格的 CVM,每一个调度至超级节点的 pod 都是一台独立的子机,pod 间因此完全隔离 针对固定资源的扩缩容变成了单节点维度的升降配;针对弹性资源的扩缩容,仅需加入按量计费的超级节点,即可按照节点上调度 pod 的实际规格进行计费,再无 buffer 资源浪费。 超级节点产品特性高稳定性、高安全性为业务稳定性保驾护航:超级节点上的一个 Pod 底层对应一个子机,底层为虚拟机级别的隔离,通过自研的安全沙箱技术和虚拟化技术,保证 Pod 间无干扰,业务间强隔离。 包年包月模式下,由用户自定义节点规格,用户可包年包月购买自定义总规格的节点算力来实现预付费,契合固定算力的在线常驻业务,包年包月的超级节点相较于普通节点单核价格更低,用户可将符合规则的 pod 全部迁移至超级节点 对于在线常驻的服务,用户所需算力固定,若当前 pod 规格大部分在 8C 以下,可使用超级节点的包年包月模式,基于 pod 总规格按需购买包年包月的超级节点,将 pod 全部调度至超级节点,降低集群资源的单核价格
前一段时间发了一篇 Shell Operator 的介绍,搓例子的时候,就想起个需求,我想把 Pod 所在节点上的特定标签复制给 Pod,例如机架、虚拟机节点所在的物理机等,都可以用标签的形式来表达,并可以用这些标签进行选择和统计等 使用 jqFilter 关注 .spec.nodeName 字段的变化,仅变化时触发 给对象 Pod 提供两个标签 node-dc 用于标注该对象是否已经完成标签复制,完成的不触发。 用这个配置文件生成 ConfigMap,预备给 Pod 进行加载。 这个功能需要读取 Node 信息,并为 Pod 打标签,Pod 中的 Kubectl 会用 ServiceAccount 凭据对集群进行操作。所以需要进行 RBAC 配置。 以上步骤都完成之后,部署工作组件(例如 operator.yaml),就可以进行测试了, 测试 首先给各个节点打入标签,例如: kubectl label node \ gke-gcp-vlab-k8s-default-pool
,会让k8s尽量不去调度这个节点(不保证,比如如果其他节点资源满了的情况) NoSchedule,表示这个节点不可调度,也就是新pod不会再被分配到这个节点上,旧节点依然能运行 NoExecute,表示这个节点不能运行 然后是 NoSchedule 和 NoExecute ,一个是不让调度,一个不让响应节点调度同时 kill 掉不匹配的 pod。 /unreachable 和node.kubernetes.io/not-ready的时候永远不会被驱逐 实战:节点pod迁移 集群原来两个 node 节点 10.213.20.183 和 10.213.20.215 由于资源不足,需要纵向扩容,需要将里面的 pod 移除到其他节点,实施步骤: 将两个节点设置为不可调度NoSchedule,观测资源运行情况 逐个节点进行驱逐 设置NoSchedule # 这里10.213.20.183 对pod进行扩容测试: $ kubectl scale --replicas=5 deployment/<名称> 将pod从节点驱逐 通过设置NoExecute驱逐 pod: $ kubectl taint
# 容器的存储卷 Pod是自己有生命周期的 Pod消失后数据也会消失 所以我们要把数据放在一个容器的外面 docker存储卷在k8s上只有一定的存储性,因为k8s是调度的,Pod挂掉之后再启动不会默认之前的数据位置 脱离节点的存储设备才可以解决持久能力 在K8s上Pod删除,存储卷也会随之而删除的,这一点区分docker # 存储卷挂载方式大致分为三类 容器内存储卷挂载 宿主机存储卷挂载 分布式文件存储卷挂载
Pod's node affinity, 8 Too many pods.从日志看,是1个节点没满足节点亲和性,还有8个节点pod太多,这个pod太多是什么原因呢? 比如你创建集群单节点设置的最大pod数量是32,那么实际上节点最多可以容纳29个pod,当第30个pod想继续运行到节点就会报错node Too many pods。 如果你将值改太大,会导致后续有pod分配不到ip,因为一个节点可用的pod ip是固定的cidr - 3,但是pod的调度只会去看节点的max-pods是不是满了,并不会判断容器网段ip是不是不足,因此可能节点的容器网段 ip用完了,pod还是会往节点调度,导致pod无法分配ip。 还需要注意的是max-pod是包含节点hostnetwork模式pod,hostnetwork模式pod不会占用容器网段ip,但是会算在max-pod的数量里面,那么这里就有另外一个问题了,节点虽然有cird
1、简介 DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。 删除 DaemonSet 将会删除它创建的所有 Pod。 DaemonSet 的一些典型用法: 在每个节点上运行集群存守护进程。例如 glusterd、ceph 在每个节点上运行日志收集守护进程。 ,所以 Kubernetes 只会在该节点上创建一个 Pod,如果我们向当前的集群中增加新的节点时,Kubernetes 就会创建在新节点上创建新的副本,总的来说,我们能够得到以下的拓扑结构: ? Pod 的调度和运行,为一些节点创建 Pod 副本的同时删除另一部分节点上的副本,manage 方法执行完成之后就会调用 rollingUpdate 方法对 DaemonSet 的节点进行滚动更新并对控制器版本进行清理并更新 ,DaemonSetsController 会根据节点亲和的设置来验证节点和 Pod 的关系; 如果调度的谓词失败了,DaemonSet 持有的 Pod 就会保持在 Pending 的状态,所以可以通过修改
图片Node节点上的DNS缓存对系统性能的影响:提高响应速度:DNS缓存可以避免重复的DNS查询请求,从而加快域名解析的速度,提高系统的响应效率。 降低域名解析器的负载:DNS缓存可以减轻DNS服务器的负载,如果多个节点都缓存了同一个域名的解析结果,可以减少对DNS服务器的查询请求,提高系统的稳定性和可靠性。 配置和管理Node节点上的DNS缓存:Node节点上的DNS缓存是由操作系统负责管理的,可以通过以下方式进行配置和管理:查看缓存内容:使用命令行工具,如Windows下的ipconfig /displaydns ,Linux下的sudo nscd -g,可以查看当前节点上的DNS缓存内容。 禁用缓存:在某些特殊情况下,可能需要禁用节点上的DNS缓存。Windows可以通过修改注册表的方式禁用缓存;Linux可以通过停止nscd服务来禁用缓存。
使用背景有训练好的 GGUF 模型文件(LLaAM)想要部署在腾讯云上做推理,可以选择使用 TKE serverless 超级节点快速部署。 准备工作创建 TKE serverless 集群及超级节点,参考 创建集群。创建部署所需要的超级节点,参考 创建超级节点。 40Gi nvidia.com/gpu: "1" # 通常是1,参考 https://cloud.tencent.com/document/product/457/44174#gpu-pod 40Gi nvidia.com/gpu: "1" # 通常是1,参考 https://cloud.tencent.com/document/product/457/44174#gpu-pod
限时免费体验,后台留言【原生节点】联系小助手。 全量发布【超级节点】 超级节点是TKE全新升级的节点形态,支持自定义节点大小、灵活升降配。 简化节点管理和资源运营工作,让用户专注于业务。超级节点现已全量发布,欢迎了解试用。 节点池上线删除保护功能 适用于节点资源保护场景,解决由于误操作把节点资源批量释放的问题。 支持CRD方式管理镜像缓存 超级节点上支持用户以CRD的方式管理镜像缓存,当前已支持控制台和云API方式管理,镜像缓存功能可显著提升Pod启动速度至秒级。 参考: 支持声明Pod所需资源大小 超级节点支持通过annotation来声明Pod所需系统盘的大小,超出20Gi部分按照CBS高性能云盘按量计费的刊例价进行计费,满足用户特殊场景下的系统盘资源诉求 兼容TKE使用超级节点场景 TMP 兼容 TKE 使用超级节点场景,支持 TKE 所有类型集群。 自动回收CRD资源 TMP 解除关联集群时,自动回收集群中部署的相关 CRD 资源。
还有就是默认的每个node节点的subset都默认是24? 我一台机器上面也跑不了那么多Pod阿......恩 默认的 SUBNET都是24,举个例子:我的kubernetes集群初始化配置文件networking部分如下:图片图片浪费ip 资源阿 我一台服务器跑不了那么多 200 多个pod........ ,而且这样算下来除去service的地址,集群只能容纳12个工作节点(包括master节点)图片图片关于节点pod ip规划与集群容纳更多节点腾讯云tke的例子正好看到腾讯云tke创建集群的时候可以看到可以限制但节点的 pod数量上线和service的数量:图片他们怎么搞的呢?
其实这里failed状态的是因为节点的内存或者磁盘满了,导致了pod被驱逐导致,这里kubectl命令查看pod的状态是Evicted,tke控制台则显示成failed,其实节点发生驱逐一般没什么影响, 节点资源不足了,将pod驱逐到其他节点运行是符合预期的。 当 kubelet 结束一个 Pod 时,它将终止 Pod 中的所有容器,而 Pod 的 Phase 将变为 Failed。 如果被驱逐的 Pod 由 Deployment 管理,这个 Deployment 会创建另一个 Pod 给 Kubernetes 来调度。 2种现象: 容器存储目录满了,节点没有触发驱逐 容器存储目录没满,节点触发了驱逐 下面我们来讲讲tke节点磁盘满了到底在什么情况下会触发驱逐,为什么将容器存储目录挂在数据盘会出现上面现象,对于驱逐问题,