Lab 2.3 - Deploy Hello-World Using ConfigMap w/ AS3

Just like the previous lab we’ll deploy the f5-hello-world docker container. But instead of using the Route resource we’ll use ConfigMap.

App Deployment

On okd-master1 we will create all the required files:

  1. Create a file called deployment-hello-world.yaml

    Tip

    Use the file in ~/agilitydocs/docs/class2/openshift

    deployment-hello-world.yaml
     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
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: f5-hello-world-web
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: f5-hello-world-web
      template:
        metadata:
          labels:
            app: f5-hello-world-web
        spec:
          containers:
          - env:
            - name: service_name
              value: f5-hello-world-web
            image: f5devcentral/f5-hello-world:develop
            imagePullPolicy: IfNotPresent
            name: f5-hello-world-web
            ports:
            - containerPort: 8080
              protocol: TCP
    
  2. Create a file called f5-hello-world-service-cluster.yaml

    Tip

    Use the file in ~/agilitydocs/docs/class2/openshift

    clusterip-service-hello-world.yaml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    apiVersion: v1
    kind: Service
    metadata:
      name: f5-hello-world-web
      namespace: default
      labels:
        app: f5-hello-world-web
        cis.f5.com/as3-tenant: AS3
        cis.f5.com/as3-app: A1
        cis.f5.com/as3-pool: web_pool
    spec:
      ports:
      - name: f5-hello-world-web
        port: 8080
        protocol: TCP
        targetPort: 8080
      type: ClusterIP
      selector:
        app: f5-hello-world-web
    
  3. Create a file called configmap-hello-world.yaml

    Tip

    Use the file in ~/agilitydocs/docs/class2/openshift

    configmap-hello-world.yaml
     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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: f5-as3-declaration
      namespace: default
      labels:
        f5type: virtual-server
        as3: "true"
    data:
      template: |
        {
            "class": "AS3",
            "declaration": {
                "class": "ADC",
                "schemaVersion": "3.10.0",
                "id": "urn:uuid:33045210-3ab8-4636-9b2a-c98d22ab915d",
                "label": "http",
                "remark": "A1 example",
                "AS3": {
                    "class": "Tenant",
                    "A1": {
                        "class": "Application",
                        "template": "http",
                        "serviceMain": {
                            "class": "Service_HTTP",
                            "virtualAddresses": [
                                "10.1.1.4"
                            ],
                            "pool": "web_pool",
                            "virtualPort": 80
                        },
                        "web_pool": {
                            "class": "Pool",
                            "monitors": [
                                "http"
                            ],
                            "members": [
                                {
                                    "servicePort": 8080,
                                    "serverAddresses": []
                                }
                            ]
                        }
                    }
                }
            }
        }
    
  4. We can now launch our application:

    oc create -f deployment-hello-world.yaml
    oc create -f clusterip-service-hello-world.yaml
    oc create -f configmap-hello-world.yaml
    
    ../../_images/f5-container-connector-launch-app.png
  5. To check the status of our deployment, you can run the following commands:

    oc get pods -o wide
    
    ../../_images/f5-okd-hello-world-pods.png
    oc describe svc f5-hello-world
    
    ../../_images/f5-okd-check-app-definition.png

    Attention

    To understand and test the new app pay attention to the Endpoints value, this shows our 2 instances (defined as replicas in our deployment file) and the overlay network IP assigned to the pod.

  6. Now that we have deployed our application sucessfully, we can check the configuration on bigip1. Switch back to the open management session on firefox.

    Warning

    Don’t forget to select the proper partition. Previously we checked the “okd” partition. In this case we need to look at the “AS3” partition. This partition was auto created by AS3 and named after the Tenant which happens to be “AS3”.

    GoTo: Local Traffic ‣ Virtual Servers

    Here you can see a new Virtual Server, “serviceMain” was created, listening on 10.1.1.4:80 in partition “AS3”.

    ../../_images/f5-container-connector-check-app-bigipconfig-as34.png
  7. Check the Pools to see a new pool and the associated pool members.

    GoTo: Local Traffic ‣ Pools and select the “web_pool” pool. Click the Members tab.

    ../../_images/f5-container-connector-check-app-web-pool-as3.png

    Note

    You can see that the pool members IP addresses are assigned from the overlay network (ClusterIP mode)

  8. Access your web application via firefox on the jumpbox.

    Note

    Select the “Hello, World” shortcut or type http://10.1.1.4 in the URL field.

    ../../_images/f5-container-connector-access-app3.png
  9. Hit Refresh many times and go back to your BIG-IP UI.

    Goto: Local Traffic ‣ Pools ‣ Pool list ‣ “web_pool” ‣ Statistics to see that traffic is distributed as expected.

    ../../_images/f5-okd-check-app-bigip-stats-clusterip.png

    Note

    Why is all the traffic directed to one pool member? The answer can be found by instpecting the “serviceMain” virtual service in the management GUI.

  10. Scale the f5-hello-world app

    oc scale --replicas=10 deployment/f5-hello-world-web -n default
    
  11. Check that the pods were created

    oc get pods
    
    ../../_images/f5-hello-world-pods-scale10-2.png
  12. Check the pool was updated on bigip1. GoTo: Local Traffic ‣ Pools and select the “web_pool” pool. Click the Members tab.

    ../../_images/f5-hello-world-pool-scale10-clusterip.png

    Attention

    Now we show 10 pool members. In module1 the number stayed at 3 and didn’t change, why?

  13. Remove Hello-World from BIG-IP.

    Attention

    In older versions of AS3 a “blank AS3 declaration” was required to completely remove the application/declaration from BIG-IP. In AS3 v2.20 and newer this is no longer a requirement.

    oc delete -f configmap-hello-world.yaml
    oc delete -f clusterip-service-hello-world.yaml
    oc delete -f deployment-hello-world.yaml
    

    Note

    Be sure to verify the virtual server and “AS3” partition were removed from BIG-IP.

Attention

This concludes Class 2 - CIS and OpenShift. Feel free to experiment with any of the settings. The lab will be destroyed at the end of the class/day.