Wie man eine private Cloud-Infrastruktur mit Rancher und Docker aufbaut

Ihre Schritt-für-Schritt-Anleitung zum Aufbau Ihrer eigenen robusten privaten Cloud

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.

Building a private cloud with a Docker and Rancher Stack

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

Rancher operation scheme

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

  1. Gehen Sie auf das tab Infrastructure -> Registries
  2. Wählen Sie aus: Custom
  3. 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 

Create an API Key - private cloud set-up using Docker and Rancher

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

Consul-server in private cloud set-up

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:

  1. Gehen Sie auf Infrastructure -> Hosts
  2. Und klicken Sie: Add Host
  3. Geben Sie die externe IP des Servers in Punkt4 ein
  4. Kopieren Sie den Inhalt von Punkt 5
Rancher master when building a private cloud

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:

Rancher view in private cloud build

In Consul werden wir auch Folgendes sehen:

Consul view in private cloud build

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.

Ausgewählte Blogbeiträge