<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://jyje.github.io/profile-2/en/blog/</id>
    <title>jyje.online Blog</title>
    <updated>2026-02-22T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://jyje.github.io/profile-2/en/blog/"/>
    <subtitle>jyje.online Blog</subtitle>
    <icon>https://jyje.github.io/profile-2/en/img/favicon-32.png</icon>
    <entry>
        <title type="html"><![CDATA[🔄 Recap. 2025]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/recap-2025/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/recap-2025/"/>
        <updated>2026-02-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A year-end retrospective on 2025 — what I experienced, what I lacked, and what I learned from mistakes.]]></summary>
        <content type="html"><![CDATA[<p>Hello. A lot happened between 2024 and 2025. I'd like to look back and share my own retrospective.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-2024-crisis-for-the-team-and-the-community">1. 2024: Crisis for the Team and the Community<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#1-2024-crisis-for-the-team-and-the-community" class="hash-link" aria-label="Direct link to 1. 2024: Crisis for the Team and the Community" title="Direct link to 1. 2024: Crisis for the Team and the Community" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="A cold street" src="https://jyje.github.io/profile-2/en/assets/images/35f5d345-8953-4216-b2de-a0063ca69a80-a96af809abf181b871da39bbdb32085b.png" width="646" height="158" class="img_ev3q"></p>
<p>In 2024, while I was busy growing alongside the launch of Project Widearth, <a class="" href="https://jyje.github.io/profile-2/en/tags/maxst/">my company (MAXST)</a> ran into difficulties and I ended up leaving the team. I had wanted to grow more within that team, but after careful consideration of various circumstances, I decided to move on.
I was separated from colleagues I had worked with for years and faced the big challenge of finding a new team.
Still, I made the most of a rare period of rest — taking care of my health, keeping a calm mind, and focusing on applications and interviews.</p>
<ul>
<li class=""><strong>Career</strong>: Left MAXST in October 2024 / (MLOps/DevOps Engineer)</li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/blog/widearth-digital-twins-platforms-at-maxst/">Project</a>: Launched digital twin platform Widearth / (MLOps/DevOps Lead)</li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/tags/certifications/">Certifications</a>: Earned CKA, CKAD, CAPA, GitHub Foundations</li>
<li class=""><strong>Challenges</strong>: Job searching after resignation · Company in turmoil, country in turmoil</li>
</ul>
<p>Then in December, a state of emergency martial law was declared in South Korea. My sense is that this triggered a wave of hiring freezes and I received many rejection notices as a result. My own skills were also lacking, but I believe the political climate had a significant impact as well. I kept studying to fill the gaps. I also did everything I could to protect the community. Going through something I never imagined would happen in my lifetime — something that seemed impossible in the 21st century, something only found in history books — made me viscerally feel how difficult it is to live without a stable country and economy.</p>
<p>Fortunately, the people I care about and my family gave me the strength to keep going without giving up on finding a new job. Until the very last day of December, I gave my best to everything within my reach. I did what I could in the streets, and at home I spent my time polishing my resume rather than reflecting. That was how I closed out the year I left my first workplace. Even so, with the support of family and friends, I held on well and kept hoping for good news.</p>
<p>2024 was the hardest year of my life. It was also the year I received the most help from others. I am deeply grateful to everyone who stood by us. Thank you all for your perseverance. 🤝</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-2025-a-new-team-and-growth">2. 2025: A New Team and Growth<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#2-2025-a-new-team-and-growth" class="hash-link" aria-label="Direct link to 2. 2025: A New Team and Growth" title="Direct link to 2. 2025: A New Team and Growth" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Hyundai AutoEver Samsung Building" src="https://jyje.github.io/profile-2/en/assets/images/d621ffbf-b1bf-478a-ac78-7a53972da45a-281b342f2504e2606a89e83c3a4f69e4.png" width="1093" height="238" class="img_ev3q"></p>
<p>2025 was a year of recovery for me. Remarkably, many things stabilized quickly.
I'm grateful to be able to look back on those days like this.</p>
<ul>
<li class=""><strong>Career</strong>: Joined Hyundai AutoEver Dev Environment Platform Team in February 2025 / (AI/MLOps Engineer)</li>
<li class=""><strong>Project</strong>: Codebeamer AI Assistant PoC / (AI Architect)</li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/tags/certifications/">Certifications</a>: Earned KCNA, KCSA / (Targeting CKS in H1 2026)</li>
<li class=""><strong>Challenges</strong>: Adapting and delivering results after my first job change · Hands-on work and tech lead for Generative AI projects · Planning to expand Generative AI initiatives going forward</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="21-new-team-new-colleagues">2.1. New Team, New Colleagues<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#21-new-team-new-colleagues" class="hash-link" aria-label="Direct link to 2.1. New Team, New Colleagues" title="Direct link to 2.1. New Team, New Colleagues" translate="no">​</a></h3>
<p>It wasn't until early February, when I received the offer and made the decision to join, that I could finally breathe again. I'm grateful that my experience and potential were held in high regard.</p>
<p>In February 2025, I joined the <strong><a title="Posts about Hyundai AutoEver" class="" href="https://jyje.github.io/profile-2/en/tags/hyundai-autoever/">Hyundai AutoEver</a> Dev Environment Platform Team</strong>. It's the ICT arm of the Hyundai Motor Group, and I was delighted to return to the automotive field that I had been deeply immersed in during my graduate studies. Our team supports the software development environment for automotive technology — something I had experienced firsthand during my time as a researcher.</p>
<p>Being part of a large corporation means you can make bold new attempts on top of a stable foundation. However, as projects mature, a strong lock-in effect tends to develop, tying individuals to specific tasks. To keep growing, I need to take on more challenges than I did at a startup, while also improving stability.</p>
<p>I met great colleagues. My previous workplace had many people with similar career stages and ages, but the new team has colleagues across all experience levels, which allowed me to share and absorb a wide range of experiences. Everyone was relaxed and highly skilled. With their help, I was able to adapt quickly. I drank a lot of coffee. ☕️</p>
<p>The Dev Environment Platform Team is an organization within the Hyundai Motor Group that supplies collaboration tools for automotive software development:</p>
<ul>
<li class="">Commercial Application Lifecycle Management (ALM) tools like Codebeamer for integrated management of requirements, issues, and testing,</li>
<li class="">Popular commercial SW collaboration tools such as GitLab, Jira, and Confluence,</li>
<li class=""><a href="https://blog.naver.com/hyundai-autoever/223405344548" target="_blank" rel="noopener noreferrer" class="">BitWinHub</a>, an in-house automation tool for integrating SW development platforms (internally developed)</li>
</ul>
<p>These form the toolchain provided to the organization.</p>
<p>I was now able to work at the intersection of the automotive field I had been deeply involved with since graduate school and the DevOps domain focused on supporting people and platforms. Experiences that had been evaluated in pieces during other interviews all came together here as a cohesive set of career assets. Being recognized in that way only made me want to contribute more to the new company.</p>
<p>Over the past 10 months, I've been able to learn the culture of a group company where thousands of people work together, share my experience, and contribute to the team in my own way. Being a manufacturing-based company with a long history, it had a different scale and set of pros and cons compared to an agile startup. I also got to hear a lot about the pride and struggles of my teammates. I felt genuinely proud that people listened to the ideas and insights I brought to the table.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="22-new-role-new-project">2.2. New Role, New Project<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#22-new-role-new-project" class="hash-link" aria-label="Direct link to 2.2. New Role, New Project" title="Direct link to 2.2. New Role, New Project" translate="no">​</a></h3>
<p>I joined as a <strong>mid-level engineer</strong>. Based on my experience in DevOps and Generative AI, I was assigned the role of maintaining and improving the team's platform. After a brief adjustment period and through a process of role refinement, my responsibilities became more focused on <strong>Generative AI projects</strong>. My existing DevOps skills also proved useful since we were aiming for live services. (I later received feedback that it was great having someone who could wear multiple hats.)</p>
<p>I joined a part of over 10 members, within a group of 4. The first project I was assigned to was <strong>"Driving the PoC for an AI assistant to support Codebeamer."</strong>
As a group of four, we worked together on the following:</p>
<ul>
<li class="">Reviewing the target platform and Generative AI technologies</li>
<li class="">Developing AI agents and designing the UI</li>
<li class="">Data preprocessing and building a knowledge-base training pipeline</li>
<li class="">Code review, CI/CD, and monitoring setup</li>
</ul>
<p>As the AI Architect, I worked alongside team members who had limited Generative AI project experience, sharing my knowledge and growing together. Along the way, we successfully overcame both project management and technical challenges. After about 6 months of hands-on work, we conducted an internal beta test and wrapped up the PoC successfully. We built up the planning capabilities and technical stack needed to drive AI projects going into 2026.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="23-the-pressure-of-a-first-job-change">2.3. The Pressure of a First Job Change<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#23-the-pressure-of-a-first-job-change" class="hash-link" aria-label="Direct link to 2.3. The Pressure of a First Job Change" title="Direct link to 2.3. The Pressure of a First Job Change" translate="no">​</a></h3>
<p>There were colleagues who advised me from the very start not to try too hard, and I knew I was the type who could easily fall into impostor syndrome. But before I knew it, I was caught in an unsustainable routine. I was waking up early, studying on the bus on my way to work, proposing and driving various initiatives, communicating to be a good colleague, asking for feedback, and coming home to find more things to do.</p>
<p>This is a fine routine for a growing professional, but I took it too far. After pushing through the first half of 2025 this way, I did manage to make a good first impression and deliver consistent results. I received positive feedback at year-end as well, but my body had taken a toll over that short period. As project involvement and work requests will only increase, pacing myself is absolutely essential.</p>
<p>Lately, I've been trying to leverage Generative AI for work automation — doing more in the same amount of time. Come in early, leave early.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="24-regrets-and-the-path-forward">2.4. Regrets and the Path Forward<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#24-regrets-and-the-path-forward" class="hash-link" aria-label="Direct link to 2.4. Regrets and the Path Forward" title="Direct link to 2.4. Regrets and the Path Forward" translate="no">​</a></h3>
<p>Through last year's AI project, I was able to implement a successful GenAI service development cycle in a short period of time. Of course, there were a few things I wish had gone better.</p>
<ul>
<li class=""><strong>⏩ Speed Is Everything</strong>: AWS 'innovate faster'</li>
<li class=""><strong>📝 Validate with Results</strong>: I'll secure technical validation through a portfolio</li>
<li class=""><strong>🤝 Collaboration</strong>: I'll boldly build disposable tools for collaboration when needed</li>
</ul>
<p>I believe that addressing these areas in my personal capabilities will lead to excellent project execution and teamwork:</p>
<ol>
<li class=""><strong>Execution was fast, but I was obsessed with perfection.</strong>
<ul>
<li class=""><strong>Issue:</strong> Initial implementation was completed quickly, but I stuck to incrementally improving the existing framework rather than pivoting to improve results.</li>
<li class=""><strong>Solution:</strong> Build flexible plans and iterate quickly based on data.</li>
<li class=""><strong>Examples:</strong> Rebuilding the knowledge base, changing the tech stack, etc.</li>
<li class=""><strong>Going forward:</strong> Drawing from AWS's 'innovate faster' principle to pursue planning and implementation that enables rapid iteration.</li>
</ul>
</li>
<li class=""><strong>I lacked the process of persuading through results.</strong>
<ul>
<li class=""><strong>Issue:</strong> When technical decisions beyond the original plan were needed, I had no working demo to show teammates. Not having prepared these in advance meant decision-making consumed a lot of time.</li>
<li class=""><strong>Solution:</strong> When exploring AI technologies like RAG, MCP, and A2A, prepare examples in advance.</li>
<li class=""><strong>Examples:</strong> A working technical portfolio deployed on internal cloud</li>
<li class=""><strong>Going forward:</strong> Build and continuously update a technical portfolio. It can serve as a tool for decision-making and also as onboarding material.</li>
</ul>
</li>
<li class=""><strong>I could have done better on UX for collaboration.</strong>
<ul>
<li class=""><strong>Issue:</strong> I wrote solid code for data processing and evaluation, but didn't build a UI to share it and gather feedback. This created a structure that relied solely on result reports and made it hard to share results in real time. Even small updates required rebuilding the source code.</li>
<li class=""><strong>Solution:</strong> AI makes it easy to build disposable apps. FE/BE/DB can be designed for fast collaboration and decision-making.</li>
<li class=""><strong>Examples:</strong> Knowledge-base search performance evaluation UI, expert evaluation UI, AI demo tools</li>
<li class=""><strong>Going forward:</strong> I'll boldly build disposable tools whenever collaboration calls for it. I expect productivity to increase 3–4x compared to before.</li>
</ul>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-closing-heres-how-i-plan-to-keep-growing">3. Closing: Here's How I Plan to Keep Growing<a href="https://jyje.github.io/profile-2/en/blog/recap-2025/#3-closing-heres-how-i-plan-to-keep-growing" class="hash-link" aria-label="Direct link to 3. Closing: Here's How I Plan to Keep Growing" title="Direct link to 3. Closing: Here's How I Plan to Keep Growing" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="A photo from vacation" src="https://jyje.github.io/profile-2/en/assets/images/325b4b02-7169-4f66-b9bd-247358dc971d-258b0c869a1e51941ff52b99d1d8032f.png" width="921" height="171" class="img_ev3q"></p>
<p>I plan to keep doing what I did last year (2025). That means deepening my automotive SW domain knowledge in the new team and becoming more seasoned in hands-on work and collaboration. I also plan to further spread Generative AI within the team and company, applying it to work to expand productivity without limits.</p>
<ul>
<li class=""><strong>💪 Grind in the Work</strong>: I want to build expertise in Generative AI and LLMOps platforms within the automotive SW development domain, and further develop my practical and collaborative skills.</li>
<li class=""><strong>🦾 Leveraging Generative AI</strong>: I'll spread knowledge of Generative AI usage to the team and company, applying it to work to expand productivity without limits.</li>
<li class=""><strong>🤝 Collaboration</strong>: Every day, I'll strive to be a colleague who is great to work with.</li>
<li class=""><strong>🏥 Health Management</strong>: I'll make sure to exercise consistently so I can keep working for the long haul.</li>
</ul>
<p>Because I always dream of being a staff engineer who works hands-on and solves technical problems directly, I will keep learning and engaging with others to maintain my practical skills. I'll gratefully take on the opportunities that come my way, share good opportunities with others, and grow together. No one works alone. Every day, I'll strive to be a colleague who is great to work with. And to do that, I need to take care of my health too. This year (2026), I'll commit to exercising consistently.</p>
<p>Thank you for reading.</p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Recap" term="Recap"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🛡️ KCSA: Kubernetes and Cloud Native Security Associate (2025)]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/"/>
        <updated>2025-10-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Foundation knowledge for securing Kubernetes and cloud native technologies.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-certification">1. About the Certification<a href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/#1-about-the-certification" class="hash-link" aria-label="Direct link to 1. About the Certification" title="Direct link to 1. About the Certification" translate="no">​</a></h2>
<p>The Kubernetes and Cloud Native Security Associate (KCSA) certification validates foundational knowledge of security practices and principles for Kubernetes and the broader cloud native ecosystem. Created by the Cloud Native Computing Foundation (CNCF) in collaboration with The Linux Foundation, KCSA is designed for individuals who want to demonstrate their understanding of cloud native security concepts and best practices.</p>
<!-- -->
<p>The KCSA exam is a proctored, online test that consists of 60 four-choice multiple-choice questions to be completed within 90 minutes. All questions are theoretical and there are no hands-on tasks. A passing score of 75% is required, and the certification is valid for 2 years. The exam covers security aspects across the cloud native landscape, including:</p>
<ul>
<li class=""><strong>Kubernetes Security Fundamentals</strong>: Core security concepts, pod security, network policies, and RBAC</li>
<li class=""><strong>Container Security</strong>: Container image security, scanning, and runtime security</li>
<li class=""><strong>Cloud Native Security Tools</strong>: Security tools and practices in the CNCF ecosystem</li>
<li class=""><strong>Security Best Practices</strong>: Secure configuration, secrets management, and compliance</li>
<li class=""><strong>Threat Detection and Response</strong>: Monitoring, logging, and incident response in cloud native environments</li>
</ul>
<p>Unlike hands-on security certifications like CKS (Certified Kubernetes Security Specialist), KCSA focuses on theoretical knowledge and understanding of security concepts, making it an excellent entry point for those new to cloud native security.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience">2. My Experience<a href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/#2-my-experience" class="hash-link" aria-label="Direct link to 2. My Experience" title="Direct link to 2. My Experience" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="KCSA Certification" src="https://jyje.github.io/profile-2/en/assets/images/8f52ead9-2648-4bac-a881-ef8e8bf866dd-a11d0e9e05e22d73546242de371296c4.png" width="6875" height="5317" class="img_ev3q"></p>
<p><em>My KCSA certification 2025. Issued on October 27, 2025. Expires on October 27, 2027. You can verify my certification <a href="https://www.credly.com/badges/1206ad1c-e348-4328-934d-72e44ca434be" target="_blank" rel="noopener noreferrer" class="">here</a>.</em></p>
<p>I took the KCSA exam on October 27, 2025, and passed it successfully. Coming from hands-on experience with Kubernetes security through my CKA and CKAD certifications, I found the KCSA exam to be an excellent way to validate and systematize my theoretical understanding of cloud native security practices.</p>
<p>The exam format consists entirely of four-choice multiple-choice questions with no hands-on components:</p>
<ul>
<li class="">All 60 questions are theoretical multiple-choice questions (no command-line tasks)</li>
<li class="">Focus on security concepts, principles, and best practices rather than practical implementation</li>
<li class="">Covers security aspects across the entire cloud native ecosystem, not just Kubernetes</li>
</ul>
<p>The questions tested knowledge across various security domains, including Kubernetes security policies, container security, secrets management, network security, compliance, and security tools in the CNCF ecosystem. While my practical experience with Kubernetes was helpful, the exam required a comprehensive understanding of security principles and how they apply to cloud native environments.</p>
<p>To aid my preparation, I enrolled in the <a href="https://learn.kodekloud.com/user/courses/kubernetes-and-cloud-native-security-associate-kcsa" target="_blank" rel="noopener noreferrer" class="">Kubernetes and Cloud Native Security Associate (KCSA)</a> course on KodeKloud, taught by Mumshad Mannambeth and Nimesha Jinarajadasa. I bought basic plan on KodeKloud to access this course (Pro plan is not necessary). This comprehensive 6.78 hour course covered all exam domains including cloud native security overview, Kubernetes cluster component security, security fundamentals, threat models, platform security, and compliance frameworks. The course's hands-on labs, interactive content, and regular updates with the latest security information were particularly valuable. While KodeKloud provides hands-on lab environments for practice, the actual KCSA exam consists entirely of four-choice multiple-choice questions with no hands-on components. The course's interactive quizzes and mock exams helped reinforce security concepts and prepare for the actual exam format. The structured learning path and continuous content updates made it possible to pass the exam smoothly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-tips-for-exam-preparation">3. Tips for Exam Preparation<a href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/#3-tips-for-exam-preparation" class="hash-link" aria-label="Direct link to 3. Tips for Exam Preparation" title="Direct link to 3. Tips for Exam Preparation" translate="no">​</a></h2>
<p>Based on my experience, here are some important tips for those preparing for the KCSA exam:</p>
<p><strong>Essential Resources Before the Exam:</strong></p>
<ul>
<li class=""><strong>Official CNCF Curriculum</strong>: Review the official KCSA curriculum to understand the exact exam domains and their weightings</li>
<li class=""><strong>CNCF Security Landscape</strong>: Familiarize yourself with security-related projects in the <a href="https://landscape.cncf.io/" target="_blank" rel="noopener noreferrer" class="">CNCF Landscape</a> - understand security tools, their purposes, and how they fit into the cloud native security ecosystem. The landscape provides a comprehensive view of security projects categorized by their maturity levels (Graduated, Incubating, Sandbox)</li>
<li class=""><strong>CNCF Blog</strong>: Regularly review the <a href="https://www.cncf.io/blog/" target="_blank" rel="noopener noreferrer" class="">CNCF Blog</a> for the latest security updates, best practices, and announcements about new security projects. The blog often covers security-related topics that may appear on the exam</li>
<li class=""><strong>Recent CNCF Security Additions</strong>: Pay special attention to security projects that joined the CNCF ecosystem in the 2-3 months before your exam date. These newer security tools can appear on the exam, so staying current is crucial</li>
<li class=""><strong>Kubernetes Security Documentation</strong>: Review official Kubernetes security documentation, especially on pod security, network policies, RBAC, and secrets management</li>
</ul>
<p><strong>Study Strategy:</strong></p>
<ul>
<li class="">If you're already familiar with Kubernetes security (e.g., from CKS or security-focused work), the preparation can be completed more efficiently</li>
<li class="">Focus on understanding security "why" and "what" rather than just the "how" - KCSA tests conceptual security knowledge through four-choice multiple-choice questions only</li>
<li class="">Practice with mock exams to get comfortable with the multiple-choice format (remember: no hands-on tasks on the actual exam)</li>
<li class="">Review security best practices and common vulnerabilities in cloud native environments</li>
<li class="">Study CNCF security projects and their roles in the security ecosystem</li>
</ul>
<p><strong>Important Reminder:</strong>
The KCSA exam covers security aspects across the entire cloud native landscape, not just Kubernetes. Make sure to allocate study time for container security, secrets management, compliance, threat detection, and security tools beyond your Kubernetes knowledge.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-summary">4. Summary<a href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/#4-summary" class="hash-link" aria-label="Direct link to 4. Summary" title="Direct link to 4. Summary" translate="no">​</a></h2>
<p>The KCSA certification serves as an excellent foundation for understanding cloud native security. For those with hands-on Kubernetes experience (like CKA/CKAD/CKS holders), it provides an opportunity to validate and expand theoretical security knowledge. For beginners, it offers a structured learning path into cloud native security practices.</p>
<p>Key characteristics of KCSA:</p>
<ul>
<li class=""><strong>Entry-level security certification</strong>: Accessible to those new to cloud native security</li>
<li class=""><strong>Broad security coverage</strong>: Covers security aspects across the entire cloud native ecosystem, not just Kubernetes</li>
<li class=""><strong>Theoretical focus</strong>: Tests understanding of security concepts and principles</li>
<li class=""><strong>Complementary</strong>: Pairs well with hands-on certifications like CKS or practical security experience</li>
</ul>
<p>The KCSA certification validates a solid foundation in cloud native security technologies and serves as a stepping stone for more advanced security certifications or as a way to systematize existing security knowledge in the cloud native context.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-wiki-pages">Related wiki pages<a href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/#related-wiki-pages" class="hash-link" aria-label="Direct link to Related wiki pages" title="Direct link to Related wiki pages" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/k8s/">Kubernetes</a></li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/container/">Containers</a></li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/cncf/">CNCF</a></li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/linux-foundation/">Linux Foundation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-article">Related article<a href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/#related-article" class="hash-link" aria-label="Direct link to Related article" title="Direct link to Related article" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/">KCNA: Kubernetes and Cloud Native Associate</a></li>
</ul>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Certifications" term="Certifications"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="Linux_Foundation" term="Linux_Foundation"/>
        <category label="Security" term="Security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🎓 KCNA: Kubernetes and Cloud Native Associate (2025)]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/"/>
        <updated>2025-10-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Foundation knowledge for Kubernetes and cloud native technologies.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-certification">1. About the Certification<a href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/#1-about-the-certification" class="hash-link" aria-label="Direct link to 1. About the Certification" title="Direct link to 1. About the Certification" translate="no">​</a></h2>
<p>The Kubernetes and Cloud Native Associate (KCNA) certification validates foundational knowledge of Kubernetes and the broader cloud native ecosystem. Created by the Cloud Native Computing Foundation (CNCF) in collaboration with The Linux Foundation, KCNA is designed for individuals who want to demonstrate their understanding of cloud native technologies and Kubernetes fundamentals.</p>
<!-- -->
<p>The KCNA exam is a proctored, online test that consists of 60 four-choice multiple-choice questions to be completed within 90 minutes. All questions are theoretical and there are no hands-on tasks. A passing score of 75% is required, and the certification is valid for 2 years. The exam covers:</p>
<ul>
<li class=""><strong>Kubernetes Fundamentals</strong>: 46% - Core concepts, architecture, and basic operations</li>
<li class=""><strong>Container Orchestration</strong>: 22% - Container concepts, orchestration principles, and container runtimes</li>
<li class=""><strong>Cloud Native Architecture</strong>: 16% - Cloud native principles, patterns, and design</li>
<li class=""><strong>Cloud Native Observability</strong>: 8% - Monitoring, logging, and observability tools</li>
<li class=""><strong>Cloud Native Application Delivery</strong>: 8% - CI/CD, GitOps, and deployment strategies</li>
</ul>
<p>Unlike hands-on certifications like CKA or CKAD, KCNA focuses on theoretical knowledge and understanding of cloud native concepts, making it an excellent entry point for those new to the cloud native ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience">2. My Experience<a href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/#2-my-experience" class="hash-link" aria-label="Direct link to 2. My Experience" title="Direct link to 2. My Experience" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="KCNA Certification" src="https://jyje.github.io/profile-2/en/assets/images/8984032a-6f68-4aa6-bd7d-2c786141fc80-6720374a184b05ee50a5ed6eb46adb7d.png" width="6875" height="5317" class="img_ev3q"></p>
<p><em>My KCNA certification 2025. Issued on October 22, 2025. Expires on October 22, 2028. You can verify my certification <a href="https://www.credly.com/badges/759e92f0-7b3b-4788-8eff-c20ad1e2c645" target="_blank" rel="noopener noreferrer" class="">here</a>.</em></p>
<p>I took the KCNA exam on October 22, 2025, and passed it successfully. Coming from hands-on experience with Kubernetes through my CKA and CKAD certifications, I found the KCNA exam to be a good way to validate and systematize my theoretical understanding of the cloud native ecosystem.</p>
<p>The exam format consists entirely of four-choice multiple-choice questions with no hands-on components:</p>
<ul>
<li class="">All 60 questions are theoretical multiple-choice questions (no command-line tasks)</li>
<li class="">Focus on concepts and principles rather than practical implementation</li>
<li class="">Covers broader cloud native topics beyond just Kubernetes</li>
</ul>
<p>The questions tested knowledge across the entire cloud native landscape, including CNCF projects, cloud native architectures, observability tools, and application delivery practices. While my practical experience with Kubernetes was helpful, the exam required a broader understanding of the ecosystem.</p>
<p>To aid my preparation, I enrolled in the <a href="https://learn.kodekloud.com/user/courses/kubernetes-and-cloud-native-associate-kcna" target="_blank" rel="noopener noreferrer" class="">Kubernetes and Cloud-Native Associate (KCNA)</a> course on KodeKloud, taught by Mumshad Mannambeth. I bougth basic plan on KodeKloud to access this course (Pro plan is not necessary). This comprehensive 9 hour course covered all exam domains including cloud-native architecture, container orchestration, Kubernetes fundamentals, application delivery, and observability. While KodeKloud provides hands-on lab environments for practice, the actual KCNA exam consists entirely of four-choice multiple-choice questions with no hands-on components. The course's interactive quizzes and mock exams were particularly valuable for reinforcing concepts and preparing for the actual exam format. If you are familar with Kubernetes, It actually takes 1 week to complete this course. The structured learning path helped me systematically build knowledge across the entire cloud native ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-tips-for-exam-preparation">3. Tips for Exam Preparation<a href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/#3-tips-for-exam-preparation" class="hash-link" aria-label="Direct link to 3. Tips for Exam Preparation" title="Direct link to 3. Tips for Exam Preparation" translate="no">​</a></h2>
<p>Based on my experience, here are some important tips for those preparing for the KCNA exam:</p>
<p><strong>Essential Resources Before the Exam:</strong></p>
<ul>
<li class=""><strong>Official CNCF Curriculum</strong>: Review the official KCNA curriculum to understand the exact exam domains and their weightings</li>
<li class=""><strong>CNCF Landscape</strong>: Familiarize yourself with the <a href="https://landscape.cncf.io/" target="_blank" rel="noopener noreferrer" class="">CNCF Landscape</a> - understand the categorization of projects (Graduated, Incubating, Sandbox) and their purposes. The exam may include questions about recently added projects</li>
<li class=""><strong>Recent CNCF Additions</strong>: Pay special attention to projects that joined the CNCF ecosystem in the 2-3 months before your exam date. These newer projects can appear on the exam, so staying current is crucial</li>
</ul>
<p><strong>Study Strategy:</strong></p>
<ul>
<li class="">If you're already familiar with Kubernetes (e.g., from CKA/CKAD), the KodeKloud course can be completed in about 1 week</li>
<li class="">Focus on understanding the "why" and "what" rather than just the "how" - KCNA tests conceptual knowledge through four-choice multiple-choice questions only</li>
<li class="">Practice with mock exams to get comfortable with the multiple-choice format (remember: no hands-on tasks on the actual exam)</li>
<li class="">Review CNCF project documentation to understand each project's role in the cloud native ecosystem</li>
</ul>
<p><strong>Important Reminder:</strong>
The KCNA exam covers the entire cloud native landscape, not just Kubernetes. Make sure to allocate study time for observability tools, CI/CD practices, GitOps, and cloud native architecture patterns beyond your Kubernetes knowledge.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-summary">4. Summary<a href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/#4-summary" class="hash-link" aria-label="Direct link to 4. Summary" title="Direct link to 4. Summary" translate="no">​</a></h2>
<p>The KCNA certification serves as an excellent foundation for understanding the cloud native ecosystem. For those with hands-on Kubernetes experience (like CKA/CKAD holders), it provides an opportunity to validate and expand theoretical knowledge. For beginners, it offers a structured learning path into cloud native technologies.</p>
<p>Key characteristics of KCNA:</p>
<ul>
<li class=""><strong>Entry-level certification</strong>: Accessible to those new to cloud native technologies</li>
<li class=""><strong>Broad coverage</strong>: Covers the entire cloud native ecosystem, not just Kubernetes</li>
<li class=""><strong>Theoretical focus</strong>: Tests understanding of concepts and principles</li>
<li class=""><strong>Complementary</strong>: Pairs well with hands-on certifications like CKA or CKAD</li>
</ul>
<p>The KCNA certification validates a solid foundation in cloud native technologies and serves as a stepping stone for more advanced certifications or as a way to systematize existing knowledge.</p>
<p>I shared my certification on LinkedIn with <a href="https://www.linkedin.com/posts/jyje_the-linux-foundation-%EC%9E%90%EA%B2%A9%EC%88%98%EB%A3%8C%EC%A6%9Dkcna-kubernetes-activity-7388695644942684160-Nw_Y" target="_blank" rel="noopener noreferrer" class="">this post</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-wiki-pages">Related wiki pages<a href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/#related-wiki-pages" class="hash-link" aria-label="Direct link to Related wiki pages" title="Direct link to Related wiki pages" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/k8s/">Kubernetes</a></li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/container/">Containers</a></li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/cncf/">CNCF</a></li>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/wiki/d/linux-foundation/">Linux Foundation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-article">Related article<a href="https://jyje.github.io/profile-2/en/blog/kcna-kubernetes-and-cloud-native-associate/#related-article" class="hash-link" aria-label="Direct link to Related article" title="Direct link to Related article" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://jyje.github.io/profile-2/en/blog/kcsa-kubernetes-and-cloud-native-security-associate/">KCSA: Kubernetes and Cloud Native Security Associate</a></li>
</ul>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Certifications" term="Certifications"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="Linux_Foundation" term="Linux_Foundation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🎉 New Role at Hyundai AutoEver: AI/MLOps Engineer]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/hae-joined-hyundai-autoever-as-ai-mlops-engineer/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/hae-joined-hyundai-autoever-as-ai-mlops-engineer/"/>
        <updated>2025-02-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Excited to join Hyundai AutoEver as an AI/MLOps Engineer, focusing on enterprise AI platforms and ML pipelines for automotive domain. <br/><b>Since Feb 24, 2025</b>]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-aimlops-engineer-role">1. About the AI/MLOps Engineer Role<a href="https://jyje.github.io/profile-2/en/blog/hae-joined-hyundai-autoever-as-ai-mlops-engineer/#1-about-the-aimlops-engineer-role" class="hash-link" aria-label="Direct link to 1. About the AI/MLOps Engineer Role" title="Direct link to 1. About the AI/MLOps Engineer Role" translate="no">​</a></h2>
