案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul
#案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul
#项目背景
- 多套业务系统, 所有节点注册到consul集群,方便统一管理
- 使用consul的dns功能, 所有节点hostname能ping通
- 使用consul健康检查功能, 健康检查通过才添加到service
- 部分服务之前调用直接使用consul的server地址即:
service-name.service.datacenter.consul - prometheus监控使用consul-templates自动添加节点
- 运行环境是阿里云, k8s集群容器IP和云主机IP互通
#1.1 需要解决的问题
- 部分服务迁移k8s集群后, k8s集群外的服务需要直连pod的ip访问
#1.2 解决办法
- pod添加consul-agent容器注册到consul集群
#2.1 pod注册到consul产生的新问题
- pod退出或删除时, consul集群应删除pod
- prometheus监控模板consul-templates需要排除pod
#2.2 解决办法
- consul容器使用preStop钩子, 退出前执行consul leave主动离开consul集群
- consul-templates排除pod
- pod注册到consul集群时添加前缀如
k8s-
- pod注册到consul集群时添加前缀如
- consul-templates使用regexMatch正则匹配忽略
k8s-开头的节点
- consul-templates使用regexMatch正则匹配忽略
#演示demo如下
---
apiVersion: v1
kind: ConfigMap
metadata:
name: consul-demo-config
namespace: default
data:
consul.json: |-
{
"datacenter": "qa",
"acl_datacenter": "qa",
"data_dir": "/tmp/consul",
"bind_addr": "0.0.0.0",
"client_addr": "0.0.0.0",
"start_join": ["10.10.100.100"],
"retry_join": ["10.10.100.100"],
"retry_interval": "5s",
"disable_host_node_id": true,
"enable_script_checks": true,
"disable_update_check": true,
"leave_on_terminate": true,
"log_level": "WARN",
"server": false,
"service": {
"name": "qa-consul-demo",
"port" : 80,
"tags": ["k8s", "qa", "consul-demo"],
"checks": [
{
"id": "consul-demo-HealthCheck",
"name": "Health Check",
"notes": "Health Check",
"args": [ "sh", "-c", "[ $(curl -s 127.0.0.1 -I |grep 'nginx' |wc -l) -eq 1 ] && { echo 'Health check successful'; exit 0 ; } || { echo 'check error' ; exit 2 ; }" ],
"interval": "10s"
}
]
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: consul-demo
namespace: default
spec:
selector:
matchLabels:
app: consul-demo
replicas: 2
template:
metadata:
labels:
app: consul-demo
spec:
imagePullSecrets:
- name: docker-image-key
containers:
- name: consul-agent
image: consul:1.0.8
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- |
consul agent -config-dir=/opt/consul -node=k8s-qa-$HOSTNAME -rejoin
lifecycle:
preStop:
exec:
command:
- sh
- -c
- |
consul leave
volumeMounts:
- mountPath: "/etc/consul"
name: consul-conf
resources:
requests:
cpu: 10m
memory: 16Mi
limits:
cpu: 50m
memory: 32Mi
readinessProbe:
tcpSocket:
port: 8500
livenessProbe:
tcpSocket:
port: 8500
volumeMounts:
- name: consul-config
mountPath: "/opt/consul"
- name: nginx-node
image: alivv/nginx:node
imagePullPolicy: IfNotPresent
volumes:
- name: consul-config
configMap:
name: consul-demo-config
items:
- key: consul.json
path: consul.json
监控模板consul-templates如下
- job_name: 'node'
static_configs:
{{range nodes}}
- targets: ['{{.Node}}:9100']
labels:
instance: {{.Node}}{{end}}
修改后如下, 使用regexMatch正则匹配排除k8s-开头的节点名称
- job_name: 'node'
static_configs:
{{range nodes}}{{if .Node | regexMatch "^k8s-.*" }}{{else}}
- targets: ['{{.Node}}:9100']
labels:
instance: {{.Node}}{{end}}{{end}}
案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul的更多相关文章
- 生产环境上,哨兵模式集群Redis版本升级应用实战
背景: 由于生产环境上所使用的Redis版本并不一致,好久也没有更新,为了避免版本不同对Redis集群造成影响,从而升级为统一Redis版本! 1.集群架构 一主两从三哨兵: 2.升级方案 (1)升级 ...
- 生产环境的redis高可用集群搭建
这里只是总结一下安装步骤 如果要了解redis集群高可用的原理,推荐仔细看一遍配置文件示例http://download.redis.io/redis-stable/redis.conf,源码包里也有 ...
- 解决项目迁移至Kubernetes集群中的代理问题
解决项目迁移至Kubernetes集群中的代理问题 随着Kubernetes技术的日益成熟,越来越多的企业选择用Kubernetes集群来管理项目.新项目还好,可以选择合适的集群规模从零开始构建项目: ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- K8S集群组件
master节点主要由apiserver.controller-manager和scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成,而每个node节点则主要包含kubelet. ...
- k8s集群介绍
Kubernetes集群组件 一个典型的Kubernetes集群由多个工作节点和一个集群控制节点,以及一个集群状态存储系统etcd组成.其中Master节点负责整个集群管理工作,为集群提供管理接口,并 ...
- 在windows环境中单机搭建rabbitmq集群
建议单机版集群仅作为学习使用,生产环境最好使用多服务器集群来避免单点故障带来的服务不可用,必竟单机版的集是伪集群. 1:准备基础文件.环境变量 设置环境变量: 变量名:RABBITMQ_BASE 变量 ...
- 大规模 K8s 集群管理经验分享 · 上篇
11 月 23 日,Erda 与 OSCHINA 社区联手发起了[高手问答第 271 期 -- 聊聊大规模 K8s 集群管理],目前问答活动已持续一周,由 Erda SRE 团队负责人骆冰利为大家解答 ...
- K8s集群安装和检查(经验分享)
一.组件方式检查 1. Master节点: root>> kubectl get cs 2. Node 节点: 无 二.服务方式检查 1. Master 节点: root>> ...
随机推荐
- 基于ABP实现DDD--领域逻辑和应用逻辑
本文主要介绍了多应用层的问题,包括原因和实现.通过理解介绍了如何区分领域逻辑和应用逻辑,哪些是正确的实践,哪些是不推荐的或者错误的实践. 一.多应用层的问题 1.多应用层介绍 不知道你们是否会 ...
- Golang 盲注脚本
Golang 盲注脚本 payload部分 其中脚本最重要的环节就是payload部分了,需要如何去闭合,如何构造SQL语句来达到判断的效果.(还有如何绕过waf等等...) bool盲注 下面是最基 ...
- React报错之组件不能作为JSX组件使用
正文从这开始~ 总览 组件不能作为JSX组件使用,出现该错误有多个原因: 返回JSX元素数组,而不是单个元素. 从组件中返回JSX元素或者null以外的任何值. 使用过时的React类型声明. 返回单 ...
- 我与Apache DolphinScheduler社区的故事
我与DolphinScheduler社区的故事 Apache DolphinScheduler 是一个开源的分布式去中心化.易扩展的可视化DAG大数据调度系统. 于2017年在易观数科立项,2019年 ...
- Spring源码 01 概述
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- Excelize 发布 2.6.1 版本,支持工作簿加密
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
- ss 显示unix 域 的socket 缓冲区不正确
一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态, [root@localhost unix]# ss -auxp |grep -i server.o u_ ...
- HDU6623 Minimal Power of Prime (简单数论)
题面 T ≤ 50 000 T\leq50\,000 T≤50000 组数据: 输入一个数 N N N ( 2 ≤ N ≤ 1 0 18 2\leq N\leq 10^{18} 2≤N≤1018) ...
- 二 代理模式【Proxy Pattern】 来自CBF4LIFE 的设计模式
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. ...
- 项目实践2:使用html和CSS实现图片轮播
好家伙, 使用html和CSS实现简单的图片切换(轮播图) 来自:(7条消息) 使用CSS实现简单的图片切换(轮播图)_LexingtonCV16的博客-CSDN博客_css实现图片切换 1.首先创建 ...