Как я могу выставить Statefulset с балансировщиком нагрузки? - PullRequest
3 голосов
/ 24 апреля 2019

В настоящее время я пытаюсь создать кластер из X модулей, каждый из которых имеет свой персональный постоянный том. Для этого я создал StateFulSet с X репликами и PersistentVolumeClaimTemplate. Эта часть работает.

Проблема в том, что кажется невозможным выставлять эти капсулы с LoadBalancer так же, как deployment (из-за уникальности пакетов в наборе состояний).

В данный момент я пытался представить его как простое развертывание, ведьма не работает, и единственный способ, который я нашел, - выставлять каждый модуль по одному (я не тестировал его, но видел его на это ) но это не так масштабируемо ...

Я не использую kubernetes на какой-либо платформе облачного провайдера, поэтому, пожалуйста, избегайте эксклюзивной командной строки.

1 Ответ

4 голосов
/ 24 апреля 2019

Проблема в том, что кажется невозможным выставлять эти модули с помощью LoadBalancer так же, как при развертывании (из-за уникальности модулей в наборе состояний).

Почему бы и нет?Вот мой StatefulSet со значением по умолчанию Nginx

$ k -n test get statefulset
NAME      DESIRED   CURRENT   AGE
web       2         2         5d
$ k -n test get pods
web-0                    1/1       Running   0          5d
web-1                    1/1       Running   0          5d

Вот мой тип сервиса LoadBalancer, который на самом деле является NodePort в случае Minikube

$ k -n test get svc
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
nginx     LoadBalancer   10.110.22.74   <pending>     80:32710/TCP   5d

Давайте запустим модуль с curl и сделаемнекоторые запросы к ClusterIP:

$ kubectl -n test run -i --tty tools --image=ellerbrock/alpine-bash-curl-ssl -- bash
bash-4.4$ curl 10.110.22.74 &> /dev/null
bash-4.4$ curl 10.110.22.74 &> /dev/null
bash-4.4$ curl 10.110.22.74 &> /dev/null
bash-4.4$ curl 10.110.22.74 &> /dev/null

Давайте проверим журналы Nginx:

$ k -n test logs web-0
172.17.0.7 - - [18/Apr/2019:23:35:04 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"
172.17.0.7 - - [18/Apr/2019:23:35:05 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"
172.17.0.7 - - [18/Apr/2019:23:35:17 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"
$ k -n test logs web-1
172.17.0.7 - - [18/Apr/2019:23:35:15 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"

172.17.0.7 - это мой модуль с curl:

NAME                     READY     STATUS    RESTARTS   AGE       IP           NODE
tools-654cfc5cdc-8zttt   1/1       Running   1          5d        172.17.0.7   minikube

Собственно ClusterIPвполне достаточно в случае балансировки нагрузки между модулями StatefulSet, потому что у вас есть список конечных точек

$ k -n test get endpoints
NAME      ENDPOINTS                     AGE
nginx     172.17.0.5:80,172.17.0.6:80   5d

YAML:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
    name: web
  selector:
    app: nginx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...