<p>The AI/MLOps Engineer position at Hyundai AutoEver focuses on developing enterprise-scale AI platforms and ML infrastructure for the automotive industry. Key responsibilities include:</p>
<!-- -->
<ul>
<li class="">Building enterprise AI platforms and LLM+RAG systems for automotive domain knowledge</li>
<li class="">Developing ML pipeline infrastructure for software-defined vehicles</li>
<li class="">Supporting autonomous driving development with MLOps practices</li>
<li class="">Implementing cloud-native solutions for scalable AI services</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience-and-capabilities">2. My Experience and Capabilities<a href="https://jyje.github.io/profile-2/en/blog/hae-joined-hyundai-autoever-as-ai-mlops-engineer/#2-my-experience-and-capabilities" class="hash-link" aria-label="Direct link to 2. My Experience and Capabilities" title="Direct link to 2. My Experience and Capabilities" translate="no">​</a></h2>
<p>My background uniquely positions me for this role, standing at the intersection of three core capabilities:</p>
<ul>
<li class=""><strong>Automotive Domain Knowledge</strong>: 8+ years of R&amp;D experience in computer vision and ADAS (Advanced Driver Assistance Systems).</li>
<li class=""><strong>Infrastructure &amp; DevOps Expertise</strong>: Designing and operating cost-effective systems based on hybrid Kubernetes clusters.</li>
<li class=""><strong>GenAI &amp; MLOps Capabilities</strong>: Hands-on experience in building LLM+RAG systems, ML pipelines, and automation solutions.</li>
</ul>
<p>This convergence of domain expertise, robust infrastructure engineering, and modern AI capabilities forms a cohesive foundation for contributing to the innovation of software-defined vehicles (SDVs).</p>
<ul>
<li class=""><strong>Technical Stack</strong>:
<ul>
<li class="">MLOps: Kubeflow, Katib, Training Operator, JupyterHub</li>
<li class="">LLMOps: RAG, Vector DBs, Ollama</li>
<li class="">Infrastructure: Kubernetes, AWS EKS, Terraform, Argo Projects</li>
<li class="">Computer Vision: SLAM, SfM, Supervised/Unsupervised Learning, Object Detection</li>
<li class="">Soft Skills: Attitude to be a good co-worker ☺️</li>
</ul>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-share-to-the-world">3. Share to the World<a href="https://jyje.github.io/profile-2/en/blog/hae-joined-hyundai-autoever-as-ai-mlops-engineer/#3-share-to-the-world" class="hash-link" aria-label="Direct link to 3. Share to the World" title="Direct link to 3. Share to the World" translate="no">​</a></h2>
<p>See my LinkedIn post for more details: <a href="https://www.linkedin.com/posts/jyje_ko-hyundai-autoever-%ED%98%84%EB%8C%80%EC%98%A4%ED%86%A0%EC%97%90%EB%B2%84-%EC%97%90%EC%84%9C-aimlops-activity-7301174374303158272-Lh5X?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAADjDTcIBdoOgl5sAEp4PtSRYd0bwmxg3mVM" target="_blank" rel="noopener noreferrer" class="">New Role: AI/MLOps Engineer at Hyundai AutoEver</a></p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Careers" term="Careers"/>
        <category label="AI" term="AI"/>
        <category label="MLOps" term="MLOps"/>
        <category label="Hyundai_AutoEver" term="Hyundai_AutoEver"/>
        <category label="LLM" term="LLM"/>
        <category label="LinkedIn" term="LinkedIn"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🐙 GitHub Foundations (2024)]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/github-foundations/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/github-foundations/"/>
        <updated>2024-11-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Core skills for GitHub fundamentals and collaboration.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-certification">1. About the Certification<a href="https://jyje.github.io/profile-2/en/blog/github-foundations/#1-about-the-certification" class="hash-link" aria-label="Direct link to 1. About the Certification" title="Direct link to 1. About the Certification" translate="no">​</a></h2>
