Here’s a comprehensive guide comparing the oc
(OpenShift CLI) and kubectl
(Kubernetes CLI) commands, focusing on their differences, similarities, and real-world usage. This is especially useful for OpenShift developers or admins coming from Kubernetes backgrounds.
Comprehensive Guide: oc
vs kubectl
CLI
Aspect | oc (OpenShift CLI) | kubectl (Kubernetes CLI) |
---|---|---|
Definition | CLI tool for managing OpenShift resources and clusters | CLI tool for managing Kubernetes resources and clusters |
Default Cluster | Targets OpenShift (Red Hat Kubernetes platform) | Targets any CNCF-compliant Kubernetes cluster |
Installation | Installed with OpenShift tools or CRC | Comes bundled with most Kubernetes distributions |
Resource Access | Supports all Kubernetes APIs + OpenShift APIs (e.g., Build , Route , ImageStream ) | Supports only Kubernetes-native APIs |
Customization | Includes extended functionality and OpenShift-specific templates | No built-in support for OpenShift-only resources |
Login | Uses oc login with OpenShift OAuth | Uses kubectl config or kubeconfig files |
Compatibility | Fully supports kubectl commands as aliases | Cannot access OpenShift-only resources |
Similarities Between oc
and kubectl
Feature | Example Command (same for both) | Description |
---|---|---|
Get Pods | oc get pods / kubectl get pods | Lists pods in current namespace |
Describe Resource | oc describe pod <name> / kubectl describe pod <name> | Detailed pod description |
Apply YAML | oc apply -f app.yaml / kubectl apply -f app.yaml | Apply resource configuration |
Delete Resources | oc delete pod <name> / kubectl delete pod <name> | Delete a resource |
Logs | oc logs <pod> / kubectl logs <pod> | Stream logs from a container |
Port-forward | oc port-forward svc/myapp 8080:80 | Forward local port to a service |
Exec | oc exec -it <pod> -- /bin/bash | Get shell access to a pod |
Fact: Every valid
kubectl
command is also valid inoc
.
Differences: oc
Adds OpenShift-Specific Features
Command | Only in oc | Purpose |
---|---|---|
oc new-app | Yes | Rapid app deployment from source/image |
oc new-project | Yes | Create a new OpenShift project (namespace) |
oc adm | Yes | OpenShift admin utility commands |
oc rollout | Extended | Manage OpenShift-specific rollouts |
oc status | Yes | Visual overview of current project |
oc whoami | Yes | Check current OpenShift user |
oc get route | Yes | View OpenShift routes (external access) |
oc import-image | Yes | Import images into OpenShift image streams |
oc policy | Yes | RBAC management for OpenShift |
oc start-build | Yes | Trigger OpenShift BuildConfig |
oc logs -f bc/<buildConfig> | Yes | Stream logs from OpenShift build |
![]()
kubectl
does not support OpenShift-specific resources likeRoute
,BuildConfig
,DeploymentConfig
,ImageStream
.
Example: Deploying a Sample App
Using kubectl
(Kubernetes way):
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Using oc
(OpenShift way):
oc new-app nodejs~https://github.com/sclorg/nodejs-ex.git
oc expose svc/nodejs-ex
OpenShift simplifies workflows with oc new-app
and oc expose
.
Example: Working with Projects/Namespaces
# Create and switch in OpenShift
oc new-project myapp
# Create namespace in Kubernetes
kubectl create namespace myapp
kubectl config set-context --current --namespace=myapp
oc adm
(Admin Commands Exclusive to OpenShift)
Command | Purpose |
---|---|
oc adm diagnostics | Run cluster diagnostics |
oc adm top | View resource usage like kubectl top |
oc adm policy add-role-to-user | Manage RBAC easily |
oc adm groups | Manage OpenShift user groups |
oc adm node-logs | View node logs in OpenShift |
oc adm drain | Drain node (similar to kubectl drain ) |
When to Use What?
Use Case | Recommended CLI |
---|---|
Basic Kubernetes operations | kubectl or oc |
OpenShift templates, routes, and builds | oc only |
Admin tasks on OpenShift (RBAC, node mgmt) | oc adm |
Scripting across clusters (K8s generic) | kubectl |
Using CRC or OpenShift Online | oc preferred |
Summary Table
Command Type | kubectl Support | oc Support |
---|---|---|
Kubernetes Resources | ||
OpenShift Resources | ||
CLI Alias of Each Other | oc supports all kubectl | |
Admin Commands | oc adm ) | |
Developer Productivity |
Tip: You can always alias kubectl
to oc
if you’re using OpenShift full-time:
alias kubectl='oc'
I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND