自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Docker 多架构镜像介绍和最佳实践

在 Docker 中,同一个 Docker 镜像可以在不同的平台上运行,例如在 x86、ARM、PowerPC 等不同的 CPU 架构上。为了支持这种多平台的镜像构建和管理,Docker 在17.06版本时引入了 Manifest 的概念,在此之前,Docker 并没有原生支持多平台镜像的构建和管理,因此开发者需要手动构建和管理不同平台的镜像。【需要注意的是,在版本中,Docker 官方已经推出了Buildx工具,它可以进一步简化多平台镜像的构建和管理,】接下来我们来看看如何使用和。

2023-07-10 22:27:27 413

原创 Docker 多架构镜像介绍和最佳实践

在 Docker Manifest 会包含一个或多个镜像的元数据信息,例如镜像的操作系统、CPU 架构、大小等信息,同时还包含了这些镜像的关系和优先级信息,它可以用来指定多个镜像的组合,或者为单个镜像定义多个平台的支持。版本时引入了 Manifest 的概念,在此之前,Docker 并没有原生支持多平台镜像的构建和管理,因此开发者需要手动构建和管理不同平台的镜像。在 Docker 中,同一个 Docker 镜像可以在不同的平台上运行,例如在 x86、ARM、PowerPC 等不同的 CPU 架构上。

2023-07-10 22:17:29 912

原创 Traefik中诡异的502和504问题

我们都知道在 Kubernetes 集群中通常会使用 Ingress 方案来统一代理集群内部的流量,而常用的 Ingress 方案为 traefik 和 nginx,和传统的 Nginx 作为企业内部的反向代理以及负载设备一样,在不同的场景下可能需要专有的配置才能满足需求,否则会出现奇奇怪怪的异常状态码。本篇文章一起来看下,我们在 traefik 中遇到的 500 和 502 异常。一、前言 在开始之前,我们先来看几个在 Nginx 作为反向代理工具中经常遇到的几个异常状态码:499: 客...

2020-07-04 22:33:57 2689

原创 Golang中管理程序的版本信息

我们都知道在一些 Golang 写的程序中,默认会有 version 或 -v 相关的参数来输出软件版本信息,这些版本信息里可能包含软件版本,git 中的 commit 记录,构建时间、构建环境等信息,那么这些信息都是如何在 Golang 程序中进行维护和管理的呢?请看????.示例比如我们常用的 Golang 开发的程序是这样输出版本相关信息的:# k8s的客户端程序版本$ kubectl version -o json --client

2020-06-27 15:44:18 1072

原创 这几个kafka工具,值得了解一下

在Kafka集群运维过程中,我们通常会借用一些开源工具来完成kafka的日常运维需求和相关问题排查,接下来介绍几个常用的kafka运维神器。kafka-manager由雅虎开源的kafka集群管理工具,不过现在已经改名为CMAK了(说明kafka的运维痛点还是蛮多的,项目还可以做更多的事情),核心功能如下:多集群管理集群瞬时监控(topics, brokers, 副本分布,分区分布等)优先副本选举主题,分区,副本管理(主题创建和参数调整,副本分配等)Broker和Topic级别的met.

2020-06-27 15:43:04 4062 2

原创 kafka集群元数据在zookeeper中的存储分布

我们都知道,自从 Kafka 诞生之际,就一直使用 Zookeeper 服务来进行 kafka 集群的元数据和状态管理,虽然在 KIP-500 中有提议未来将移除 Zookeeper 的依赖,使用 Raft 协议来实现新的元数据和状态管理,但在这之前,我们仍然需要对 kafka 集群的整个元数据和状态有一定理解,才能更好的维护和保障 kafka 集群。前言 在 kafka 集群中,ZooKeeper 集群用于存放集群元数据、成员管理、Controller 选举,以及其他一些管理类任务。存放元...

2020-06-21 23:22:46 1423

原创 这些经典的kafka面试知识,你都知道吗?

