我正试图按照Kubernetes官方网站的教程部署一个简单的动物园管理员集合。这个教程说我需要
具有至少四个节点和每个节点的集群至少需要2个CPU和4个GiB内存。
当我试图应用vCPU文件时,我忽略了这个事实,创建了一个具有n1标准1 (1 .yaml,3.73 GB内存)节点的集群。
apiVersion: v1
kind: Service
metadata:
name: zk-hs
labels:
app: zk
spec:
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
clusterIP: None
selector:
app: zk
---
apiVersion: v1
kind: Service
metadata:
name: zk-cs
labels:
app: zk
spec:
ports:
- port: 2181
name: client
selector:
app: zk
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
selector:
matchLabels:
app: zk
maxUnavailable: 1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: zk
spec:
selector:
matchLabels:
app: zk
serviceName: zk-hs
replicas: 3
updateStrategy:
type: RollingUpdate
podManagementPolicy: OrderedReady
template:
metadata:
labels:
app: zk
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- zk
topologyKey: "kubernetes.io/hostname"
containers:
- name: kubernetes-zookeeper
imagePullPolicy: Always
image: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10"
resources:
requests:
memory: "1Gi"
cpu: "0.5"
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: server
- containerPort: 3888
name: leader-election
command:
- sh
- -c
- "start-zookeeper \
--servers=3 \
--data_dir=/var/lib/zookeeper/data \
--data_log_dir=/var/lib/zookeeper/data/log \
--conf_dir=/opt/zookeeper/conf \
--client_port=2181 \
--election_port=3888 \
--server_port=2888 \
--tick_time=2000 \
--init_limit=10 \
--sync_limit=5 \
--heap=512M \
--max_client_cnxns=60 \
--snap_retain_count=3 \
--purge_interval=12 \
--max_session_timeout=40000 \
--min_session_timeout=4000 \
--log_level=INFO"
readinessProbe:
exec:
command:
- sh
- -c
- "zookeeper-ready 2181"
initialDelaySeconds: 10
timeoutSeconds: 5
livenessProbe:
exec:
command:
- sh
- -c
- "zookeeper-ready 2181"
initialDelaySeconds: 10
timeoutSeconds: 5
volumeMounts:
- name: datadir
mountPath: /var/lib/zookeeper
securityContext:
runAsUser: 1000
fsGroup: 1000
volumeClaimTemplates:
- metadata:
name: datadir
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi当然,我得到了错误PodUnschedulable
在这个文件中,我没有发现任何表明我需要一个由4个节点和2个CPU和4G Ram组成的集群的东西。所以:
发布于 2020-07-11 16:46:32
默认情况下,一个kubernetes节点不会出现空。相反,在运行应用程序工作负载之前,它已经运行了进程:
我们在这里讨论的是工人节点,而不是大师。
所以想象一下,你最终会为每个节点选择一个值得尊敬的资源。
并非所有节点都必须具有相同的大小。不过,您可以根据应用程序的类型来决定您需要的大小:
这意味着3大型节点在成本上可能优于4中型节点,但在容量的最佳使用方面也优于4。

最后,节点资源必须是:
否则,您应该预料到容量问题。
现在,我们达到了答案的一半:确定集群的容量。
下半部分是关于回答如何为每个应用程序(pod)分配资源。
这是另一个问题:你的应用程序消耗了多少?
要回答这个问题,您需要使用Prometheus + Grafana等APM工具监视您的应用程序。
一旦你了解了消费的平均水平,现在是时候为你的应用程序设置资源限制了(它的荚)。
Limits可能会节流这个应用程序,这就是为什么,您需要与其他东西一起设置水平自动缩放:
作为这一部分的结论,我们可以说:
-度量:开始度量来识别resources.limits和resources.requests。
- :运行应用程序后的度量,以再次确定所需的资源。
-度量:保持度量
发布于 2020-07-11 15:53:36
部署yaml中的resources部分定义了荚中容器的资源需求。
resources:
requests:
memory: "1Gi"
cpu: "0.5"requests意味着一个节点需要有超过1GB的内存和0.5CPU才能在该节点上调度一个副本荚。
limits还有另一个概念,它定义了豆荚在从节点被逐出之前可以消耗的最大资源。
resources:
requests:
memory: "1Gi"
cpu: "0.5"
limits:
memory: "2Gi"
cpu: "2"虽然您有3个节点,但在默认情况下,主节点并不是计划的。
您可以通过kubectl describe nodename了解节点的资源可用性,并检查Capacity和Allocatable部分。
Capacity:
cpu: 4
ephemeral-storage: 8065444Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16424256Ki
pods: 110
Allocatable:
cpu: 4
ephemeral-storage: 7433113179
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16321856Ki
pods: 110关于计算豆荚的资源需求(requests和limits),没有银弹。它取决于应用程序,应该通过分析它来确定和调整。但是建议在部署pod时定义requests和limits的最佳实践。
https://stackoverflow.com/questions/62851159
复制相似问题