redhat:openshift-redhat:openshift-labs:docker-image-openshift

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
redhat:openshift-redhat:openshift-labs:docker-image-openshift [2018/07/11 12:58] michaelredhat:openshift-redhat:openshift-labs:docker-image-openshift [2018/07/11 15:39] (current) – [Lab 3: Ein Docker Image deployen] michael
Line 1: Line 1:
 ====== Lab 3: Ein Docker Image deployen ====== ====== Lab 3: Ein Docker Image deployen ======
  
-In diesem Lab werden wir das erste "pre-built" Docker Image deployen und die OpenShift-Konzepte Pod, Service, DeploymentConfig und ImageStream noch etwas genauer anschauen.+{{fa>graduation-cap}} In diesem Lab werden wir das erste "pre-built" Docker Image deployen und die OpenShift-Konzepte Pod, Service, DeploymentConfig und ImageStream noch etwas genauer anschauen.
  
 ===== Aufgabe: LAB 3.1 ===== ===== Aufgabe: LAB 3.1 =====
Line 18: Line 18:
 ''**oc new-project**'' wechselt automatisch in das eben neu angelegte Projekt. Mit dem ''**oc get**'' Command können Ressourcen von einem bestimmten Typ angezeigt werden. ''**oc new-project**'' wechselt automatisch in das eben neu angelegte Projekt. Mit dem ''**oc get**'' Command können Ressourcen von einem bestimmten Typ angezeigt werden.
  
-Man verwendet +<WRAP center round important 100%> 
 +''Man verwendet''
 <code> <code>
 # oc get project # oc get project
 </code> </code>
 +''um alle Projekte anzuzeigen, auf die man berechtigt ist.''
 +</WRAP>
  
-um alle Projekte anzuzeigen, auf die man berechtigt ist. 
  
-Sobald das neue Projekt erstellt wurde, können wir in OpenShift mit dem folgenden Befehl das Docker Image deployen:+Sobald das neue Projekt erstellt wurde, wird dies auch gleich als aktuell aktives Projekt gewählt. Wir können nun also nun in OpenShift mit dem folgenden Befehl das Docker Image so direkt in das richtige Projekt deployen:
  
 <WRAP center box 100%> <WRAP center box 100%>
Line 54: Line 55:
     Run 'oc status' to view your app.     Run 'oc status' to view your app.
 </sxh> </sxh>
- 
 </WRAP> </WRAP>
  
Line 67: Line 67:
 **Tipp**: Verwende ''oc status'' um dir einen Überblick über das Projekt zu verschaffen. **Tipp**: Verwende ''oc status'' um dir einen Überblick über das Projekt zu verschaffen.
  
-Oder verwende den ''oc get pods'' Befehl mit dem -w Parameter, um fortlaufend Änderungen an den Ressourcen des Typs Pod anzuzeigen (abbrechen mit ctrl+c):+Oder verwende den ''oc get pods'' Befehl mit dem ''**-w** Parameter'', um fortlaufend Änderungen an den Ressourcen des Typs Pod anzuzeigen (abbrechen mit ctrl+c):
  
 <code> <code>
Line 80: Line 80:
   - Wähle Pods aus   - Wähle Pods aus
  
