CoreOS è il sistema operativo progettato per i container Docker. CoreOS ha Docker preinstallato immediatamente. Kubernetes può essere installato su CoreOS utilizzando CloudFormation, come discusso in dettaglio in un articolo precedente, "Guida introduttiva a Kubernetes su Amazon Web Services (AWS)."
Problema
Kubernetes non è preinstallato su CoreOS e può essere installato utilizzando kube-aws strumento e richiede un input e una configurazione da parte dell'utente. L'installazione di Kubernetes su CoreOS è un processo complesso e consiste nelle fasi seguenti mostrate nella Figura 1.
Figura 1: Installazione di Kubernetes su CoreOS Stages
Soluzione
È possibile utilizzare una pipeline Jenkins per automatizzare l'installazione di Kubernetes, come mostrato nella Figura 2. Le varie fasi dell'installazione possono essere configurate in un Jenkinsfile e, quando viene eseguita la pipeline, kube-aws viene scaricato lo strumento CloudFormation lo stack viene inizializzato, il contenuto di Asset Directory viene visualizzato, i parametri del cluster come il numero di istanze di lavoro vengono personalizzati e successivamente il cluster viene convalidato e avviato.
Figura 2: Pipeline Jenkins per l'installazione di Kubernetes su CoreOS
L'installazione di Kubernetes utilizzando una pipeline Jenkins è un esempio di Automazione Modello di progettazione DevOps.
In un tutorial di tre articoli, automatizzeremo il processo di installazione di Kubernetes utilizzando una pipeline Jenkins. Questo articolo ha le seguenti sezioni:
- Impostazione dell'ambiente
- Creazione degli artefatti prerequisiti
- Creazione di un nodo Jenkins
- Conclusione
Impostazione dell'ambiente
Installeremo Jenkins utilizzando l'immagine Docker "jenkins" su un'istanza CoreOS. Lanciamo un cluster Kubernetes su un'istanza Amazon AMI Linux EC2 utilizzando una Jenkins Pipeline. Innanzitutto, avvia due istanze EC2, una che esegue Amazon Linux e l'altra che esegue CoreOS, come mostrato nella Figura 3.
Figura 3: Ottenere l'indirizzo IP pubblico
Quando crei l'istanza Amazon Linux, crea una nuova coppia di chiavi ("jenkins", ad esempio) selezionando "Crea una nuova coppia di chiavi" e scarica la chiave privata "jenkins.pem" da utilizzare per la configurazione di un agente Jenkins. Ottieni l'indirizzo IP pubblico dell'istanza EC2 che esegue CoreOS e accedi SSH all'istanza.
ssh -i "jenkins.pem" [email protected]
Esegui l'immagine Docker per Jenkins per avviare Jenkins.
docker run -name jenkins -p 8080:8080 -p 50000:50000 jenkins
L'immagine Docker "Jenkins" viene scaricata. Jenkins inizia. Copia la password generata. Ottieni il DNS pubblico dell'istanza EC2 che esegue Jenkins. Utilizzando l'URL
Figura 4: Console di amministrazione Jenkins
Creazione degli artefatti prerequisiti
Ora, dobbiamo creare alcuni artefatti per un cluster Kubernetes che non sono suscettibili di automazione.
- Coppia di chiavi EC2
- Chiave KMS
- Directory di Jenkins /var/jenkins
- Accesso SSH all'istanza Amazon EC2 che esegue Amazon Linux
ssh -i "jenkins.pem" [email protected]
Poiché viene utilizzato Amazon EC2, è necessario un account AWS. Dobbiamo creare un set di credenziali AWS Security, che utilizzeremo per configurare l'istanza EC2 da cui viene avviato lo stack CloudFormation. Per creare nuove credenziali di sicurezza AWS, fai clic su Credenziali di sicurezza per l'account utente e fai clic su Crea nuova chiave di accesso per creare una chiave di accesso. Copia l'ID chiave di accesso e la chiave di accesso. Nell'istanza Amazon Linux, esegui il comando seguente per configurare l'istanza con le credenziali AWS:
aws configure
Specificare l'ID della chiave di accesso e la chiave di accesso quando richiesto. Specificare il nome della regione predefinito (us-east-1 ) e il formato di output (json ), come mostrato nella Figura 5.
Figura 5: Configurazione dell'istanza Jenkins con credenziali AWS, regione e formato di output predefinito
Quindi, crea una coppia di chiavi EC2. Esegui il comando seguente per creare una coppia di chiavi denominata kubernetes-coreos e salvalo come kubernetes-coreos.pem .
aws ec2 create-key-pair --key-name kubernetes-coreos --query 'KeyMaterial' --output text > kubernetes-coreos.pem
Modifica i permessi di accesso della coppia di chiavi utilizzando la modalità 400, che imposta i permessi di accesso in lettura dal proprietario.
chmod 400 kubernetes-coreos.pem
Viene creata una coppia di chiavi e vengono impostati i permessi di accesso (vedere la Figura 6).
Figura 6: Creazione di una coppia di chiavi per Kubernetes
La coppia di chiavi viene anche elencata nella Console AWS EC2, come mostrato nella Figura 7.
Figura 7: Ottenere l'indirizzo IP pubblico
Quindi, crea una chiave del servizio di gestione delle chiavi, che viene utilizzata per crittografare/decrittografare le risorse TLS del cluster ed è identificata da una stringa Arn. Usa le aws interfaccia della riga di comando per creare una chiave KMS per la regione us-east-1 .
aws kms --region=us-east-1 create-key --description="kube-aws assets"
Viene creata una chiave KMS, come mostrato nella Figura 8. Copiare KeyMetadata.Arn stringa che inizia con arn:aws:kms:us-east-1 da utilizzare in seguito per inizializzare il cluster CloudFormation.
Figura 8: Creazione di una chiave KMS
Dobbiamo anche creare una directory per Jenkins:
sudo mkdir /var/Jenkins sudo chmod 777 /var/jenkins
Viene creata una directory e vengono impostati i permessi, come mostrato nella Figura 9.
Figura 9: Creazione di una directory per Jenkins
Creazione di un nodo Jenkins
Una Jenkins Pipeline è un progetto Jenkins che utilizza il plug-in Jenkins Pipeline. Una pipeline in genere consiste in una sequenza di passaggi, in cui ogni passaggio esegue un'attività. Gli esecutori disponibili sugli agenti vengono utilizzati per eseguire un progetto Jenkins. Un "agente" è una macchina configurata per scaricare i progetti dal nodo master. Il nodo "master" è la macchina su cui è installato Jenkins e gestisce tutte le attività per il sistema di compilazione, inclusa l'analisi degli script Pipeline e l'esecuzione di un progetto Jenkins su un executor. Un "executor" è una risorsa computazionale per la compilazione del codice e può essere configurato sui nodi master o agent. In questa sezione creeremo un nodo agente e configureremo un executor sul nodo. Seleziona Gestisci Jenkins nel dashboard Jenkins, come mostrato nella Figura 10.
Figura 10: Ottenere l'indirizzo IP pubblico
Successivamente, seleziona Gestisci nodi , come mostrato nella Figura 11.
Figura 11: Ottenere l'indirizzo IP pubblico
Il nodo "master" dovrebbe essere elencato. Fai clic su Nuovo nodo per creare un nodo agente, come mostrato nella Figura 12.
Figura 12: Ottenere l'indirizzo IP pubblico
Specifica un Nome nodo (jenkins , ad esempio) e seleziona l'Agente permanente pulsante di opzione, come mostrato nella Figura 13. Fare clic su OK.
Figura 13: Ottenere l'indirizzo IP pubblico
Per configurare il nuovo nodo agente, avremo bisogno del DNS host su cui verrà creato l'agente. Copia il DNS pubblico dalla console AWS EC2 per l'istanza EC2 che esegue un'immagine Amazon Linux, come mostrato nella Figura 14.
Figura 14: Ottenere l'indirizzo IP pubblico
Nella nuova interfaccia utente di input dell'agente, specifica un Nome (jenkins , Per esempio). Specifica il # di esecutori come 1. Specificare una directory radice remota come /var/jenkins , che è stato creato in precedenza. Specifica Etichette come "jenkins", il cui significato discuteremo in una sezione successiva. In Utilizzo , mantieni l'impostazione predefinita "Utilizza questo nodo il più possibile". In Metodo di avvio , seleziona "Avvia agenti slave su macchine Unix tramite SSH". In Ospite , specificare il DNS pubblico copiato dalla console EC2. In Disponibilità , seleziona "Mantieni questo agente online il più possibile". Per Credenziali , fai clic su Aggiungi menu a discesa e seleziona Fornitore di credenziali Jenkins , come mostrato nella Figura 15.
Figura 15: Ottenere l'indirizzo IP pubblico
In Aggiungi credenziali finestra di dialogo, seleziona Dominio come Credenziali globali e gentile come Globale . Specifica Nome utente come "ec2-user" e seleziona Inserisci direttamente . Copia e incolla il contenuto del file della chiave privata jenkins.pem nella Chiave campo, come mostrato nella Figura 16.
Figura 16: Aggiunta delle credenziali Jenkins
Fai clic su Aggiungi , come mostrato nella Figura 17.
Figura 17: Provider di credenziali Jenkins>Aggiungi
Seleziona l'utente ec2 credenziale in Credenziali , come mostrato nella Figura 18. Fai clic su Salva .
Figura 18: Configurazione del nodo Jenkins
Viene aggiunto un nuovo agente, come mostrato nella Figura 19. Inizialmente, l'agente potrebbe non essere disponibile perché è ancora in fase di avvio.
Figura 19: Agente Jenkins creato
Fai clic sul link dell'agente e fai clic su Riavvia agente , se richiesto, come mostrato nella Figura 20.
Figura 20: Agente di rilancio
Il messaggio di output "Agente connesso e online con successo" indica che l'agente è stato avviato (vedere la Figura 21).
Figura 21: Agente connesso e online con successo
L'agente "jenkins" dovrebbe essere elencato come in esecuzione, come mostrato nella Figura 22.
Figura 22: Agente Jenkins in esecuzione
Conclusione
In questo articolo abbiamo introdotto l'importanza di automatizzare un'installazione di Kubernetes con Jenkins. Abbiamo iniziato installando Jenkins su CoreOS, creando gli artefatti prerequisiti e creando un nodo Jenkins. In un articolo successivo, configureremo un file Jenkins per una pipeline Jenkins e creeremo una pipeline Jenkins. E, in un terzo articolo, eseguiremo la pipeline Jenkins per installare Kubernetes.