无论是作为面试官,还是应聘者,我都接触过很多 Kafka 面试题。而在最近面试了很多候选人,发现写了熟悉 Kafka,但是对于 Kafka 相关的知识却是只知道大概用处,简单搭建和使用。我想说,虽然我们是 SRE (可靠性工程师),但不论你是业务层的 SRE 还是基础设施层的 SRE,我们都需要对业务方的使用场景有足够理解,或者对我们要提供的服务有足够的了解才行,这样你才能整体的保证你的业务连续性以及业务可靠性。因此,专门总结了如下经典的 kafka 面试详解。以下面试题,参考胡大的 Kafka...

2020-06-15 00:23:00 285

原创 5分钟帮你快速回顾正则表达式

背景:在日常工作中,我们经常会使用正则表达式来快速匹配和过滤一些我们期望的字符串来处理一些简单又繁琐的文字统计和过滤操作;而作为一名技术从业者,我们也经常会在程序中或者配置文件中使用正则表达式来处理字符或进行批量配置项的查询和更改,但通常情况下,我们需要对编写的正则表达式进行不断测试才能满足我们的需求,本篇文章带你重新回顾正则表达式,并分享一个在线的正则表达式工具 (https://regex101.com/),帮你在工作中快速测试你的正则表达式。什么是正则表达式? 正则表达式是一组由字母...

2020-06-06 10:52:30 396

原创 Golang下的unicode与字符编码

背景: 在我们使用Golang进行开发过程中,总是绕不开对字符或字符串的处理,而在Golang语言中,对字符和字符串的处理方式可能和其他语言不太一样,比如Python或Java类的语言,本篇文章分享一些Golang语言下的Unicode和字符串编码。Go语言字符编码注意: 在Golang语言中的标识符可以包含 " 任何Unicode编码可以标识的字母字符 "。被转换的整数值应该可以代表一个有效的 Unicode 代码点,否则转换的结果就将会是 “�”,即:一个仅由高亮的问号组成的字符串值。另外,.

2020-05-30 15:17:39 3929 2

翻译 一文理解kafka端到端的延迟

前言: 在大规模的使用kafka过程中,我们通常会遇到各种各样的问题,比如说,通常会有一些大数据集群中的Job发现总有几个task会比较慢,导致整体的任务迟迟不能完成运行,这种情况通常问题会比较复杂,想要知道具体延迟在哪里,我们需要知道在Kafka集群中哪些点可能会增加端到端的延迟。接下来的内容翻译自confluent官网博客中的一篇文章,希望能够帮助大家理解kafka使用过程中端到端的延迟99th Percentile Latency at Scale with Apache Kafka。文章目.

2020-05-24 07:57:11 1569

原创 kafka如何更好的规划Topic分区

背景: 如同其他分布式系统一样,在kafka集群中,单Topic的partition也并不是越多越好,但通常对于业务方来说,可能会简单的根据生产者或消费者的处理能力来提出扩partition的需求,此时就需要根据具体的场景进行分析以确定partition的数量。对于Kafka集群承载的业务Topic来说,分区的数量,可以体现出整个业务的量级同时能够尽可能的提供更高的吞吐,但并不是越多的分区就意味着越高的吞吐和处理能力,通常情况下需要业务方和基础服务方一起来进行分析。以下为多分区Topic的优缺点,可.

2020-05-16 15:12:59 1055

原创 kafka运维常用操作,你知道几个?

要想kafka跑的好,如下几点要知晓。Graceful shutdown建议开启如下参数:controlled.shutdown.enable=true注意: 只有在broker上承载的分区都具有副本时(副本大于1,且副本存活),controller节点才会成功关闭Balancing leadership每当Broker停止或崩溃时,该broker的分区的领导权就转移到其他副本。...

2020-05-04 23:58:40 511

原创 一文读懂Kafka生产集群规划和调优

前言: 通常对于初创企业或者初创业务团队来说,对于开源组件的使用都会显的比较随意,而这种情况会随着业务量级的增长和时间的推移导致开源服务的滥用和乱用,进而造成的结果就是整体业务的稳定性和可靠性相对较差,而此时,扩容的行为是边际效应递减的,如果此时不对整体业务以及开源服务进行规划和改造,那么风险和成本将是同比增长的,因此在开始阶段,需要对开源组件,特别是分布式组件进行场景规划和调优。在我过去的...

2020-05-01 23:25:31 884 1

原创 一文搞懂Traefike的可观测性方案,告别"背锅侠"

Traefik的可观测性支持traefik-observability注意: 在Traefik-2.X的生态里,将可观测性分为了如下几个部分,并提升到了专门的功能说明中服务日志: Traefik进程本身相关的操作日志 访问日志: 由Traefik接管的代理服务的访问日志(access.log) Metrics: Traefik提供的自身详细的metrics数据 Tracing: ...

2020-04-12 21:20:51 2333

原创 分布式对象存储服务Minio的可观测性方案

背景: 对于初创企业来说,在很长一段时间一些基础的开源服务基本都是"裸奔"上线的,除了一些传统的主机级别的监控之外,很难有一些额外的性能指标来描述该服务的整体性能情况。在我们的Minio对象存储服务上线以来一直也是裸奔的,虽然暂时也没出现过故障,但是作为一名专业搞笑的SRE来讲,服务的可观测性一定得跟上,不然后期铁锅是妥妥的背定了,这篇文章就主要介绍下Minio的可观测性方案。感兴趣的可直...

2020-04-12 21:07:53 1054

原创 基于DCGM和Prometheus的GPU监控方案

基于DCGM和Prometheus的GPU监控方案背景: 在早期的GPU监控中我们会使用一些NVML工具来对GPU卡的基本信息进行采集,并持久化到监控系统的数据存储层。因为我们知道,其实通过nvidia-smi这样的命令也是可以获取到GPU的基本信息的,但随着整个AI市场的发展和成熟,对于GPU的监控也越来越需要一套标准化的工具体系,也就是本篇文章讲的关于DCGM相关的监控解决方案。DC...

2020-04-05 18:16:50 7141 1

原创 开源分布式对象存储-MinIO

背景:通常在企业中我们会将一些图片,视频,文档等相关数据存储在对象存储中,以便于数据的存储和快速获取。在过去的一段时间,我们将这部分数据存储在公有云的对象存储服务上,但随着业务的快速发展,我们需要存储一些身份信息用于审核和实名相关的数据,这部分数据较为敏感,因此对于敏感数据的存储我们选择了使用兼容S3协议的开源分布式对象存储-Minio来进行自建服务。前言Minio可能在国内知道和用...

2020-01-22 22:23:02 2126

原创 深入Gin框架内幕(二)

在上一篇文章深入gin框架内幕(一)中,主要介绍了Gin框架中是如何创建一个HTTP服务以及内部的核心结构和常用的一些结构体方法,并在最后以一个简单的示例来详细讲解Gin框架内部具体是如何运行的,但是在最后我们会发现使用了一个Context引用对象的一些方法来返回具体的HTTP响应数据,在本篇文章中,我们将继续学习和分析Gin框架内幕。在开始分析之前,我们先简单回顾一下上一个章节中讲到的...

2020-01-13 07:32:13 1667

原创 深入Gin框架内幕(一)

Gin框架介绍Gin是一个用 Go (Golang) 编写的 web 框架。它是一个类似于martini但性能更好的API框架,不同于谢大主导的Beegoweb框架,后者更像是Python语言中的Django框架,内部包含了开发一个web程序所需的各种组件。如果你是性能和高效的追求者,我相信你会像我一样爱上Gin。同时,不同于其他Golang语言的API框架,该框架社区十分活跃,并且主程仍然...

2020-01-11 18:58:39 2434

原创 2019年,又是一个成长年!

大胡子是我特别佩服的一位老师,第一次知道他是17年偶尔一次线上讲座,具体题目忘记了,内容大概是关于"技术人如何赚钱",很real,告诉一些晚辈如何赚钱,以及拥有一些赚钱思维,我觉得这个真的很酷。后来才了解到他的疯人院和星球,所以立马入会,所幸会费不是很高(这要是再高个几百的,当时的我是肯定不会去"割韭菜"社群)。不过,在这两年里,虽然不曾在社群发表自己的观点,但是通过群里各种大牛、前辈们的探讨,...

2020-01-02 20:29:10 955

原创 CronJob控制器中的一些绕坑指南

背景: 作为企业里唯一熟悉各种云产品的工种,通常需要和各种云产品打交道。当前,我们大部分的云基础设施和云服务都运行在阿里云上,而每个云产品都有独立的管理系统,这使得我们在运维过程中经常无法将相关产品和关联信息有效的组织在一起,来进行快速的问题诊断和信息查询,这对于运维和开发同学来说,在多个系统之间来回跳转查找关联信息是一个低效且极易出错的事务,因此通常来讲,不论是作为运维和开发,我们都希望将企业...

2019-12-29 15:17:36 2033

原创 Linux下快速构建Android编译环境

背景: 在移动互联网时代,大多数的企业内部都有移动客户端,而移动客户端又因为OS的不同产生了两个派系,即安卓(Android)和苹果(IOS),而对于互联网技术从业者来说,这两者最直接的区别就是开源和闭源,因而也导致了在构建移动客户端时,为了整体的稳定性和可靠性的考虑(甚至有成本的考虑),需要进行分别编译,本篇文章记录下如何在Linux环境下构建Android编译环境.介绍通常,开发...

2019-12-12 23:19:29 1237 1

原创 Golang单元测试入门实践总结

背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试.UnitTest(单元测试)单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。还记得最早开始搞运维时,写的程序基本上是通过main程序去调用具体的...

2019-11-09 23:34:19 1002

原创 基于阿里云Terway网络的Kubernetes集群实践

背景: 众所周知的是在构建一个Kubernetes集群时,容器网络通常会使用一个独立的私有子网来构建Kubernetes集群内部的pod网络和service网络,但在实际的业务场景中,没有企业会在一段时间内将内部全部的服务都迁移到Kubernetes集群中(因为涉及到业务架构以及整体业务的可靠性),因而会产生一些Kubernetes集群内部服务和集群外部服务互相调用的场景,当然如果是HTTP服务...

2019-10-27 19:57:46 5332 1

原创 k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的terminating状态,这种情况下只要等待k8s本身将命名空间下的资源回收后,该命名空间将会被系统自动删除。但是今天遇到命名空间下已没相关资源,但依然无法删除terminating状态的...

2019-10-21 20:12:44 2984

原创 再读Golang中的异常处理

一起重温Golang中的异常处理啊????1.Golang语言中没有其他语言中的try...catch...语句来捕获异常和异常恢复2.在Golang中我们通常会使用panic关键字来抛出异常,在defer中使用recover来捕获异常进行具体逻辑处理3.Golang中我们通常会在函数或方法中返回error结构对象来判断是否有异常出现注意事项1.利用recover和panic指...

2019-10-20 20:53:30 1234

原创 Kubernetes V1.15管理NVIDIA GPU容器

参考链接:nvidia-k8s-device-plugink8s-1.15调度GPU文档nvidia-docker0. GPU主机依赖1.下载nvidia-driver(官方提示要约等于361.93)2.安装nvidia-docker2.x(nvidia-docker1.x和2.x完全不同)3.docker配置成nvidia的默认运行时4.kubernetes版本大于1....

2019-10-08 18:12:24 1147

原创 Traefik-v2.x快速入门

Traefik v2.0 快速入门traefik官方文档注意:Traefikv2.0之后的版本在修改了很多bug之后也增加了新的特性,比如增加了TCP的支持,并且更换了新的WEB UI界面使用docker-compose来快速启动traefki实例.# 查看编辑好的docker-compose配置文件$ cat traefik-v2.0.yamlversion: '3'servi...

2019-09-27 21:00:58 2592

原创 Redis的排序命令使用(Sort)

sort排序的用法SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]用来返回或保存给定列表、集合、有序集合中经过排序的元素。注意:sort 默认使用数字进行排序,如果是字符串需要加ALPHA参数,否则会报错普通排...

