CoreOS er operativsystemet designet til Docker-containere. CoreOS har Docker forudinstalleret ud af æsken. Kubernetes kan installeres på CoreOS ved hjælp af CloudFormation, som beskrevet detaljeret i en tidligere artikel, "Kom godt i gang med Kubernetes på Amazon Web Services (AWS)."
Problem
Kubernetes er ikke forudinstalleret på CoreOS og kan installeres ved at bruge kube-aws værktøj, og det kræver noget brugerinput og konfiguration. Installation af Kubernetes på CoreOS er en involveret proces og består af følgende trin vist i figur 1.
Figur 1: Kubernetes-installation på CoreOS Stages
Løsning
En Jenkins Pipeline kan bruges til at automatisere installationen af Kubernetes, som vist i figur 2. De forskellige stadier af installationen kan konfigureres i en Jenkinsfile og når Pipeline køres, kube-aws værktøj bliver downloadet, CloudFormation stak bliver initialiseret, indholdet af aktivkataloget bliver gengivet, klyngeparametrene, såsom antallet af arbejderforekomster, bliver tilpasset, og efterfølgende bliver klyngen valideret og lanceret.
Figur 2: Jenkins Pipeline til installation af Kubernetes på CoreOS
Installation af Kubernetes ved hjælp af en Jenkins Pipeline er et eksempel på Automation DevOps-designmønster.
I et selvstudie med tre artikler skal vi automatisere Kubernetes installationsprocessen ved hjælp af en Jenkins Pipeline. Denne artikel har følgende sektioner:
- Indstilling af miljøet
- Oprettelse af de nødvendige artefakter
- Oprettelse af en Jenkins-node
- Konklusion
Indstilling af miljøet
Vi skal installere Jenkins ved hjælp af Docker-billedet "jenkins" på en CoreOS-instans. Vi vil lancere en Kubernetes-klynge på en Amazon AMI Linux EC2-instans ved hjælp af en Jenkins Pipeline. Start først to EC2-instanser, den ene kører Amazon Linux og den anden kører CoreOS, som vist i figur 3.
Figur 3: Få den offentlige IP-adresse
Når du opretter Amazon Linux-instansen, skal du oprette et nyt nøglepar ("jenkins", for eksempel) ved at vælge "Opret et nyt nøglepar" og downloade den private nøgle "jenkins.pem", der skal bruges til at konfigurere en Jenkins-agent. Få den offentlige IP-adresse for EC2-instansen, der kører CoreOS og SSH, log ind på instansen.
ssh -i "jenkins.pem" [email protected]
Kør Docker-billedet for Jenkins for at starte Jenkins.
docker run -name jenkins -p 8080:8080 -p 50000:50000 jenkins
Docker-billedet "Jenkins" bliver downloadet. Jenkins går i gang. Kopier den genererede adgangskode. Få den offentlige DNS for den EC2-instans, der kører Jenkins. Brug af url'en
Figur 4: Jenkins Admin Console
Oprettelse af de nødvendige artefakter
Nu skal vi skabe nogle artefakter til en Kubernetes-klynge, som ikke kan automatiseres.
- EC2-nøglepar
- KMS-nøgle
- Jenkins bibliotek /var/jenkins
- SSH-login til Amazon EC2-instansen, der kører Amazon Linux
ssh -i "jenkins.pem" [email protected]
Fordi Amazon EC2 bruges, kræves en AWS-konto. Vi skal oprette et sæt AWS Security-legitimationsoplysninger, som vi skal bruge til at konfigurere EC2-instansen, hvorfra CloudFormation-stakken startes. For at oprette nye AWS Security-legitimationsoplysninger skal du klikke på Security Credentials for brugerkontoen og klikke på Create New Access Key for at oprette en adgangsnøgle. Kopiér adgangsnøgle-id'et og adgangsnøglen. I Amazon Linux-forekomsten skal du køre følgende kommando for at konfigurere forekomsten med AWS-legitimationsoplysningerne:
aws configure
Angiv adgangsnøgle-id og adgangsnøgle, når du bliver bedt om det. Angiv standardområdenavnet (us-east-1 ) og outputformatet (json ), som vist i figur 5.
Figur 5: Konfiguration af Jenkins-instans med AWS-legitimationsoplysninger, region og standardoutputformat
Opret derefter et EC2-nøglepar. Kør følgende kommando for at oprette et nøglepar kaldet kubernetes-coreos og gem det som kubernetes-coreos.pem .
aws ec2 create-key-pair --key-name kubernetes-coreos --query 'KeyMaterial' --output text > kubernetes-coreos.pem
Rediger adgangstilladelserne for nøgleparret ved at bruge tilstanden som 400, som indstiller adgangstilladelser til at læse af ejeren.
chmod 400 kubernetes-coreos.pem
Et nøglepar oprettes, og adgangstilladelser indstilles (se figur 6).
Figur 6: Oprettelse af et nøglepar til Kubernetes
Nøgleparret bliver også opført i AWS EC2-konsollen, som vist i figur 7.
Figur 7: Få den offentlige IP-adresse
Opret derefter en KMS-nøgle, som bruges til at kryptere/dekryptere klynge-TLS-aktiver og identificeres af en Arn-streng. Brug aws kommandolinjegrænseflade til at oprette en KMS-nøgle til region us-east-1 .
aws kms --region=us-east-1 create-key --description="kube-aws assets"
En KMS-nøgle bliver oprettet, som vist i figur 8. Kopier KeyMetadata.Arn streng, der starter med arn:aws:kms:us-east-1 skal bruges senere til at initialisere klyngen CloudFormation.
Figur 8: Oprettelse af en KMS-nøgle
Vi skal også oprette en mappe til Jenkins:
sudo mkdir /var/Jenkins sudo chmod 777 /var/jenkins
En mappe oprettes, og tilladelser indstilles, som vist i figur 9.
Figur 9: Oprettelse af en mappe til Jenkins
Oprettelse af en Jenkins-node
En Jenkins Pipeline er et Jenkins-projekt, der gør brug af Jenkins Pipeline plug-in. En pipeline består typisk af en sekvens af trin, hvor hvert trin udfører en opgave. Tilgængelige eksekutører på agenter bruges til at køre et Jenkins-projekt. En "agent" er en maskine, der er konfigureret til at aflæse projekter fra masterknudepunktet. "Master"-knuden er den maskine, hvorpå Jenkins er installeret og håndterer alle opgaverne for byggesystemet, inklusive parsing af pipeline-scripts og kørsel af et Jenkins-projekt på en eksekvering. En "executor" er en beregningsressource til kompilering af kode, og den kan konfigureres på master- eller agentknuderne. I dette afsnit skal vi oprette en agentnode og konfigurere en eksekvering på noden. Vælg Administrer Jenkins i Jenkins Dashboard, som vist i figur 10.
Figur 10: Få den offentlige IP-adresse
Vælg derefter Administrer noder , som vist i figur 11.
Figur 11: Få den offentlige IP-adresse
"Master"-knuden bør blive vist. Klik på Ny node for at oprette en agentnode, som vist i figur 12.
Figur 12: Få den offentlige IP-adresse
Angiv et Nodenavn (jenkins , for eksempel) og vælg Permanent Agent alternativknap, som vist i figur 13. Klik på OK.
Figur 13: Få den offentlige IP-adresse
For at konfigurere den nye agentknude skal vi bruge den værts-DNS, som agenten skal oprettes på. Kopier den offentlige DNS fra AWS EC2-konsollen for EC2-instansen, der kører et Amazon Linux-billede, som vist i figur 14.
Figur 14: Få den offentlige IP-adresse
Angiv et navn i den nye agentinput-brugergrænseflade (jenkins , for eksempel). Angiv antallet af eksekutører som 1. Angiv en fjern rodmappe som /var/jenkins , som blev oprettet tidligere. Angiv Etiketter som "jenkins", hvis betydning vi vil diskutere i et efterfølgende afsnit. I Brug , behold standardindstillingen "Brug denne node så meget som muligt." I Startmetode , vælg "Start slaveagenter på Unix-maskiner via SSH." I Vært , angiv den offentlige DNS, der er kopieret fra EC2-konsollen. I Tilgængelighed , vælg "Hold denne agent online så meget som muligt." For legitimationsoplysninger , klik på Tilføj rullemenuen, og vælg Jenkins-legitimationsudbyder , som vist i figur 15.
Figur 15: Få den offentlige IP-adresse
I Tilføj legitimationsoplysninger dialogboksen skal du vælge Domæne som Globale legitimationsoplysninger og venlig som Global . Angiv Brugernavn som "ec2-bruger", og vælg Enter direkte . Kopier og indsæt indholdet af den private nøglefil jenkins.pem i Nøglen felt, som vist i figur 16.
Figur 16: Tilføjelse af Jenkins-legitimationsoplysninger
Klik på Tilføj , som vist i figur 17.
Figur 17: Jenkins-legitimationsudbyder>Tilføj
Vælg ec2-brugeren legitimationsoplysninger i legitimationsoplysninger , som vist i figur 18. Klik på Gem .
Figur 18: Konfiguration af Jenkins Node
En ny agent tilføjes, som vist i figur 19. I starten er agenten muligvis ikke tilgængelig, fordi den stadig er ved at starte.
Figur 19: Jenkins Agent oprettet
Klik på agentlinket, og klik på Genstart agent , hvis det kræves, som vist i figur 20.
Figur 20: Genlancering af agent
Outputmeddelelsen "Agenten er tilsluttet og online" angiver, at agenten er blevet startet (se figur 21).
Figur 21: Agent tilsluttet og online
"Jenkins"-agenten bør blive opført som kørende, som vist i figur 22.
Figur 22: Jenkins Agent kører
Konklusion
I denne artikel introducerede vi vigtigheden af at automatisere en Kubernetes-installation med Jenkins. Vi startede med at installere Jenkins på CoreOS, oprette de nødvendige artefakter og oprette en Jenkins-node. I en efterfølgende artikel skal vi konfigurere en Jenkins-fil til en Jenkins-pipeline og oprette en Jenkins-pipeline. Og i en tredje artikel vil vi køre Jenkins-pipelinen for at installere Kubernetes.