• 微服务学习实战笔记 4.4-系统部署篇-k8s部署Consul集群


    前面我们演练了在宿主机和docker中部署Consul,今天尝试在K8s中部署Consul集群。

    一、部署Consul集群

    在master节点执行如下命令:

    1、创建Service

    vi consul-service.yaml
    

      内容如下:

    apiVersion: v1
    kind: Service
    metadata:  
       name: consul  
       labels:    
         name: consul
    spec:  
       type: ClusterIP  
    #   clusterIP: None
       ports:    
        - name: http      
          port: 8500      
          targetPort: 8500    
        - name: https      
          port: 8443
          targetPort: 8443
        - name: rpc
          port: 8400
          targetPort: 8400    
        - name: serflan-tcp      
          protocol: "TCP"      
          port: 8301      
          targetPort: 8301    
        - name: serflan-udp      
          protocol: "UDP"      
          port: 8301      
          targetPort: 8301    
        - name: serfwan-tcp      
          protocol: "TCP"      
          port: 8302      
          targetPort: 8302    
        - name: serfwan-udp      
          protocol: "UDP"      
          port: 8302      
          targetPort: 8302
        - name: server      
          port: 8300      
          targetPort: 8300    
        - name: consuldns      
          port: 8600      
          targetPort: 8600  
       selector:    
        app: consul

             保存后执行创建

    kubectl create -f consul-service.yaml
    

      

    2、在所有Node节点创建目录,用于存储Consul数据

    mkdir -p /home/data

    3、创建StatefulSetl类型Consul pod控制器

    vi consul-statefulset.yaml
    

      内容如下:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: consul
    spec:
      selector:
        matchLabels:
          app: consul
          component: server
      serviceName: consul
      podManagementPolicy: "Parallel"
      replicas: 3
      template: 
        metadata:
          labels:
            app: consul
            component: server
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: app
                        operator: In
                        values:
                          - consul
                  topologyKey: kubernetes.io/hostname
    #      serviceAccountName: consul
          terminationGracePeriodSeconds: 10
          containers:
          - name: consul
            image: consul:latest
            args:
                 - "agent"
                 - "-server"
                 - "-bootstrap-expect=3"
                 - "-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"
            volumeMounts:
                - name: data
                  mountPath: /consul/data
            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
          volumes:
            - name: data
              hostPath:
                path: /home/data

          保存后执行创建

    kubectl create -f consul-statefulset.yaml

    二、通过Nginx Ingress暴露管理Web

    前面我们部署了Nginx Ingress,今天我们就通过它暴露Consul的管理界面。

    vi ingress-consul.yaml
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-consul
      namespace: default
      annotations: 
        kubernets.io/ingress.class: "nginx"
    spec:
      rules:
      - host: consul.test.com
        http:
          paths:
          - path: 
            backend:
              serviceName: consul    #consul Service 名称
              servicePort: 8500      #web 界面暴露的端口
    kubectl apply -f ingress-consul.yaml
    

      由于Nginx Ingress需要通过域名映射,二配置的域名consul.test.com不存在,部署完成后现在访问主机 hosts 文件中添加主机映射,我Nginx Ingress是部署在k8s-node01节点。

           故添加192.168.2.172  consul.test.com 。

  • 相关阅读:
    vue自定义select组件
    基于better-scroll封装一个上拉加载下拉刷新组件
    vue自定义tap指令
    vue实现分页器(仿element)
    js异步队列之理解
    Element源码阅读(2)
    Element源码阅读(1)
    unity3d模仿魔兽世界鼠标对游戏操作
    unity3d制作小地图(MiniMap)的简单Demo
    利用unity3d自带的CharacterController包制作第一人称控制模型的简单Demo
  • 原文地址:https://www.cnblogs.com/liuxtj/p/13571850.html
Copyright © 2020-2023  润新知