一、docker部署consul集群

参考文献:https://www.cnblogs.com/lonelyxmas/p/10880717.html

https://blog.csdn.net/qq_36228442/article/details/89085373

consul是提供服务发现、简单配置管理、分区部署的服务注册发现解决方案。
主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署

consul的实例叫agent
agent有两种运行模式:server和client
每个数据中心至少要有一个server,一般推荐3-5个server(避免单点故障)
client模式agent是一个轻量级进程,执行健康检查,转发查询请求到server。
服务service是注册到consul的外部应用,比如spring web server

以下为docker-compose.yaml文件

version: "3.0"
services:
consulserver:
image: progrium/consul:latest
hostname: consulserver
ports:
- "8300:8300"
- "8400:8400"
- "8500:8500"
- ""
command: -server -ui-dir /ui -data-dir /tmp/consul --bootstrap-expect=
consulserver1:
image: progrium/consul:latest
hostname: consulserver1
depends_on:
- "consulserver"
ports:
- "8301:8300"
- "8401:8400"
- "8501:8500"
- ""
command: -server -data-dir /tmp/consul -join consulserver
consulserver2:
image: progrium/consul:latest
hostname: consulserver2
depends_on:
- "consulserver"
ports:
- "8302:8300"
- "8402:8400"
- "8502:8500"
- ""
command: -server -data-dir /tmp/consul -join consulserver

宿主机浏览器访问:http://localhost:8500 或者 http://localhost:8501 或者 http://localhost:8502

创建test.json文件,以脚本形式注册服务到consul:

test.json文件内容如下:

{
"ID": "test-service1",
"Name": "test-service1",
"Tags": [
"test",
"v1"
],
"Address": "127.0.0.1",
"Port": ,
"Meta": {
"X-TAG": "testtag"
},
"EnableTagOverride": false,
"Check": {
"DeregisterCriticalServiceAfter": "90m",
"HTTP": "http://zhihu.com",
"Interval": "10s"
}
}

通过 http 接口注册服务(端口可以是8500. 8501, 8502等能够正常访问consul的就行):

curl -X PUT --data @test.json http://localhost:8500/v1/agent/service/register

二、k8s部署consul集群

参考文献:https://www.cnblogs.com/tylerzhou/p/11161634.html

https://www.jianshu.com/p/b00de040d92e

由于node节点只有两个,所以配置集群也两个实例,测试时候,配置三个实例不能正常工作,所以配置俩个

1、先创建service资源

apiVersion: v1
kind: Service
metadata:
name: consul
labels:
name: consul
spec:
type: ClusterIP
ports:
- name: http
port:
targetPort:
# - name: https
# port:
# targetPort:
# - name: rpc
# port:
# targetPort:
# - name: serflan-tcp
# port:
# targetPort:
# - name: serflan-udp
# port:
# targetPort:
# protocol: "UDP"
# - name: serfwan-tcp
# port:
# targetPort:
# - name: serfwan-udp
# port:
# targetPort:
# protocol: "UDP"
# - name: server
# port:
# targetPort:
# - name: consuldns
# port:
# targetPort:
selector:
app: consul

由于只暴露8500的ui端口,所以将其他端口都没有创建service,service为clusterIP

2、创建statefulset资源

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: consul
spec:
serviceName: consul
replicas:
selector:
matchLabels:
app: consul
template:
metadata:
labels:
app: consul
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- consul
topologyKey: kubernetes.io/hostname
terminationGracePeriodSeconds:
containers:
- name: consul
image: consul:latest
args:
- "agent"
- "-server"
- "-bootstrap-expect=2"
- "-ui"
- "-data-dir=/consul/data"
- "-bind=0.0.0.0"
- "-client=0.0.0.0"
- "-advertise=$(PODIP)"
- "-retry-join=consul-0.consul.$(NAMESPACE).svc.cluster.local"
- "-retry-join=consul-1.consul.$(NAMESPACE).svc.cluster.local"
- "-retry-join=consul-2.consul.$(NAMESPACE).svc.cluster.local"
- "-domain=cluster.local"
- "-disable-host-node-id"
env:
- name: PODIP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort:
name: ui-port
- containerPort:
name: alt-port
- containerPort:
name: udp-port
- containerPort:
name: https-port
- containerPort:
name: http-port
- containerPort:
name: serflan
- containerPort:
name: serfwan
- containerPort:
name: consuldns
- containerPort:
name: server

