Falls Sie wissen möchten, wie Sie Ihre eigene Private-Cloud-Infrastruktur aufbauen können – wir erklären Ihnen genau, wie man das mit Rancher und Docker macht. In diesem Schritt-für-Schritt-Tutorial führen wir Sie durch den genauen Prozess, den die DevOps-Berater von K&C verwenden, um eine private Cloud in einem Rechenzentrum mit einem Docker- und Rancher-Stack aufzubauen.
Warum eine private Cloud aufbauen?
Hybride Cloud-Konfigurationen, bei denen Arbeitslasten zwischen öffentlichen und privaten Clouds aufgeteilt werden, werden immer häufiger eingesetzt. Dies ist insbesondere auf Unternehmensebene der Fall, wo die Sensibilität der Daten, die Einhaltung von Vorschriften und andere Sicherheitsbedenken oft bedeuten, dass bestimmte Lasten eine öffentliche Cloud-Einrichtung einfach nicht nutzen können.
Aber es gibt noch eine Reihe anderer Gründe, warum eine private Cloud entweder eine Notwendigkeit oder eine Präferenz sein kann. Für ein DevOps-Softwareentwicklungsteam kann eine private Cloud als Entwicklungs- und Testumgebung als Teil einer CI/CD-Pipeline verwendet werden.
Private Clouds können auch verwendet werden, um Legacy-Anwendungen am Laufen zu halten, wenn es nicht sinnvoll ist, sie für die Kompatibilität mit einer öffentlichen Cloud-Plattform zu aktualisieren. Eine Private Cloud kann auch vollständig angepasst werden, um bestimmte Arbeitslasten optimal auszuführen, insbesondere solche, die mit Big Data zu tun haben.
Was auch immer Ihre Gründe für den Aufbau einer Private-Cloud-Umgebung sind, für uns bei K&C ist es vor allem eine Entwicklungs- und Testphase in einer DevOps-CI/CD-Pipeline, und dieses Schritt-für-Schritt-Tutorial sollte einen guten Ausgangspunkt für das Vorgehen bieten. Sie benötigen ein solides Grundwissen über Docker und Rancher, um Ihre eigene Private Cloud zu erstellen, selbst wenn Sie die folgenden Anweisungen befolgen.
Wie Sie Ihre private Cloud auf Rancher und Docker aufbauen
Wir werden den folgenden Cloud-nativen Tech-Stack verwenden, um unsere rechenzentrumsbasierte private Cloud aufzubauen:
- Named (round-robin) — Ausgleich durch DNS
- NGINX — Webserver zum Proxying von Anfragen für eine Webanwendung
- Docker — Software zur Automatisierung der Anwendungsbereitstellung und – verwaltung innnerhalb der Virtualisierungsumgebung auf Betriebssystemebene
- Docker-compose — ein Tool zum Starten und Verbinden mit mehreren Docker-Container
- Docker registry — Software zum Speichern von Docker-Images
- Rancher — Software von Rancher Labs, die eine einfache Bereitstellung und Verwaltung von Containern in jeder Organisation und auf jeder Infrastruktur ermöglicht
- Rancher compose — funktioniert nach dem Prinzip von Docker compose, dient zur Aktivierung der Rancher-Funktion
- Consul — ein Dienstprogramm für Service Discovery und Key/Value Storage
- Jenkins — ein Java geschriebenes Tool zur kontinuierlichen Integration
Aufbau einer grundlegenden Cloud-Infrastruktur
Für den Aufbau der Basisinfrastruktur (ohne NA) benötigen wir Folgendes:
Name
IP DNS
WebServer
192.168.11.140 web.cloud.infra
CloudMaster
192.168.11.72 master1.cloud.infra
CloudClient1
192.168.11.73 ci1.cloud.infra
CloudClient2 192.168.11.132 ci2.cloud.infra
* The IPs shown were taken from a real system and are required to match screenshots.
RANCHER OPERATION SCHEMA
1. Einrichten eines lokalen DNS
Die Cloud wird innerhalb unseres Netzwerks aufgebaut, wofür eine eigene Zone erstellt werden soll.
Bearbeiten Sie die Konfigurationsdatei named:
nano /etc/named/cloud.zones
zone "cloud.infra" { type master; file "/var/named/master/cloud.infra"; };
Erstellen Sie nun eine zone Datei (zone file):
2. Setting up a master server
nano /var/named/master/cloud.infra
$TTL 3600 @ IN SOA ns.cloud.infra. hostmaster.cloud.com. ( 2015111800 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 3600 ) ; Default Minimum TTL IN NS ns.cloud.infra. master1 A 192.168.11.72 ci1 A 192.168.11.73 ci2 A 192.168.11.132 web A 192.168.11.140
Und Named neustarten
service named restart
DNS wurde eingerichtet, also fahren Sie mit der Erstellung eines Maser-Servers fort
Der Master-Server wird untergebracht:
– Rancher-server
– Consul-server
– Jenkins
Starten Sie den Container mit Rancher
sudo docker run -d --restart=always -p 8080:8080 rancher/server
Unser Rancher Server ist verfügbar unter https://master1.cloud.infra:8080.
Richten wir die Autorisierung ein:
1. Admin -> Access Control
2. Select LOCAL
3. Add a new user
Richten Sie Umgebungen ein:
1. Gehen Sie auf den tab: Default
2. Klicken Sie auf: Add Environment
3. Wählen Sie aus: Cattle
4. Geben Sie den Namen ein und fügen Sie Benutzer hinzu
Einrichten einer eigenen Registrieung
- Gehen Sie auf das tab Infrastructure -> Registries
- Wählen Sie aus: Custom
- Fügen Sie Ihre Werte ein
Erstellen Sie einen API key
1. Gehen Sie auf dem das tab: API
2. Generieren und notieren Sie Ihre Werte
Lassen wir Rancher erst einmal außen vor und kommen bei der Einrichtung von Clients wieder darauf zurürck
Staren Sie den Container mit consul-server
docker run -d -p 8500:8500 -p 53:8600/udp -p 400:8400 -p 8300:8300 -p 8301:8301 -p 8302:8302 --name=consul gliderlabs/consul-server -bootstrap
Consul ist (wird) verfügbar unter https://master1.cloud.infra:8500
Starte Jenkins
docker run -d -p 32769:8080 jenkins
Jenkins ist (wird) verfügbar unter https://master1.cloud.infra:32769
3. Einrichten der Clients
Starten Sie zwei Docker-Container auf CloudClient1 und CloudClient2
– Rancher client
– Consul registrator
Um den Rancher client zu starten, gehen Sie zum Rancher-Master:
- Gehen Sie auf Infrastructure -> Hosts
- Und klicken Sie: Add Host
- Geben Sie die externe IP des Servers in Punkt4 ein
- Kopieren Sie den Inhalt von Punkt 5
Starten von Containern mit Rancher und Consul auf CloudClient1
sudo docker run -e CATTLE_AGENT_IP="192.168.11.73" -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://master1.cloud.infra:8080/v1/scripts/E0EC8B33530A5512C0C7:q2qdFb3XY4
docker run -d -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip 192.168.11.73 consul://192.168.11.72:8500
Führen Sie dasselber auf CloudClient2 durch, ändern Sie aber die IP-Adressen
sudo docker run -e CATTLE_AGENT_IP="192.168.11.132" -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://master1.cloud.infra:8080/v1/scripts/E0EC8B33530A5512C0C7:1473764400000:jq2qdFb3XY4
docker run -d -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip 192.168.11.132 consul://192.168.11.72:8500
Wen alles erfoglreich abgeschlossen wurde, werden wir unsere Server in Rancher sehen
* Bitte ignorieren Sie die gestarteten Dienste
4. Einrichten eines Projekts
Um ein Projekt in Rancher zu erstellen, müssen Sie eine Datei docker-compose v1 erstellen, Daten aus der API hinzufügen und Rancher-compose herunterladen.
*Rancher dammelt keine Projekte von Dockerfile, sondern lädt sie von der Registry herunter. Aus diesem Grund sammeln Sie entweder lokal oder von einem beliebigen Host
Erstellen Sie ein Homepage-Projekt:
nano docker-compose-rancher.yml
homepage: image: registry.cloud.infra/homepage ports: - "3000" links: - mongo environment: - MONGO_URL=mongodb://mongo:27017/homepage-dev - ROOT_URL=http://localhost - MAIL_URL=smtp://some.mailserver.com:25 labels: io.rancher.container.pull_image: always mongo: image: mongo:3.2.6 command: mongod --smallfiles volumes: - /srv/docker/homepage/mongo:/data/db labels: io.rancher.container.pull_image: always
Erstellen Sie außerdem ein einfaches Build-Skript
nano new.sh
#!/bin/bash IMAGE_NAME="registry.cloud.infra/homepage" case "${1}" in --build | -b ) docker build --no-cache --rm -t ${IMAGE_NAME} . ;; --run | -r ) docker run -d -P -t ${IMAGE_NAME} ;; --help | -h ) printf "usage: ${0} [arg]n--build,-btBuild imagen--run,-rtRunn" ;; * ) printf "Print ${0} --help for helpn" ;; esac
Globale Variablen exportieren
export RANCHER_URL='https://master1.cloud.infra:8080/v1/' export RANCHER_ACCESS_KEY='access' export RANCHER_SECRET_KEY='secret'
Und laden Sie Rancher-compose herunter (Link in der rechten unteren Ecke in Racher)
Das Projekt zu Rancher hinzufügen
rancher-compose --file docker-compose-rancher.yml create
Start the project
rancher-compose --file docker-compose-rancher.yml up -d
Wenn alles erfolgreich abgeschlossen wurde, wird in Rancher folgendes angezeigt:
In Consul werden wir auch Folgendes sehen:
5. Einrichten eines WEB server
NGINX installieren und consul-template herunterladen
yum install nginx wget https://releases.hashicorp.com/consul-template/0.15.0/
Consul-template für NGINX erstellen
nano /etc/nginx/conf.d/homepage.ctmpl
server { listen 80; server_name homepage.cloud.infra; client_max_body_size 4M; proxy_cache one; location / { proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; {{range service "homepage-3000" }} proxy_pass http://{{.Address}}:{{.Port}};{{end}} proxy_read_timeout 90; proxy_cache_valid 200 10m; proxy_cache_methods GET HEAD POST; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
NGINX und consul-template starten
service nginx start consul-template -consul master1.cloud.infra:8500 -template "/etc/nginx/conf.d/nginx.ctmpl:/etc/nginx/conf.d/nginx.conf:service nginx restart"
Jetzt verfolgt Consul-template die Änderungen im Consul-server und schreibt die Daten in die NGINX-Konfigurationen um.
6. Jenkins CI
Der letzte Feinschliff in unserer Cloud ist die kontinuierliche Integration.
Zu diesem Zweck fügen Sie der Konfiguration in Jenkins Werte hinzu, die Sie von der API erhalten haben
Erstellen Sie einen Job und fügen Sie Folgendes in das Element shell exec ein
cd $JOB_NAME; ./new.sh -b docker push registry/homepage rancher-compose --file docker-compose-rancher.yml up --force-upgrade --pull --confirm-upgrade -d
Ihre private Cloud ist bereit für die Bereitstellung von Projekten
Sobald Sie sich Schritt für Schritt durch den Prozess gearbeitet haben, ist Ihre private Cloud einsatzbereit. Ihr Cloud-Projekt kann nun mit einem Mausklick bereitgestellt werden. Die Container befinden sich auf den am wenigsten belasteten Hosts und sind über das interne Rancher-Netzwerk miteinander verbunden.
Wir sind nicht auf alle Funktionen dieser DevOps-Private-Cloud-Einrichtung im Detail eingegangen, aber Sie sollten einen guten Überblick über die Kernfunktionen haben.