自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qhh0205

专注于云计算、Kubernetes、DevOps、微服务、持续集成/持续交付相关技术,企业级 DevOps 落地实践!...

原创 使用 Prometheus Operator 构建 Kubernetes 监控系统

本文主要介绍使用 Prometheus 监控 Kubernetes 的最佳实践,借助 Prometheus Operator 和 Helm 快速完成 Kubernetes 集群的监控。 Prometheus Operator 是 SRE 的一种实践,一种新的软件类型,大大简化了在 Kubernet...

2019-12-15 13:59:28 523 0

原创 基于 Kubernetes 的 7 大 DevOps 关键实践

本文主要介绍 DevOps 的 7 大关键实践在 Kubernetes 平台下如何落地,结合我们目前基于 Kubernetes 平台的 DevOps 实践谈谈是如何贯彻相关理念的,这里不会对其具体实现细节进行深入讲解,只做一个大致的概括的描述,分享下已有的实践,具体实践细节有时间了会单独整理一篇文...

2019-09-07 21:03:50 408 0

原创 Kubernetes 基于 EFK 技术栈的日志收集实践

之前写过一篇文章介绍了容器环境下日志管理的原理机制:从 Docker 到 Kubernetes 日志管理机制详解,文章内容偏理论,本文在该理论的支撑下具体实践 Kubernetes 下基于 EFK 技术栈的日志收集,本文偏实践,要想全面了解 Kubernetes 下日志收集管理机制,最好还是两篇文...

2019-09-06 00:23:10 2140 0

原创 数据库升级 DevOps 落地实践

在我们做持续集成/交付的过程中,应用的发布已经通过 DevOps 流水线基本能满足快速迭代的需求,但是很多企业在落地实践 DevOps 的过程中很容易忽略的一点是关于应用数据库版本、升级的管理,每次上线发布数据库的更新依然通过运维或者 DBA 手工更新,在微服务、容器盛行的背景下,服务多,服务发布...

2019-08-29 11:51:42 1337 1

原创 从 Docker 到 Kubernetes 日志管理机制详解

在容器化时代,容器应用的日志管理和传统应用存在很大的区别,为了顺应容器化应用,Docker 和 Kubernetes 提供了一套完美的日志解决方案。本文从 Docker 到 Kubernetes 逐步介绍在容器化时代日志的管理机制,以及在 Kubernetes 平台下有哪些最佳的日志收集方案。涉及...

2019-08-26 10:30:27 1010 0

原创 Kubernetes 集群安全机制详解

本文主要介绍 Kubernetes 的安全机制,如何使用一系列概念、技术点、机制确保集群的访问是安全的,涉及到的关键词有:api-server,认证,授权,准入控制,RBAC,Service Account,客户端证书认证,Kubernetes 用户,Token 认证等等。虽然涉及到的技术点比较琐...

2019-08-22 13:25:38 886 0

原创 Kong 微服务网关在 Kubernetes 的实践

本文主要介绍将 Kong 微服务网关作为 Kubernetes 集群统一入口的最佳实践,之前写过一篇文章使用 Nginx Ingress Controller 作为集群统一的流量入口:使用 Kubernetes Ingress 对外暴露服务,但是相比于 Kong Ingress Controlle...

2019-08-17 12:48:46 3711 2

原创 基于 docker-compose 容器化构建 Kong 微服务网关平台

本文主要介绍如何使用 docker-compose 快速体验 Kong 微服务网关,先简单介绍基本概念,然后做了一个 Demo 测试使用,涉及到的相关话题有: Kong 简介; Konga 简介; 基于 docker-compose 容器化构建 Kong 微服务网关平台; 使用 Konga 可视...

2019-08-14 20:18:12 1425 2

原创 使用 Kubernetes Ingress 对外暴露服务

本文主要介绍如何通过 Kubernetes Ingress 资源对象实现从外部对 k8s 集群中服务的访问,介绍了 k8s 对外暴露服务的多种方法、Ingress 及 Ingress Controller 的概念。涉及到的话题有: k8s 对外暴露服务的方法; Ingress 及 Ingress...

2019-08-12 23:27:22 5263 0