<p>GitHub Foundations certification validates core skills in GitHub's basic structure and usage, from fundamental Git operations to enterprise collaboration features like CodeSpaces. This certification covers essential GitHub knowledge that every developer should possess in 2024, including:</p>
<!-- -->
<ul>
<li class="">Basic Git and GitHub usage</li>
<li class="">Advanced GitHub features: Issues, Pull Requests, Projects, Team Management</li>
<li class="">Latest GitHub products: CodeSpaces, Copilot</li>
<li class="">Enterprise features and administration</li>
</ul>
<p>The exam consists of 75 multiple-choice questions to be completed within 120 minutes. 60 questions are scored while 15 are unscored experimental items. The certification is valid for 3 years upon passing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience">2. My Experience<a href="https://jyje.github.io/profile-2/en/blog/github-foundations/#2-my-experience" class="hash-link" aria-label="Direct link to 2. My Experience" title="Direct link to 2. My Experience" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="GitHub Foundations Certification" src="https://jyje.github.io/profile-2/en/assets/images/587c064f-166f-4a37-8cd6-ac21c080b40c-6acea0269fadbcf6bb2167740131963b.png" width="1650" height="1275" class="img_ev3q"></p>
<p><em>My GitHub Foundations certification 2024. Issued on November 19, 2024. Expires on November 18, 2027. You can verify my certification <a href="https://www.credly.com/badges/876fa6b3-0b27-4ddf-bbb3-a9d853918566" target="_blank" rel="noopener noreferrer" class="">here</a>.</em></p>
<p>I prepared for the certification using two main resources:</p>
<ol>
<li class="">
<p><a href="https://learn.microsoft.com/en-us/training/paths/github-foundations" target="_blank" rel="noopener noreferrer" class="">Microsoft Learn - GitHub Foundations</a> (Free)</p>
<ul>
<li class="">Comprehensive hands-on labs</li>
<li class="">Always up-to-date with latest GitHub features</li>
<li class="">Practical exercises through GitHub Skills platform</li>
</ul>
</li>
<li class="">
<p><a href="https://www.linkedin.com/learning/paths/prepare-for-the-github-foundations-certification" target="_blank" rel="noopener noreferrer" class="">LinkedIn Learning - Prepare for the GitHub Foundations Certification</a> (Paid)</p>
<ul>
<li class="">Video-based learning</li>
<li class="">Good for review and consolidation</li>
<li class="">Covers enterprise features thoroughly</li>
</ul>
</li>
</ol>
<p>Additionally, there's an excellent free comprehensive video guide from freeCodeCamp that covers both exam content and practical tips:</p>
<p align="center">
  <iframe width="100%" height="500" src="https://www.youtube.com/embed/Jdc0i7RcBv8" frameborder="0" allowfullscreen=""></iframe>
