Thank you for reading this post, don't forget to subscribe!
Consul — это децентрализованный отказоустойчивый discovery-сервис от компании HashiCorp (которая разрабатывает такие продукты как Vagrant, TerraForm, Otto, Atlas и другие).
Consul является децентрализованным сервисом, то есть Consul agent устанавливается на каждый хост и является полноправным участником кластера. Таким образом, сервисам не нужно знать адрес discovery в нашей сети, все запросы к discovery выполняются на локальный адрес 127.0.0.1.
В этом руководстве вы развернете центр обработки данных Consul с официальным чартом Helm.
Вам не нужно обновлять какие-либо значения в чарте Хелма для базовой установки.
Однако вы можете создать файл значений с параметрами, чтобы разрешить доступ к пользовательскому интерфейсу Consul.
Предупреждение о безопасности. Это руководство не для производственного использования. По умолчанию на диаграмме будет установлена небезопасная конфигурация Consul. Пожалуйста, обратитесь к документации Kubernetes, чтобы определить, как вы можете обеспечить безопасность Consul на Kubernetes в производстве. Кроме того, настоятельно рекомендуется использовать правильно защищенный кластер Kubernetes или убедиться, что вы понимаете и включаете рекомендуемые функции безопасности.
Для успешного выполнения этого руководства у вас должен быть существующий кластер Kubernetes и локально настроенные Helm и kubectl.
Разворачиваем Consul
Вы можете развернуть полный центр обработки данных Consul, используя официальный чарт Helm.
По умолчанию в чарте будут установлены три сервера Consul и клиент на всех узлах Kubernetes.
Вы можете просмотреть значения чарта, чтобы узнать больше о настройках по умолчанию.
Скачать Helm чарт
$ git clone https://github.com/hashicorp/consul-helm.git
Установка Consul через Helm
Чтобы развернуть Consul, вы должны быть в том же каталоге, что и чарт.
$ cd consul-helm
1 2 3 4 5 6 7 8 9 10 |
$ helm install . NAME: mollified-robin LAST DEPLOYED: Mon Feb 25 15:57:18 2019 NAMESPACE: default STATUS: DEPLOYED NAME READY STATUS RESTARTS AGE mollified-robin-consul-25r6z 0/1 ContainerCreating 0 0s mollified-robin-consul-4p6hr 0/1 ContainerCreating 0 0s mollified-robin-consul-n82j6 0/1 ContainerCreating 0 0s mollified-robin-consul-server-0 0/1 Pending 0 0s mollified-robin-consul-server-1 0/1 Pending 0 0s mollified-robin-consul-server-2 0/1 Pending 0 0s |
Доступ к Consul UI
Чтобы получить доступ к пользовательскому интерфейсу, вам необходимо обновить значения пользовательского интерфейса в чарте .
В качестве альтернативы, если вы не хотите обновлять свой кластер, вы можете настроить переадресацию портов с помощью kubectl.
Создайте файл значений
Сначала создайте файл значений, который можно передать в командной строке при обновлении.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# values.yaml global: datacenter: hashidc1 syncCatalog: enabled: true ui: service: type: 'LoadBalancer' server: affinity: | podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: {{ template "consul.name" . }} release: "{{ .Release.Name }}" component: server topologyKey: kubernetes.io/hostname |
Инициируйте обновление
Наконец, инициируйте обновление с помощью helm upgrade и флага -f, который передается в ваш новый файл значений.
Этот процесс также должен быть быстрым, менее минуты.
1 |
$ helm upgrade consul -f values.yaml |
1 2 3 4 5 6 7 |
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE consul ExternalName <none> consul.service.consul <none> 11d kubernetes ClusterIP 122.16.14.1 <none> 443/TCP 137d mollified-robin-consul-dns ClusterIP 122.16.14.25 <none> 53/TCP,53/UDP 13d mollified-robin-consul-server ClusterIP None <none> 8500/TCP 13d mollified-robin-consul-ui LoadBalancer 122.16.31.395 36.276.67.195 8 |
1 2 3 4 5 6 7 8 9 |
$ kubectl get pods NAME READY STATUS RESTARTS AGE mollified-robin-consul-d8mnp 1/1 Running 0 15d mollified-robin-consul-p4m89 1/1 Running 0 15d mollified-robin-consul-qclqc 1/1 Running 0 15d mollified-robin-consul-server-0 1/1 Running 0 15d mollified-robin-consul-server-1 1/1 Running 0 15d mollified-robin-consul-server-2 1/1 Running 0 15d mollified-robin-consul-sync-catalog-f75cd5846-wjfdk 1/1 Running 0 |
Доступ к Consul
Помимо доступа к Consul с помощью пользовательского интерфейса, вы можете управлять Consul с помощью HTTP API или напрямую подключаясь к поду с помощью kubectl.
Kubectl
$ kubectl exec -it mollified-robin-consul-server-0 /bin/sh
1 2 3 4 5 6 7 8 |
$ consul members Node Address Status Type Build Protocol DC Segment mollified-robin-consul-server-0 172.20.2.18:8301 alive server 1.4.2 2 hashidc1 <all> mollified-robin-consul-server-1 172.20.0.21:8301 alive server 1.4.2 2 hashidc1 <all> mollified-robin-consul-server-2 172.20.1.18:8301 alive server 1.4.2 2 hashidc1 <all> gke-tier-2-cluster-default-pool-leri5 172.20.1.17:8301 alive client 1.4.2 2 hashidc1 <default> gke-tier-2-cluster-default-pool-gnv4 172.20.2.17:8301 alive client 1.4.2 2 hashidc1 <default> gke-tier-2-cluster-default-pool-zrr0 172.20.0.20:8301 alive client 1.4.2 |