北青永恒 - 自动注册
type: channel
link: https://www.kococ.cn/category/自动注册/
items: 在k8s中搭建有状态应用Nacos集群
items: Consul使用中文手册
items: Consul常用CLI与API
items: Registrator+Consul+Consul-template+HaProxy实现动态修改Haproty配置文件

在k8s中搭建有状态应用Nacos集群
type: item
date: 2022-02-25T14:09:01+08:00
description: 在k8s中部署的难点在k8s中部署nacos集群和在裸机器上直接部署nacos机器其实差别不大。最主要的区别是k8s中部署的服务没有固定的IP，而nacos集群部署需要配置所有实例的IP地址因Nacos本身是直接拿MySQL的数据,故在此服务中不做持久化操作解决在k8s中通过StatefulSet和Headless Service为每个nacos实例生成一个唯一的dns地址，创建一个普通Service给可客户端使用部署创建数据库配置CMapiVersion: v1 kind: ConfigMap metadata: name: nacos-cm data: mysql.host: "192.168.1.3" mysql.db.name: "nacos_devtest" mysql.port: "3306" mysql.user: "nacos" mysql.password: "nacos"部署Headless Service无头服务SVCHeadless Service为每个Pod（nacos实例）生成一个地址，用作NACOS_SERVERS配置apiVersion: v1 kind: Service metadata: name: nacos-headless labels: app: nacos annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: ports: - port: 8848 name: server targetPort: 8848 clusterIP: None selector: app: nacos使用StatefulSet控制器部署NacosStatefulSet部署方式为每个POD生成固定的名称，如nacos-0、nacos-1、nacos-2等。apiVersion: apps/v1 kind: StatefulSet metadata: name: nacos spec: serviceName: nacos-headless replicas: 3 template: metadata: labels: app: nacos annotations: pod.alpha.kubernetes.io/initialized: "true" spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - nacos-headless topologyKey: "kubernetes.io/hostname" containers: - name: k8snacos imagePullPolicy: Always image: nacos/nacos-server:latest resources: requests: memory: "2Gi" cpu: "500m" ports: - containerPort: 8848 name: client env: - name: NACOS_REPLICAS value: "3" - name: MYSQL_SERVICE_HOST valueFrom: configMapKeyRef: name: nacos-cm key: mysql.host - name: MYSQL_SERVICE_DB_NAME valueFrom: configMapKeyRef: name: nacos-cm key: mysql.db.name - name: MYSQL_SERVICE_PORT valueFrom: configMapKeyRef: name: nacos-cm key: mysql.port - name: MYSQL_SERVICE_USER valueFrom: configMapKeyRef: name: nacos-cm key: mysql.user - name: MYSQL_SERVICE_PASSWORD valueFrom: configMapKeyRef: name: nacos-cm key: mysql.password - name: MODE value: "cluster" - name: NACOS_SERVER_PORT value: "8848" - name: PREFER_HOST_MODE value: "hostname" - name: NACOS_SE…

Consul使用中文手册
type: item
date: 2021-01-28T14:49:00+08:00
description: 使用consul介绍Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.Key/Value存储 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.多数据中心 Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施.基础架构Consul是一个分布式高可用的系统. 这节将包含一些基础,我们忽略掉一些细节这样你可以快速了解Consul是如何工作的.如果要了解更多细节,请参考深入的架构描述.每个提供服务给Consul的阶段都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群.你基础设施中需要发现其他服务的组件可以查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .每个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求创建时.本地Consul Server转发请求到远程的数据中心并返回结果.更多介绍查看官网点击前往安装Consul安装Consul,找到适合你系统的包下载他.Consul打包为一个’Zip’文件.前往下载下载后解开压缩包.拷贝Consul到你的PATH路径中,在Unix系统中~/bin和/usr/local/bin是通常的安装目录.根据你是想为单个用户安装还是给整个系统安装来选择.在Windows系统中有可以安装到%PATH%的路径中.验证安装完成安装后,通过打开一个新终端窗口检查consul安装是否成功.通过执行 consul你应该看到类似下面的输出[root@dhcp-10-201-102-248 ~]# consul usage: consul [--version] [--help] <command> [<args>] Available commands are: agent Runs a Consul agent configtest Validate config file event Fire a new event exec Executes a command on Consul nodes force-leave Forces a member of the cluster to enter the "left" state info Provides debugging information for operators join Tell Consul agent to join cluster keygen Generates a new encryption key keyring Manages gossip layer encryption keys kv Interact with the key-value store leave Gracefully leaves the Consul cluster and shuts down lock Execute a command holding a lock maint Controls node or service maintenance mode members Lists the members of a Consul cluster monitor Stream logs from a Consul agent operator Provides cluster-level tools for Consu…

