Tworzenie klastra kubernetes przy pomocy AWS EKS

Jak skonfigurować klaster kubernetes przy pomocy usługi AWS EKS i korzystać z niego lokalnie? W tym artykule, pokażę krok po kroku, jak utworzyć klaster przy pomocy AWS CLI oraz jak skonfigurować kubectl, aby móc korzystać z niego lokalnie.
Będziemy potrzebowali:

  • skonfigurowane AWS CLI, zakładam, że każdy ma już ten krok zrobiony 🙂
  • IAM Role, jest to rola, którą musimy dodać do naszego klastra oraz nodów
  • skonfigurowaną sieć z minimum 2 subnetami, bo tyle wymaga najmniej AWS EKS

1. Tworzenie roli dla AWS EKS

Tworzymy sobie plik json z naszą polityką, nazwijmy go np aws-eks-cluster-role-policy.json i wklejmy do niego poniższy kod:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Kolejnym krokiem jest utworzenie roli z naszą polityką, nazwijmy rolę awsEKSClusterRole

aws iam create-role --role-name awsEKSClusterRole --assume-role-policy-document file://"aws-eks-cluster-role-policy.json"

Następnie do naszej roli, musimy dodać politykę, które jest zarządzana przez AWS

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name awsEKSClusterRole

2. Tworzenie klastra EKS

Następnym krokiem, jest wykonanie polecenia, które utworzy nasz klaster, ale zanim je wykonamy musimy w kilka miejsc wstawić swoje dane. Polecenie wygląda następująco:

aws eks create-cluster --region region-code --name my-cluster --kubernetes-version 1.23 
--role-arn arn:aws:iam::111122223333:role/myAmazonEKSClusterRole 
--resources-vpc-config subnetIds=subnet-ExampleID1,subnet-ExampleID2,securityGroupIds=sg-ExampleID1

1. –region – wstawiamy tutaj nasz region, w moim wypadku jest to eu-central-1, który znajduje się we Frankfurcie
2. –name – wstawiamy nazwę naszego klastra np. myFirstAwsEKSCluster
3. –kubernetes-version – tutaj wstawiamy wersję kubernetesa, którą chcemy wykorzystać, obecnie jest to 1.23, ale wszystkie wspierane wersje, można zobaczyć pod tym linkiem https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html
4. –role-arn – tutaj musimy wstawić arn naszej roli, możemy go uzyskać wykorzystując poniższe polecenie

aws iam get-role --role-name awsEKSClusterRole

5. subnetIds – podajemy identyfikatory naszych subnetów, do których chcemy dodać nasz klaster
6. securityGroupIds – w tym polu dodajemy identyfikator naszej SG, możemy całkowicie pominąć ten parametr. Domyślnie AWS utworzy nam Security Group, który pozwoli na połączenie pomiędzy EKS, a naszym VPC.

Tworzenie klastra trwa kilkanaście minut, więc jeżeli chcecie sprawdzić jego obecny status, można to zrobić wykonując polecenie

aws eks describe-cluster --region eu-central-1 --name myFirstAwsEKSCluster --query "cluster.status"

Kiedy polecenie zwraca nam status Active, zostaje nam wykonać ostatnie, dzięki któremu będziemy mogli zarządzać naszym klastrem z poziomu kubectl

aws eks update-kubeconfig --region eu-central-1 --name myFirstAwsEKSCluster

Klaster mamy już gotowy, możemy nim zarządzać z poziomu kubectl, ale mimo wszystko brakuje nam nodów, które możemy dodać np przy pomocy konsoli AWS.

3. Tworzenie node group przy pomocy konsoli AWS

W pierwszej kolejności musimy utworzyć rolę dla naszych nodów, więc tworzymy sobie plik node-role-trust-relationship.json z poniższym kodem

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Następnie tworzymy rolę z wcześniej utworzoną  polityką

aws iam create-role --role-name AmazonEKSNodeRole --assume-role-policy-document file://"node-role-trust-relationship.json"

Teraz do naszej roli, musimy przypisać trzy polityki zarządzane przez AWS jest to AmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryReadOnly oraz AmazonEKS_CNI_Policy, wykonujemy poniższe polecenia

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy --role-name AmazonEKSNodeRole
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly --role-name AmazonEKSNodeRole
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy --role-name AmazonEKSNodeRole

W tym kroku popracujemy trochę w konsoli AWS.
1. Przechodzimy pod ten adres https://eu-central-1.console.aws.amazon.com/eks/home?region=eu-central-1#/clusters i klikamy na nasz klaster, w naszym wypadku jest to myFirstAwsEKSCluster
2. Następnie klikamy w Compute -> Add Node Group, wpisujemy nazwę naszej grupy oraz wybieramy wcześniej utworzoną rolę AmazonEKSNodeRole, przechodzimy dalej
3. Wybieramy typ instancji, ja wybrałem t3.micro, ponieważ to tylko testowy klaster, następnie wybieramy ilość nodów, ja zostawiłem domyślne wartości czyli 2.
4. W kolejnym kroku wybieramy subnety, w jakich chcemy utworzyć nasze nody, ja wybrałem 2, ale to wedle uznania. Przechodzimy dalej i klikamy Create, dzięki czemu nasza grupa nodów dla klastra zostanie utworzona.

Mamy utworzony klaster EKS, mamy dodane nody, zostało nam tylko sprawdzić, czy z poziomu kubectl, możemy je zobaczyć, więc wykonujemy polecenie

kubectl get nodes

Wynikiem polecenia powinno być zwrócenie listy nodów, dodatkowo może przejść w konsoli do EC2 i zobaczyć czy mamy uruchomione instancje 🙂 Oczywiście spososbów na uruchomienie klastra kubernetes jest kilka oprócz w/w można wykorzystać eksctl, ale to polecam zapoznać się we własnym zakresie 🙂

Related Posts