prometheus迁移存储为ceph
prometheus迁移存储为ceph在Rook-Ceph集群中创建基于块存储的StorageClass1234567891011121314151617181920apiVersion: ceph.rook.io/v1kind: CephBlockPoolmetadata: name: replicapool namespace: rook-cephspec: failureDomain: host replicated: size: 4---apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: rook-ceph-blockprovisioner: ceph.rook.io/blockparameters: blockPool: replicapool clusterNamespace: rook-ceph fstype: xfsreclaimPolicy: Retain
调整Prometheus-opretor中的prometheus的存储修改prometheus的存储Stora ...
docker stats取值变更
docker stats取值变更起因监控出现在promeehtus中展现容器使用内存与docker stats展示的使用内存数据存在误差的现象
经过仔细对比发现部分机器上的docker stats使用内存与promeQL指标container_memory_usage_bytes符合,另外一部分机器上的docker stats使用内存与promeQL指标container_memory_rss符合
下面是内存指标的解释
名称
类型
单位
说明
container_memory_rss
gauge
字节数 bytes
RSS内存,即常驻内存集(Resident Set Size),是分配给进程使用实际物理内存,而不是磁盘上缓存的虚拟内存。RSS内存包括所有分配的栈内存和堆内存,以及加载到物理内存中的共享库占用的内存空间,但不包括进入交换分区的内存。
container_memory_usage_bytes
gauge
字节数 bytes
当前使用的内存量,包括所有使用的内存,不管有没有被访问。
container_memory_cache
gauge
字节数 byte ...
创建外部访问service
创建外部访问service在某些环境中,应用系统需要将一个外部数据库作为后端服务进行连接,或将另一个集群或Namespace中的服务作为服务的后端,这时可以通过创建一个无Label Selector的Service来实现
Service通过该定义创建的是一个不带标签选择器的Service,即无法选择后端的Pod,系统不会自动创建Endpoint,因此需要手动创建一个和该Service同名的Endpoint,用于指向实际的后端访问地址。
123456789kind: ServiceapiVersion: v1metadata: name: my-servicesepc: ports: - protocol: TCP port: 80 targetPort: 80
Endpoints123456789kind: EndpointsapiVersion: v1metadata: name: my-servicesubsets:- addresses: - IP: 1.2.3.4 ports: - port: 80
Harbor查询镜像接口
Harbor查询镜像接口背景当Harbor中的某个镜像下的标签数目过多时,调用Harbor查询tag接口有时候会变得很慢,所以就想知道为什么Harbor官方不通过分页的形式来获取tag而且要一次性全部查询出来
接口调用逻辑当Harbor页面去查询一个镜像的所有版本详细信息时,会调用一个/api/repositories/{project}/{image}/tags接口,通过查询源码我发现其内部调用逻辑如下
发送/api/repositories/{project}/{image}/tags会被core/router.go接收并处理
1beego.Router("/api/repositories/*/tags", &api.RepositoryAPI{}, "get:GetTags;post:Retag")
调用core/api/repository.go的GetTag方法
1234567891011func (ra *RepositoryAPI) GetTags() { ... client, e ...
使用SpringCloud Kubernetes组件获取Config和Secret
使用SpringCloud Kubernetes组件获取Config和Secret介绍SpringCloud Kubernetes,提供了使用 Kubernetes 本地服务的 Spring Cloud 通用接口实现。目标是促进 Spring Cloud 和运行在 Kubernetes 中的 Spring Boot 应用程序的集成。
SpringCloud Kubernetes 能在 Kubernetes 中完成服务发现和配置监听功能主要依赖 Fabric8 提供的Kubernetes Client 组件,该组件是 Kubernetes Java API 的第三方客户端,它的主要功能是远程操作 Kubernetes API 完成在 Kubernetes 环境下的一系列操作。
功能:
在 Kubernetes 中实现服务发现、服务名称解析功能。
在 Kubernetes 中读取 ConfigMaps 和 Secrets 的配置,当 ConfigMap 或 Secret 更改时重新加载应用程序属性。
在 Kubernetes 可去掉 Kubernetes 自带的服务负载均衡,实现与 Ri ...
使用SpringCloud Kubernetes组件获取Service
使用SpringCloud Kubernetes组件获取Service介绍SpringCloud Kubernetes,提供了使用 Kubernetes 本地服务的 Spring Cloud 通用接口实现。目标是促进 Spring Cloud 和运行在 Kubernetes 中的 Spring Boot 应用程序的集成。
SpringCloud Kubernetes 能在 Kubernetes 中完成服务发现和配置监听功能主要依赖 Fabric8 提供的Kubernetes Client 组件,该组件是 Kubernetes Java API 的第三方客户端,它的主要功能是远程操作 Kubernetes API 完成在 Kubernetes 环境下的一系列操作。
功能:
在 Kubernetes 中实现服务发现、服务名称解析功能。
在 Kubernetes 中读取 ConfigMaps 和 Secrets 的配置,当 ConfigMap 或 Secret 更改时重新加载应用程序属性。
在 Kubernetes 可去掉 Kubernetes 自带的服务负载均衡,实现与 Ribbon 结 ...
Integer 与 int
Integer 与 int基本概念的区分
Integer 是 int 的包装类,int 则是 java 的一种基本数据类型
Integer 变量必须实例化后才能使用,而int变量不需要
Integer 实际是对象的引用,当new一个 Integer时,实际上是生成一个指针指向此对象;而 int 则是直接存储数据值
Integer的默认值是null,int的默认值是0
Integer、new Integer() 和 int 的比较
两个 new Integer() 变量比较 ,永远是 false;因为new生成的是两个对象,其内存地址不同
Integer变量 和 new Integer() 变量比较 ,永远为 false;因为 Integer变量 指向的是 java 常量池 中的对象,而 new Integer() 的变量指向 堆中 新建的对象,两者在内存中的地址不同。
两个Integer 变量比较,如果两个变量的值在区间-128到127 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false;java对于-128到127之间的数,会进行缓存。所以 I ...
Java虚拟机问题排查
Java虚拟机问题排查CPU 飚高思路首先找到 CPU 飚高的那个 Java 进程,因为你的服务器会有多个 JVM 进程,然后找到那个进程中的 “问题线程”,最后根据线程堆栈信息找到问题代码,最后对代码进行排查。
步骤
通过 top 命令找到 CPU 消耗最高的进程,并记住进程 ID
再次通过 top -Hp [进程 ID] 找到 CPU 消耗最高的线程 ID,并记住线程 ID.
通过 JDK 提供的 jstack 工具 dump 线程堆栈信息到指定文件中。具体命令:jstack -l [进程 ID] >jstack.log
由于刚刚的线程 ID 是十进制的,而堆栈信息中的线程 ID 是16进制的,因此我们需要将10进制的转换成16进制的,并用这个线程 ID 在堆栈中查找。使用 printf “%x\n” [十进制数字] ,可以将10进制转换成16进制
通过刚刚转换的16进制数字从堆栈信息里找到对应的线程堆栈,就可以从该堆栈中看出端倪
可能的情况
某个业务死循环没有出口
C2 编译器执行编译时抢占 CPU
当 Java 某一段代码执行次数超过10000次(默认)后,就会 ...
Sql Or NoSql
Sql Or NoSql结构化数据、非结构化数据与半结构化数据
结构化数据指的是由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范,也称作为行数据
非结构化数据,指的是数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据。例如办公文档(Word)、文本、图片、HTML、各类报表、视频音频等。
介于结构化与非结构化数据之间的数据就是半结构化数据,虽然不符合二维逻辑这种数据模型结构,但是包含相关标记,用来分割语义元素以及对记录和字段进行分层。常见的半结构化数据有XML和JSON
以关系型数据库的方式做存储的架构演进
关系型数据库的优点
易理解
操作方便
数据一致性
数据稳定
服务稳定
关系型数据库的缺点
高并发下IO压力大
为维护索引付出的代价大
为维护数据一致性付出的代价大
水平扩展后带来的种种问题难处理
表结构扩展不方便
全文搜索功能弱
NoSql的全称为Not Only SQLNoSql的全称为Not Only SQL,泛指非关系型数据库,是对关系型数据库的一种补充,特别注意补充这两个字,这意味着NoSql与关系型数据库并不是对立关系,二 ...
基于k8s-prometheus-adapter实现 pod 的hpa
基于k8s-prometheus-adapter实现 pod 的hpa1 背景在已部署的环境基础上,采用prometheus的指标来扩展HPA支持的指标,实现自定义指标水平扩展Pod
2 搭建
2.1 基础环境kubernetes 1.10
prometheus-opreator
2.2 k8s 组件参数调整2.2.1 kube-apiserver在Master的API Server启动Aggregation层
123456789101112131415# 请求头中需要检查的前缀名--requestheader-extra-headers-prefix=X-Remote-Extra-# 请求头中需要检查的组名--requestheader-group-headers=X-Remote-Group# 请求头中需要检查的用户名--requestheader-username-headers=X-Remote-User# 客户端CA证书--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt# 允许访问的客户 ...