Consul常用CLI与API
type: item
date: 2021-01-28T14:33:00+08:00
description: 一、Consul 常用CLI1.1 查看服务列表consul catalog services1.2 注销服务consul services deregister -id=:service-id // :service-id 为用户服务Id1.3 查看节点成员consul members1.4 查看主节点配合1.3可确认主节点consul info二、Consul 常用API备注 : <:serviceName> 请替换为要查询的服务名称, 如： spring-cloud-provider:serviceName2.1 注册服务payload.json ==== { "ID": "spring-cloud-provider-8080", "Name": "spring-cloud-provider", "Tags": ["primary", "v1"], "Address": "127.0.0.1", "Port": 8080, "EnableTagOverride": false, "Check": { "DeregisterCriticalServiceAfter": "1m", "Interval": "10s", "Timeout": "5s" "Tcp":"127.0.0.1:8080" }, "Weights": { "Passing": 10, "Warning": 1 } } curl \ --request PUT \ --data @payload.json \ http://127.0.0.1:8500/v1/agent/service/register?replace-existing-checks=true 2.2 查看所有注册服务列表curl 127.0.0.1:8500/v1/catalog/services2.3 查看服务实例状态（最佳接口）查看健康检查通过的curl http://127.0.0.1:8500/v1/health/checks/:serviceName?passing |python -m json.tool查看全部curl http://127.0.0.1:8500/v1/health/checks/:serviceName | python -m json.tool2.4 查询服务实例列表健康实例（会拉取到未设置check的service）curl http://127.0.0.1:8500/v1/health/service/:serviceName?passing | python -m json.tool查看全部curl http://127.0.0.1:8500/v1/health/service/:serviceName | python -m json.tool2.5 查询注册节点情况curl http://127.0.0.1:8500/v1/catalog/service/:serviceName | python -m json.tool2.6 查看Consul集群成员 (常用来测试网络联通性)curl http://127.0.0.1:8500/v1/agent/members | python -m json.tool2.7 查询Consul集群Leader（常用来判断集群状态）curl http://127.0.0.1:8500/v1/status/leader转：https://blog.csdn.net/shuai_wy/article/details/106199295

Registrator+Consul+Consul-template+HaProxy实现动态修改Haproty配置文件
type: item
date: 2020-09-16T16:26:00+08:00
description: Registrator+Consul+Consul-template+HaProxy实现动态修改Haproty配置文件实现需求：用Haproxy做负载均衡，手动方式在配置文件中添加或删除节点服务器信息，比较麻烦。通过Registrator收集需要注册到Consul作为Haproxy节点服务器的信息，然后注册到Consul key/value。Consul-template去Consul key/value中读取信息,然后自动修改Haproxy配置文件，并重载Haproxy。不需要修改haproxy.cfg。集群环境：Postil：Mesos集群搭建过程此处省略关闭selinux和防火墙setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config systemctl stop firewalld && systemctl disable firewalldZK-server容器来做consul： 获取Consul-server镜像 [root@zk-server ~]# docker pull docker.io/gliderlabs/consul-server 启动Consul-server [root@zk-server ~]# docker run -d --name=consul --net=host docker.io/gliderlabs/consul-server -bootstrap -bind=192.168.200.8宿主机来做consul下载consul包，并解压[root@zk-server ~]# wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_386.zip [root@zk-server ~]# unzip consul_0.6.4_linux_386.zip [root@zk-server ~]# mv consul /usr/bin/下载consul-template包，并解压[root@zk-server ~]# wget https://releases.hashicorp.com/consul-template/0.15.0/consul-template_0.15.0_linux_386.zip [root@zk-server ~]# unzip consul-template_0.15.0_linux_386.zip [root@zk-server ~]# mv consul-template /usr/bin/安装HaProxy并启动[root@zk-server ~]# yum -y install haproxy [root@zk-server ~]# systemctl start haproxy创建consul服务器配置目录[root@zk-server ~]# mkdir /config编写agent和server的json文件[root@zk-server ~]# vi /config/agent.json 添加内容如下： { "client_addr": "0.0.0.0", "data_dir": "/data", "leave_on_terminate": true, "dns_config": { "allow_stale": true, "max_stale": "1s" } } [root@zk-server ~]# vi /config/server.json 添加内容如下： { "ui": true, "dns_config": { "allow_stale": false } }启动consul单节点服务器，当然，你consul服务器节点多的话也可以做consul集群。[root@zk-server ~]# consul agent -server -config-dir=/config -bootstrap -bind=192.168.200.8 &Postil：可用consul members 查看consul集群节点Slave1-server获取Registrator镜像[root@slave1 ~]# docker pull gliderlabs/registrator:latest启动RegistratorPostil：这种启动方式是注册到Consul的key/value[root@slave1 ~]# docker run -d --restart=always --name=registrator --net=host --volume=/var/run/d…