原创 Kubeadm 结合 Vagrant 自动化部署最新版 Kubernetes 集群

之前写过一篇搭建 k8s 集群的教程:「使用 kubeadm 搭建 kubernetes 集群」,教程中用到了 kubeadm 和 vagrant,但是整个过程还是手动一步一步完成:创建节点--> 节点配置、相关软件安装 --> 初始化 master 节点 --> node 节点...

2019-08-06 14:43:49 231 0

原创 自动化测试报表统一平台 ReportPortal 集成 TestNG

自动化测试报表统一平台 ReportPortal 集成 TestNG 本文主要介绍 ReportPortal 如何集成 TestNG 测试框架,用到的工具链有:ReportPortal + TestNG + log4j。ReportPortal 集成 TestNG 的主要原理是通过给 TestNG...

2019-07-10 22:02:28 793 0

原创 Golang 从 Json 串中快速取出需要的字段

Golang 从 Json 串中快速取出需要的字段 在 web 编程中很多情况下接口的数据是 json 格式,在我们拿到接口的 json 数据后如何方便地从中提取出需要的字段呢?我们可以自定义一个结构体,然后通过 Golang 的标准库 json 解析到我们定义的结构体中。但是当 json 格式比...

2020-07-05 21:58:02 25 0

原创 kubernetes 源码编译

kubernetes 源码编译分为本地编译和镜像编译,本地编译是指最终编译出来的是二进制可执行文件,镜像编译是 最终编译出来的产出物为 docker 镜像 tar 包。本文主要介绍本地编译的方法,以编译 kube-apiserver 组件为例说明。 环境要求 Go 环境: go1.12.xx g...

2020-03-01 18:14:29 696 0

原创 Golang 多版本管理神器 gvm

缘起 最近编译 kubernetes 遇到了点坑,编译各种报错,经搜索调研发现 k8s 的编译对 go 的版本有很严格的要求。比如我的 go1.13.4 就无法编译 kubernetes v1.16.3,必须得 go1.12.xx 版本才能编译。为了解决这种尴尬的场景只能再在主机安装个 go1.1...

2020-03-01 11:46:44 1756 0

原创 Golang logrus 日志包及日志切割

Golang logrus 日志包及日志切割 本文主要介绍 Golang 中最佳日志解决方案,包括常用日志包 logrus 的基本使用,如何结合 file-rotatelogs 包实现日志文件的轮转切割两大话题。 Golang 关于日志处理有很多包可以使用,标准库提供的 log 包功能比较少,不支...

2020-01-28 23:52:35 1085 0

原创 MySQL 慢查询日志导入 Elasticsearch 可视化查询分析

当应用程序后台 SQL 查询慢的时候我们一般第一时间会查看数据库慢查询记录,但是慢查询记录是原始文本,直接查询搜索分析比较费时费力,虽然业界有针对 MySQL 慢查询分析的命令行工具(比如:pt-query-digest),但是使用起来还是不够方便,而且分析结果也是针对整个实例的大概统计,不能及时...

2019-10-24 19:42:28 896 1

原创 Kubernetes CronJob 的一个应用案例

最近 Kubernetes 集群中出现过几次 Redis 故障,具体表现是每次集群重启(云资源按需启动), Redis Pod 都要老半天才能启动起来,后来逐渐排查定位才发现原来是由于 Redis 开启了 aof 持久化机制。 我们知道在 AOF 持久化机制下,Resdis 的每一条写命令都会被同...

2019-08-30 11:31:10 289 0

原创 Kubernetes 调整 nodePort 端口范围

默认情况下,k8s 集群 nodePort 分配的端口范围为:30000-32767,如果我们指定的端口不在这个范围就会报类似下面这样的错误: Error: release kong failed: Service “kong-kong-admin” is invalid: spec.ports...

2019-08-15 21:19:15 2379 0

原创 kubectl 多集群访问配置

配置 KUBECONFIG 环境变量,是 kubectl 工具支持的变量,变量内容是冒号分隔的 kubernetes config 认证文件路径。假如我们有两个集群:A 和 B,A 集群的 config 文件为:$HOME/.kube/config,B 集群的 config 文件为:$HOME/....

