{"id":49126,"date":"2025-04-15T14:43:51","date_gmt":"2025-04-15T14:43:51","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49126"},"modified":"2025-07-12T05:54:49","modified_gmt":"2025-07-12T05:54:49","slug":"advanced-openshift-local-learning-workflow-step-by-step-tutorials-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/advanced-openshift-local-learning-workflow-step-by-step-tutorials-guide\/","title":{"rendered":"Advanced OpenShift Local Learning Workflow: Step-by-Step Tutorials Guide"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>This guide assumes you already have <strong>OpenShift Local (formerly CRC)<\/strong> installed and running on your macOS or Linux machine. Now it&#8217;s time to level up your OpenShift skills with <strong>advanced, hands-on workflows<\/strong> designed to mimic real-world cluster usage.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Overview of What You&#8217;ll Learn<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Creating and Managing Projects<\/li>\n\n\n\n<li>Deploying Applications with Templates and Helm<\/li>\n\n\n\n<li>Configuring Routes and Services<\/li>\n\n\n\n<li>Working with Persistent Storage (PVC, PV)<\/li>\n\n\n\n<li>CI\/CD Pipelines using OpenShift Pipelines (Tekton)<\/li>\n\n\n\n<li>Managing Secrets and ConfigMaps<\/li>\n\n\n\n<li>Resource Limits, Quotas, and Requests<\/li>\n\n\n\n<li>Monitoring and Logging with built-in tools<\/li>\n\n\n\n<li>Role-Based Access Control (RBAC)<\/li>\n\n\n\n<li>GitOps (Optional Bonus)<\/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\">\ud83c\udfaf 1. Create and Manage Projects (Namespaces)<\/h2>\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 <span class=\"hljs-keyword\">new<\/span>-project dev-project\noc <span class=\"hljs-keyword\">get<\/span> projects\n<\/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<p><strong>Explanation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Projects are isolated Kubernetes namespaces with OpenShift-specific metadata.<\/li>\n\n\n\n<li>Use them to separate development, staging, and production workloads.<\/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\">\ud83d\ude80 2. Deploy Applications via Templates or Helm<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Option A: Using OpenShift Templates<\/h3>\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\">oc <span class=\"hljs-keyword\">new<\/span>-app --name=my-nginx nginx\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<h3 class=\"wp-block-heading\">Option B: Using Helm Charts (if Helm is enabled)<\/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\">helm repo add bitnami https:<span class=\"hljs-comment\">\/\/charts.bitnami.com\/bitnami<\/span>\nhelm install my-mysql bitnami\/mysql\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<p><strong>Scenario:<\/strong> Deploy a frontend-backend app using templates or Helm.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf10 3. Expose Applications with Routes<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc expose svc\/my-nginx\n<\/code><\/span><\/pre>\n\n\n<p><strong>Explanation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This creates an OpenShift Route, which exposes a service to the external world.<\/li>\n\n\n\n<li>Use this for browser access to your apps.<\/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\">\ud83d\udcbe 4. Work with Persistent Volumes (PVC\/PV)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Create PVC<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: my-pvc\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 1Gi\n<\/code><\/span><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">oc<\/span> <span class=\"hljs-selector-tag\">apply<\/span> <span class=\"hljs-selector-tag\">-f<\/span> <span class=\"hljs-selector-tag\">pvc<\/span><span class=\"hljs-selector-class\">.yaml<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Scenario:<\/strong> Use this PVC in a deployment for MySQL\/Postgres persistence.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd01 5. Build CI\/CD with OpenShift Pipelines (Tekton)<\/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 apply -f https:<span class=\"hljs-comment\">\/\/raw.githubusercontent.com\/tektoncd\/pipeline\/main\/examples\/v1beta1\/taskruns\/taskrun.yaml<\/span>\n<\/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><strong>Scenario:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build and deploy from GitHub automatically using <code>Pipeline<\/code>, <code>Task<\/code>, <code>TaskRun<\/code> resources.<\/li>\n\n\n\n<li>Use <code>Triggers<\/code> and <code>EventListeners<\/code> to integrate with GitHub Webhooks.<\/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\">\ud83d\udd10 6. Manage Secrets and ConfigMaps<\/h2>\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 create secret generic db-secret --<span class=\"hljs-keyword\">from<\/span>-literal=username=admin --<span class=\"hljs-keyword\">from<\/span>-literal=password=redhat\noc create configmap app-config --<span class=\"hljs-keyword\">from<\/span>-literal=theme=dark\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<p><strong>Use in Deployments:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">envFrom:\n  - secretRef:\n      name: db-secret\n  - configMapRef:\n      name: app-config\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 7. Configure Quotas and Limits<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc create quota mem-cpu-quota --hard=cpu=2,memory=4Gi,pods=10\n<\/code><\/span><\/pre>\n\n\n<p><strong>Scenario:<\/strong> Prevent developers from consuming all cluster resources.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcca 8. Monitor and Log<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">View Pod Logs<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">oc 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-7\"><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<h3 class=\"wp-block-heading\">View Cluster Console Metrics<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navigate to <code>https:\/\/console-openshift-console.apps-crc.testing\/<\/code> \u2192 Observe dashboards.<\/li>\n\n\n\n<li>View memory, CPU, and event logs per namespace or pod.<\/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\">\ud83d\udc65 9. Role-Based Access Control (RBAC)<\/h2>\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 create role dev-reader --verb=<span class=\"hljs-keyword\">get<\/span>,list --resource=pods\noc create rolebinding dev-binding --role=dev-reader --user=developer\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<p><strong>Scenario:<\/strong> Allow a user to only read pod data in a project.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd04 10. GitOps (Optional Advanced Scenario)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install Argo CD Operator<\/li>\n\n\n\n<li>Connect Argo CD to a Git repository<\/li>\n\n\n\n<li>Sync deployments automatically from Git<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">oc<\/span> <span class=\"hljs-selector-tag\">apply<\/span> <span class=\"hljs-selector-tag\">-f<\/span> <span class=\"hljs-selector-tag\">argo-install<\/span><span class=\"hljs-selector-class\">.yaml<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Use Case:<\/strong> Fully automate application deployments with Git versioning and drift detection.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary<\/h2>\n\n\n\n<p>This advanced OpenShift Local workflow is ideal for developers, DevOps engineers, and learners who want to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simulate real-world Kubernetes workloads<\/li>\n\n\n\n<li>Learn GitOps and CI\/CD pipelines<\/li>\n\n\n\n<li>Understand the essentials of secure and scalable OpenShift development<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This guide assumes you already have OpenShift Local (formerly CRC) installed and running on your macOS or Linux machine. Now it&#8217;s time to level up your OpenShift skills with advanced,&#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-49126","post","type-post","status-publish","format-standard","hentry","category-openshift"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49126","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=49126"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49126\/revisions"}],"predecessor-version":[{"id":49127,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49126\/revisions\/49127"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}