Ansible: overzicht en gebruik
Wat is'Ansible ? Hoe te gebruiken? Welke concurrenten? Een kleine truc om een nieuw product te targeten dat al een tijdje een sterke indruk maakt.
Ansible verscheen in 2012. In oktober 2015 kondigde Red Hat de overname aan van Ansible, dat toen een vlaggenschipproduct in zijn stapel werd. Dit past perfect in de oplossingen van Red Hat en versterkt argumenten over het gemak van het beheer van een serverfarm.
Ansible is een oplossing voor het uitvoeren van implementaties, taakuitvoering en configuratiebeheer op meerdere machines tegelijk. Hij is makelaar minder en gebruiken SSH om de uit te voeren acties uit te voeren, zelf geschreven in Yamla.
dans Ansible, zijn er veel producten die in het begin storend kunnen zijn. Je hoort er misschien over Ansible-speelboek, Ansible kluis et Ansible Galaxy.
Ansible en de modules
Twee dingen om te weten:
- Wanneer u Ansible, je gebruikt modules. Er is een lijst met reeds geschreven modules, maar u kunt ook uw eigen modules schrijven. Je moet het in Python schrijven.
- U moet een domein/IP-groep of groep opgeven waar de actie moet worden gebruikt.
Voorbeeld:
We zullen controleren of onze machine goed is up met de moduul ping.
1
2
3
4
5
|
$ weerbaar localhost -m ping
lokale host | SUCCES => {
"veranderd": vals,
"ping": "pong"
}
|
Iets anders gebruiken dan localhost, zoals een reeks domeinen, moet u het bestand voltooien /etc/ansible/hosts.
1
2
3
|
[baptiste-donaux.fr]
www.baptiste-donaux.fr
ik.baptiste-donaux.fr
|
1
2
3
4
5
6
7
8
9
10
|
$ ansible -m ping baptiste-donaux.fr
ik.baptiste-donaux.fr | succes >> {
"veranderd": vals,
"ping": "pong"
}
www.baptiste-donaux.fr | succes >> {
"veranderd": vals,
"ping": "pong"
}
|
En zo verifiëren we dat a zwembad van servers in goede staat up . Hier is de lijst met de aanwezige basismodules.
Als u eenmaal begrijpt hoe een module werkt, kunt u alle andere modules op dezelfde manier gebruiken. Wanneer u een module gebruikt, kunt u argumenten (argument -a).
Bijvoorbeeld hoe u één opdracht over meerdere kunt uitvoeren.
1
2
3
4
5
6
|
$ ansible -m-shell -a “docker –versie” baptiste-donaux.fr
ik.baptiste-donaux.fr | succesvol | rc=0 >>
Docker-versie 1.12.1, build 23cf638
www.baptiste-donaux.fr | succesvol | rc=0 >>
Docker-versie 1.12.1, build 23cf638
|
Maar zorg er ook voor dat er een pakket geïnstalleerd is.
1
2
3
4
|
$ weerbaar -m apt -a "naam=vim staat=aanwezig" www.baptiste-donaux.fr
www.baptiste-donaux.fr | succes >> {
"veranderd": vals
}
|
Of update gewoon een of meer servers.
1
2
3
4
5
6
7
8
9
10
11
12
|
$ weerbaar -m apt -a “update_cache=ja” www.baptiste-donaux.fr
www.baptiste-donaux.fr | succes >> {
"veranderd": vals
}
$ weerbaar -m apt -a "upgraden = dist" www.baptiste-donaux.fr
www.baptiste-donaux.fr | succes >> {
"veranderd": vals,
"bericht": "Pakketlijsten lezen...nAfhankelijkheidsboom bouwen...nStatusinformatie lezen...n0 geüpgraded, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet geüpgraded.n",
"stderr": "",
"standaard": "Pakketlijsten lezen...nAfhankelijkheidsboom bouwen...nStatusinformatie lezen...n0 geüpgraded, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet geüpgraded.n"
}
|
Ansible en Playbooks (welkom in de echte wereld)
Het beheren van een machinepark met opdrachten is al goed, en het is vooral de basis vanAnsible. Desondanks is het moeilijk voor te stellen dat je een scenario speelt door de ene na de andere opdracht uit te voeren. Gelukkig voor ons, ansible-speelboek is hier voor!
Scenario's worden geschreven in YAML. Hier is een klein voorbeeld.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
– gastheren: baptiste-donaux.fr
taken:
- naam: Voeg APT-sleutel toe voor Docker-repository
apt_key:
sleutelserver: "hkp://p80.pool.sks-keyservers.net:80"
id: 58118E89F3A912897C070ADBF76221572C52609D
- naam: Voeg APT Docker-repository toe
apt_repository: repos='deb https://apt.dockerproject.org/repo debian-jessie main' staat=aanwezig
- naam: Update APT-cache met nieuwe repository
geschikt: update_cache=ja
- naam: Installeer het docker-engine-pakket als dit niet het geval isbestaat niet
apt: name=docker-engine state=present
- naam: Docker-service inschakelen en starten
systemd: enabled=ja state=gestart name=docker
– naam: InstallPython
apt: naam=python staat=aanwezig
– naam: Installeer PIP
apt: naam=python-pip staat=aanwezig
- naam: docker-py-afhankelijkheid
pip: naam=docker-py
- naam: Pull Nginx-afbeelding
docker_image: naam=nginx pull=ja
– naam: Maak een Nginx-container
havenarbeider_container:
naam: proxy
afbeelding: nginx
gepubliceerde_poorten:
– “80:80”
staat: aanwezig
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
$ ansible my_playbook.yml
SPEEL [baptiste-donaux.fr] ***************************************** * ***********
TAAK [setup] ********************************************** *********************
oké: [baptiste-donaux.fr]
TAAK [Voeg APT-sleutel toe For Docker-repository] ****************************************
oké: [baptiste-donaux.fr]
TAAK [APT Docker-repository toevoegen] ******************************************* ****
oké: [baptiste-donaux.fr]
TAAK [APT-cache bijwerken met nieuwe repository] ************************************
oké: [baptiste-donaux.fr]
TAAK [Installeer docker-engine-pakket if het doet er niet toebestaat niet] ***********************
oké: [baptiste-donaux.fr]
TAAK [Python installeren] ********************************************* *************
oké: [baptiste-donaux.fr]
TAAK [PIP installeren] ********************************************* ****************
oké: [baptiste-donaux.fr]
TAAK [docker-py afhankelijkheid] ***************************************** *********
oké: [baptiste-donaux.fr]
TAAK [Nginx Image Pull] ***************************************** * ************
oké: [baptiste-donaux.fr]
TAAK [Maak een Nginx-container] ******************************************* *****
oké: [baptiste-donaux.fr]
SPEEL RECAP ************************************************** ** *********************
baptiste-donaux.fr: ok=10 veranderd=0 onbereikbaar=0 mislukt=0
|
En dat is niet eenvoudiger. Naast het uitvoeren van een volledig scenario op een set servers, wordt een file .opnieuw proberen wordt gemaakt en door de opdracht opnieuw te starten, gaat het scenario verder waar u was gebleven.
Ansible Galaxy en Kluis
Galaxy en waar u uw mods kunt opslaan
Ansible-Galaxy is een hub om je modules te delen. Het werkt een beetje zoals Docker-hub voor Docker-afbeeldingen.
Vault en hoe u gevoelige informatie kunt beschermen
In sommige gevallen moet u gevoelige informatie opslaan in uw scenario's (wachtwoord, enz.). In plaats van deze informatie in platte tekst op te slaan, kunt u de bestanden coderen/decoderen.
Een klein voorbeeld kan geen kwaad.
1
2
3
4
|
# mijn_playbook.yml
– gastheren: localhost
taken:
- schelp: sshpass -p "fooo" scp -r /bar baz@localhost:/qux
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# Codeer uw bestand met Vault
$ansible-vault versleutelt my_playbook.yml
Nieuw Vault-wachtwoord:
Bevestig Nieuw Vault-wachtwoord:
Versleuteling geslaagd
# Geef het gecodeerde speelboek weer
$ kat mijn_playbook.yml
$ANSIBLE_VAULT;1.1;AES256
34396264333338636331323838386331393664623065383463663661373436643764336536326662
6238626432373334356436613935306630376461633136650a316561316531323937633963643032
64643239616561653864346132356537656536313030656532373733316262663536396438383262
3463373265636232640a626364306666373665303633663630353132383764323530646438383737
31336163633631373162356339633739356461656130353533306137613436663333383137376366
62383533393262376362393565386133306432323266393034616331333932663266613739653538
36663666333938323961343231366266323430376234376363353662386366373061636434613763
35653139316465613562613834373434636238643661633434326661303438666233313732653338
3264
# Gebruik het gecodeerde speelboek zonder het eerst te decoderen
$ ansible-playbook my_playbook.yml –ask-vault-pass
Kluis wachtwoord:
...
|
Conclusie
Dit artikel is bedoeld om te presenteren Ansible en laat zien hoe het uw taken kan vereenvoudigen. Voel je vrij om feedback te geven, dit bericht te verbeteren en/of te corrigeren.