</p>
<p>This video provides a thorough overview of the exam format and includes detailed explanations of key concepts. It's particularly helpful for understanding what to expect during the exam.</p>
<p>The exam tests both basic and advanced GitHub knowledge. While most questions were straightforward for experienced GitHub users, some enterprise-related questions were challenging. The exam interface provided features like:</p>
<ul>
<li class="">Question flagging for review</li>
<li class="">Multiple-choice and multiple-select questions</li>
<li class="">Keyboard shortcuts for efficient navigation</li>
</ul>
<p>I found the enterprise and team management sections particularly challenging, as these features are difficult to practice without enterprise access. However, the hands-on experience from Microsoft Learn's labs proved invaluable for the practical aspects of the certification.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-summary">3. Summary<a href="https://jyje.github.io/profile-2/en/blog/github-foundations/#3-summary" class="hash-link" aria-label="Direct link to 3. Summary" title="Direct link to 3. Summary" translate="no">​</a></h2>
<p>The GitHub Foundations certification is an excellent starting point for developers looking to validate their GitHub skills. While it may seem basic for experienced users, the certification covers important aspects of modern GitHub features that many developers might have overlooked, such as GitHub Copilot, CodeSpaces, and enterprise collaboration tools.</p>
<p>For those preparing for this certification, I recommend:</p>
<ul>
<li class="">Taking advantage of the free Microsoft Learn resources</li>
<li class="">Practicing with GitHub Skills hands-on labs</li>
<li class="">Focusing on enterprise features and team management concepts</li>
<li class="">Watching for certification discount opportunities (sometimes available at 50-100% off)</li>
</ul>
<p>While I don't plan to pursue other GitHub certifications immediately, I'm keeping an eye on upcoming GitHub AI certifications, particularly around GitHub Copilot and GitHub Models. For now, I'll focus on applying these validated skills in real-world projects and helping others in their GitHub journey.</p>
<p>I hope this post helps those considering the GitHub Foundations certification. Remember, effective version control and collaboration skills are fundamental to modern software development - whether you pursue this certification or not, mastering these skills is essential for any developer's career growth.</p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Certifications" term="Certifications"/>
        <category label="GitHub" term="GitHub"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🏙️ Widearth: AR & Digital Twins Platforms at Maxst]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/widearth-digital-twins-platforms-at-maxst/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/widearth-digital-twins-platforms-at-maxst/"/>
        <updated>2024-11-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A Fully Managed Platform for Real-World Space-Based AR & Digital Twin Services; I contributed to the development of the platform as a lead ML/Infra engineer.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://jyje.github.io/profile-2/en/blog/widearth-digital-twins-platforms-at-maxst/#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<ul>
<li class=""><strong>Title</strong>: <strong>Development of AR &amp; Digital Twin Platform <a href="https://widearth.world/" target="_blank" rel="noopener noreferrer" class="">Widearth</a></strong></li>
<li class=""><strong>Website</strong>: <a href="https://widearth.world/" target="_blank" rel="noopener noreferrer" class="">https://widearth.world</a></li>
<li class=""><strong>Period</strong>: <strong>Jan 2024 - Oct 2024 (10 months)</strong></li>
<li class=""><strong>Role</strong>: <strong>Lead ML/Infra ~ MLOps/DevOps + ML Backend + SRE [Contribution 75%]</strong>
<ul>
<li class=""><strong>DevOps &amp; SRE</strong>
<ul>
<li class="">IaC, GitOps, CI/CD Pipelines, Monitoring, Logging, Notifications, Multi-Deployment Scenarios, Emergency Calls</li>
</ul>
</li>
<li class=""><strong>Hybrid Clusters</strong>
<ul>
<li class="">AWS EKS + Bare Metal Kubernetes, API Gateway Pattern, Dynamic Instance Management, GPU Cost Optimization</li>
</ul>
</li>
<li class=""><strong>ML Workloads</strong>
<ul>
<li class="">ML APIs, ML Pipelines, Data lake, Dockerizing, Model CI/CD</li>
</ul>
</li>
</ul>
</li>
<li class=""><strong>Results: Successful service launch ~ Small Team, All Features Implemented, Improved Availability, Cost Savings</strong>
<ul>
<li class=""><strong>Service Launch</strong>
<ul>
<li class="">15 people total, 8 developers, 1 infrastructure manager participated in planning and development to contribute to the launch and operation of the platform</li>
</ul>
</li>
<li class=""><strong>High-Efficiency ML</strong>
<ul>
<li class="">Real-time execution of ML pipelines in the on-premises infrastructure of the hybrid cluster. Produced more than 300 space maps in the production environment, and reduced monthly cloud costs by 70%, saving approximately KRW 15 million per month compared to the previous service</li>
</ul>
</li>
<li class=""><strong>High-Availability Infrastructure</strong>
<ul>
<li class="">Hybrid cluster and disaster response to implement a service with 96% annual availability and a downtime of 14 days</li>
</ul>
</li>
</ul>
</li>
<li class=""><strong>Skills</strong>
<ul>
<li class="">AWS EKS</li>
<li class="">Kubespray</li>
<li class="">Python/FastAPI</li>
<li class="">Argo Workflows</li>
<li class="">Argo CD</li>
<li class="">Bitbucket Pipelines</li>
<li class="">Karpenter</li>
</ul>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="details">Details<a href="https://jyje.github.io/profile-2/en/blog/widearth-digital-twins-platforms-at-maxst/#details" class="hash-link" aria-label="Direct link to Details" title="Direct link to Details" translate="no">​</a></h2>
<p>We configured a hybrid architecture for the digital twin platform.</p>
<blockquote>
<p>Please refer to the omitted/simplified parts due to internal security regulations.</p>
</blockquote>
<p><img decoding="async" loading="lazy" alt="Widearth&amp;#39;s operation flow and user behavior patterns" src="https://jyje.github.io/profile-2/en/assets/images/964ffa59-e690-4b3b-b52a-a16e69728246-c5436186b7f57c54d638ef0f0fba457f.png" width="2560" height="1440" class="img_ev3q">
<em>Widearth's operation flow and user behavior patterns</em></p>
<p>Widearth is a <strong>B2B2C</strong> business that uses digital twin technology to create space maps for the following two users. It is a platform business that provides services to general consumers after passing through the main customers.</p>
<!-- -->
<ul>
<li class="">Description of users
<ul>
<li class=""><strong>User A (Digital twin content provider)</strong>
<ul>
<li class=""><strong>User A</strong> can create a space map (2) by using the workspace (1) they own.</li>
<li class="">The created space map is stored in the cloud and <strong>User A</strong> can share it through the content studio (3). The shared target is <strong>User B (digital twin content consumer)</strong>.</li>
<li class=""><strong>User A</strong> can also modify the content (4), add content, and process personal information for privacy.</li>
<li class="">The candidate group of <strong>User A</strong> is <strong>'a subject that makes a profit by sharing space through communication'</strong>, and examples are as follows:
<ul>
<li class="">Real Estate / Travel / Art Museum / Restaurant / Heavy Industry / Virtual Space / Disabled-Friendly Facilities</li>
<li class="">Their plans are 'to meet the needs of customers when they are not on site'.
<ul>
<li class="">Before visiting the site / After visiting the site / When it is not possible to visit the site / When the site has changed</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class=""><strong>User B (Digital twin content consumer)</strong>
<ul>
<li class=""><strong>User B</strong> is the subject that consumes the space map service provided by <strong>User A</strong>.</li>
<li class="">The candidate group of <strong>User B</strong> is <strong>'a subject that makes a profit by consuming space through communication'</strong>, and examples are as follows:
<ul>
<li class="">Potential Real Estate Consumer / Potential Traveler / Potential Art Museum Visitor / Potential Restaurant Customer / Potential Employee / Virtual Space User / Disabled Person And Helper/Protector</li>
<li class="">They are <strong>customers</strong> who can get information about the space and use the service from <strong>User A</strong> by paying for it.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<hr>
<p><img decoding="async" loading="lazy" alt="Widearth&amp;#39;s architecture corresponding to the public cloud area. The area where users interact" src="https://jyje.github.io/profile-2/en/assets/images/61a39148-4f5a-4424-862c-26a0adcda660-de78f58c3d2aa58c0406112a84a23019.png" width="2560" height="1440" class="img_ev3q">
<em>Widearth's architecture corresponding to the public cloud area. The area where users interact</em></p>
<ul>
<li class="">The area where users interact, mainly the public cloud area of the platform.</li>
<li class="">It is configured with an MSA (microservice architecture or mini-service architecture) that separates FE/BE/pipeline. Since the databases of each service are not strictly divided, it is appropriate to call it a <strong>'mini-service architecture'</strong>.</li>
<li class="">It can operate in single/multi-cluster and all servers are designed to be horizontally scalable according to usage/usage environment.</li>
<li class="">The pipeline is explained in detail in the hybrid architecture below.</li>
</ul>
<hr>
<hr>
<p><img decoding="async" loading="lazy" alt="Widearth&amp;#39;s architecture corresponding to the hybrid cloud (pipeline). The area where users interact" src="https://jyje.github.io/profile-2/en/assets/images/7e09a770-db47-4ae1-8fce-346220ac39ff-591ce79adce9817829ddf027193efdb0.png" width="2560" height="1440" class="img_ev3q">
<em>Widearth's architecture corresponding to the hybrid cloud (pipeline). The area where users interact</em></p>
<ul>
<li class="">The area where the pipeline is operating, using both on-premises and public cloud.</li>
<li class="">The pipeline is configured with the same specifications on both the on-premises and public cloud. To do this, a 'file storage' and an 'object storage' are configured in each cloud.</li>
<li class="">The database for logging and metadata for the back office is configured only in the public cloud for availability and management.</li>
<li class="">The pipeline is allocated to the available area of the on-premises data center first. If the on-premises does not respond or all areas are allocated, it is allocated to the public cloud second and the pipeline is activated.
<ul>
<li class="">If there is an outage/disaster in the on-premises data center,</li>
<li class="">If the request exceeds the available capacity of the on-premises data center.</li>
</ul>
</li>
<li class="">The public cloud is allocated to the cluster that services FE/BE with the minimum resource allocation for the pipeline. If the pipeline is allocated to the public cloud, the node is allocated and activated.</li>
</ul>
<p>Through this hybrid architecture, we can operate a platform with high performance, high efficiency, and high availability.</p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Achievements" term="Achievements"/>
        <category label="MAXST" term="MAXST"/>
        <category label="Digital_Twins" term="Digital_Twins"/>
        <category label="DevOps" term="DevOps"/>
        <category label="MLOps" term="MLOps"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="On_Premise" term="On_Premise"/>
        <category label="AWS" term="AWS"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🎓 CAPA: Certified Argo Project Associate (2024)]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/"/>
        <updated>2024-09-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Argo Project has been a genuinely useful part of my day-to-day work — so I decided to put that knowledge to the test with a certification. Here's my CAPA exam story, plus the official-docs links I actually put to use.]]></summary>
        <content type="html"><![CDATA[<p>I'm sharing my experience passing the <a href="https://training.linuxfoundation.org/certification/certified-argo-project-associate-capa/" target="_blank" rel="noopener noreferrer" class="">CAPA (Certified Argo Project Associate)</a> exam last weekend. CAPA is a brand-new certification launched in the first half of 2024, an Associate-level exam that validates your ability to work with the <a href="https://argoproj.github.io/" target="_blank" rel="noopener noreferrer" class="">Argo Project</a>. This post is a short introduction to the Argo Project and the CAPA certification, followed by a record of how I prepared and what I learned along the way. I hope it's useful to anyone considering or curious about CAPA 🚀</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-certification">1. About the Certification<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#1-about-the-certification" class="hash-link" aria-label="Direct link to 1. About the Certification" title="Direct link to 1. About the Certification" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-the-argo-project">What is the Argo Project?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#what-is-the-argo-project" class="hash-link" aria-label="Direct link to What is the Argo Project?" title="Direct link to What is the Argo Project?" translate="no">​</a></h3>
<figure class="figure_iPK5"><img src="https://jyje.github.io/profile-2/en/img/legacy/capa-octopus-mascot.jpg" alt="Not the official mascot - just a stuffed octopus toy that looks like one" loading="lazy"><figcaption>Not the official mascot - just a stuffed octopus (or "jjukkumi") toy that happens to look like one.<br>Photo by<!-- --> <a href="https://unsplash.com/@cosiela?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Cosiela Borta</a> <!-- -->on<!-- --> <a href="https://unsplash.com/photos/a-pink-octopus-stuffed-animal-sitting-on-top-of-a-table-S3VKHlvBfMA?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></figcaption></figure>
<p>The <a href="https://argoproj.github.io/" target="_blank" rel="noopener noreferrer" class="">Argo Project</a> is a suite of tools that combine with Kubernetes clusters to make them behave like a single DevOps platform — and it's getting more attention as Kubernetes adoption grows. It consists of four components:</p>
<ul>
<li class=""><strong>Argo Workflows</strong>: An orchestration engine for general-purpose workflows, including ML and CI/CD pipelines</li>
<li class=""><strong>Argo CD</strong>: A declarative continuous-deployment tool (the most well-known of the four)</li>
<li class=""><strong>Argo Rollouts</strong>: A deployment-strategy manager that supports advanced update strategies</li>
<li class=""><strong>Argo Events</strong>: An event-driven automation tool that reacts to code changes and other triggers</li>
</ul>
<p>At first glance it looks like a bundle of CI/CD tools, but each component is actually designed to work generically alongside Kubernetes. You can use Argo Workflows to build data/ML pipelines instead of CI pipelines, and Argo CD to deploy Kubernetes resources — or even Argo CD itself — instead of a web server.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-the-capa-certification">What is the CAPA Certification?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#what-is-the-capa-certification" class="hash-link" aria-label="Direct link to What is the CAPA Certification?" title="Direct link to What is the CAPA Certification?" translate="no">​</a></h3>
<p>The <a href="https://training.linuxfoundation.org/certification/certified-argo-project-associate-capa/" target="_blank" rel="noopener noreferrer" class="">CAPA (Certified Argo Project Associate)</a> exam tests your understanding and hands-on knowledge of all four Argo apps (Workflows, CD, Events, Rollouts). A few key facts:</p>
<ul>
<li class="">It's an internationally recognized technical certification administered by the CNCF and the Linux Foundation.</li>
<li class="">It's an entry-to-intermediate Associate-level exam — there's currently no higher-level Argo certification.</li>
<li class="">It's a live, proctored exam taken through the <a href="https://test-takers.psiexams.com/" target="_blank" rel="noopener noreferrer" class="">PSI Secure Browser</a> environment.</li>
<li class="">You have 90 minutes to answer 60 multiple-choice questions, and you need 75/100 to pass. You can take it up to twice.</li>
<li class="">It's valid for two years from the date you pass, and you'll know whether you passed within about 10 minutes of submitting.</li>
</ul>
<p>If you've taken Kubernetes certifications like CKA, CKAD, or CKS, this exam environment will feel familiar.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience">2. My Experience<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#2-my-experience" class="hash-link" aria-label="Direct link to 2. My Experience" title="Direct link to 2. My Experience" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="CAPA Certification" src="https://jyje.github.io/profile-2/en/assets/images/capa-certificate-27cac62e4346b6f918ae69bbcfa207c2.png" width="1200" height="928" class="img_ev3q"></p>
<p><em>My CAPA certification 2024. Issued on September 14, 2024, expires on September 15, 2026. You can verify it <a href="https://www.credly.com/badges/ee42c2c7-2ac3-411f-8713-cc26cbec8022" target="_blank" rel="noopener noreferrer" class="">here</a>.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-did-i-pursue-it">Why did I pursue it?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#why-did-i-pursue-it" class="hash-link" aria-label="Direct link to Why did I pursue it?" title="Direct link to Why did I pursue it?" translate="no">​</a></h3>
<p><strong>1. I'd been actively using the Argo Project at work for two years and wanted to take stock of where I stood.</strong></p>
<ul>
<li class="">Used Argo Workflows as the engine for data pipelines and CI/CD pipelines</li>
<li class="">Used Argo CD to deploy web applications and Kubernetes resources</li>
<li class="">Adopted Argo Rollouts to manage multiple deployment strategies as code</li>
<li class="">Used Argo Events for event sourcing in custom CI/CD setups</li>
</ul>
<p><strong>2. Adoption of the Argo Project is growing in Korea, and I wanted to keep up with the industry trend.</strong></p>
<p>Companies ranging from large IT firms to unicorn AI startups — Karrot (당근), Toss, Devsisters, Sionic AI, and more — are increasingly adopting the Argo Project. I wanted to properly absorb a trending technology, and go beyond simply documenting my experience by securing a verifiable, internationally recognized credential.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="did-it-actually-help">Did it actually help?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#did-it-actually-help" class="hash-link" aria-label="Direct link to Did it actually help?" title="Direct link to Did it actually help?" translate="no">​</a></h3>
<p>It helped a lot. I used Argo Workflows and Argo CD almost every day, but I'd never organized that knowledge systematically. Preparing for this exam gave me a chance to consolidate what I knew and fill in the gaps.</p>
<p><strong>Before passing the exam</strong>, I was able to firm up my understanding of the design intent and use cases for all four Argo apps, and discovered hidden features in Argo Rollouts and Argo Events — the two I'd used the least. I tried out every Argo Rollouts deployment strategy (canary, blue/green, delayed rolling, custom updates, and more) and a variety of Argo Events triggers (Kubernetes resource triggers, S3 triggers, custom webhook triggers, and more). I'd only ever used the features I needed day-to-day — this was my first real chance to put to use everything the contributors had built.</p>
<p><strong>After passing the exam</strong>, I started reading the official docs much more carefully, and kept finding features I didn't know about even in tools I used every day, like Argo Workflows and Argo CD — which surfaced a lot of things I now want to refactor. A few examples:</p>
<ul>
<li class=""><a href="https://argo-workflows.readthedocs.io/en/stable/argo-server-sso/" target="_blank" rel="noopener noreferrer" class="">Argo Workflows SSO guest accounts</a>
<ul>
<li class="">"Can a new hire monitor workflows without being able to delete resources?" → Yes — combine SSO with RBAC to keep initial permissions to a minimum. (This overlaps nicely with skills tested in CKA.)</li>
</ul>
</li>
<li class=""><a href="https://argo-cd.readthedocs.io/en/stable/user-guide/sync_windows/" target="_blank" rel="noopener noreferrer" class="">Argo CD Sync Windows</a>
<ul>
<li class="">"Can we turn off auto-sync during our Thursday-early-morning maintenance window?" → Yes — add a <code>deny</code> window for Thursdays in <code>syncWindows</code>, and syncing will be paused during that time.</li>
</ul>
</li>
<li class=""><a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/" target="_blank" rel="noopener noreferrer" class="">Argo CD ApplicationSet Git Generators</a>
<ul>
<li class="">"Can we sync and control the incidental resources that pop up during operations?" → Yes — <code>ApplicationSet</code> lets you sync derived Kubernetes resources with subdirectories of a git repository.</li>
</ul>
</li>
</ul>
<p>In the end, this reaffirmed something true of every open-source tool: <strong>the real skill is reading the official docs well and putting them to use.</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-did-i-prepare">How did I prepare?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#how-did-i-prepare" class="hash-link" aria-label="Direct link to How did I prepare?" title="Direct link to How did I prepare?" translate="no">​</a></h3>
<p>Since this is such a new exam, study material is scarce. There's plenty of Korean-language material for Argo Workflows and Argo CD, but for Argo Rollouts and Argo Events I had to rely almost entirely on the official documentation.</p>
<p>There are barely any third-party courses, but there is an official one: <a href="https://training.linuxfoundation.org/training/devops-and-workflow-management-with-argo-lfs256/" target="_blank" rel="noopener noreferrer" class="">DevOps and Workflow Management with Argo (LFS256)</a>. Going through it start to finish should cover the exam scope well. For some reason I bought just the exam without the course — I think I assumed that, since I was already using Argo at work, I could pass without much extra studying. That assumption cost me quite a bit of suffering. For your own sanity, I'd recommend buying the bundle when there's a discount.</p>
<p>I ended up self-studying with the <a href="https://argo-cd.readthedocs.io/" target="_blank" rel="noopener noreferrer" class="">official documentation</a> and the GitHub source code. The exam scope is laid out in the <a href="https://github.com/cncf/curriculum/blob/master/CAPA_Curriculum.pdf" target="_blank" rel="noopener noreferrer" class="">CAPA Curriculum PDF</a>, but since it was hard to predict exactly what would show up, I studied every item in it. My first pass was a quick read-through of the docs; the second pass was implementing the parts I thought were likely to appear. Since this is a multiple-choice exam rather than a hands-on one, it's not open-book and you can't verify things by running them — so it really pays off to experiment beforehand. For experimentation, I used Kubernetes simulators like docker-desktop, kind, microk8s, and orbstack — orbstack was my go-to on macOS for spinning up clusters quickly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-does-the-exam-work">How does the exam work?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#how-does-the-exam-work" class="hash-link" aria-label="Direct link to How does the exam work?" title="Direct link to How does the exam work?" translate="no">​</a></h3>
<p>Buy the exam from the <a href="https://training.linuxfoundation.org/certification/certified-argo-project-associate-capa/" target="_blank" rel="noopener noreferrer" class="">exam page</a> (cheaper if you can find an event coupon), then book a date on the <a href="https://trainingportal.linuxfoundation.org/learn/dashboard" target="_blank" rel="noopener noreferrer" class="">Training &amp; Certification dashboard</a>. On exam day, go through the readiness checklist shown on the same dashboard (see the screenshot below), then click <strong>Take Exam</strong> to begin.</p>
<p><img decoding="async" loading="lazy" alt="Exam preparation checklist" src="https://jyje.github.io/profile-2/en/assets/images/capa-exam-portal-checklist-04d6fa74868d16e8c0c66260fd5a71b0.jpg" width="1200" height="1131" class="img_ev3q"></p>
<p><em>The CAPA exam readiness checklist on the Linux Foundation Training &amp; Certification dashboard.</em></p>
<p>A few things worth knowing about how it's run:</p>
<ul>
<li class="">It's a <strong>multiple-choice exam with 4 options per question</strong>. There are surprisingly many obviously-wrong options, which makes the exam feel easier than expected — but there's almost always one option that looks deceptively close to the right answer, so read the English explanations carefully.
<ul>
<li class="">The difficulty felt <strong>comparable to CKAD</strong>. Roughly speaking, I'd rank related certifications as <a href="https://training.linuxfoundation.org/certification/kubernetes-cloud-native-associate/" target="_blank" rel="noopener noreferrer" class="">KCNA</a> &lt; <a href="https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/" target="_blank" rel="noopener noreferrer" class="">CKAD</a> = CAPA &lt; <a href="https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/" target="_blank" rel="noopener noreferrer" class="">CKA</a> &lt; <a href="https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/" target="_blank" rel="noopener noreferrer" class="">CKS</a>.</li>
<li class="">To score 75, you just need to be comfortable with the core features of all four Argo apps. To score 100, you'll also need to know the names and usage of rarely-used detail features, and be able to tell apart answers that look almost — but not quite — correct.</li>
</ul>
</li>
<li class="">You take it through the <a href="https://test-takers.psiexams.com/" target="_blank" rel="noopener noreferrer" class="">PSI Secure Browser</a> — familiar territory if you've taken CKA, CKAD, or CKS. Do double-check supported OS versions ahead of time, though: I was running a macOS developer beta and had to roll it back at the last minute before my exam.</li>
<li class=""><strong>It's not open-book.</strong> You can't access the official docs or a CLI, so there's no looking things up or verifying commands on the spot.</li>
<li class="">You can review all 60 questions again after finishing, and there's a <code>review</code> toggle to flag the ones you're unsure about.</li>
<li class="">You can request a short break (up to about 15 minutes) to use the restroom mid-exam, but the clock appeared to keep running during the break — so it's best to go beforehand, or be quick about it (I'd love to hear if others experienced this differently).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-the-exam-content-like">What's the exam content like?<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#whats-the-exam-content-like" class="hash-link" aria-label="Direct link to What's the exam content like?" title="Direct link to What's the exam content like?" translate="no">​</a></h3>
<blockquote>
<p>Per the exam's terms of service, I won't describe specific questions.</p>
</blockquote>
<ul>
<li class="">A few questions show you Argo Workflows YAML and ask you to determine the execution order — watch out, because "this can't be executed" is sometimes one of the options.</li>
<li class="">There are more GUI-related questions than I expected, in addition to CLI ones — it's worth browsing the GUI of the latest Argo Workflows and Argo CD versions before your exam.</li>
<li class="">Some questions test whether you know if a setting belongs at <code>spec.a.b</code>, <code>spec.b.a</code>, or <code>spec.c</code> in the YAML.</li>
<li class="">Overall, the difficulty isn't too high — if you've used these tools in production, you should be able to pass comfortably.</li>
</ul>
<p>A couple more tips that helped me:</p>
<ul>
<li class="">Flag any question you're unsure about with <code>review</code> and move on — you can sometimes pick up hints (e.g., correct YAML syntax) from the options in other questions.</li>
<li class="">Since it's multiple-choice, eliminating the options you're sure are wrong improves your odds even when you have to guess.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-summary">3. Summary<a href="https://jyje.github.io/profile-2/en/blog/capa-certified-argo-project-associate/#3-summary" class="hash-link" aria-label="Direct link to 3. Summary" title="Direct link to 3. Summary" translate="no">​</a></h2>
<p>I received my pass notification about a minute after clicking submit. I'm used to Kubernetes exams that take 24 hours to grade, so this caught me off guard — but it also meant the joy of passing arrived that much sooner 😊 This exam left me wanting to use the Argo Project even more, and even better, going forward.</p>
<ul>
<li class="">If a higher-level, hands-on certification is ever introduced, I imagine the difficulty would increase significantly — and I'd love to take that one too.</li>
<li class="">The subheading structure of this post was inspired by <a href="https://medium.com/imweb-tech/cka-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%9E%90%EA%B2%A9%EC%A6%9D-%EC%B7%A8%EB%93%9D-%ED%9B%84%EA%B8%B0-e68f945ae77c" target="_blank" rel="noopener noreferrer" class="">this tech blog post</a> (Korean). Thanks for the great write-up.</li>
<li class="">Thanks as well to our team's lead, who first introduced me to the Argo Project, and to the colleague who studied alongside me.</li>
<li class="">If you have any questions about the CAPA certification, feel free to leave a comment any time.</li>
</ul>
<p>The Argo Project is becoming increasingly important in the Kubernetes ecosystem, and I think CAPA is a meaningful way to validate your expertise with these tools. I hope this post helps those of you considering the certification. Show our adorable octopus mascot some love 🐙</p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Certifications" term="Certifications"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="Linux_Foundation" term="Linux_Foundation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🤖 MLOps: On-Premise MLOps with Open Source Projects]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/"/>
        <updated>2024-06-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[To enhance the efficiency of GPU resources, a case study of an on-premise cluster that provides MLOps services with Kubeflow, Argo Workflows, and more.]]></summary>
        <content type="html"><![CDATA[<blockquote>
<p>Photo by <a href="https://unsplash.com/@nampoh?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash" target="_blank" rel="noopener noreferrer" class="">Maxim Hopman</a> on <a href="https://unsplash.com/photos/a-group-of-people-standing-around-a-display-of-video-screens-IayKLkmz6g0?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash" target="_blank" rel="noopener noreferrer" class="">Unsplash</a></p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-overview">1. Overview<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#1-overview" class="hash-link" aria-label="Direct link to 1. Overview" title="Direct link to 1. Overview" translate="no">​</a></h2>
<p>Our team has built an on-premise MLOps cluster utilizing the latest open-source projects, including Kubeflow, JupyterHub, and Data Pipelines. With limited GPU resources, the architecture is designed to reduce underutilized GPU time and optimize the cost of running ML workloads. Additionally, a single training job can be accelerated by utilizing multiple GPUs in parallel, allowing it to leverage all GPUs in the cluster beyond the resources of a single GPU server.</p>
<!-- -->
<p>With on-premise resources, our MLOps cluster provides the following advantages:</p>
<ul>
<li class=""><strong>Resource Utilization</strong>: The cluster can efficiently utilize all available GPU resources in the cluster, reducing underutilized GPU time. <strong>24/7 GPU usage</strong> has increased GPU utilization by three times againt the previous environment.</li>
<li class=""><strong>AutoML</strong>: The cluster supports AutoML workflows, enabling automated model selection, hyperparameter tuning. The cluster can run <strong>more than 800 experiments</strong> for two weeks. The results were used for commercialization.</li>
<li class=""><strong>Parallel Training</strong>: A single training job can be accelerated by utilizing multiple GPUs in parallel, allowing it to leverage all GPUs in the cluster.</li>
<li class=""><strong>Remote Notebooks</strong>: The cluster provides researchers with on-demand Jupyter notebooks to distribute resources for ML research. Researchers can easily access the cluster and run experiments without worrying about resource constraints.</li>
</ul>
<p>The following diagram shows the architecture of the on-premise cluster for MLOps:</p>
<p><img decoding="async" loading="lazy" alt="Architecture Diagram of the on-premise cluster for MLOps" src="https://jyje.github.io/profile-2/en/assets/images/05ebb39f-ab74-400b-ae25-7c63f36629c9-0f4a1c981cbf80a5339be8c7f4aa7be0.png" width="2087" height="1568" class="img_ev3q"></p>
<p><strong>Architecture Diagram of the On-Premise Kubernetes Setup for MLOps;</strong> Users interact with <a href="https://www.kubeflow.org/" target="_blank" rel="noopener noreferrer" title="Kubeflow: Machine Learning Toolkit for Kubernetes" class="">Kubeflow</a> for managing and automating machine learning workflows. <a href="https://www.kubeflow.org/docs/components/katib/overview" target="_blank" rel="noopener noreferrer" title="Kubeflow Katib: Hyperparameter Tuning" class="">Kubeflow/Katib</a> utilizes the Argo Workflows as a workflow engine for hyperparameter tuning and <a href="https://www.kubeflow.org/docs/components/training/overview" target="_blank" rel="noopener noreferrer" title="Kubeflow Training Operator: Distributed Training" class="">Kubeflow/Training Operator</a> for managing training jobs. <a href="https://argoproj.github.io/workflows" target="_blank" rel="noopener noreferrer" title="Workflow Engine in Argo Projects" class="">Argo Workflows</a> orchestrates these machine learning pipelines. The MySQL cluster stores workflow metadata and results, while the Minio cluster handles artifact storage. The cluter contains GPU servers providing computational power for training models. This setup ensures efficient data handling and workflow management in an on-premise Kubernetes environment.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-problem-statement">2. Problem Statement<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#2-problem-statement" class="hash-link" aria-label="Direct link to 2. Problem Statement" title="Direct link to 2. Problem Statement" translate="no">​</a></h2>
<p>AI researchers in our organization were facing challenges with limited GPU resources. Each researcher was allocated a single GPU server, which led to underutilized GPU time when the server was idle and insufficient resources for large-scale experiments.</p>
<p>To address these challenges, we proposed integrating the GPU servers into the cluster and implementing an MLOps platform based on open-source projects. Our goals were followings:</p>
<ul>
<li class=""><strong>Resource Sharing</strong>: Allow researchers to share GPU resources in the cluster and leverage all available GPUs for their experiments.</li>
<li class=""><strong>User-Friendly Environments</strong>: Provide researchers with an easy-to-use environment for developing and running ML experiments.</li>
<li class=""><strong>AutoML Support</strong>: Implement AutoML workflows to automate model selection, hyperparameter tuning, and model evaluation.</li>
<li class=""><strong>Parallel Training</strong>: Enable parallel training of models by utilizing multiple GPUs in the cluster.</li>
<li class=""><strong>Remote Notebooks</strong>: Provide researchers with on-demand Jupyter notebooks to distribute resources for ML research.</li>
</ul>
<p>The project started with a Proof of Concept (PoC) to demonstrate the benefits of the MLOps platform and its impact on AI research.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-methods">3. Methods<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#3-methods" class="hash-link" aria-label="Direct link to 3. Methods" title="Direct link to 3. Methods" translate="no">​</a></h2>
<p>To achieve the architecture described above, we implemented the following steps:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="31-setup-on-premise-cluster">3.1. Setup On-Premise Cluster<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#31-setup-on-premise-cluster" class="hash-link" aria-label="Direct link to 3.1. Setup On-Premise Cluster" title="Direct link to 3.1. Setup On-Premise Cluster" translate="no">​</a></h3>
<p>We already had an on-premise cluster with GPU servers. We integrated the GPU servers into the cluster and configured the cluster to support MLOps workflows. The cluster deployed the following core components:</p>
<ul>
<li class=""><strong>Argo Workflows</strong>:
General purpose workflow controller for Kubernetes to run ML pipelines. Using Argo Workflows, we could provide researchers with a flexible and scalable workflow system without extra setup.</li>
<li class=""><strong>GPU Operator</strong>:
Operator to manage GPU resources in the cluster and enable researchers to utilize all available GPUs for their experiments.</li>
<li class=""><strong>Kubeflow</strong>:
Machine learning toolkit for Kubernetes that provides a platform for running, training, and deploying ML models. We used Kubeflow to manage trains and experiments.</li>
</ul>
<p>We chose these open source project to build license-free environments and easily customizable environments for researchers and devops engineers.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="32-implement-data-pipelines-with-argo-workflows">3.2. Implement Data Pipelines with Argo Workflows<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#32-implement-data-pipelines-with-argo-workflows" class="hash-link" aria-label="Direct link to 3.2. Implement Data Pipelines with Argo Workflows" title="Direct link to 3.2. Implement Data Pipelines with Argo Workflows" translate="no">​</a></h3>
<ul>
<li class="">
<p><strong>No, Kubeflow this time</strong>:
Kubeflow is a machine learning toolkit for Kubernetes. It provides a platform for running, training, and deploying ML models. We used Kubeflow to manage trains and experiments. But, in this case, we used Argo Workflows to manage data pipelines. The reason is that Argo Workflows is more flexible and easier to use for data pipelines. There are some facts of Kubeflow for data pipelines:</p>
<ul>
<li class="">
<p><strong>Instant Static Graph</strong>:
Kubeflow Pipeline shows a built-in static graph of the pipeline. It provides a visual representation of the pipeline so that researcher can easily understand how the pipeline works.</p>
</li>
<li class="">
<p><strong>Requiring Pre-Build</strong>:
Kubeflow requires pre-build data pipelines, which can be time-consuming and inflexible. Jobs of Kubeflow Pipeline require pre-build images for training and inference. So it is not easy to modify the pipeline rapidly. CI/CD pipelines might be helpful, but it still requires extra effort. This fact was a key disadvantage deciding to use Argo Workflows.</p>
</li>
</ul>
</li>
<li class="">
<p><strong>Again, Argo Workflows</strong>:
Argo Workflows is general purpose workflow controller for cloud native environments. With GPU Operator, the workflow can provide any graph structure of data pipelines. Generally, Argo Workflows are defined in YAML files, but we used Hera, an Argo Workflows SDK that allows us to define workflows in Python scripts. This approach made it easier to create and modify workflows for ML researchers. There are some facts of Argo Workflows for data pipelines:</p>
<ul>
<li class="">
<p><strong>No Pre-Build</strong>:
Argo Workflows does not require pre-build images for data pipelines. Researchers can define the pipeline in Python scripts and run it directly. This flexibility allows researchers to modify the pipeline easily and run experiments quickly.</p>
<p>In training stage, you can use pre-built images and add some script to traing models. Or you can use scratch CUDA images and setup the environment in the workflow with Hera SDK.
In inference stage, you can choose same way as training stage.</p>
</li>
<li class="">
<p><strong>No built-in graph. Everything are DIY</strong>:
Argo Workflows does not provide a built-in graph of the pipeline. Researchers need to define the graph structure in the Python script. This flexibility allows researchers to create custom pipelines tailored to their specific needs. This can be both pro and con. If you need a visualized graph, you can use tools like Grafana or TensorBoard to monitor the pipeline.</p>
</li>
</ul>
<p>Simply, if you have Argo Workflows in your cluster, you already have a data pipeline system via Argo Workflows and Hera SDK.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="33-setup-katib-automl-in-kubeflow">3.3. Setup Katib AutoML in Kubeflow<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#33-setup-katib-automl-in-kubeflow" class="hash-link" aria-label="Direct link to 3.3. Setup Katib AutoML in Kubeflow" title="Direct link to 3.3. Setup Katib AutoML in Kubeflow" translate="no">​</a></h3>
<p>Katib AutoML provides hyperparameter tuning for ML models and visualized parallel coordinates graph for researchers. We used Katib to automate the process of tuning hyperparameters and selecting the best model for the given dataset. Katib supports external engines like Argo Workflows, so we integrated Katib with Argo Workflows to manage the AutoML process.</p>
<p>The core function of Katib is continuous hyperparameter tuning. Researchers can define the search space of hyperparameters and the objective metric to optimize. Katib will run multiple experiments in parallel, tuning the hyperparameters based on the objective metric. Researchers can monitor the progress of the experiments and select the best model based on the results. And GPU resources can be used 24/7 for AutoML experiments. We ran <strong>800+ experiments</strong> for two weeks and used the results for commercialization.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="34-setup-training-operator-in-kubeflow">3.4. Setup Training Operator in Kubeflow<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#34-setup-training-operator-in-kubeflow" class="hash-link" aria-label="Direct link to 3.4. Setup Training Operator in Kubeflow" title="Direct link to 3.4. Setup Training Operator in Kubeflow" translate="no">​</a></h3>
<p>We chose Kubeflow Training Operator to manage distributed training environments. The Training Operator provides a high-level abstraction for training jobs, allowing researchers to utilize all available GPUs in the cluster for parallel training. But in v1.6, the version we used, the Training Operator does not support external engine like Argo Workflows. So we used pure Kubeflow Training Operator to manage distributed training environments.</p>
<p>The Training Operator allows researchers to define training jobs with custom resources, such as the number of GPUs, memory, and CPU cores. We configured <strong>a certain training job with 8 GPUs from 2 GPU servers</strong>, and the job was distributed across the GPUs for parallel training. This approach allowed researchers to accelerate the training process and utilize all available GPU resources in the cluster without setting up additional infrastructure.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="35-deploy-jupyterhub-for-researchers">3.5. Deploy JupyterHub for Researchers<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#35-deploy-jupyterhub-for-researchers" class="hash-link" aria-label="Direct link to 3.5. Deploy JupyterHub for Researchers" title="Direct link to 3.5. Deploy JupyterHub for Researchers" translate="no">​</a></h3>
<p>We chose JupyterLab in the first place, but we decided to use JupyterHub for researchers to access the cluster. JupyterHub provides current status of the cluster and researchers can figure how many resources are available in the cluster.</p>
<p>We setup the pre-built notebook images for researchers to use. The images contain the necessary libraries and tools for ML research, such as TensorFlow, PyTorch, and scikit-learn. Researchers can easily access the data lakes with provisioned NFS storage and run experiments without worrying about resource constraints.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-summary">4. Summary<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#4-summary" class="hash-link" aria-label="Direct link to 4. Summary" title="Direct link to 4. Summary" translate="no">​</a></h2>
<p>In this project, we built an on-premise MLOps cluster with the latest open-source projects, including Kubeflow, Argo Workflows, and JupyterHub. The cluster provides researchers with a flexible and scalable environment for developing and running ML experiments. With limited GPU resources, the cluster can efficiently utilize all available GPUs in the cluster, reducing underutilized GPU time and optimizing the cost of running ML workloads.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-future-works">5. Future Works<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#5-future-works" class="hash-link" aria-label="Direct link to 5. Future Works" title="Direct link to 5. Future Works" translate="no">​</a></h2>
<p>In the future, we are planning to enhnace user experience. ML researchers asked two convinent functions:</p>
<ul>
<li class=""><strong>Monitoring</strong>:
Researchers want to monitor the progress of their experiments and visualize the results in real-time. We are planning to integrate Grafana to provide monitoring dashboards for researchers.</li>
<li class=""><strong>SSH Access for Notebooks</strong>:
Researchers also want to access Jupiter notebooks via SSH. The custom spawner for JupyterHub will be implemented to provide SSH access for researchers. or we will chatbot generates stack of notebooks directly.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-used-skills">6. Used Skills<a href="https://jyje.github.io/profile-2/en/blog/mlops-onpremise-mlops-with-open-source-projects/#6-used-skills" class="hash-link" aria-label="Direct link to 6. Used Skills" title="Direct link to 6. Used Skills" translate="no">​</a></h2>
<p>Highlighted skills used in this project:</p>
<ul>
<li class=""><a href="https://argoproj.github.io/workflows" target="_blank" rel="noopener noreferrer" title="Workflow Engine in Argo Projects" class="">Argo Workflows</a></li>
<li class=""><a href="https://www.kubeflow.org/" target="_blank" rel="noopener noreferrer" title="Kubeflow: Machine Learning Toolkit for Kubernetes" class="">Kubeflow</a></li>
<li class=""><a href="https://www.kubeflow.org/docs/components/katib/overview" target="_blank" rel="noopener noreferrer" title="Kubeflow Katib: Hyperparameter Tuning" class="">Kubeflow/Katib</a></li>
<li class=""><a href="https://www.kubeflow.org/docs/components/training/overview" target="_blank" rel="noopener noreferrer" title="Kubeflow Training Operator: Distributed Training" class="">Kubeflow/Training Operator</a></li>
<li class=""><a href="https://jupyter.org/hub" target="_blank" rel="noopener noreferrer" title="JupyterHub: Multi-user Jupyter Notebook Server" class="">JupyterHub</a></li>
<li class=""><a href="https://grafana.com/grafana" target="_blank" rel="noopener noreferrer" title="Grafana: The Observability Platform for Metrics and Logs" class="">Grafana</a></li>
</ul>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Achievements" term="Achievements"/>
        <category label="MLOps" term="MLOps"/>
        <category label="DevOps" term="DevOps"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="On_Premise" term="On_Premise"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🎓 CKAD: Certified Kubernetes Application Developer (2024)]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/ckad-certified-kubernetes-application-developer/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/ckad-certified-kubernetes-application-developer/"/>
        <updated>2024-06-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Core skills for developing Kubernetes workloads.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-certification">1. About the Certification<a href="https://jyje.github.io/profile-2/en/blog/ckad-certified-kubernetes-application-developer/#1-about-the-certification" class="hash-link" aria-label="Direct link to 1. About the Certification" title="Direct link to 1. About the Certification" translate="no">​</a></h2>
<p>The Certified Kubernetes Application Developer (CKAD) program was created by the Cloud Native Computing Foundation (CNCF) in collaboration with The Linux Foundation to help develop the Kubernetes ecosystem. The CKAD program allows individuals to demonstrate their competence in designing, building, and deploying cloud-native applications for Kubernetes. Commonly, developers are mainly responsible for making workloads in Kubernetes.</p>
<!-- -->
<p>Similar to the CKA exam, the CKAD exam is a hands-on, proctored, performance-based test that requires solving multiple issues from a command line running Kubernetes. The exam focuses on the skills required to be a Kubernetes Application Developer in industry-ready work environments.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience">2. My Experience<a href="https://jyje.github.io/profile-2/en/blog/ckad-certified-kubernetes-application-developer/#2-my-experience" class="hash-link" aria-label="Direct link to 2. My Experience" title="Direct link to 2. My Experience" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="CKAD Certification" src="https://jyje.github.io/profile-2/en/assets/images/87b974ec-14cc-4f82-b252-c71deef28ee8-498c74b385637636631472116e023936.svg" width="1651" height="1277" class="img_ev3q"></p>
<p><em>My CKAD certification 2024. Issued on June 1, 2024. Expires on May 31, 2026. You can verify my certification <a href="https://www.credly.com/badges/9e072a3a-57d0-403e-8bef-5831d618675c" target="_blank" rel="noopener noreferrer" class="">here</a>.</em></p>
<p>I took the CKAD exam on May 31, 2024, and passed it successfully. The exam was challenging, and I achieved a score that met the passing requirements. I prepared for the exam by studying the official Kubernetes documentation, taking online courses, and practicing with Kubernetes clusters in KodeKloud.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-share-to-the-world">3. Share to the World<a href="https://jyje.github.io/profile-2/en/blog/ckad-certified-kubernetes-application-developer/#3-share-to-the-world" class="hash-link" aria-label="Direct link to 3. Share to the World" title="Direct link to 3. Share to the World" translate="no">​</a></h2>
<p align="center">
  <iframe src="https://www.linkedin.com/embed/feed/update/urn:li:share:7202975037543317506" height="700px" width="90%" frameborder="0" allowfullscreen="" title="Again, I'm thrilled to share that I've successfully completed the Certified Kubernetes Application Developer (CKAD) program from The Linux Foundation"></iframe>
</p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Certifications" term="Certifications"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="Linux_Foundation" term="Linux_Foundation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🎓 CKA: Certified Kubernetes Administrator (2024)]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/cka-certified-kubernetes-administrator/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/cka-certified-kubernetes-administrator/"/>
        <updated>2024-03-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Core skills for managing Kubernetes clusters.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-about-the-certification">1. About the Certification<a href="https://jyje.github.io/profile-2/en/blog/cka-certified-kubernetes-administrator/#1-about-the-certification" class="hash-link" aria-label="Direct link to 1. About the Certification" title="Direct link to 1. About the Certification" translate="no">​</a></h2>