2019-08-09 10:23:41 864 0

原创 Mac OS 启用 ssh 远程登陆

检查 ssh 远程登陆是否启用 sudo systemsetup -getremotelogin 启用 ssh 远程登陆 sudo systemsetup -setremotelogin on 启用后就可以用 ssh 来登陆 mac 系统了,账号和密码为系统的账号密码。 关闭 ssh 远程登陆...

2019-08-08 18:55:21 321 0

原创 Vagrant 多网卡环境下 flannel 网络插件导致 DNS 无法解析

之前写过一篇 k8s 集群自动化部署的文章:「Kubeadm 结合 Vagrant 自动化部署最新版 Kubernetes 集群」,发现集群启动后 DNS 无法解析,公网和集群内部都无法解析,具体问题表现是:进入 pod 执行 ping service 名称或者公网域名都是无法解析 Unknow ...

2019-08-08 16:16:29 336 0

原创 helm 部署 kubernetes-dashboard

helm 部署 kubernetes-dashboard kubernetes-dashboard 是 k8s 官方提供的集群 Web UI,可以查看集群详细的信息,比如集群的 api 资源,pod 日志,工作负载,节点资源利用率等等。 使用官方提供的 Chart:https://github....

2019-08-08 12:51:26 1535 0

原创 helm 部署 heapster 组件

之前工作用的 k8s 集群(GKE)都是支持 kubectl top node 查看节点资源使用情况的,最近自己本地新搭的集群发现用不了该命令。网上搜索了下发现是由于缺少集群指标收集组件导致,目前常用的集群指标收集组件是 heapster 和 metrics-server,看官方介绍 heapst...

2019-08-08 12:40:47 482 0

原创 Helm 安装使用

其实 Helm 的安装很简单,之所以单独写这篇文章主要是因为国内网络原因导致 helm 使用存在障碍(防火墙对 google 不友好),本文重点说如何解决这一问题。 helm 安装 官方提供了一件安装脚本,安装最新版:https://helm.sh/docs/using_helm/#install...

2019-08-08 10:59:12 172 1

原创 kubeadm + vagrant 部署多节点 k8s 的一个坑

kubeadm + vagrant 部署多节点 k8s 的一个坑 之前写过一篇「使用 kubeadm 搭建 kubernetes 集群」教程,教程里面使用 Vagrant 启动 3 个节点,1 个 master,2 个 node 节点,后来使用过程中才慢慢发现还是存在问题的。具体问题表现是: k...

2019-08-06 09:41:32 503 0

原创 Jenkins 集成 allure 测试报告工具

allure 基于已有的测试报告数据进行进一步的加工,美化等操作,相当于做了一次数据格式转换。allure 支持多种语言的多种测试框架,比如 Java 的 jUnit4、jUnit5、TestNg 等等。 本文主要介绍如何在 Jenkins 中集成 allure 测试报表工具,在每次项目自动化测试...

2019-07-25 11:51:53 512 0

原创 使用 Go 开发命令行应用

使用 Go 开发命令行应用 作为一个程序员,命令行工具是我们再熟悉不过的了,我们每天或多或少都会用到命令行工具。比如项目构建、打包、启动等等。那么如何用 Go 语言编写类似的工具呢?调研了下,大概有下面三种方法: os.Args 函数 os.Args 功能类似于 Shell 脚本的 $@ 功能,...

2019-07-23 23:59:05 343 0

原创 Golang 协程顺序打印

Golang 协程顺序打印 A、B 两个协程分别打印 1、2、3、4 和 A,B,C,D 实现:定义 A、B 两个 channal,开 A、B 两个协程,A 协程输出[1, 2, 3, 4]、B 协程输出[A, B, C, D],通过两个独立的 channal 控制顺序,交替输出。 func ma...

2019-07-23 16:41:04 1355 0

原创 Go 语言 exec 实时获取外部命令的执行输出

Go 语言 exec 实时获取外部命令的执行输出 在 Go 语言中调用外部 Linux 命令可以通过标准的 os/exec 包实现,我们一般的使用方式如下: package main import ( "fmt" "os/exec" ) func m...

