我对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是否具有某些幕后功能来实现此目的你。
答案 0 :(得分:1)
Kubernetes在这里没有任何魔力-从您的配置来看,它根本不知道也不改变副本的数量。 您正在寻找的概念称为自动缩放器。它使用群集中的指标(也需要启用/安装),然后可以决定是否必须按比例放大或缩小Pod,并且实际上会更改部署或复制控制器中的副本数。 (请使用部署而不是复制控制器,后者不支持应用程序的滚动更新。) 您可以在此处阅读有关自动定标器的更多信息:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
答案 1 :(得分:0)
您可以将HorizontalPodAutoscaler与以下部署一起使用。这将根据目标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