{"id":49104,"date":"2025-04-14T14:56:15","date_gmt":"2025-04-14T14:56:15","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49104"},"modified":"2026-02-21T07:27:56","modified_gmt":"2026-02-21T07:27:56","slug":"openshift-local-crc-basic-learning-workflow","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/openshift-local-crc-basic-learning-workflow\/","title":{"rendered":"OpenShift Tutorial \u2013 Basic Learning Workflow"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">How to login?<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc login https:<span class=\"hljs-comment\">\/\/api.XXXXXXXXXXXXXX.centralindia.aroapp.io:6443 --username=kubeadmin --password=EgzIY-DJPw2-3NXke-HNYmJ<\/span>\n\noc login --token=sha256~LLnTlPcjcNjWsQRqnSyTn99LSvxwQdm47gaiEdZJa20 --server=https:<span class=\"hljs-comment\">\/\/api.XXXXXXXXXXXXXX.centralindia.aroapp.io:6443<\/span>\n\ncurl -H <span class=\"hljs-string\">\"Authorization: Bearer sha256~LLnTlPcjcNjWsQRqnSyTn99LSvxwQdm47gaiEdZJa20\"<\/span> <span class=\"hljs-string\">\"https:\/\/api.XXXXXXXXXXXXXX.centralindia.aroapp.io:6443\/apis\/user.openshift.io\/v1\/users\/~<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/04\/image-35-1024x448.png\" alt=\"\" class=\"wp-image-49289\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/04\/image-35-1024x448.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/04\/image-35-300x131.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/04\/image-35-768x336.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/04\/image-35.png 1089w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Login to the Web Console and CLI<\/strong> on CRC<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">crc <span class=\"hljs-built_in\">console<\/span> --credentials\n<span class=\"hljs-built_in\">eval<\/span> $(crc oc-env)\noc login -u kubeadmin -p &lt;password&gt; --insecure-skip-tls-verify\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Copy the admin URL and <code>kubeadmin<\/code> credentials \u2192 open in browser.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\"><\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 2: <strong>Understand Projects (Namespaces)<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 List All Projects:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> projects\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Create Your Own:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-project demo-app\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 3: <strong>Deploy Your First Application<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> images\noc new-app --name=my-java-app registry.access.redhat.com\/ubi8\/openjdk-8-runtime@sha256:00cf28cf9a6c427962f922855a6cc32692c760764ce2ce7411cf605dd510367f\noc expose svc\/my-java-app\n\n\noc <span class=\"hljs-keyword\">get<\/span> imagestreams -n openshift\noc new-app --name=my-httpd --image-stream=openshift\/httpd\noc expose svc\/my-httpd\noc <span class=\"hljs-keyword\">get<\/span> route my-httpd<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Test in browser using the exposed route.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 4: <strong>Work with the Developer Console<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to the Web Console \u2192 <strong>Developer View<\/strong><\/li>\n\n\n\n<li>Switch to <code>demo-app<\/code> project<\/li>\n\n\n\n<li>Click <strong>+Add<\/strong> \u2192 Use \u201cContainer Image\u201d<\/li>\n\n\n\n<li>Search for image like <code>node:latest<\/code>, <code>php:8.2-apache<\/code>, or <code>quay.io\/...<\/code><\/li>\n<\/ol>\n\n\n\n<p>This gives visual understanding of how apps, builds, and deployments connect.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 5: <strong>Build from Source (Git to Deployment)<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Deploy from Git (Node.js example):<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-app https:<span class=\"hljs-comment\">\/\/github.com\/sclorg\/nodejs-ex.git<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Monitor:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> builds\noc logs -f bc\/nodejs-ex\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Access:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc expose svc\/nodejs-ex\noc <span class=\"hljs-keyword\">get<\/span> route\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 6: <strong>Scale Applications<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Increase Pods:<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc scale --replicas=3 deployment\/nginx\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Check Pods:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods -o wide\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 7: <strong>Access Pod Shell &amp; Logs<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">oc rsh <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">pod-name<\/span>&gt;<\/span>\noc logs <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">pod-name<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use this for debugging and viewing container state.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 8: <strong>Set Resource Limits<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">set<\/span> resources deployment nginx \n  --limits=cpu=500m,memory=256Mi \n  --requests=cpu=200m,memory=128Mi\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 9: <strong>Understand and Apply YAML<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Export a deployment: <code>oc get deployment nginx -o yaml &gt; nginx.yaml<\/code><\/li>\n\n\n\n<li>Edit and apply: <code>oc apply -f nginx.yaml<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 10: <strong>Use Secrets and ConfigMaps<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Create ConfigMap:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc create configmap app-config --<span class=\"hljs-keyword\">from<\/span>-literal=ENV=prod\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Create Secret:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc create secret generic app-secret --<span class=\"hljs-keyword\">from<\/span>-literal=DB_PASS=admin123\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Mount or Inject via ENV in deployment YAML.<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 11: <strong>OpenShift Pipelines (Tekton)<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In OperatorHub, install <strong>OpenShift Pipelines Operator<\/strong><\/li>\n\n\n\n<li>Create:\n<ul class=\"wp-block-list\">\n<li>PipelineResource<\/li>\n\n\n\n<li>Task<\/li>\n\n\n\n<li>Pipeline<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Use the developer console\u2019s <strong>Pipelines view<\/strong> to build CI\/CD<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 12: <strong>Monitor with Web UI<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>Observe \u2192 Metrics<\/strong><\/li>\n\n\n\n<li>View <strong>Dashboard<\/strong>, <strong>Topology<\/strong>, and <strong>Builds<\/strong><\/li>\n\n\n\n<li>Use <strong>Pod terminal<\/strong> from console<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Step 13: <strong>Delete a Project<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">delete<\/span> project demo-app\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcda Bonus Tips:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>CLI Command<\/th><\/tr><\/thead><tbody><tr><td>List all Pods<\/td><td><code>oc get pods<\/code><\/td><\/tr><tr><td>View events<\/td><td><code>oc get events<\/code><\/td><\/tr><tr><td>Port Forward<\/td><td><code>oc port-forward svc\/nginx 8080:80<\/code><\/td><\/tr><tr><td>RoleBinding<\/td><td><code>oc adm policy add-role-to-user admin developer<\/code><\/td><\/tr><tr><td>Enable Dev View<\/td><td>Use toggle in OpenShift console UI<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea Practice Ideas:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy a multi-container app with <code>mysql<\/code> + <code>wordpress<\/code><\/li>\n\n\n\n<li>Create blue-green deployments<\/li>\n\n\n\n<li>Use Tekton pipeline to auto-deploy from GitHub<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/a8084424b7c6e366da8f44b72105eea8.js\"><\/script>\n","protected":false},"excerpt":{"rendered":"<p>How to login? Login to the Web Console and CLI on CRC Copy the admin URL and kubeadmin credentials \u2192 open in browser. \u2705 Step 2: Understand Projects (Namespaces) \ud83d\udd39&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5153],"tags":[],"class_list":["post-49104","post","type-post","status-publish","format-standard","hentry","category-openshift"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49104"}],"version-history":[{"count":6,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49104\/revisions"}],"predecessor-version":[{"id":58952,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49104\/revisions\/58952"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}