Правильный способ использования exsctl ClusterConfig с надстройкой vpc-cni и передачи maxPodsPerNode для запуска шаблона?

#amazon-web-services #kubernetes #amazon-eks #amazon-vpc #eksctl

#amazon-веб-сервисы #кубернетес #amazon-eks #amazon-vpc #ексктл

Вопрос:

Я пытался создать кластер EKS с дополнением vpc-cni из-за ограничений pod для больших виртуальных машин m5.xl (57). После создания я вижу, что он передается объекту launchtemplate, но при описании узла он все равно может выделить предыдущий (неправильно?) номер

ClusterConfig:

 apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig  metadata:  name: exchange-develop  region: us-east-1  version: '1.21'  managedNodeGroups:  - name: default  labels:   worker: default  instanceType: m5.xlarge  desiredCapacity: 2  minSize: 2  maxSize: 4  tags:  'k8s.io/cluster-autoscaler/enabled': 'true'  'k8s.io/cluster-autoscaler/exchange-develop': 'owned'  iam:   attachPolicyARNs:  - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy  - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy  - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly  - arn:aws:iam::658464581062:policy/eks-csi-driver-policy  - arn:aws:iam::aws:policy/ElasticLoadBalancingFullAccess  - arn:aws:iam::658464581062:policy/ALBIngressControllerIAMPolicy  - arn:aws:iam::658464581062:policy/ExternalDNSPlicy  - arn:aws:iam::658464581062:policy/eks-cluster-autoscaler  maxPodsPerNode: 110  availabilityZones: ['us-east-1c', 'us-east-1d']  iam:  withOIDC: true  vpc:  cidr: 10.10.0.0/16  #autoAllocateIPv6: true  # disable public access to endpoint and only allow private access  clusterEndpoints:  publicAccess: true  privateAccess: true  addons: - name: vpc-cni  version: '1.10.1'  

Запуск шаблона с отредактированными данными:

 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=***  -- Content-Type: text/x-shellscript Content-Type: charset="us-ascii"  #!/bin/sh set -ex sed -i -E "s/^USE_MAX_PODS="\${USE_MAX_PODS:-true}"/USE_MAX_PODS=false/" /etc/eks/bootstrap.sh KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json echo "$(jq ".maxPods=110" $KUBELET_CONFIG)" gt; $KUBELET_CONFIG Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash set -ex B64_CLUSTER_CA=lt;gt; API_SERVER_URL=lt;gt; K8S_CLUSTER_DNS_IP=lt;gt; /etc/eks/bootstrap.sh exchange-develop --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=exchange-develop,alpha.eksctl.io/nodegroup-name=default,eks.amazonaws.com/nodegroup-image=ami-00836a7940260f6dd,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=default,worker=default,eks.amazonaws.com/sourceLaunchTemplateId=lt-0037c1eab7037898d --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false   

