- Basic Deployment Operations
- Starting a Deployment
- Viewing a Deployment
- Retrying a Deployment
- Rolling Back a Deployment
- Executing Commands Inside a Container
- Viewing Deployment Logs
- Setting Deployment Triggers
- Setting Deployment Resources
- Manual Scaling
- Assigning Pods to Specific Nodes
- Running a Pod with a Different Service Account
- Adding Secrets to Deployment Configurations from the Web Console
Basic Deployment Operations
Starting a Deployment
You can start a new deployment process manually using the web console, or from the CLI:
$ oc rollout latest dc/<name>
If a deployment process is already in progress, the command will display a message and a new replication controller will not be deployed. |
Viewing a Deployment
To get basic information about all the available revisions of your application:
$ oc rollout history dc/<name>
This will show details about all recently created replication controllers for the provided deployment configuration, including any currently running deployment process.
You can view details specific to a revision by using the --revision
flag:
$ oc rollout history dc/<name> --revision=1
For more detailed information about a deployment configuration and its latest revision:
$ oc describe dc <name>
The web console shows deployments in the Browse tab. |
Retrying a Deployment
If the current revision of your deployment configuration failed to deploy, you can restart the deployment process with:
$ oc rollout retry dc/<name>
If the latest revision of it was deployed successfully, the command will display a message and the deployment process will not be retried.
Retrying a deployment restarts the deployment process and does not create a new deployment revision. The restarted replication controller will have the same configuration it had when it failed. |
Rolling Back a Deployment
Rollbacks revert an application back to a previous revision and can be performed using the REST API, the CLI, or the web console.
To rollback to the last successful deployed revision of your configuration:
$ oc rollout undo dc/<name>
The deployment configuration’s template will be reverted to match the deployment revision specified in the undo command, and a new replication controller will be started. If no revision is specified with --to-revision
, then the last successfully deployed revision will be used.
Image change triggers on the deployment configuration are disabled as part of the rollback to prevent accidentally starting a new deployment process soon after the rollback is complete. To re-enable the image change triggers:
$ oc set triggers dc/<name> --auto
Deployment configurations also support automatically rolling back to the last successful revision of the configuration in case the latest deployment process fails. In that case, the latest template that failed to deploy stays intact by the system and it is up to users to fix their configurations. |
Executing Commands Inside a Container
You can add a command to a container, which modifies the container’s startup behavior by overruling the image’s ENTRYPOINT
. This is different from a lifecycle hook, which instead can be run once per deployment at a specified time.
Add the command
parameters to the spec
field of the deployment configuration. You can also add an args
field, which modifies the command
(or the ENTRYPOINT
if command
does not exist).
...
spec:
containers:
-
name: <container_name>
image: 'image'
command:
- '<command>'
args:
- '<argument_1>'
- '<argument_2>'
- '<argument_3>'
...
For example, to execute the java
command with the -jar
and /opt/app-root/springboots2idemo.jar arguments:
...
spec:
containers:
-
name: example-spring-boot
image: 'image'
command:
- java
args:
- '-jar'
- /opt/app-root/springboots2idemo.jar
...
Viewing Deployment Logs
To stream the logs of the latest revision for a given deployment configuration:
$ oc logs -f dc/<name>
If the latest revision is running or failed, oc logs
will return the logs of the process that is responsible for deploying your pods. If it is successful, oc logs
will return the logs from a pod of your application.
You can also view logs from older failed deployment processes, if and only if these processes (old replication controllers and their deployer pods) exist and have not been pruned or deleted manually:
$ oc logs --version=1 dc/<name>
For more options on retrieving logs see:
$ oc logs --help
Setting Deployment Triggers
A deployment configuration can contain triggers, which drive the creation of new deployment processes in response to events inside the cluster.
If no triggers are defined on a deployment configuration, a |
Configuration Change Trigger
The ConfigChange
trigger results in a new replication controller whenever changes are detected in the pod template of the deployment configuration.
If a |
Example 1. A ConfigChange Trigger
triggers:
- type: "ConfigChange"
ImageChange Trigger
The ImageChange
trigger results in a new replication controller whenever the content of an image stream tag changes (when a new version of the image is pushed).
Example 2. An ImageChange Trigger
triggers:
- type: "ImageChange"
imageChangeParams:
automatic: true (1)
from:
kind: "ImageStreamTag"
name: "origin-ruby-sample:latest"
namespace: "myproject"
containerNames:
- "helloworld"
1 | If the imageChangeParams.automatic field is set to false , the trigger is disabled. |
With the above example, when the latest
tag value of the origin-ruby-sample image stream changes and the new image value differs from the current image specified in the deployment configuration’s helloworld container, a new replication controller is created using the new image for the helloworld container.
If an |
Using the Command Line
The oc set triggers
command can be used to set a deployment trigger for a deployment configuration. For the example above, you can set the ImageChangeTrigger
by using the following command:
$ oc set triggers dc/frontend --from-image=myproject/origin-ruby-sample:latest -c helloworld
For more information, see:
$ oc set triggers --help
Setting Deployment Resources
This resource is available only if your administrator enabled the ephemeral storage technology preview. This feature is disabled by default. |
A deployment is completed by a pod that consumes resources (memory, CPU, and ephemeral storage) on a node. By default, pods consume unbounded node resources. However, if a project specifies default container limits, then pods consume resources up to those limits.
You can also limit resource use by specifying resource limits as part of the deployment strategy. Deployment resources can be used with the Recreate, Rolling, or Custom deployment strategies.
In the following example, each of resources
, cpu
, memory
, and ephemeral-storage
is optional:
type: "Recreate"
resources:
limits:
cpu: "100m" (1)
memory: "256Mi" (2)
ephemeral-storage: "1Gi" (3)
1 | cpu is in CPU units: 100m represents 0.1 CPU units (100 1e-3). |
2 | memory is in bytes: 256Mi represents 268435456 bytes (256 2 ^ 20). |
3 | ephemeral-storage is in bytes: 1Gi represents 1073741824 bytes (2 ^ 30). This applies only if your administrator enabled the ephemeral storage technology preview. |
However, if a quota has been defined for your project, one of the following two items is required:
A
resources
section set with an explicitrequests
:type: "Recreate"
resources:
requests: (1)
cpu: "100m"
memory: "256Mi"
ephemeral-storage: "1Gi"
1 The requests
object contains the list of resources that correspond to the list of resources in the quota.
See Quotas and Limit Ranges to learn more about compute resources and the differences between requests and limits.
- A limit range defined in your project, where the defaults from the
LimitRange
object apply to pods created during the deployment process.
Otherwise, deploy pod creation will fail, citing a failure to satisfy quota.
Manual Scaling
In addition to rollbacks, you can exercise fine-grained control over the number of replicas from the web console, or by using the oc scale
command. For example, the following command sets the replicas in the deployment configuration frontend
to 3.
$ oc scale dc frontend --replicas=3
The number of replicas eventually propagates to the desired and current state of the deployment configured by the deployment configuration frontend
.
Pods can also be autoscaled using the |
Assigning Pods to Specific Nodes
You can use node selectors in conjunction with labeled nodes to control pod placement.
OKD administrators can assign labels during cluster installation, or added to a node after installation. |
Cluster administrators can set the default node selector for your project in order to restrict pod placement to specific nodes. As an OKD developer, you can set a node selector on a pod configuration to restrict nodes even further.
To add a node selector when creating a pod, edit the pod configuration, and add the nodeSelector
value. This can be added to a single pod configuration, or in a pod template:
apiVersion: v1
kind: Pod
spec:
nodeSelector:
disktype: ssd
...
Pods created when the node selector is in place are assigned to nodes with the specified labels.
The labels specified here are used in conjunction with the labels added by a cluster administrator.
For example, if a project has the type=user-node
and region=east
labels added to a project by the cluster administrator, and you add the above disktype: ssd
label to a pod, the pod will only ever be scheduled on nodes that have all three labels.
Labels can only be set to one value, so setting a node selector of |
Running a Pod with a Different Service Account
You can run a pod with a service account other than the default:
Edit the deployment configuration:
$ oc edit dc/<deployment_config>
Add the
serviceAccount
andserviceAccountName
parameters to thespec
field, and specify the service account you want to use:spec:
securityContext: {}
serviceAccount: <service_account>
serviceAccountName: <service_account>
Adding Secrets to Deployment Configurations from the Web Console
Add a secret to your deployment configuration so that it can access a private repository.
Create a new OKD project.
Create a secret that contains credentials for accessing a private image repository.
Create a deployment configuration.
On the deployment configuration editor page or in the fromimage page of the web console, set the Pull Secret.
Click the Save button.