首页 > 其他分享 >案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul

案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul

时间:2022-09-26 22:23:52浏览次数:54  
标签:name demo consul 集群 pod k8s

#案例分享 生产环境逐步迁移至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-
    • consul-templates使用regexMatch正则匹配忽略k8s-开头的节点

#演示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}}

标签:name,demo,consul,集群,pod,k8s
From: https://www.cnblogs.com/elvi/p/16732694.html

相关文章

  • groovy 调整k8s的副本数定时任务
    目录groovy调整k8s的副本数定时任务groovy调整k8s的副本数定时任务packageplatformnode('ecs_wuhan_docker'){println"${BUILD_URL}console"defwxKey......
  • clickhouse高可用k8s集群搭建
    前提条件安装一个k8s集群安装helm工具1,安装operatorhelmrepoaddckhttps://radondb.github.io/radondb-clickhouse-kubernetes/helmrepoupdatekubectlcreaten......
  • K8S入门详细地教程
    Kubernetes详细教程1.Kubernetes介绍1.1应用部署方式演变在部署应用程序的方式上,主要经历了三个时代:传统部署:互联网早期,会直接将应用程序部署在物理机上优点:简单......
  • k8s将dockershim移除之后,如何继续使用docker?
    说说这个前提,就是k8s宣布将dockershim给移除了这么个点 为什么要移除 说白了,就是k8s是想建立标准的,通过的CRI,容器运行的接口,不仅仅可以支持docker,还可以支持其他的......
  • 从应用访问Pod元数据-DownwardApi的应用
    对于某些需要调度之后才能知道的数据,比如pod的ip,主机名,或者pod自身的名称等等,k8s依旧很贴心的提供了DownwardAPI的方式来获取此类数据,并且可以通过环境变量或者文......
  • K8S系列(四)——常用命令汇总
    【前言】  K8S虽然可以通过dashboard等图形化界面去管理,但是一些常用命令我们还是要记下。为了方便查看,命令按照资源类型的各种操作命令来分类,部分命令可能会存在重复情......
  • K8s 网络插件 Calico 报错:Number of node(s) with BGP peering established = 0
    问题现象calico对应的Pod启动失败,报错:Numberofnode(s)withBGPpeeringestablished=0问题分析Calico提供了IP自动检测的方法,默认是使用第一个有效网卡上......
  • 基于外部prometheus监控k8s 集群及k8s应用服务
    一、在k8s集群外部准备一个Prometheus监控系统搭建部署可参考:https://www.cnblogs.com/cyh00001/p/16701266.html二、创建用户并授权catcase4-prom-rbac.yamlapiVers......
  • 【云原生】Hadoop on k8s 环境部署
    目录一、概述二、开始部署1)添加源2)构建镜像Dockerfile2)修改配置3)开始安装5)测试验证6)卸载一、概述Hadoop是Apache软件基金会下一个开源分布式计算平台,以HDFS(HadoopDist......
  • K8S集群网络划分
     K8s集群网络划分 安装K8S集群安装时会涉及到三个网段:宿主机网段:就是安装k8s的服务器Pod网段:k8sPod的网段,相当于容器的IPService网段:k8sservice网段,service用于......