手机随时阅读
新人专享大礼包¥24
1.label_values(metric, label):某个 metric 的 label 值的集合label_values(label):全局中 label 值的集合;2.metrics(metric):metric 的正则表达集合,返回全部匹配的 metric3.query_resultquery_result(count(label_join(instance:node_cpu_util
升级了mac系统后(),vagrant up就报错 dz0400819@MacBook-Pro ~/Desktop/prometheus/host1 vagrant upBringing machine 'default' up with 'virtualbox' provider...==> default: Checking if box 'ubuntu/focal64' ver
因为要绘制曲线,所以不希望promsql返回空置。关键:or vector(0)count(instance:node_cpu_utilisation:rate5m{cluster='prod-hangzhou-k8s06',instance!~'cn-hangzhou'}>0.15)or vector(0)/count(instance:node_cpu_utilisation:rate
需求描述:instance:node_cpu_utilisation:rate5m{}这个指标中值记录每个ecs节点的cpu使用率。elasticsearch_cluster_health_number_of_nodes{}这个指标只记录es集群名和节点ip。如果我想知道某个es集群名+节点IP的cpu使用率,怎么办呢实现:通过on进行join查询,通过group left或group right
在了解Golang的内存管理之前,需要了解下基本申请内存模式,即TCMalloc(Thread Cache malloc)。golang的内存管理就是基于TCMalloc的核心思想来构建的。1.TCMalloc1.1TCMalloc介绍TCMalloc最大优势就是每个线程都会维护自己的独立内存池。下面分别介绍下相关内存池。1.1.1ThreadCache(小对象内存快的申请):ThreadCach
垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的内存对象,让出存储资源。GO语言的GC过程中不需要程序员手动执行1.Go V1.3之前的标记-清除(mark and sweep)算法golang 1.3之前主要使用标记-清除算法,此算法主要有两个步骤:标记(mark phase)清除(sweep phase)1.1标记清除算法的具体步
1.goRoutine和线程的区别1.1内存占用 goroutine:创建一个goroutine的栈内存消耗为2kb,运行过程中,栈空间不足可自动扩容。线程:创建一个线程默认分配1-8M内存,创建后栈空间大小不能改变,某些情况下可能存在栈溢出风险。1.2创建和销毁goroutine:是用户态线程,创建和销毁消耗很小。线程:是内核态的,线程创建和销毁有巨大的消耗。1.3调度切换goroutine:g
1.环境framework-bom 1.7.5jdk 1.8io.micrometer 1.5.4org.aspectjpom依赖(最外层pom.xml中内容)<parent> <groupId>com.yupaopao.frameworkgroupId> <artifactId>framework-bomartifactId&
1.环境go 1.14github.com/prometheus/client_golang v1.7.12.安装client-golonggo get -u github.com/prometheus/client_golang3.metricmain.gopackage mainimport ( "flag" "log" "net/http" "time" "github.com/p
1.Django1.1环境Django 3.1.1python 3.6.6django-prometheus 2.1.0 1.2安装django-prometheuspip install django-prometheus1.3metricsettings.pyINSTALLED_APPS = [ ... 'django_prometheus',]urls.py#这是一个/metri
abs()--绝对值abs(v instant-vector) 返回输入向量的所有样本的绝对值。负数可以返回正数小数还是返回小数整数还是返回整数absent()--用于监控是否有样本数据absent(v instant-vector)如果传递给它的向量参数具有样本数据,则返回空向量;如果传递的向量参数没有样本数据,则返回不带度量指标名称且带有标签的时间序列,且样本值为1。使用abs
1.功能模块https://www.bilibili.com/account/history为了大部分用户的基本功能体验,满足用户需求,例如播放历史查看、播放进度同步等。离线型用户,app 本地保留历史记录数据。同样的,也要考虑平台化,视频、文章、漫画等业务扩展接入。变更功能:添加记录、删除记录、清空历史。读取功能:按照 timeline 返回 top N,点查获取进度信息。其他功能:暂停/恢复记
1.功能模块架构设计最重要的就是理解整个产品体系在系统中的定位。搞清楚系统背后的背景,才能做出最佳的设计和抽象。不要做需求的翻译机,先理解业务背后的本质,事情的初衷。评论系统,我们往小里做就是视频评论系统,往大里做就是评论平台,可以接入各种业务形态。发布评论: 支持回复楼层、楼中楼。读取评论: 按照时间、热度排序。删除评论: 用户删除、作者删除。管理评论: 作者置顶、后台运营管理(搜索、删除、审核
1.隔离1.1介绍隔离,本质上是对系统或资源进行分割,从而实现当系统发生故障时能限定传播范围和影响范围,即发生故障后只有出问题的服务不可用,保证其他服务仍然可用。服务隔离动静分离、读写分离轻重隔离核心、快慢、热点物理隔离线程、进程、集群、机房1.2服务隔离1.2.1动静分离比如CDN场景中,将静态资源和动态API分离。降低应用服务器负载,静态文件访问负载全部通过CDN。对象存储存储费用最低。海量存
1.介绍1.1sync.Pool是什么sync.pool是Go1.3发布的一个特性,它是一个临时对象存储池,程序员使用时不能对Pool中的元素个数做假定1.2为什么使用sync.Pool1.保存和复用临时对象2.减少内存分配3.降低GC压力1.3sync.Pool方法有哪些//初始化Pool实例New func() interface{} //申请对象//Get方法会返回Pool中
1.data race介绍Go(从v1.1开始)具有内置的数据竞争检测器,data race是两个或多个goroutine访问同一个资源(如变量或数据结构),并尝试对该资源进行读写而不考虑其他goroutine。1.1运行时检查竟态的命令:go run -race main.go1.2构建时检查竟态的命令:go build -race main.go1.3测试时检查竟态的命令:
$ curl http://127.0.0.1:8001/apis/rollouts.kruise.io/v1alpha1/namespaces/default/rollouts/rollouts-demo/status -X PATCH -d '[{"op": "replace", "path": "/status/canaryStatus/currentStepState", "value":
在一个goroutine中:读和写是按照程序顺序执行的,编译器和处理器只有在不会改变oroutine行为的情况下重新编排读和写的顺序。在多个goroutine中:不同的goroutine会看到不同的执行顺序。如下两个goroutine,可能的运行结果为:0 1,1 0,11 ,那么会不会是0 0 呢??下面我们详细介绍下1.首先我们看下cpu重排用户写下的程序,先要编译成汇编代码,即各种指令,把C
1.为什么errors.New返回指针1.1errors.new()源码查看Go error就是一个接口。我们经常使用errors.new()来返回一个error对象的指针。基础库中有大量自定义的error1.2为什么errors.New要返回对象的指针避免当两个err进行相等判断时出现问题2.Error and Exception2.1多语言对比go处理异常的逻辑没有引入exception,支持
由于vpa代码是使用vender模式,所以在本地调试有点麻烦1.把github上autoscaler代码下载到$GOPATH下的这里2.用goland打开autoscaler下的vertical-pod-autoscaler3.关掉gomod4.修改下createKubeConfig方法这里还有个问题由于vpa使用的client-go版本没有下面这个方法,所以我给换成了clien-go1.19版本
1.apiServer中的webhook1.1查看默认启用了哪些webhookroot@ubuntu-focal:~# kubectl exec -it kube-apiserver-ubuntu-focal -n kube-system -- kube-apiserver --help--enable-admission-plugins strings admiss
1.介绍在 Kubernetes 项目中,负责完成授权(Authorization)工作的机制,就是 RBAC:基于角色的访问控制(Role-Based Access Control)。Role:角色,它其实是一组规则,定义了一组对 Kubernetes API 对象的操作权限。Subject:被作用者,即User或ServiceAccount。RoleBinding:定义了“被作用者”和“角色
1.apiServer介绍1.1apiServer介绍kube-apiserver是k8s核心组件之一,主要提供以下功能:1.提供集群管理的REST API接口,包括认证、授权、数据校验及集群状态变更。2.提供与其他模块之间的数据交互和通信。其他模块通过api server查询或修改数据,只有api server才能直接操作etcd1.2访问控制流程k8s API的每个请求都会经过多阶段的访问控制
1.安装virtualBox这个自行百度,安装好后,配置一下这里我一点开,就这样,没有修改。2.vagrant安装虚拟机2.1.安装vagrantdz0400819@MacBook-Pro ~ brew install vagrant2.2.vagrant创建虚拟机这里安装的是ubuntu20.04,如果想要其他版本,可以到https://app.vagrantup.com/ubuntu这
1.介绍controller-manager是一系列控制器的组合。它们都遵循 Kubernetes 项目中的一个通用编排模式,即:控制循环(control loop)。控制循环如下样例for { 实际状态 := 获取集群中对象X的实际状态(Actual State) 期望状态 := 获取集群中对象X的期望状态(Desired State) if 实际状态 == 期望状态{ 什么都不做
当我们开发一个程序,需要访问k8s集群中的pod、deployment等资源时,会使用k8s.io/client-go模块,在使用这个模块时,我们要有如下几步:1.获取config对象clientcmd.BuildConfigFromFlags 根据config路径获取configrest.InClusterConfig 直接使用pod中自带的token等内容2.获取k8s client3.使用k
这篇文章讲解的容器运行时是docker,containerd有些许不一样pod里的所有容器,共享的是同一个Network Namespace,并且可以声明共享同一个Volume。1.infra容器在k8s项目中,Pod只是一个逻辑概念,在具体实现上,还是通过yaml来创建container。在一个pod中可以创建多个容器,上面说了,pod中的多个容器是共享同一个Network Namespace
本文主要讲解k8s1.18版本,1.scheduler1.1介绍在 Kubernetes 项目中,默认调度器的主要职责,就是为一个新创建出来的 Pod,寻找一个最合适的节点(Node)。而这里“最合适”的含义,包括两层:1.从集群所有的节点中,根据调度算法(Filter函数)挑选出所有可以运行该 Pod 的节点;2.从第一步的结果中,再根据调度算法
1.Score算法1.1noderesources.BalancedAllocationName节点cpu使用百分比和内存使用百分比越接近,说明资源使用越均衡,节点分数越高1.18版本源码解析1.22版本源码截图1.2imagelocality选择已经存在 Pod 运行所需容器镜像的节点。检查Node是否存在Pod所需镜像:如果不存在,返回0分;如果存在,则镜像越大得分越
1.介绍1.1vpa组件vpa主要由三个组件组成,分别为recommend、updater、admission-controller recommend:根据metric-server api获取到的容器指标,计算推荐指标。 updater:根据pod的request中设置的指标和recommen
Copyright © 2005-2022 51CTO.COM 版权所有 京ICP证060544号