docker及k8s安裝consul


一、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"
            - "53"
        command: -server -ui-dir /ui -data-dir /tmp/consul --bootstrap-expect=3
    consulserver1:
        image: progrium/consul:latest
        hostname: consulserver1
        depends_on:
            - "consulserver"
        ports:
            - "8301:8300"
            - "8401:8400"
            - "8501:8500"
            - "53"
        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"
            - "53"
        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": 8000,
    "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: 8500
    targetPort: 8500
#  - name: https
#    port: 8443
#    targetPort: 8443
#  - name: rpc
#    port: 8400
#    targetPort: 8400
#  - name: serflan-tcp
#    port: 8301
#    targetPort: 8301
#  - name: serflan-udp
#    port: 8301
#    targetPort: 8301
#    protocol: "UDP"
#  - name: serfwan-tcp
#    port: 8302
#    targetPort: 8302
#  - name: serfwan-udp
#    port: 8302
#    targetPort: 8302
#    protocol: "UDP"
#  - name: server
#    port: 8300
#    targetPort: 8300
#  - name: consuldns
#    port: 8600
#    targetPort: 8600
  selector:
    app: consul
View Code

由於只暴露8500的ui端口,所以將其他端口都沒有創建service,service為clusterIP

2、創建statefulset資源

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: consul
spec:
  serviceName: consul
  replicas: 2
  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: 10
      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: 8500
              name: ui-port
            - containerPort: 8400
              name: alt-port
            - containerPort: 53
              name: udp-port
            - containerPort: 8443
              name: https-port
            - containerPort: 8080
              name: http-port
            - containerPort: 8301
              name: serflan
            - containerPort: 8302
              name: serfwan
            - containerPort: 8600
              name: consuldns
            - containerPort: 8300
              name: server
View Code

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: 8500
View Code

以上資源創建完成后就可以訪問了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM