Рубрики
Uncategorized

Крупный кластер Kubernetes на AWS EKS

AWS обеспечивает всеобъемлющее руководство по запуску с EKS, эта статья обычно реализуется руководством по территорию для получения необъясничной установки кластера Kubernetes.

Автор оригинала: Vyacheslav.

AWS предоставляет комплексное руководство для начала с EKS по ссылке https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

Следующие шаги обычно следуют за этим руководством, разница в том, что Provisioning Play (может быть) реализована исключительно с облачными шаблонами Terraform W/O.

У него есть преимущество таким образом, как мы делаем развертывание, но в ваших сценариях облачных шаблонов может иметь преимущество. Терраформ проекта можно найти в HTTPS://github.com/voronenko/devops-tf-eks

Первый шаг создает VPC с публичными и частными подсетью для вашего кластера Amazon EKS

Самые простые VPC будут все подсети публичными, как видно на облачных шаблонах (https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/amazon-eks-vpc -sample.yaml)

Но если ваша цель — повторно использовать это в производстве, разумный будет VPC с частными и общественными частями, такими как https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc. HTML

На данный момент есть ограничения: https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html

Давайте приступим к рекомендуемой сетевой архитектуре, которая использует частные подсети для ваших рабочих узлов и общественных подсетей для Kubernetes для создания балансировщиков нагрузки на Интернет внутри

Шаг 1.1: Создайте упругий IP-адрес для вашего NAT Gateway (ы)

Узлы рабочих в частных подсетях требуют шлюза Nat для исходящего доступа в Интернет. Шлюз NAT требует упругого IP-адреса в вашей публичной подсети, но мастер VPC не создает для вас. Создайте упругий IP-адрес перед запуском мастера VPC.

Создать упругий IP-адрес

Откройте консоль Amazon VPC в https://console.aws.amazon.com/vpc/.

На левой панели навигации выберите упругих IPS. Выберите выделить новый адрес, выделить, закрыть. Обратите внимание на идентификатор распределения для вашего вновь созданного упругого IP-адреса; Вы вводите это позже в мастере VPC.

// reserve elastic ip for nat gateway

resource "aws_eip" "nat_eip" {
  vpc = true
  tags {
    Environment = "${local.env}"
  }
}

resource "aws_eip" "nat_eip_2" {
  vpc = true
  tags {
    Environment = "${local.env}"
  }
}

Шаг 1.2: Запустите волшебник VPC

Мастер VPC автоматически создает и настраивает большинство ваших ресурсов VPC для вас.

Для запуска мастера VPC

В левой панели навигации выберите панель VPC. Выберите Пуск WPC Wizard, VPC с публичными и частными подсетью, выберите. Для имени VPC предоставьте свое VPC уникальное имя. Для идентификатора упругого IP-адреса выберите идентификатор эластичного IP-адреса, который вы создали ранее. Выберите Создать VPC. Когда волшебник закончен, выберите ОК. Обратите внимание на зона доступности, в которой были созданы ваши подсети VPC. Ваши дополнительные подсети должны быть созданы в другой зоне доступности. Соответствующая часть террафора будет


// create vpc

//Base VPC Networking
//EKS requires the usage of Virtual Private Cloud to provide the base for its networking configuration.


resource "aws_vpc" "cluster" {
  cidr_block = "${var.vpc_cidr}"
  enable_dns_hostnames = true

  tags = "${merge(
    local.common_tags,
    map(
      "Name", "${local.env}-eks-vpc"
    )
  )}"

}

//The below will create a ${var.public_subnet_cidr} VPC,
//two ${var.public_subnet_cidr} public subnets,
//two ${var.private_subnet_cidr} private subnets with nat instances,
//an internet gateway,
//and setup the subnet routing to route external traffic through the internet gateway:

// public subnets
resource "aws_subnet" "eks-public" {
  vpc_id = "${aws_vpc.cluster.id}"

  cidr_block = "${var.public_subnet_cidr}"
  availability_zone = "${local.availabilityzone}"

  tags = "${merge(
    local.common_tags,
    map(
      "Name", "${local.env}-eks-public"
    )
  )}"

}


resource "aws_subnet" "eks-public-2" {
  vpc_id = "${aws_vpc.cluster.id}"

  cidr_block = "${var.public_subnet_cidr2}"
  availability_zone = "${local.availabilityzone2}"

  tags = "${merge(
    local.common_tags,
    map(
      "Name", "${local.env}-eks-public-2"
    )
  )}"

}


// private subnet
resource "aws_subnet" "eks-private" {
  vpc_id = "${aws_vpc.cluster.id}"

  cidr_block = "${var.private_subnet_cidr}"
  availability_zone = "${local.availabilityzone}"

  tags = "${merge(
    local.common_tags,
    map(
      "Name", "${local.env}-eks-private"
    )
  )}"

}

resource "aws_subnet" "eks-private-2" {
  vpc_id = "${aws_vpc.cluster.id}"

  cidr_block = "${var.private_subnet_cidr2}"
  availability_zone = "${local.availabilityzone2}"

  tags = "${merge(
    local.common_tags,
    map(
      "Name", "${local.env}-eks-private-2"
    )
  )}"

}


// internet gateway, note: creation takes a while

resource "aws_internet_gateway" "igw" {
  vpc_id = "${aws_vpc.cluster.id}"
  tags {
    Environment = "${local.env}"
  }
}



// reserve elastic ip for nat gateway

resource "aws_eip" "nat_eip" {
  vpc = true
  tags {
    Environment = "${local.env}"
  }
}

resource "aws_eip" "nat_eip_2" {
  vpc = true
  tags {
    Environment = "${local.env}"
  }
}


// create nat once internet gateway created
resource "aws_nat_gateway" "nat_gateway" {
  allocation_id = "${aws_eip.nat_eip.id}"
  subnet_id = "${aws_subnet.eks-public.id}"
  depends_on = ["aws_internet_gateway.igw"]
  tags {
    Environment = "${local.env}"
  }
}

resource "aws_nat_gateway" "nat_gateway_2" {
  allocation_id = "${aws_eip.nat_eip_2.id}"
  subnet_id = "${aws_subnet.eks-public-2.id}"
  depends_on = ["aws_internet_gateway.igw"]
  tags {
    Environment = "${local.env}"
  }

}


//Create private route table and the route to the internet
//This will allow all traffics from the private subnets to the internet through the NAT Gateway (Network Address Translation)

resource "aws_route_table" "private_route_table" {
  vpc_id = "${aws_vpc.cluster.id}"
  tags {
    Environment = "${local.env}"
    Name = "${local.env}-private-route-table"
  }

}

resource "aws_route_table" "private_route_table_2" {
  vpc_id = "${aws_vpc.cluster.id}"
  tags {
    Environment = "${local.env}"
    Name = "${local.env}-private-route-table-2"
  }

}

resource "aws_route" "private_route" {
  route_table_id  = "${aws_route_table.private_route_table.id}"
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id = "${aws_nat_gateway.nat_gateway.id}"
}

resource "aws_route" "private_route_2" {
  route_table_id  = "${aws_route_table.private_route_table_2.id}"
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id = "${aws_nat_gateway.nat_gateway_2.id}"
}


resource "aws_route_table" "eks-public" {
  vpc_id = "${aws_vpc.cluster.id}"

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.igw.id}"
  }

  tags {
    Environment = "${local.env}"
    Name = "${local.env}-eks-public"
  }

}


resource "aws_route_table" "eks-public-2" {
  vpc_id = "${aws_vpc.cluster.id}"

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.igw.id}"
  }

  tags {
    Environment = "${local.env}"
    Name = "${local.env}-eks-public-2"
  }
}


// associate route tables

resource "aws_route_table_association" "eks-public" {
  subnet_id = "${aws_subnet.eks-public.id}"
  route_table_id = "${aws_route_table.eks-public.id}"
}

resource "aws_route_table_association" "eks-public-2" {
  subnet_id = "${aws_subnet.eks-public-2.id}"
  route_table_id = "${aws_route_table.eks-public-2.id}"
}


resource "aws_route_table_association" "eks-private" {
  subnet_id = "${aws_subnet.eks-private.id}"
  route_table_id = "${aws_route_table.private_route_table.id}"
}


resource "aws_route_table_association" "eks-private-2" {
  subnet_id = "${aws_subnet.eks-private-2.id}"
  route_table_id = "${aws_route_table.private_route_table_2.id}"
}

Шаг 2 Создайте свою сервисную роль Amazon EKS

Откройте консоль IAM в https://console.aws.amazon.com/iam/.

Выберите роли, затем создайте роль.

Выберите «Экс» из списка услуг, затем позволяет Amazon EKS управлять своими кластерами от вашего имени в случае использования вашего использования, а затем: разрешения.

Выберите Далее: Обзор.

Для имени роли введите уникальное имя для вашей роли, например, Эксервицерола, то выберите «Создать роль».

Определение террафора для роли идет ниже.

//Kubernetes Masters
//This is where the EKS service comes into play.
//It requires a few operator managed resources beforehand so that Kubernetes can properly manage
//other AWS services as well as allow inbound networking communication from your local workstation
//(if desired) and worker nodes.


//EKS Master Cluster IAM Role
//
//IAM role and policy to allow the EKS service to manage or retrieve data from other AWS services.
//For the latest required policy, see the EKS User Guide.


resource "aws_iam_role" "EKSClusterRole" {
  name = "EKSClusterRole-${local.env}",
  description = "Allows EKS to manage clusters on your behalf.",
  assume_role_policy = <

Шаг 3: Создайте группу безопасности управления плоскостью управления

Когда вы создаете кластер EKS Amazon, ваша кластерная плоскость управления создает эластичные сетевые интерфейсы в ваших подсети, чтобы включить связь с рабочими узлами. Вы должны создать группу безопасности, которая посвящена вашей плоскости управления кластером Amazon EKS, так что вы можете применить входящие и исходящие правила, регулирующие то, что трафик разрешено в этом соединении. Когда вы создаете кластер, вы указываете эту группу безопасности, и это применяется к эластичным сетевым интерфейсам, которые создаются в ваших подсети.

Чтобы создать группу безопасности плоскости управления

На левой панели навигации для фильтра VPC выберите свой VPC и выберите «Группы безопасности», создайте группу безопасности.

Примечание

Если вы не видите свой новый VPC здесь, обновите страницу, чтобы забрать его. Заполните следующие поля и выберите Да, создайте:

Для тега имени, предоставьте имя для вашей группы безопасности. Например, -Control-плоскость. Для описания предоставляйте описание вашей группы безопасности, чтобы помочь вам идентифицировать ее позже. Для VPC выберите VPC, которую вы используете для вашего кластера Amazon EKS.

//EKS Master Cluster Security Group

//This security group controls networking access to the Kubernetes masters.
//Needs to be configured also with an ingress rule to allow traffic from the worker nodes.

resource "aws_security_group" "eks-control-plane-sg" {
  name        = "${local.env}-control-plane"
  description = "Cluster communication with worker nodes [${local.env}]"
  vpc_id      = "${aws_vpc.cluster.id}"

  egress {
    from_port       = 0
    to_port         = 0
    protocol        = "-1"
    cidr_blocks     = ["0.0.0.0/0"]
  }
}

# OPTIONAL: Allow inbound traffic from your local workstation external IP
#           to the Kubernetes. You will need to replace A.B.C.D below with
#           your real IP. Services like icanhazip.com can help you find this.
//resource "aws_security_group_rule" "eks-ingress-workstation-https" {
//  cidr_blocks       = ["A.B.C.D/32"]
//  description       = "Allow workstation to communicate with the cluster API Server"
//  from_port         = 443
//  protocol          = "tcp"
//  security_group_id = "${aws_security_group.eks-control-plane-sg.id}"
//  to_port           = 443
//  type              = "ingress"
//}

Скачать AWS Authenticator, вид

install-k8s-heptio-authenticator-aws:
        curl -o ~/dotfiles/docker/heptio-authenticator-aws https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/linux/amd64/heptio-authenticator-aws
        curl -o ~/dotfiles/docker/heptio-authenticator-aws.md5 https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/linux/amd64/heptio-authenticator-aws.md5
        chmod +x ~/dotfiles/docker/heptio-authenticator-aws

Проверяйте бегом

heptio-authenticator-aws help

Проверьте, если у вас есть последние установленные AWSCLI, вы должны получить вывод похожи на один ниже

aws eks describe-cluster --name test-cluster

{
    "cluster": {
        "status": "ACTIVE",
        "endpoint": "https://1F3D31820046A120545D3A2FC1422C04.sk1.us-east-1.eks.amazonaws.com",
        "name": "test-cluster",
        "certificateAuthority": {
            "data": "CENSORED"
        },
        "roleArn": "arn:aws:iam::CENSORED:role/EKSClusterRole",
        "resourcesVpcConfig": {
            "subnetIds": [
                "subnet-065058abfee2adfca",
                "subnet-0eb04ec6e3f359b5c",
                "subnet-0fd73ea9b4a7dab35",
                "subnet-0ca730350e571154b"
            ],
            "vpcId": "vpc-0daf88b515eac80ab",
            "securityGroupIds": [
                "sg-09de76fce3a132c15"
            ]
        },
        "version": "1.10",
        "arn": "arn:aws:eks:us-east-1:CENSORED:cluster/test-cluster",
        "createdAt": 1530892117.396
    }
}


Шаг 4: Создать кластер EKS

Теперь пришло время запустить кластер, либо через UI, либо с помощью инструмента обеспечения вашего выбора

Создание кластера в ECS может показаться немного сложно, так как по умолчанию AWS предлагает удерживать Информация кластера в отдельных файлах, таких как ~/.kube/eksconfig и использовать среду Переменные для переключения контекста Экспорт kubeconfig = ~/.kube/eksconfig

Если у вас настроены несколько кластеров, это точно не будет удобным для вас.

apiVersion: v1
clusters:
- cluster:
    server: ${aws_eks_cluster.demo.endpoint}
    certificate-authority-data: ${aws_eks_cluster.demo.certificate_authority.0.data}
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "${var.cluster-name}"
        # - "-r"
        # - ""
      # env:
        # - name: AWS_PROFILE
        #   value: ""

Например выше, вы можете подтвердить, если вы настроили свой кластер и kubectl вправо.

kubectx
aws

kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1           443/TCP   4d

Часть террафора для создания кластерных действий было бы

//
//EKS Master Cluster
//This resource is the actual Kubernetes master cluster. It can take a few minutes to provision in AWS.



resource "aws_eks_cluster" "eks-cluster" {
  name     = "${local.cluster_name}"
  role_arn = "${aws_iam_role.EKSClusterRole.arn}"

  vpc_config {
    security_group_ids = ["${aws_security_group.eks-control-plane-sg.id}"]

    subnet_ids = [
      "${aws_subnet.eks-private.id}",
      "${aws_subnet.eks-private-2.id}"
    ]
  }

  depends_on = [
    "aws_iam_role_policy_attachment.eks-policy-AmazonEKSClusterPolicy",
    "aws_iam_role_policy_attachment.eks-policy-AmazonEKSServicePolicy",
  ]
}


locals {
  kubeconfig = <

Обратите внимание, что вместо исправления Cubelet Config, согласно оригинальному руководству Вы можете просто получить готовый к использованию содержимого файла из Террафом Выход Kubeconfig. .

Шаг 5,6: Теперь пришло время запустить рабочие узлы

В то время как AWS рекомендует запустить стек, используя, например, после шаблона пласта облака https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/amazon-eks-nodegroup.yaml

То, что вам понадобится от результатов, записывает NodeInstanceRole для создаваемой группы узлов. Вам нужно это, когда вы настраиваете свои рабочие узлы Amazon EKS.

На панели вывода вы увидите вывод

arn:aws:iam::CENSORED:role/test-cluster-worker-nodes-NodeInstanceRole-XF8G1BPXC56B

Последний шаг будет обеспечивать, чтобы рабочие узлы могли присоединиться к вашему кластеру.

Вам понадобится шаблон для карты конфигурации Kubernetes

https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/aws-auth-cm.yaml

curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/aws-auth-cm.yaml

cat aws-auth-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: 
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

Изменить роль ARN и применять изменения с

kubectl apply -f aws-auth-cm.yaml
configmap "aws-auth" created

Через несколько минут ваш флот должен быть готов

kubectl get nodes
NAME                          STATUS     ROLES     AGE       VERSION
ip-10-11-1-210.ec2.internal   NotReady       11s       v1.10.3
ip-10-11-3-36.ec2.internal    NotReady       14s       v1.10.3
ip-10-11-3-4.ec2.internal     NotReady       9s        v1.10.3

~~~~~~~~~~~~

kubectl get nodes
NAME                          STATUS    ROLES     AGE       VERSION
ip-10-11-1-210.ec2.internal   Ready         1m        v1.10.3
ip-10-11-3-36.ec2.internal    Ready         1m        v1.10.3
ip-10-11-3-4.ec2.internal     Ready         1m        v1.10.3

Если вы хотите опустить полагаться на шаблон облачного формирования по URL, и вместо этого придерживаться полностью сценаривной инфраструктуры:

Шаг 5: На этом мы готовим рабочие узлы и группы безопасности

//Kubernetes Worker Nodes
//The EKS service does not currently provide managed resources for running worker nodes.
//Here we will create a few operator managed resources so that Kubernetes can properly manage
//other AWS services, networking access, and finally a configuration that allows
//automatic scaling of worker nodes.


//Worker Node IAM Role and Instance Profile
//IAM role and policy to allow the worker nodes to manage or retrieve data from other AWS services.
//It is used by Kubernetes to allow worker nodes to join the cluster.
//
//For the latest required policy, see the EKS User Guide.

resource "aws_iam_role" "EKSNodeRole" {
  name = "eks-${local.cluster_name}-node-role"

  assume_role_policy = <

Шаг 5: На этом шаге мы создаем автоскализацию группы

//Worker Node AutoScaling Group
//Now we have everything in place to create and manage EC2 instances that will serve as our worker nodes
//in the Kubernetes cluster. This setup utilizes an EC2 AutoScaling Group (ASG) rather than manually working with
//EC2 instances. This offers flexibility to scale up and down the worker nodes on demand when used in conjunction
//with AutoScaling policies (not implemented here).
//
//First, let us create a data source to fetch the latest Amazon Machine Image (AMI) that Amazon provides with an
//EKS compatible Kubernetes baked in.

data "aws_ami" "eks-worker" {
  filter {
    name   = "name"
    values = ["eks-worker-*"]
  }

  most_recent = true
  owners      = ["602401143452"] # Amazon Account ID
}

# EKS currently documents this required userdata for EKS worker nodes to
# properly configure Kubernetes applications on the EC2 instance.
# We utilize a Terraform local here to simplify Base64 encoding this
# information into the AutoScaling Launch Configuration.
# More information: https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/amazon-eks-nodegroup.yaml
locals {
  eks-node-userdata = <  $CA_CERTIFICATE_FILE_PATH
INTERNAL_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
sed -i s,MASTER_ENDPOINT,${aws_eks_cluster.eks-cluster.endpoint},g /var/lib/kubelet/kubeconfig
sed -i s,CLUSTER_NAME,${local.cluster_name},g /var/lib/kubelet/kubeconfig
sed -i s,REGION,${var.AWS_REGION},g /etc/systemd/system/kubelet.service
sed -i s,MAX_PODS,20,g /etc/systemd/system/kubelet.service
sed -i s,MASTER_ENDPOINT,${aws_eks_cluster.eks-cluster.endpoint},g /etc/systemd/system/kubelet.service
sed -i s,INTERNAL_IP,$INTERNAL_IP,g /etc/systemd/system/kubelet.service
DNS_CLUSTER_IP=10.100.0.10
if [[ $INTERNAL_IP == 10.* ]] ; then DNS_CLUSTER_IP=172.20.0.10; fi
sed -i s,DNS_CLUSTER_IP,$DNS_CLUSTER_IP,g /etc/systemd/system/kubelet.service
sed -i s,CERTIFICATE_AUTHORITY_FILE,$CA_CERTIFICATE_FILE_PATH,g /var/lib/kubelet/kubeconfig
sed -i s,CLIENT_CA_FILE,$CA_CERTIFICATE_FILE_PATH,g  /etc/systemd/system/kubelet.service
systemctl daemon-reload
systemctl restart kubelet
USERDATA
}

resource "aws_launch_configuration" "eks-launch-configuration" {
  associate_public_ip_address = true
  iam_instance_profile        = "${aws_iam_instance_profile.eks-node-instance-profile.name}"
  image_id                    = "${data.aws_ami.eks-worker.id}"
  instance_type               = "t2.small"
  name_prefix                 = "eks-${local.cluster_name}"
  security_groups             = ["${aws_security_group.eks-nodes-sg.id}"]
  user_data_base64            = "${base64encode(local.eks-node-userdata)}"
  key_name                    = "${var.ec2_keyname}"

  lifecycle {
    create_before_destroy = true
  }
}


//Finally, we create an AutoScaling Group that actually launches EC2 instances based on the
//AutoScaling Launch Configuration.

//NOTE: The usage of the specific kubernetes.io/cluster/* resource tag below is required for EKS
//and Kubernetes to discover and manage compute resources.

resource "aws_autoscaling_group" "eks-autoscaling-group" {
  desired_capacity     = 2
  launch_configuration = "${aws_launch_configuration.eks-launch-configuration.id}"
  max_size             = 2
  min_size             = 1
  name                 = "eks-${local.cluster_name}"
  vpc_zone_identifier  = ["${aws_subnet.eks-private.id}", "${aws_subnet.eks-private-2.id}"]


  tag {
    key                 = "Environment"
    value               = "${local.env}"
    propagate_at_launch = true
  }

  tag {
    key                 = "Name"
    value               = "eks-${local.cluster_name}"
    propagate_at_launch = true
  }

  tag {
    key                 = "kubernetes.io/cluster/${local.cluster_name}"
    value               = "owned"
    propagate_at_launch = true
  }
}

//NOTE: At this point, your Kubernetes cluster will have running masters and worker nodes, however, the worker nodes will
//not be able to join the Kubernetes cluster quite yet. The next section has the required Kubernetes configuration to
//enable the worker nodes to join the cluster.


//Required Kubernetes Configuration to Join Worker Nodes
//The EKS service does not provide a cluster-level API parameter or resource to automatically configure the underlying
//Kubernetes cluster to allow worker nodes to join the cluster via AWS IAM role authentication.


//To output an IAM Role authentication ConfigMap from your Terraform configuration:

locals {
  config-map-aws-auth = <

На этом этапе вы также должны иметь полностью работать кластер EKS. На Террафом применяется бежать, вы должны увидеть Smth, как

Apply complete! Resources: 36 added, 0 changed, 0 destroyed.

Outputs:

Сделать кластер полностью работать, после предоставления вам следует:

  1. Получить Cluster Kublet Config через
make kubelet-config

terraform output kubeconfig > kubeconfig
export KUBECONFIG=/home/slavko/kubernetes/tf/kubeconfig

После этого вы должны быть в состоянии выполнить команды над вашим кластером EKS

kubectl get nodes
No resources found.
  1. Чтобы позволить узлам присоединиться, вам нужно предоставить кластер с дополнительной картой конфигурации
make config-map-aws-auth
terraform output config-map-aws-auth > config-map-aws-auth.yaml
kubectl apply -f config-map-aws-auth.yaml
configmap "aws-auth" created
kubectl get nodes --watch
NAME                         STATUS     ROLES     AGE       VERSION
ip-10-11-1-21.ec2.internal   NotReady       1s        v1.10.3
ip-10-11-3-220.ec2.internal   NotReady       0s        v1.10.3
...
ip-10-11-1-21.ec2.internal   Ready         31s       v1.10.3
ip-10-11-3-220.ec2.internal   Ready         31s       v1.10.3
  1. Вы должны быть в состоянии запустить PODS и услуги
kubectl run  --image busybox pod-test --restart=Never
pod "pod-test" created
┌[tf]>
└──➜ kubectl get pods
NAME       READY     STATUS      RESTARTS   AGE
pod-test   0/1       Completed   0          8s

Вопросов?

Исправление проблем …

Теперь давайте Начните SMTH

kubectl run -i --tty --image busybox dns-test --restart=Never --rm /bin/sh

Если вы видите государство в ожидании

NAME       READY     STATUS    RESTARTS   AGE
dns-test   0/1       Pending   0          1m

Вы можете захотеть немедленно проверить

kubectl get events

Вы можете увидеть Smth, как

LAST SEEN   FIRST SEEN   COUNT     NAME                        KIND      SUBOBJECT   TYPE      REASON             SOURCE              MESSAGE
34s         5m           22        dns-test.15404a7104cc67cf   Pod                   Warning   FailedScheduling   default-scheduler   no nodes available to schedule pods

где в сообщении вы будете подсказнуться к проблеме

Устранение неполадок подсказки от AWS можно найти на

https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html

Оригинал: «https://www.codementor.io/@slavko/kubernetes-cluster-on-aws-eks-lecygk6rl»