Kubernetes 是如何控制复制的?
How does Kubernetes control replication?
我很好奇 Kubernetes 是如何控制复制的。我的配置 yaml 文件指定我想要三个 pods,每个都有一个 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 如何知道何时关闭 pods 以及何时启动更多?例如,对于高流量负载,我想启动另一个 pod,但我不确定如何在 YAML 文件中配置它,所以我想知道 Kubernetes 是否有一些幕后魔术可以做到这一点你.
Kubernetes 在这里没有魔法 - 从您的配置来看,它根本不知道也不会更改副本的数量。
您正在寻找的概念称为 Autoscaler。它使用集群中的指标(也需要 enabled/installed),然后可以决定 Pods 是否必须扩大或缩小,并且实际上会改变部署或复制控制器中的副本数量. (请使用部署,而不是复制控制器,后者不支持应用程序的滚动更新。)
您可以在此处阅读有关自动缩放器的更多信息:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
您可以将 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
我很好奇 Kubernetes 是如何控制复制的。我的配置 yaml 文件指定我想要三个 pods,每个都有一个 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 如何知道何时关闭 pods 以及何时启动更多?例如,对于高流量负载,我想启动另一个 pod,但我不确定如何在 YAML 文件中配置它,所以我想知道 Kubernetes 是否有一些幕后魔术可以做到这一点你.
Kubernetes 在这里没有魔法 - 从您的配置来看,它根本不知道也不会更改副本的数量。 您正在寻找的概念称为 Autoscaler。它使用集群中的指标(也需要 enabled/installed),然后可以决定 Pods 是否必须扩大或缩小,并且实际上会改变部署或复制控制器中的副本数量. (请使用部署,而不是复制控制器,后者不支持应用程序的滚动更新。) 您可以在此处阅读有关自动缩放器的更多信息:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
您可以将 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