-Tipp Um eigene Docker Images für OpenShift zu erstellen, sollte man dabei die folgenden Best Practices befolgen: https://docs.openshift.com/container-platform/3.9/creating_images/guidelines.html+<wrap em>Wichtig:</wrap> Um eigene Docker Images für OpenShift zu erstellen, sollte man dabei die folgenden Best Practices befolgen: https://docs.openshift.com/container-platform/3.9/creating_images/guidelines.html
  
 ---- ----
  
  
 +===== Betrachten der soeben erstellten Ressourcen =====
 +
 +Als wir ''oc new-app appuio/example-spring-boot'' vorhin ausführten, hat OpenShift im Hintergrund einige Ressourcen für uns angelegt. Folgende drei Ressourcen werden zentral gebraucht, um ein Docker Image überhaupt korrekt zu deployen:
 +
 +  * [[https://docs.openshift.com/container-platform/3.9/architecture/core_concepts/pods_and_services.html#services|Service]]
 +  * [[https://docs.openshift.com/container-platform/3.9/architecture/core_concepts/builds_and_image_streams.html#image-streams|ImageStream]]
 +  * [[https://docs.openshift.com/container-platform/3.9/dev_guide/deployments/how_deployments_work.html|DeploymentConfig]]
 +
 +
 +==== Service ====
 +
 +Die Services dienen innerhalb OpenShift als Abstraktionslayer, Einstiegspunkt und Proxy/Loadbalancer auf die dahinterliegenden Pods. Der Service ermöglicht es, innerhalb OpenShift eine Gruppe von Pods des gleichen Typs zu finden und anzusprechen.
 +
 +**Als Beispiel**: Wenn eine Applikationsinstanz unseres Beispiels die Last nicht mehr alleine verarbeiten kann, können wir die Applikation bspw. auf drei Pods hochskalieren. OpenShift mapt diese als Endpoints automatisch zum Service. Sobald die Pods bereit sind, werden Requests automatisch auf alle drei Pods verteilt.
 +
 +**Note**: Die Applikation kann aktuell von aussen noch nicht erreicht werden, der Service ist ein OpenShift-internes Konzept. //Erst im nachfolgenden Lab (Lab4) werden wir unsere Applikation öffentlich verfügbar machen.//
 +
 +Nun schauen wir uns unseren Service mal etwas genauer an:
 +
 +<WRAP center box 100%>
 +
 +<code>
 +# oc get services
 +</code>
 +
 +<sxh plain; gutter: false;>
 +NAME                  CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
 +example-spring-boot   172.30.124.20   <none>        8080/TCP   2m
 +Wie Sie am Output sehen, ist unser Service (example-spring-boot) über eine IP und Port erreichbar (172.30.124.20:8080) Note: Ihre IP kann unterschiedlich sein.
 +</sxh>
 +
 +''**Note**: Die Service IP's bleiben während ihrer Lebensdauer immer gleich.''
 +</WRAP>
 +
 +
 +Mit dem folgenden Befehl können zusätzliche Informationen über den Service ausgelesenen werden:
 +
 +<WRAP center box 100%>
 +
 +<code>
 +# oc get service example-spring-boot -o json
 +</code>
 +
 +<sxh plain; gutter: false;>
 +{
 +    "kind": "Service",
 +    "apiVersion": "v1",
 +    "metadata": {
 +        "name": "example-spring-boot",
 +        "namespace": "techlab",
 +        "selfLink": "/api/v1/namespaces/techlab/services/example-spring-boot",
 +        "uid": "b32d0197-347e-11e6-a2cd-525400f6ccbc",
 +        "resourceVersion": "17247237",
 +        "creationTimestamp": "2018-07-11T 11:29:05Z",
 +        "labels": {
 +            "app": "example-spring-boot"
 +        },
 +        "annotations": {
 +            "openshift.io/generated-by": "OpenShiftNewApp"
 +        }
 +    },
 +    "spec": {
 +        "ports": [
 +            {
 +                "name": "8080-tcp",
 +                "protocol": "TCP",
 +                "port": 8080,
 +                "targetPort": 8080
 +            }
 +        ],
 +        "selector": {
 +            "app": "example-spring-boot",
 +            "deploymentconfig": "example-spring-boot"
 +        },
 +        "portalIP": "172.30.124.20",
 +        "clusterIP": "172.30.124.20",
 +        "type": "ClusterIP",
 +        "sessionAffinity": "None"
 +    },
 +    "status": {
 +        "loadBalancer": {}
 +    }
 +}
 +</sxh>
 +</WRAP>
 +
 +Mit dem entsprechenden Befehl können auch die Details zu einem Pod angezeigt werden:
 +
 +<code>
 +# oc get pod example-spring-boot-3-nwzku -o json
 +</code>
 +
 +<wrap em>Wichtig:</wrap> Zuerst den pod Namen aus dem Projekt abfragen (''oc get pods'') und im oberen Befehl ersetzen!
 +
 +Über den selector Bereich im Service wird definiert, welche Pods (labels) als Endpoints dienen. Dazu die entsprechenden Konfigurationen vom Service und Pod zusammen betrachten.
 +
 +<sxh plain; gutter: false;>
 +Service:
 +--------
 +...
 +"selector": {
 +    "app": "example-spring-boot",
 +    "deploymentconfig": "example-spring-boot"
 +},
 +
 +...
 +
 +Pod:
 +----
 +...
 +"labels": {
 +    "app": "example-spring-boot",
 +    "deployment": "example-spring-boot-1",
 +    "deploymentconfig": "example-spring-boot"
 +},
 +...
 +</sxh>
 +
 +Diese Verknüpfung ist mittels dem ''oc describe'' Befehl zu sehen:
 +
 +<WRAP center box 100%>
 +
 +<code>
 +# oc describe service example-spring-boot
 +</code>
 +
 +<sxh plain; gutter: false;>
 +Name: example-spring-boot
 +Namespace: techlab
 +Labels: app=example-spring-boot
 +Selector: app=example-spring-boot,deploymentconfig=example-spring-boot
 +Type: ClusterIP
 +IP: 172.30.124.20
 +Port: 8080-tcp 8080/TCP
 +Endpoints: 10.1.3.20:8080
 +Session Affinity: None
 +No events.
 +</sxh>
 +</WRAP>
 +
 +Unter Endpoints findet man nun den aktuell laufenden Pod.
 +
 +
 +==== ImageStream ====
 +
 +ImageStreams werden dafür verwendet, automatische Tasks auszuführen wie bspw. ein Deployment zu aktualisieren, z.B. wenn eine neue Version des Images oder des Basisimages verfügbar ist.
 +
 +Builds und Deployments können Image Streams beobachten und auf Änderungen entsprechend reagieren. In unserem Beispiel wird der Image Stream dafür verwendet, ein Deployment zu triggern, sobald etwas am Image geändert hat.
 +
 +Mit dem folgenden Befehl können zusätzliche Informationen über den Image Stream ausgelesen werden:
 +
 +<code>
 +# oc get imagestream example-spring-boot -o json
 +</code>
 +
 +
 +==== DeploymentConfig ====
 +
 +In der DeploymentConfig werden folgende Punkte definiert:
 +
 +  * **Update Strategy**: wie werden Applikationsupdates ausgeführt, wie erfolgt das Austauschen der Container?
 +  * **Triggers**: Welche Triggers führen zu einem Deployment? In unserem Beispiel ImageChange
 +  * **Container**
 +    * Welches Image soll deployed werden?
 +    * Environment Configuration für die Pods
 +    * ImagePullPolicy
 +  * **Replicas**, Anzahl der Pods, die deployt werden sollen
 +
 +Mit dem folgenden Befehl können zusätzliche Informationen zur DeploymentConfig ausgelesen werden:
 +
 +<code>
 +# oc get deploymentConfig example-spring-boot -o json
 +</code>
 +
 +Im Gegensatz zur DeploymentConfig, mit welcher man OpenShift sagt, wie eine Applikation deployt werden soll, definiert man mit dem ReplicationController, wie die Applikation während der Laufzeit aussehen soll (bspw. dass immer 3 Replicas laufen sollen).
 +
 +**Tipp**: für jeden Resource Type gibt es auch eine Kurzform. So könnte man bspw. ''oc get deploymentconfig'' auch einfach als ''oc get dc'' schreiben.
  
 ---- ----
Line 92: Line 269:
  
 Schaue dir die erstellten Ressourcen mit ''oc get [ResourceType] [Name] -o json'' und ''oc describe [ResourceType] [Name]'' aus dem ersten Projekt ''[DEINNAME]-example1'' an. Schaue dir die erstellten Ressourcen mit ''oc get [ResourceType] [Name] -o json'' und ''oc describe [ResourceType] [Name]'' aus dem ersten Projekt ''[DEINNAME]-example1'' an.
 +
 +----
 +
 +<wrap em>Ende von Lab 3!</wrap> {{fa>arrow-circle-right}} Weiter mit Lab 4
  
  
  • redhat/openshift-redhat/openshift-labs/docker-image-openshift.1531306713.txt.gz
  • Last modified: 2018/07/11 12:58
  • by michael