Kubernetes以Statefulset方式部署Consul集群
应用namespace
apiVersion: v1 kind: Namespace metadata: name: public-service labels: name: public-service
|
应用statefulset
需要先部署nfs storage class
apiVersion: apps/v1 kind: StatefulSet metadata: name: consul namespace: public-service spec: replicas: 3 updateStrategy: type: RollingUpdate serviceName: consul selector: matchLabels: app: consul template: metadata: labels: app: consul spec: terminationGracePeriodSeconds: 10 securityContext: fsGroup: 1000 # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchExpressions: # - key: app # operator: In # values: # - consul # topologyKey: kubernetes.io/hostname containers: - name: consul image: consul:1.8 imagePullPolicy: IfNotPresent 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 env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace args: - "agent" - "-server" - "-advertise=$(POD_IP)" - "-bind=0.0.0.0" - "-bootstrap-expect=3" - "-data-dir=/consul/data" - "-disable-host-node-id" - "-domain=cluster.local" - "-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" - "-client=0.0.0.0" - "-ui" resources: limits: cpu: "200m" memory: "512Mi" requests: cpu: "100m" memory: "128Mi" lifecycle: preStop: exec: command: - /bin/sh - -c - consul leave volumeMounts: - name: consul-data mountPath: /consul/data volumeClaimTemplates: - metadata: name: consul-data annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi
|
应用service
apiVersion: v1 kind: Service metadata: name: consul namespace: public-service labels: name: consul spec: clusterIP: None ports: - name: defult port: 80 targetPort: 8500 - 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
|
应用ingress
需要先部署ingress-nginx
kind: Ingress apiVersion: extensions/v1beta1 metadata: name: consul namespace: public-service annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: consul.example.com http: paths: - path: / backend: serviceName: consul servicePort: 80
|