2019-07-20 18:19:59 2655 0

原创 Go 语言读写文件

Go 语言读写文件 在这里演示下如何通过 Go 读写文件,Go 读写文件有很 IO 多函数可以使用,在这里使用 os 包的 OpenFile 和 Open 函数打开文件,然后用 bufio 包带缓冲的读写器读写文件。查看 OpenFile 源码,其实 Open 函数底层还是调用了 OpenFile...

2019-07-15 21:52:09 456 0

原创 Golang json 编解码

Json 编码 Json 编码的过程即为将程序的数据结构转化为 json 串的过程,比如 Golang 里面的结构体、Python 中的字典,这些有结构的数据转化为 json 串。在 Golang 中编码 Json 使用 encoding/json 包的 Marshal() 函数,函数原型为: f...

2019-07-09 19:29:43 149 0

原创 使用 iperf 测试 Linux 服务器带宽

iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量。目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在同区域找两台同等配置的机器测试,因为带宽测试结果和两节点的距离有关、也和运营商的限制有关、也和服...

2019-07-02 18:58:00 676 0

原创 Haproxy 从入门到掌握

Haproxy 从入门到掌握 简介 HAProxy 是一款开源且免费的反向代理软件,为基于 TCP 和 HTTP 的应用提供高可用、负载均衡和代理功能。它特别适用于流量非常大的网站,为世界上访问量最大的网站提供了强大的支持。多年来,HAProxy 已经成为事实上的标准开源负载均衡器,大多数主流的 ...

2019-06-17 09:51:49 224 0

原创 使用 ansible 模板化 haproxy 配置文件

使用 ansible 模板化 haproxy 配置文件 今天使用 ansible 自动化一些日常工作,其中包括 haproxy 的配置变更,我们 haproxy 里面定义了很多 frontend 和 backend,猛一看还不好模版化,其实仔细研究一下发现完全可以通过模板的循环语法动态生成配置文件...

2019-06-11 22:33:36 209 0

原创 如何在 Centos7 使用 iptables

如何在 Centos7 使用 iptables 从 Red Hat Enterprise Linux (RHEL) 7 和 CentOS 7 开始,firewalld 便作为系统默认的防火墙软件,替代之前的 iptables。firewalld 使用 firewall-cmd 命令管理防火墙规则...

2019-06-09 20:50:26 246 0

原创 使用 Vagrant 调试 Ansible Playbook

使用 Vagrant 调试 Ansible Playbook 简介 本文主要介绍使用 Vagrant 本地调试 Ansible Playbook 的最佳实践。 我平时用 ansible 做一些自动化任务,难免要写很多 playbook,如果直接将写的 playbook 在线上或者真实的服务器运行...

2019-06-07 15:06:43 269 0

原创 Hexo next 主题加载自定义 js 文件

Hexo next 主题加载自定义 js 文件 为什么要配置 hexo next 主题自定义 js 文件呢?主要原因有两点: 不可靠:加载第三方站点的 js 依赖其站点的稳定性,如果第三方站点给挂了或者不维护了,那么加载的地址就失效了, 访问直接 404… 比如最近就遇到 next 主题&qu...

2019-06-02 09:31:40 1149 1

原创 docker-compose 启动 Redis 服务

docker-compose 启动 Redis 服务 使用 docker-compose 以 aof 持久化方式启动单节点 Redis。 docker-compose.yml: --- version: '3' services: redis: image: red...

2019-05-31 17:58:50 6294 2

原创 Nginx root 和 alias 指令的区别

Nginx root 和 alias 指令的区别 nginx 的 root 和 alias 指令都是用于访问服务器本地文件的,两者区别如下: 配置语法及适用范围 [root] 语法:root path 默认值:root html 配置段:http、server、location、if [al...

2019-05-31 12:36:13 173 0

原创 Wireshark 抓包理解 HTTPS 协议

Wireshark 抓包理解 HTTPS 协议 HTTPS 简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer)协议是 HTTP 协议的安全版,在 HTTP 应用层和传输层加入了 SSL/TLS 层,确保数据传输的安全性...

2019-05-26 21:38:37 2702 0

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