Как Kubernetes контролирует репликацию? - PullRequest
0 голосов
/ 25 мая 2019

Мне было любопытно, как Kubernetes контролирует репликацию.В моем файле конфигурации yaml указано, что я хочу три модуля, каждый с сервером Nginx, например (отсюда - https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#how-a-replicationcontroller-works)

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

Как Kubernetes узнает, когда выключать модули и когда раскручиватьНапример, для больших нагрузок трафика я хотел бы раскрутить еще один модуль, но я не уверен, как настроить это в файле YAML, поэтому мне было интересно, есть ли у Kubernetes какая-то закулисная магия, которая делаетэто для тебя.

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Kubernetes здесь не использует магию - из вашей конфигурации он просто не знает и не меняет количество реплик.Концепция, которую вы ищете, называется Autoscaler.Он использует метрики из вашего кластера (его также необходимо включить / установить) и затем может решить, нужно ли масштабировать модули в сторону увеличения или уменьшения, и в действительности изменит количество реплик в контроллере развертывания или репликации.(Пожалуйста, используйте развертывание, а не контроллер репликации, позднее оно не поддерживает непрерывное обновление ваших приложений.) Подробнее об автоскальере можно прочитать здесь: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

0 голосов
/ 26 мая 2019

Вы можете использовать HorizontalPodAutoscaler вместе с развертыванием, как показано ниже.Это автоматически масштабирует ваш модуль на основе целевого использования ЦП.

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: $DEPLOY_NAME
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: $DEPLOY_NAME
    spec:
      containers:
      - name: $DEPLOY_NAME
        image: $DEPLOY_IMAGE
        imagePullPolicy: Always
        resources:
          requests:
            cpu: "0.2"
            memory: 256Mi            
          limits:
            cpu: "1"
            memory: 1024Mi
---
apiVersion: v1
kind: Service
metadata:
  name: $DEPLOY_NAME
spec:
  selector:
    app: $DEPLOY_NAME
  ports:
      - port: 8080
  type: ClusterIP
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: $DEPLOY_NAME
  namespace: $K8S_NAMESPACE
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: $DEPLOY_NAME
  minReplicas: 2
  maxReplicas: 6
  targetCPUUtilizationPercentage: 60
...