3、创建ingress,以使用域名访问

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-consul
namespace: default
annotations:
kubernets.io/ingress.class: "nginx"
spec:
rules:
- host: consul.cabel.com
http:
paths:
- path:
backend:
serviceName: consul
servicePort:

以上资源创建完成后就可以访问了:

docker及k8s安装consul的更多相关文章

  1. centos7.7下docker与k8s安装(DevOps三)

    1.系统配置 centos7.7 docker 1.13.1 centos7下安装docker:https://www.cnblogs.com/pu20065226/p/10536744.html 2 ...

  2. Docker安装Consul集群

    Docker 安装Consul集群 使用windows 环境,Docker desktop community 构建consul集群. 1.docker 容器网络 docker安装后,默认会创建三种网 ...

  3. docker k8s安装

    docker安装 删除依赖包 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docke ...

  4. k8s 安装步骤

    1 安装Docker 1.1 增加中国区镜像 https://registry.docker-cn.com 2 下载安装k8s的镜像的脚本 https://github.com/AliyunConta ...

  5. docker概述与安装及运行容器

    传统虚拟化 传统虚拟化步骤 1.安装虚拟化软件以及虚拟化的管理软件 2.创建虚拟机 3.给虚拟机安装os 4.在虚拟机内部不是应用(http.db之类的应用) 传统虚拟化的特点 1.VM与VM之间是完 ...

  6. Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...

  7. 使用虚拟机在3台centos7系统安装docker和k8s集群

    一.安装docker 环境:准备3台centos7系统,都安装上docker环境,具体安装步骤和流程如下 参考: https://docs.docker.com/install/linux/docke ...

  8. docker学习(1) 安装

    docker是啥就不多讲了,简言之就是更轻量.更牛叉的新一代虚拟机技术.下面是安装步骤: 一.mac/windows平台的安装 docker是在linux内核基础上发展而来的,无法直接运行在mac/w ...

  9. 原创docker dcos 的安装

    原创哈,上个星期无意间发现了一个可以好东西 DC/OS https://dcos.io 这个是官网哈 然后就痛苦的折磨了一个多星期; 基本是参照到https://dcos.io/docs/1.7/ad ...

随机推荐

  1. redis的单线程模型

    redis的单线程模型 redis使用文本事件处理器file event handler ,整个文件事件处理器是单线程的, 所以才叫做单线程模型,他采用IO多路复用机制同时监听多个socket,根据s ...

  2. 通过SublimeCodeIntel设置JavaScript自动补全

    1.首先安装SublimeCodeIntel包. 进入sublime,通过Ctrl+Shift+P进入包管理,输入pci(首字母),选择Package Contrl:Intall Package,如图 ...

  3. Gym - 100989 L / M 【dfs / dp】

    题目链接:http://codeforces.com/gym/100989/problem/L / http://codeforces.com/gym/100989/problem/M 题目大意:给定 ...

  4. 分布式系统/NoSQL

    分布式系统概念与架构:https://www.cnblogs.com/JonaLin/category/1555338.html 分布式缓存 redis系列:https://blog.csdn.net ...

  5. 链表操作Java实现

    单链表 存储结构 public class ListNode { int i; ListNode next; ListNode(int i) { this.i = i; } public String ...

  6. 在 jupyterlab 和 jupyter notebook 中集成conda虚拟环境

    在jupyterlab中切换虚拟环境使用jupyter-conda包,参考链接:https://pypi.org/project/jupyter-conda/ Install Requirements ...

  7. 可取消可报告进度的Task

    using System; using System.Threading; using System.Threading.Tasks; using System.Windows; namespace ...

  8. Java 反射理解(二)-- 动态加载类

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...

  9. JSON函数表1

    jsoncpp 主要包含三个class:Value.Reader.Writer.注意Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序是用 Unicode 编码的,最好加一个 ...

  10. css 字体库和动画

    @font-face { font-family:'WebSymbols'; src: url('../font/WebSymbols-Regular.otf'); } .icon{ font-fam ...