Как выполнить автоматическое масштабирование кластера CouchDB в Kubernetes

Я развертываю 1 кластер CouchDB на Kubernetes. Это сработало, и когда я получил ошибку, когда попытался масштабировать.

Я пытаюсь масштабировать свой Statefulset и получаю эту ошибку, когда описываю couchdb-3:

Доступно 0/3 узла: 3 модуля имеют несвязанные немедленные PersistentVolumeClaims.

И вот эта ошибка, когда я описываю гпа:

неверные метрики (1 недействительный из 1), первая ошибка: не удалось получить использование процессора: отсутствует запрос для процессора

не удалось получить загрузку процессора: отсутствует запрос на использование процессора

Я бегу " kubectl get pod -o wide"и получите такой результат:

      NAME                   READY   STATUS    RESTARTS       AGE    IP            NODE            NOMINATED NODE   READINESS GATES
couchdb-0              1/1     Running   0              101m   10.244.2.13   node2           <none>           <none>
couchdb-1              1/1     Running   0              101m   10.244.2.14   node2           <none>           <none>
couchdb-2              1/1     Running   0              100m   10.244.2.15   node2           <none>           <none>
couchdb-3              0/1     Pending   0              15m    <none>        <none>          <none>           <none>

Как я могу это исправить !?

  • Версия Kubernetes: 1.22.4
  • Докер версии 20.10.11, сборка dea9396
  • Ubuntu 20.04

Мой файл HPA:

      apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-couchdb
spec:
  maxReplicas: 16
  minReplicas: 6
  scaleTargetRef:
    apiVersion: apps/v1
    kind: StatefulSet
    name: couchdb
  targetCPUUtilizationPercentage: 50

pv.yaml:

      ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: couch-vol-0
      labels:
        volume: couch-volume
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.1.100
        path: "/var/couchnfs/couchdb-0"
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: couch-vol-1
      labels:
        volume: couch-volume
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.1.100
        path: "/var/couchnfs/couchdb-1"
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: couch-vol-2
      labels:
        volume: couch-volume
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.1.100
        path: "/var/couchnfs/couchdb-2"

Я установил nfs в / etc / exports: /var/couchnfs 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

statefulset.yaml

      ---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: couchdb
  labels:
    app: couch
spec:
  replicas: 3
  serviceName: "couch-service"
  selector:
    matchLabels:
      app: couch
  template:
    metadata:
      labels:
        app: couch # pod label
    spec:
      containers:
      - name: couchdb
        image: couchdb:2.3.1
        imagePullPolicy: "Always"
        env:
        - name: NODE_NETBIOS_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: NODENAME
          value: $(NODE_NETBIOS_NAME).couch-service # FQDN in vm.args
        - name: COUCHDB_USER
          value: admin
        - name: COUCHDB_PASSWORD
          value: admin
        - name: COUCHDB_SECRET
          value: b1709267
        - name: ERL_FLAGS
          value: "-name couchdb@$(NODENAME)"
        - name: ERL_FLAGS
          value: "-setcookie b1709267" #   the “password” used when nodes connect to each other.
        ports:
        - name: couchdb
          containerPort: 5984
        - name: epmd
          containerPort: 4369
        - containerPort: 9100
        volumeMounts:
          - name: couch-pvc
            mountPath: /opt/couchdb/data
  volumeClaimTemplates:
  - metadata:
      name: couch-pvc
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
      selector:
        matchLabels:
          volume: couch-volume

service.yaml

      ---
apiVersion: v1
kind: Service
metadata:
  name: couch-service
  namespace: default
  labels:
    app: couch
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - port: 5984
    protocol: TCP
    targetPort: 5984
  selector:
    app: couch         # label selector
---
kind: Service
apiVersion: v1
metadata:
  name: couch-nodep-svc 
  labels:
    app: couch
spec:
  type: NodePort            # NodePort service
  ports:
  - port: 5984
    nodePort: 30984         # external port
    protocol: TCP
  selector:
    app: couch       # label selector

1 ответ

У вас есть 3 постоянных тома и 3 модуля, требующих каждый. Один PV не может быть запрошен более чем одним модулем. Поскольку вы используете NFS в качестве серверной части, вы можете использовать динамическую подготовку постоянных томов.

https://github.com/openebs/dynamic-nfs-provisioner

Другие вопросы по тегам