2019-09-12 10:15:35 875

原创 使用Golang的Gin框架和vue编写web应用

背景: 之前使用Golang的Gin框架进行一些运维内部后端的API接口开发,对外提供提供json类型的数据响应,但是该种方式在浏览器访问数据时数据格式不友好(由于是API接口,一般需要使用postman之类的工具来验证接口返回数据),后来尝试了使用Golang的template模板来结合html进行数据渲染,但也发现比较缺乏美感。之后决定使用前端框架来渲染后端数据,由于vue框架的各种优势,比...

2019-09-12 10:12:28 7008

原创 Golang下的html/template模块使用

关于template模板,Golang语言提供了两个包text/template和html/template,前者主要用来处理文本文件的变量渲染,而后者主要用于对html之类的网页文件进行渲染。由于最近在使用gin框架编写REST API,顺便学习template的使用,再此记录一下。html/template常用的对象和方法template模板的使用主要是在对Template结构体的相关方法...

2019-09-12 10:10:25 5220

原创 Golang中的格式化时间输出

通常我们在程序处理过程需要对时间进行一定格式化的输出,以便让用户或者其他程序能够更加友好的识别时间,本篇记录下在使用golang语言过程中如何格式化时间。通常情况下我们可以使用linux shell很方便的格式化时间:sh-4.1$ date2018年 09月 18日 星期二 12:49:06 CSTsh-4.1$ date " %Y-%m-%dT %H:%M:%S"2018-09-18T...

