Einrichtung eines Kubernetes-Clusters auf AWS

CloudUPDATED ON November 19, 2021

4 tiles DevOps teams and consulting

Schritt für Schritt zur Einrichtung von Kubernetes auf AWS

In dieser Ausgabe unserer AWS- und Kubernetes-Beratungsreihe führen wir Sie Schritt für Schritt durch den Start von Kubernetes auf Amazon Web Services.

Der Betrieb einer Anwendung in der Cloud ohne die richtigen Tools zur Verwaltung und Verbesserung ihrer Funktionalität kann schwierig sein. Wenn Sie eine Kundenanwendung bereitstellen, sollten Sie daher über Mittel zur schnellen Bereitstellung, zum Rollout von Funktionen, zur Ressourcenverwaltung, zur Ausfallsicherheit und zur Automatisierung bestimmter Vorgänge verfügen. Kubernetes ist eine Open-Source-Plattform, die Ihnen eine Reihe von Tools zur Verfügung stellt, um genau das zu tun.

K&C - Wir schaffen innovative Tech-Lösungen seit über 20 Jahren.

Kontaktieren Sie uns, um Ihre individuellen Bedürfnisse oder Ihr nächstes Projekt zu diskutieren.

Heute werden wir Kubernetes-Multi-Master-Cluster auf AWS ausführen und eine einfache Anwendung bereitstellen. Wir werden kops (Kubernetes Operations) verwenden, ein Dienstprogramm zur Verwaltung von Kubernetes-Clustern. Unserer Meinung nach ist kops derzeit das beste Tool für die Bereitstellung von Kubernetes-Clustern in Amazon Web Services.

1. Erstellen einer zone in Route53:

aws route53 create-hosted-zone name example.com

2. Erstellen eines S3-Buckets zum Speichern der cluster configuration:

aws s3api create-bucket   --bucket kubernetes-cluster  --region eu-west-1

Wir bieten Versionierung (include versioning):

aws s3api put-bucket-versioning --bucket kubernetes-cluster  --versioning-configuration Status=Enabled

3. Creating our new cluster

export KOPS_STATE_STORE=s3://kubernetes-cluster
 
kops create cluster 
--name example.com 
--master-zones eu-west-1a,eu-west-1b,eu-west-1c 
--zones eu-west-1a,eu-west-1b,eu-west-1c 
--state s3://kubernetes-cluster 
--node-count 3 
--yes 

name                          cluster name sollte mit dem zone name identisch sein

master-zones            zones in denen die masters gelaunched werden

zones                          zones in denen sich die Knotenpunkte (nodes) befinden werden

state                            configuration storage bucket (Konfiguration Speicherplatz)

node-count                eine Anzahl von Knoten (nodes) im Cluster

yes                              übernimmt Änderungen

Prüfung der Verfügbarkeit des Clusters:

kops validate cluster

Der Output:

Using cluster from kubectl context: example.com
 
Validating cluster example.com
 
INSTANCE GROUPS
NAME			ROLE	MACHINETYPE	MIN	MAX	SUBNETS
master-eu-west-1a	Master	m3.medium	1	1	eu-west-1a
master-eu-west-1b	Master	m3.medium	1	1	eu-west-1b
master-eu-west-1c	Master	m3.medium	1	1	eu-west-1c
nodes			Node	t2.medium	3	3	eu-west-1a,eu-west-1b,eu-west-1c
 
NODE STATUS
NAME						ROLE	READY
ip-174-21-107-10.eu-west-1.compute.internal	node	True
ip-174-21-113-20.eu-west-1.compute.internal	master	True
ip-174-21-38-94.eu-west-1.compute.internal	node	True
ip-174-21-53-131.eu-west-1.compute.internal	node	True
ip-174-21-61-2.eu-west-1.compute.internal	master	True
ip-174-21-67-114.eu-west-1.compute.internal	master	True
Your cluster example.com is ready

Kops erzeugt auch Einstellungen für kubectl. Das kann man auch machen:

kubectl get node

Der Output:

ip-174-21-107-10.eu-west-1.compute.internal   Ready     11d       v1.7.2
ip-174-21-113-20.eu-west-1.compute.internal   Ready     11d       v1.7.2
ip-174-21-38-94.eu-west-1.compute.internal    Ready     11d       v1.7.2

Um die nodes configuration zu bearbeiten, gehen wir wie folgt vor:

kops edit ig nodes

Editieren der Datei:

apiVersion: kops/v1alpha2
kind: InstanceGroup
metadata:
  creationTimestamp: 2017-10-02T23:10:46Z
  labels:
    kops.k8s.io/cluster: example.com
  name: nodes
spec:
  image: kope.io/k8s-1.7-debian-jessie-amd64-hvm-ebs-2017-07-28
  machineType: t2.medium -> t2.xlarge
  maxSize: 3 -> 4
  minSize: 3 -> 4
  role: Node
  subnets:
  - eu-west-1a
  - eu-west-1b
  - eu-west-1c

Speichern Sie die Datei und übertragen Sie die Konfiguration:

kops rolling-update cluster yes

Überprüfung des Zustands des Clusters:

kops validate cluster

Der Output:

nodes	Node  t2.xlarge	  4	4    eu-west-1a,eu-west-1b,eu-west-1c

Der Einfachheit halber wollen wir ein Dashboard deployen:

kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes-dashboard/v1.6.3.yaml

Dashboard wird verfügbar sein unter:

https://api.example.com/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/pod?namespace=default

 

Jetzt wollen wir eine einfache Webanwendung einrichten, mit einem Setup für Balancer mit SSL und einem Domainnamen

Um Kubernetes mit Route53 zu verbinden, müssen wir einen Pod deployen:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/route53-mapper/v1.3.0.yml

In der IAM-Rolle müssen wir die Namen der Knoten (nodes) finden und eine Richtlinie hinzufügen:

" Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:ListHostedZonesByName",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "elasticloadbalancing:DescribeLoadBalancers",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "*"
        }
    ]
}

Schreiben einer yaml Datei für Deployments:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: project-ci
spec:
  replicas: 2
  template:
    metadata:
      labels:
        projectenv: ci
    spec:
      containers:
        - name: project
          image: ecr.eu-west-1.amazonaws.com/project
          env:
           - name: DEPLOYMENT_ENV
              value: "ci"
            - name: FILEBEAT_ENABLE
              value: "yes"
          ports:
            - containerPort: 80

Jetzt erstellen einer yaml Datei für den Service:

kind: Service
apiVersion: v1
metadata:
  annotations:
    domainName: "projectci.example.com."
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-1:659153740712:certificate/xxxxxxxx"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
  name: projectci
  labels:
    projectenv: ci
    dns: route53
spec:
  selector:
    projectenv: ci
  ports:
    - name: "https"
      protocol: TCP
      port: 443
  type: LoadBalancer

Nach deployment ist die Anwendung hier zu sehen: https://projectci.example.com

Und in der AWS-Konsole sehen wir den neu erstellten Balancer:

Das war’s! Sie sind startklar. Vielleicht interessieren Sie sich auch für andere Artikel in unserer Kubernetes-Reihe, z. B. Unsere Anleitung für Hashicorp Consul/Vault mit Kubernetes.

K&C – IT Dienstleistungen & Cloud Consulting Made In Germany

K&C mit Sitz in München verfügt über mehr als 20 Jahre Erfahrung als Berater für IT-Services und ausgelagerte Entwicklungsdienstleistungen. Wir bieten DevOps, Cloud-Services, Serverless-Architektur-Design und viele andere Fachgebiete über moderne Entwicklungstechnologie-Stacks und Beratung.

Zu unseren Partnern gehören einige der bekanntesten europäischen Marken, spannende Start-ups und etablierte KMUs. Diese vertrauen bei der Umsetzung ihrer outgesourcten IT-Anforderungen voll und ganz auf unsere Kombination aus deutschem Management und Nearshore-Tech-Talenten.

Gerne informieren wir Sie über Projekte oder Probleme, bei denen wir Ihnen helfen können! Schreiben Sie uns einfach eine Nachricht oder rufen Sie uns an.

Wann funktioniert IT-Outsourcing?

Und wann nicht ?