<p>The Certified Kubernetes Administrator (CKA) program was created by the Cloud Native Computing Foundation (CNCF) in collaboration with The Linux Foundation to help develop the Kubernetes ecosystem. As one of the highest velocity open-source projects, Kubernetes use is exploding. The CKA program allows individuals to demonstrate their competence in a hands-on, command-line environment.</p>
<!-- -->
<p>The CKA exam is a hands-on, proctored, performance-based test that requires solving multiple issues from a command line running Kubernetes. The exam focuses on the skills required to be a Kubernetes Administrator in industry-ready work environments.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-my-experience">2. My Experience<a href="https://jyje.github.io/profile-2/en/blog/cka-certified-kubernetes-administrator/#2-my-experience" class="hash-link" aria-label="Direct link to 2. My Experience" title="Direct link to 2. My Experience" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="CKA Certification" src="https://jyje.github.io/profile-2/en/assets/images/925c52cf-4e04-4992-82b4-faa372fcb139-d0ea6ab86f9b7a9650ae898b6c440edf.svg" width="1651" height="1277" class="img_ev3q"></p>
<p><em>My CKA certification 2024. Issued on March 16, 2024. Expires on March 15, 2027. You can verify my certification <a href="https://www.credly.com/badges/d944bde7-222a-4ce5-b4e6-4e6c84df0ef8" target="_blank" rel="noopener noreferrer" class="">here</a>.</em></p>
<!-- -->
<p>I took the CKA exam on March 15, 2024, and passed it successfully. The exam was challenging, but I was able to pass it on my first attempt. I prepared for the exam by studying the official Kubernetes documentation, taking online courses, and practicing with Kubernetes clusters.</p>
<p>To aid my preparation, I enrolled in the <a href="https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests" target="_blank" rel="noopener noreferrer" class="">Certified Kubernetes Administrator (CKA) with Practice Tests</a> course on Udemy, which helped me understand the core concepts of Kubernetes. I also utilized the <a href="https://learn.kodekloud.com/user/courses/udemy-labs-certified-kubernetes-administrator-with-practice-tests" target="_blank" rel="noopener noreferrer" class="">KodeKloud</a> platform to practice with Kubernetes clusters and complete hands-on labs. Below is my course completion certificate from KodeKloud:</p>
<p><img decoding="async" loading="lazy" alt="KodeKloud Course Completion Certificate" src="https://jyje.github.io/profile-2/en/assets/images/3ca76e29-fec9-4b5d-9fad-dd7e0b33b1dc-0de560f071780fecdb02d58b8d3ec123.jpg" width="2339" height="1654" class="img_ev3q"></p>
<p>You can verify this course completion certificate <a href="https://kodekloud.com/certificate-verification/2D0D53315009-2D0D590835C9-2D0D4CFE3F61" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-share-to-the-world">3. Share to the World<a href="https://jyje.github.io/profile-2/en/blog/cka-certified-kubernetes-administrator/#3-share-to-the-world" class="hash-link" aria-label="Direct link to 3. Share to the World" title="Direct link to 3. Share to the World" translate="no">​</a></h2>
<p align="center">
  <iframe src="https://www.linkedin.com/embed/feed/update/urn:li:share:7175108596026781696" height="700px" width="90%" frameborder="0" allowfullscreen="" title="Excited to share that I've successfully completed the Certified Kubernetes Administrator (CKA) program from The Linux Foundation"></iframe>
