[DOCKER] Bis zur produktiven Bereitstellung der Hallo-App mit k3d auf Time4VPS

Was ist k3d?

Eine leichte Version von Kubernetes namens k3s, veröffentlicht von Rancher Es ist ein Ersatz, der mithilfe von Docker einen Cluster erstellt. Für diejenigen, die bereits mit Docker-Compose auf VPS gearbeitet haben Ich denke, es ist ein Werkzeug, das eine Alternative sein kann.

Gesamtdurchfluss

Einführung

Dieses Mal ist es, da es sich um einen Test handelt, nahezu kostenlos Wir werden einen Cluster mit k3d erstellen. Der Server verwendet das stärkste Übersee-VPS Time4VPS. Sie können eine kostenlose Domain erhalten Ich werde es mit Freiheit bekommen. Verwenden Sie für das Docker-Container-Image diesen Typ.

Bereiten Sie den Time4VPS-Server vor

Bereiten Sie zunächst einen vps-Server von [hier] aus (https://www.time4vps.com/). Der in diesem Artikel verwendete Betriebssystemtyp ist übrigens "Ubuntu 18.04". Lesen Sie nach Abschluss des vps-Vertrags den folgenden Artikel und nehmen Sie die Grundeinstellungen für Ubuntu vor. Ubuntu minimale Anfangseinstellungen

Installieren Sie k3d auf Time4VPS

Natürlich benötigt k3d Docker, also installieren Sie Docker zuerst. Wenn Sie Docker unter Ubuntu installieren möchten, wird empfohlen, diesen Artikel zu lesen. Installieren Sie Docker unter Ubuntu 18.04 (auch + Docker-Compose)

Führen Sie nach der Installation von Docker Install k3d aus.

curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash

Erstellen Sie einen Cluster mit k3d

Jetzt ist es Zeit, einen Cluster mit k3d einzurichten. Wenden Sie für "" die von Ihnen vorbereitete vps-IP an.

k3d cluster create hoge-cluster --agents 2 --api-port <your vps global ip>:6550 -p 80:80@agent[0] -p 443:443@agent[0]

Verbinde dich mit lokalem kubectl

Führen Sie zunächst auf der Serverseite Folgendes aus und notieren Sie sich die Zertifikatsberechtigungsdaten und das Kennwort des Benutzers.

vi ~/.kube/config

Fügen Sie die Clusterinformationen, den Kontext und den Benutzer, die dieses Mal erstellt wurden, zum lokalen ~ / .kube / config hinzu. Dadurch wird das lokale Kubectl mit dem Cluster auf Time4VPS verbunden

~/.kube/config(lokal)


apiVersion: v1
kind: Config
current-context: hoge-cluster
preferences: {}

clusters:
  - name: hoge-cluster
    cluster:
      certificate-authority-data: <your certificate-authority-data in vps ~/.kube/config>
      server: https://<your vps global ip>:6550

users:
  - name: admin@hoge-cluster
    user:
      password: <your password in vps ~/.kube/config>
      username: admin

contexts:
  - name: hoge-cluster
    context:
      cluster: hoge-cluster
      user: admin@hoge-cluster

*** Überprüfen Sie, ob Sie eine Verbindung zum Cluster herstellen können ***

kubectl get node

NAME                        STATUS   ROLES    AGE   VERSION
k3d-hoge-cluster-agent-0    Ready    <none>   39m   v1.18.8+k3s1
k3d-hoge-cluster-agent-1    Ready    <none>   39m   v1.18.8+k3s1
k3d-hoge-cluster-server-0   Ready    master   39m   v1.18.8+k3s1

Installieren Sie den Cert-Manager im Cluster

Installieren Sie dann den Zertifizierungsmanager im Cluster, um den Dienst über SSL bereitzustellen. Die Installation von cert-manager ist sehr einfach, da die Installation mit einem einzigen Manifest abgeschlossen wird. Cert-Manager installieren

Holen Sie sich eine kostenlose Domain mit freenom

Ich halte es nicht für eine Verschwendung, eine kostenpflichtige Domain zu erhalten, indem Sie sie in einem Test ausprobieren. Es ist also praktisch, eine kostenlose Domain namens [freenom] zu erhalten (https://my.freenom.com/clientarea.php). Nutzen Sie den Service. Der zu erwerbende Domainname lautet diesmal "k3d-hello-app.tk".

Manifestdatei schreiben und bereitstellen

Schreiben Sie abschließend die Manifestdatei und stellen Sie sie bereit. Dieses Mal verwendet das Container-Image die von Google veröffentlichte Registrierung als Beispiel für GKE. Es ist eine einsame Aufgabe, da keine Image-Build-Arbeit oder Push-Arbeit an die Remote-Registrierung erfolgt. Bereiten Sie ein Verzeichnis vor, um das Manifest mit dem Namen k8s zu verwalten Bereiten wir zwei Arten von Manifestdateien vor.

#Die Verzeichnisstruktur sieht so aus
.
└── k8s
    ├── hello-app.yaml
    └── ingress.yaml

k8s/hello-app.yaml



apiVersion: v1
kind: Service
metadata:
  name: hello-app-service
spec:
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  selector:
    app: hello-app

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app-deployment
spec:
  replicas: 6
  selector:
    matchLabels:
      app: hello-app
  template:
    metadata:
      labels:
        app: hello-app
        env: stage
    spec:
      containers:
        - image: gcr.io/google-samples/hello-app:1.0
          name: hello-app
          ports:
            - containerPort: 8080

Die Art des Dienstes ist übrigens Load Balancer k3d kann type: LoadBalancer verwenden.

Schreiben Sie als Nächstes eine Manifestdatei für den Eingang. Ersetzen Sie "" durch Ihre eigene E-Mail-Adresse.

k8s/ingress.yaml


apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-issuer
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration, update to your own.
    email: <your mail address>
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-issuer
    solvers:
      - http01:
          ingress:
            class: traefik
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: letsencrypt-cert
spec:
  dnsNames:
    - k3d-hello-app.tk

  secretName: letsencrypt-cert-tls
  issuerRef:
    name: letsencrypt-issuer


---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hoge-cluster-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: "traefik"
    certmanager.k8s.io/issuer: "letsencrypt-issuer"
    certmanager.k8s.io/acme-challenge-type: http01
spec:
  tls:
    - secretName: letsencrypt-cert-tls
      hosts:
        - k3d-hello-app.tk

  rules:
    - host: k3d-hello-app.tk
      http:
        paths:
          - path: /
            backend:
              serviceName: hello-app-service
              servicePort: 8080

Wenden wir nun das Manifest an.

kubectl apply -f k8s -R

Übrigens brauche ich diesmal nicht die Flagge "-R". Wenn der Inhalt der Manifestdatei sehr groß wurde. Wenn es um etwas geht Ich denke, es wird notwendig sein, die Manifestdatei in Pakete zu unterteilen. Wenn Sie in einem solchen Fall das Flag "-R" hinzufügen, wird auch das Manifest angezeigt, das in Pakete unterteilt ist Wenn Sie es rekursiv anwenden, ist es das, was es ist.


#Zum Beispiel Paketaufteilung wie diese
.
└── k8s
    ├── hello-app.yaml
    └── ingress
        ├── certificate.yaml
        ├── ingress.yaml
        └── issuer.yaml

Sobald das Manifest angewendet wurde, überprüfen Sie es in Ihrem Browser. Wenn es wie folgt angezeigt wird und eine SSL-Konvertierung möglich ist, ist es abgeschlossen!

Screenshot 2020-10-02 19.26.18.png

Zusammenfassung

k3d richtet einen virtuellen Knoten auf einem physischen Server ein Da wir einen Cluster erstellen, gibt es keine Verfügbarkeit auf der Ebene des physischen Servers. Wenn ein Server angehalten wird, ist es verrückt! Und das Ganze Die in diesem Cluster betriebenen Dienste werden angehalten. Der sogenannte Explosionsradius ist keine große Aufregung. Es ist schon ein einmaliger Todesstoß ww Abhängig von der Größe Ihres Unternehmens entspricht es möglicherweise überhaupt nicht Ihren Anforderungen. Wenn Sie sich darauf konzentrieren, laufende Kosten wie die persönliche Größenordnung einzusparen Gibt es nicht einen virtuellen Cluster wie k3d? Insbesondere habe ich persönlich Docker-Compose für die Produktion verwendet! Es ist sehr empfehlenswert für diejenigen, die mögen.

Referenz

Recommended Posts

Bis zur produktiven Bereitstellung der Hallo-App mit k3d auf Time4VPS
Hinweis zum Pfad von request.getRequestDispatcher
Programmieren mit Ruby (unterwegs)
Ändern Sie die Bereitstellungsstufe von API-Dokumenten mit dem Gradle Swagger Generator Plugin
Samshin über den Wert des versteckten Feldes
Rückblick auf die Grundlagen von Java
Über die Behandlung von BigDecimal (mit Reflexion)
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
Richtig / falsch-Beurteilung basierend auf der Bedingung jeder Differenz mit mehreren ganzen Zahlen
Ein kurzer Hinweis zur Verwendung von jshell mit dem offiziellen Docker-Image des JDK