Kubernetes如何控制复制?

时间:2019-05-25 20:20:35

标签: kubernetes configuration replication pod kubernetes-pod

我对Kubernetes如何控制复制感到好奇。我的配置yaml文件指定了我想要三个Pod,每个Pod都带有一个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如何知道何时关闭Pod,何时启动更多?例如,对于高流量负载,我想启动另一个Pod,但是我不确定如何在YAML文件中进行配置,因此我想知道Kubernetes是否具有某些幕后功能来实现此目的你。

2 个答案:

答案 0 :(得分:1)

Kubernetes在这里没有任何魔力-从您的配置来看,它根本不知道也不改变副本的数量。 您正在寻找的概念称为自动缩放器。它使用群集中的指标(也需要启用/安装),然后可以决定是否必须按比例放大或缩小Pod,并且实际上会更改部署或复制控制器中的副本数。 (请使用部署而不是复制控制器,后者不支持应用程序的滚动更新。) 您可以在此处阅读有关自动定标器的更多信息:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

答案 1 :(得分:0)

您可以将Horizo​​ntalPodAutoscaler与以下部署一起使用。这将根据目标CPU使用率声明式地自动缩放pod。

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