</p>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Certifications" term="Certifications"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="Linux_Foundation" term="Linux_Foundation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[☁️ DevOps: On-Premise x AWS EKS Hybrid Cluster Case Study]]></title>
        <id>https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/</id>
        <link href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/"/>
        <updated>2023-12-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[For high availability and cost optimization, a case study of a hybrid cluster that combines on-premise and public cloud. Photo by <a href="https://unsplash.com/@mike_kiev?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Photobank Kiev</a> on <a href="https://unsplash.com/photos/3-men-standing-on-rocky-shore-during-daytime-Opzk_hvwO9Q?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Unsplash</a>]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-overview">1. Overview<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#1-overview" class="hash-link" aria-label="Direct link to 1. Overview" title="Direct link to 1. Overview" translate="no">​</a></h2>
<p>My team and I built a hybrid Kubernetes cluster that combines on-premise and public cloud resources. This architecture helps us overcome the limitations of on-premise resources and optimize the cost of public cloud usage.</p>
<!-- -->
<p>Our application consists of two parts: a web application and machine learning (ML) pipelines. The web application is hosted on the public cloud, while the ML workload runs on the on-premise GPU servers. The hybrid cluster architecture provides the following benefits:</p>
<ul>
<li class=""><strong>Reliability</strong>: Hosting the web applications and databases on the public cloud helps us achieve high availability and reliability 24/7.</li>
<li class=""><strong>Cost Optimization</strong>: By using the on-premise GPU servers for ML workloads, we reduced the cost of public cloud resources by over 50%.</li>
<li class=""><strong>Scalability</strong>: When the on-premise cluster runs out of resources, we can easily scale out to the public cloud. Even if the on-premise cluster is down, the public cloud extends backup nodes to ensure high availability for ML workloads.</li>
</ul>
<p>The following diagram shows the architecture of the hybrid cluster:</p>
<p><img decoding="async" loading="lazy" alt="Architecture Diagram of the Hybrid Cluster" src="https://jyje.github.io/profile-2/en/assets/images/10393250-4f16-43e6-856b-c4fa7515fdce-ed5222d49cbcc9344b1ac31aa35ec9a2.png" width="1700" height="1290" class="img_ev3q"></p>
<p><strong>Architecture Diagram of the Hybrid Cluster for DevOps;</strong> Users interact with a web application hosted on a public cloud platform like <a href="https://aws.amazon.com/eks" target="_blank" rel="noopener noreferrer" class="">AWS EKS</a>, while the ML pipelines execute on an on-premise cluster. We utilize <a href="https://argoproj.github.io/workflows" target="_blank" rel="noopener noreferrer" title="Workflow Engine in Argo Projects" class="">Argo Workflows</a> as the workflow controller. A metric collector monitors the liveness and availability of the on-premise cluster and triggers scale-out of backup pipelines in the public cloud when necessary. The metrics server is implemented using <a href="https://fastapi.tiangolo.com/" target="_blank" rel="noopener noreferrer" title="FastAPI: Python API Framework" class="">FastAPI</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-problem-statement">2. Problem Statement<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#2-problem-statement" class="hash-link" aria-label="Direct link to 2. Problem Statement" title="Direct link to 2. Problem Statement" translate="no">​</a></h2>
<p>Initially, we deployed a public AWS EKS cluster to support our web application and ML pipeline. However, running ML workloads on the public cloud proved to be cost-ineffective due to the high expense of GPU instances (<em>e.g.,</em> g4dn) on AWS EC2, resulting in unacceptable monthly costs amounting to thousands of dollars.</p>
<p>To mitigate these costs, we transitioned to on-premise clusters equipped with GPU servers for our ML pipelines. To facilitate communication between the public cloud and our on-premise clusters, we needed to expose endpoints on the on-premise cluster.</p>
<p>A metric collector in the public cloud was set up to monitor the liveness and availability of the on-premise cluster. In the event of the on-premise cluster going down or lagging, the metric collector would automatically scale out public cloud resources to maintain high availability of the ML pipelines.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-methods">3. Methods<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#3-methods" class="hash-link" aria-label="Direct link to 3. Methods" title="Direct link to 3. Methods" translate="no">​</a></h2>
<p>To achieve the architecture described above, we implemented the following steps:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="31-public-cluster-aws-eks">3.1. Public Cluster: AWS EKS<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#31-public-cluster-aws-eks" class="hash-link" aria-label="Direct link to 3.1. Public Cluster: AWS EKS" title="Direct link to 3.1. Public Cluster: AWS EKS" translate="no">​</a></h3>
<p>We deployed a public AWS EKS cluster to host our web application and database. The EKS cluster deployed the following components:</p>
<ul>
<li class=""><strong>Web Application</strong>: A web application that serves as the front-end and CMS for users.</li>
<li class=""><strong>Database</strong>: PostgreSQL and MySQL databases that store user data and application logs.</li>
<li class=""><strong>Metric Collector</strong>: A metric collector that monitors the liveness and pipeline availability of the on-premise and public clusters.</li>
<li class=""><strong>Backup ML Pipelines</strong>: Backup pipelines that are automatically scaled out in the event the on-premise cluster is not available.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="32-on-premise-cluster-bare-metal-kubernetes">3.2. On-Premise Cluster: Bare-Metal Kubernetes<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#32-on-premise-cluster-bare-metal-kubernetes" class="hash-link" aria-label="Direct link to 3.2. On-Premise Cluster: Bare-Metal Kubernetes" title="Direct link to 3.2. On-Premise Cluster: Bare-Metal Kubernetes" translate="no">​</a></h3>
<p>We deployed on-premise bare-metal Kubernetes clusters with GPU servers. The on-premise cluster deployed the following components:</p>
<ul>
<li class=""><strong>ML Pipelines</strong>: Machine learning pipelines that process data and train models. The pipelines run on GPU servers to accelerate the training process. We used <a href="https://argoproj.github.io/workflows" target="_blank" rel="noopener noreferrer" title="Workflow Engine in Argo Projects" class="">Argo Workflows</a> as a pipeline controller.</li>
<li class=""><strong>Metrics Server</strong>: A metrics server that exposes the liveness and availability of the on-premise cluster to the public cloud. We used <a href="https://fastapi.tiangolo.com/" target="_blank" rel="noopener noreferrer" title="FastAPI: Python API Framework" class="">FastAPI</a> and <a href="https://github.com/prometheus/client_python" target="_blank" rel="noopener noreferrer" title="Python Package for Prometheus Client" class="">Prometheus SDK</a> to implement the metrics server.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="33-scheduling-ml-pipelines">3.3. Scheduling ML Pipelines<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#33-scheduling-ml-pipelines" class="hash-link" aria-label="Direct link to 3.3. Scheduling ML Pipelines" title="Direct link to 3.3. Scheduling ML Pipelines" translate="no">​</a></h3>
<p>If the on-premise cluster is down or lagging, the metric collector in the public cloud will automatically scale out the backup ML pipelines to ensure high availability of the ML workloads. The metric collector will also scale in the backup pipelines when the on-premise cluster is back online.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-summary">4. Summary<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#4-summary" class="hash-link" aria-label="Direct link to 4. Summary" title="Direct link to 4. Summary" translate="no">​</a></h2>
<p>This is a case study of a loosely-coupled hybrid cluster that combines on-premise and public cloud resources. The architecture provides high availability, cost optimization, and scalability for our application.</p>
<p>We reduced the cost of public cloud resources by over 50% by running ML workloads on on-premise GPU servers. The public cloud provides high availability and reliability for our web application and database.</p>
<p>The metric collector alerts us when the on-premise cluster is unavailable and automatically scales out the backup pipelines to ensure high availability of the ML workloads. This allows us to adjust the scale of the public cloud resources based on the availability of the on-premise cluster.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-future-works">5. Future Works<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#5-future-works" class="hash-link" aria-label="Direct link to 5. Future Works" title="Direct link to 5. Future Works" translate="no">​</a></h2>
<p>Recently, we noticed that there are use cases utilizing AWS EKS Anywhere to combine on-premise and public nodes in a single EKS cluster. We are planning to proof the concept and migrate our on-premise cluster to EKS Anywhere to simplify the management of the hybrid cluster.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-used-skills">6. Used Skills<a href="https://jyje.github.io/profile-2/en/blog/devops-hybrid-clusters-with-onpremise-baremetal-k8s-and-aws-eks/#6-used-skills" class="hash-link" aria-label="Direct link to 6. Used Skills" title="Direct link to 6. Used Skills" translate="no">​</a></h2>
<p>Highlighted skills used in this project:</p>
<ul>
<li class=""><a href="https://aws.amazon.com/eks" target="_blank" rel="noopener noreferrer" title="Amazon Elastic Kubernetes Service" class="">AWS EKS</a></li>
<li class=""><a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer" title="Kubernetes: Production-Grade Container Orchestration" class="">Kubernetes</a></li>
<li class=""><a href="https://kubespray.io/" target="_blank" rel="noopener noreferrer" title="Kubespray: Kubernetes Cluster Deployment Tool" class="">Kubespray</a></li>
<li class=""><a href="https://argoproj.github.io/workflows" target="_blank" rel="noopener noreferrer" title="Workflow Engine in Argo Projects" class="">Argo Workflows</a></li>
<li class=""><a href="https://fastapi.tiangolo.com/" target="_blank" rel="noopener noreferrer" title="FastAPI: Python API Framework" class="">FastAPI</a></li>
<li class=""><a href="https://github.com/prometheus/client_python" target="_blank" rel="noopener noreferrer" title="Python Package for Prometheus Client" class="">Prometheus SDK</a></li>
</ul>]]></content>
        <author>
            <name>Jeayoung Jeon</name>
            <uri>https://github.com/jyje</uri>
        </author>
        <category label="Achievements" term="Achievements"/>
        <category label="DevOps" term="DevOps"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="AWS" term="AWS"/>
        <category label="On_Premise" term="On_Premise"/>
    </entry>
</feed>