In this exercise we will learn how to scale our application. OpenShift has the capability to scale your application and make sure that many instances are always running.
Step 1: Switch to an existing project
For this exercise, we will be using an already running application. We
will be using the mycliproject-UserName
that you created in the
previous labs. Make sure you are switched to that project by using the
oc project
command and remember to substitute UserName.
$ oc project mycliproject-UserName
Step 2: View the deployment config
Take a look at the deploymentConfig
(or dc
) of the time
application
$ oc get deploymentConfig/time -o yaml apiVersion: v1 kind: DeploymentConfig metadata: annotations: openshift.io/generated-by: OpenShiftNewApp creationTimestamp: 2016-10-06T05:47:52Z generation: 2 labels: app: time name: time namespace: mycliproject-admin resourceVersion: "32084" selfLink: /oapi/v1/namespaces/mycliproject-admin/deploymentconfigs/time uid: 6bb299e0-8b88-11e6-ba5b-080027782cf7 spec: replicas: 1 selector: app: time deploymentconfig: time strategy: resources: {} rollingParams: intervalSeconds: 1 maxSurge: 25% maxUnavailable: 25% timeoutSeconds: 600 updatePeriodSeconds: 1 type: Rolling template: metadata: annotations: openshift.io/container.time.image.entrypoint: '["sh"]' openshift.io/generated-by: OpenShiftNewApp creationTimestamp: null labels: app: time deploymentconfig: time spec: containers: - image: 172.30.89.28:5000/mycliproject-admin/time@sha256:c490ea632c5362be3a3985285c623e674e58b876e70d9e3f94a151785b2ee87c imagePullPolicy: Always name: time ports: - containerPort: 8080 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log dnsPolicy: ClusterFirst restartPolicy: Always securityContext: {} terminationGracePeriodSeconds: 30 test: false triggers: - type: ConfigChange - imageChangeParams: automatic: true containerNames: - time from: kind: ImageStreamTag name: time:latest namespace: mycliproject-admin lastTriggeredImage: 172.30.89.28:5000/mycliproject-admin/time@sha256:c490ea632c5362be3a3985285c623e674e58b876e70d9e3f94a151785b2ee87c type: ImageChange status: availableReplicas: 1 details: causes: - imageTrigger: from: kind: ImageStreamTag name: time:latest namespace: mycliproject-admin type: ImageChange message: caused by an image change latestVersion: 1 observedGeneration: 2 replicas: 1 updatedReplicas: 1
Note that the replicas:
is set to 1
. This tells OpenShift that when
this application deploys, make sure that there is 1 instance.
The replicationController
mirrors this configuration initially; the
replicationController
(or rc
) will ensure that there is always the
set number of instances always running.
To view the rc
for your application first get the current pod running.
oc get pods NAME READY STATUS RESTARTS AGE time-1-45jtc 1/1 Running 0 2h time-1-build 0/1 Completed 0 2h
This shows that the build time-1
is running in pod 45jtc
. Let us
view the rc
on this build.
$ oc get rc/time-1 NAME DESIRED CURRENT AGE time-1 1 1 2h
Note: You can change the number of replicas in DeploymentConfig
or
the ReplicationController
.
However note that if you change the deploymentConfig
it applies to
your application. This means, even if you delete the current replication
controller, the new one that gets created will be assigned the REPLICAS
value based on what is set for DC. If you change it on the Replication
Controller, the application will scale up. But if you happen to delete
the current replication controller for some reason, you will loose that
setting.
Step 3: Scale Application
To scale your application we will edit the deploymentConfig
to 3.
Open your browser to the Overview page and note you only have one instance running.
Now scale your application using the oc scale
command (remembering to
specify the dc
)
$ oc scale --replicas=3 dc/time deploymentconfig "time" scaled
If you look at the web console and you will see that there are 3 instances running now image::images/scale_updown_overview_scaled.png[image]
Note: You can also scale up and down from the web console by going to the project overview page and clicking twice on image::scale_up.jpg[image] right next to the pod count circle to add 2 more pods.
On the command line, see how many pods you are running now:
$ oc get pods NAME READY STATUS RESTARTS AGE time-1-33wyq 1/1 Running 0 10m time-1-45jtc 1/1 Running 0 2h time-1-5ekuk 1/1 Running 0 10m time-1-build 0/1 Completed 0 2h
You now have 3 instances of time-1
running (each with a different
pod-id). If you check the rc
of the time-1
build you will see that
it has been updated by the dc
.
$ oc get rc/time-1 NAME DESIRED CURRENT AGE time-1 3 3 3h
Step 4: Idling the application
Run the following command to find the available endpoints
$ oc get endpoints NAME ENDPOINTS AGE time 10.128.0.33:8080,10.129.0.30:8080,10.129.2.27:8080 15m
Note that the name of the endpoints is time
and there are three ips
addresses for the three pods.
Run the oc idle endpoints/time
command to idle the application
$ oc idle endpoints/time Marked service mycliproject-veer/time to unidle resource DeploymentConfig mycliproject-veer/time (unidle to 3 replicas) Idled DeploymentConfig mycliproject-veer/time (dry run)
Go back to the webconsole. You will notice that the pods show up as idled.
At this point the application is idled, the pods are not running and no resources are being used by the application. This doesn’t mean that the application is deleted. The current state is just saved.. that’s all.
Step 6: Reactivate your application Now click on the application route URL or access the application via curl.
Note that it takes a little while for the application to respond. This is because pods are spinning up again. You can notice that in the web console.
In a little while the output comes up and your application would be up with 3 pods.
So, as soon as the user accesses the application, it comes up!!!
Step 7: Scaling Down
Scaling down is the same procedure as scaling up. Use the oc scale
command on the time
application dc
setting.
oc scale --replicas=1 dc/time deploymentconfig "time" scaled
Alternately, you can go to project overview page and click on image::scale_down.jpg[image] twice to remove 2 running pods.
Congratulations!! In this exercise you have learned about scaling and how to scale up/down your application on OpenShift!