Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kubernetes中部署应用程序时,如何定义资源限制和计算消耗?_Kubernetes_Google Cloud Platform_Apache Zookeeper - Fatal编程技术网

在Kubernetes中部署应用程序时,如何定义资源限制和计算消耗?

在Kubernetes中部署应用程序时,如何定义资源限制和计算消耗?,kubernetes,google-cloud-platform,apache-zookeeper,Kubernetes,Google Cloud Platform,Apache Zookeeper,我正试图根据来自的教程部署一个简单的zookeeper集合。教程说明我需要 至少有四个节点的集群,每个节点至少需要两个节点 CPU和4 GiB内存 我忽略了这一事实,创建了一个包含3个节点的集群,节点为n1-standard-11 vCPU,内存为3.73 GB 当我尝试应用.yaml文件时 apiVersion: v1 kind: Service metadata: name: zk-hs labels: app: zk spec: ports: - port: 2

我正试图根据来自的教程部署一个简单的zookeeper集合。教程说明我需要

至少有四个节点的集群,每个节点至少需要两个节点 CPU和4 GiB内存

我忽略了这一事实,创建了一个包含3个节点的集群,节点为n1-standard-11 vCPU,内存为3.73 GB 当我尝试应用.yaml文件时

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
当然,我的错误是不可计划的

在这个文件中,我找不到任何说明我需要一个包含4个节点、2个CPU和4G Ram的集群的内容。 因此:

什么定义了我的部署需要多少资源? 如何事先了解/计算应用程序及其各自部署所需的资源? Zookeeper根据需要在2GB RAM上运行,但这只是建议的配置。 部署yaml中的resources部分定义pod中容器的资源需求

resources:
  requests:
    memory: "1Gi"
    cpu: "0.5"
请求意味着一个节点需要有超过1GB的内存和0.5 CPU,才能在该节点上调度其中一个副本pod

还有另一个限制的概念,它定义了pod在从节点移出之前允许消耗的最大资源

resources:
  requests:
    memory: "1Gi"
    cpu: "0.5"
  limits:
    memory: "2Gi"
    cpu: "2"
虽然有3个节点,但默认情况下主节点不是计划的

通过kubectl描述节点名并检查容量和可分配部分,可以了解节点的资源可用性


关于计算pod的资源需求、需求和限制,没有银弹。它取决于应用程序,应该通过分析它来确定和调整。但在部署pod时,建议最好定义请求和限制。

默认情况下,kubernetes节点不会为空。相反,它甚至在运行应用程序工作负载之前就已经运行了进程:

kubelet正在每个节点中运行 kube代理在每个节点中作为守护程序运行 容器运行时Docker正在每个节点中运行 在EKS的情况下,其他守护程序可以像aws节点DS一样运行。。。 我们在这里讨论的是工作节点,而不是主节点

因此,想象一下所有这些,您最终将为每个节点选择一个相互尊重的资源

并非所有节点都必须具有相同的大小。但是,您可以根据应用程序的类型决定所需的大小:

如果您的应用程序比Java应用程序等CPU占用内存更多,则需要选择[2CPU,8GB]的节点比[4CPU,8GB]的节点更好

如果你的应用程序消耗的CPU多于ML工作负载等内存,你需要选择相反的方式;计算优化实例

黄金法则
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