2019-09-12 10:07:21 6623

原创 使用golang的net包进行域名解析过程分析

背景: 在实际的互联网使用过程中,大家熟知的是使用域名来直接访问一个服务,但随着互联网业务架构的不断优化,可能对用用户来说访问一个域名获取到相关的资源是很简单的一步,但其实对于互联网整个请求过程其实是做了很多次调用,那最开始的一步就是dns解析。当然在linux环境下,用来做dns解析的工具有很多,比如dig和nslookup之类的,但是通常对于复杂问题的排查直接去机器上去很显然是不太现实的,...

2019-09-09 23:02:55 2821

原创 Prometheus入门实践

官方链接Prometheus下载地址Prometheus相关文档Prometheus官方文档一、基本原理通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。输出被监控组件信息的HTTP接口被叫做exporter,也就是数据采集端,通常来说,最需要接入改造的就是expoter. 当前互联网上已经有很多成熟的exporter组件,当然用户也可用根据官方...

2019-09-08 23:54:25 1793 1

原创 k8s dashboard 的http接口改造

背景: 玩过Kubernetes的人都知道,官方提供了一种集群web插件dashboard,使用官方示例可以快速的部署一套dashboard,可以方便相关人员进行集群概况预览.但是官方的实例默认使用了https并且需要通过证书或Token来进行统一认证,而dashboard这种内部基础工具增加了https和证书认证后不仅使得使用的成本高了起来,而且和内部的统一管理入口也不太好集成(通常内部系统都...

2019-09-08 14:20:03 3713

原创 Golang Module的使用

前言: 在Golang1.11之前的版本中,官方没有提供依赖和包管理工具。开发者通常会使用vendor或者glide的方式来管理依赖(也有直接使用GOPATH多环境方式),而在Golang1.11之后官方终于出了名为go modules的版本管理机制。注意:在Golang1.11版本中需要使用export GO111MODULE=on来显式开启go module在Golang1.1...

2019-09-07 14:34:38 3606

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除