Описание узла:

 Name: ip-10-10-19-34.ec2.internal Roles: lt;nonegt; Labels: alpha.eksctl.io/cluster-name=exchange-develop  alpha.eksctl.io/nodegroup-name=default  beta.kubernetes.io/arch=amd64  beta.kubernetes.io/instance-type=m5.xlarge  beta.kubernetes.io/os=linux  eks.amazonaws.com/capacityType=ON_DEMAND  eks.amazonaws.com/nodegroup=default  eks.amazonaws.com/nodegroup-image=ami-00836a7940260f6dd  eks.amazonaws.com/sourceLaunchTemplateId=lt-0037c1eab7037898d  eks.amazonaws.com/sourceLaunchTemplateVersion=1  failure-domain.beta.kubernetes.io/region=us-east-1  failure-domain.beta.kubernetes.io/zone=us-east-1c  kubernetes.io/arch=amd64  kubernetes.io/hostname=lt;lt;  kubernetes.io/os=linux  node.kubernetes.io/instance-type=m5.xlarge  topology.kubernetes.io/region=us-east-1  topology.kubernetes.io/zone=us-east-1c  worker=default Annotations: node.alpha.kubernetes.io/ttl: 0  volumes.kubernetes.io/controller-managed-attach-detach: true CreationTimestamp: Thu, 02 Dec 2021 10:22:20 -0300 Taints: lt;nonegt; Unschedulable: false Conditions:  Type Status LastHeartbeatTime LastTransitionTime Reason Message  ---- ------ ----------------- ------------------ ------ -------  MemoryPressure False Thu, 02 Dec 2021 11:18:31 -0300 Thu, 02 Dec 2021 10:22:18 -0300 KubeletHasSufficientMemory kubelet has sufficient memory available  DiskPressure False Thu, 02 Dec 2021 11:18:31 -0300 Thu, 02 Dec 2021 10:22:18 -0300 KubeletHasNoDiskPressure kubelet has no disk pressure  PIDPressure False Thu, 02 Dec 2021 11:18:31 -0300 Thu, 02 Dec 2021 10:22:18 -0300 KubeletHasSufficientPID kubelet has sufficient PID available  Ready True Thu, 02 Dec 2021 11:18:31 -0300 Thu, 02 Dec 2021 10:22:40 -0300 KubeletReady kubelet is posting ready status Addresses:  InternalIP: 10.10.19.34  ExternalIP: lt;lt;  Hostname: lt;lt;  InternalDNS: lt;lt;  ExternalDNS: lt;lt; Capacity:  attachable-volumes-aws-ebs: 25  cpu: 4  ephemeral-storage: 83873772Ki  hugepages-1Gi: 0  hugepages-2Mi: 0  memory: 15921236Ki  pods: 58 Allocatable:  attachable-volumes-aws-ebs: 25  cpu: 3920m  ephemeral-storage: 76224326324  hugepages-1Gi: 0  hugepages-2Mi: 0  memory: 14904404Ki  pods: 58 System Info:  Machine ID: ec28ac2717ec395cdf5b4e37f7672569  System UUID: ec28ac27-17ec-395c-df5b-4e37f7672569  Boot ID: 50b3d3d9-5dfa-40b6-99c8-20873632c7ca  Kernel Version: 5.4.156-83.273.amzn2.x86_64  OS Image: Amazon Linux 2  Operating System: linux  Architecture: amd64  Container Runtime Version: docker://20.10.7  Kubelet Version: v1.21.5-eks-bc4871b  Kube-Proxy Version: v1.21.5-eks-bc4871b ProviderID: aws:///lt;lt;lt; Non-terminated Pods: (2 in total)  Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE  --------- ---- ------------ ---------- --------------- ------------- ---  kube-system aws-node-9z7pw 25m (0%) 0 (0%) 0 (0%) 0 (0%) 61m  kube-system kube-proxy-2slc8 100m (2%) 0 (0%) 0 (0%) 0 (0%) 61m Allocated resources:  (Total limits may be over 100 percent, i.e., overcommitted.)  Resource Requests Limits  -------- -------- ------  cpu 125m (3%) 0 (0%)  memory 0 (0%) 0 (0%)  ephemeral-storage 0 (0%) 0 (0%)  attachable-volumes-aws-ebs 0 0 Events: lt;nonegt;  

См.Разделяемые модули 58…

Итак, как правильно использовать eksctl для создания кластера с vpc-cni и передачи аргумента maxPodsPerNode в шаблон запуска ec2?

Редактировать:

Другие вещи, которые я пробовал:

  • Создайте кластер с нуля с помощью дополнения vpc-cni 2 managedNodeGroups с maxPodsPerNode и без, оба будут принимать значение 58, а не 110
  • Добавьте еще одну группу узлов с помощью eksctl создайте группу узлов, все еще 58
  • Добавьте еще одну группу узлов с пользовательским интерфейсом EKS AWS, все еще 58

Eksctl версия 0.75.0 Kubectl версия 1.21.2

Ответ №1:

Для managedNodeGroup вам необходимо указать идентификатор AMI:

aws ssm get-parameter --name /aws/service/eks/optimized-ami/1.21/amazon-linux-2/recommended/image_id --region us-east-1 --query "Parameter.Value" --output text

 managedNodeGroups:  - name: default  ...  maxPodsPerNode: 110  ami: ami-00836a7940260f6dd  overrideBootstrapCommand: |  #!/bin/bash  /etc/eks/bootstrap.sh exchange-develop --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=default,eks.amazonaws.com/nodegroup-image=ami-00836a7940260f6dd'  

Комментарии:

1. Это действительно сработало!! Спасибо, кстати, вы не можете указать maxPodsPerNode: 110 с помощью пользовательских ami, необходимо передать его через bootstrap.sh в качестве аргумента —max-стручки