<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on Blog · Muhammad Fauzi Islami</title><link>https://fauzislami.github.io/blog/</link><description>Recent content in Blogs on Blog · Muhammad Fauzi Islami</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 27 Feb 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://fauzislami.github.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>K8S-thing: How Linux Namespace Plays a Role in Kubernetes</title><link>https://fauzislami.github.io/blog/k8s-thing-how-linux-namespace-Plays-a-role-in-Kubernetes/</link><pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/k8s-thing-how-linux-namespace-Plays-a-role-in-Kubernetes/</guid><description>&lt;h1 id="linux-network-namespace"&gt;Linux Network Namespace&lt;/h1&gt;
&lt;p&gt;Before we look into how Linux Network Namespace works in Kubernetes Pod, we need to know from the basic what it is and what the purpose of it. Network namespace in linux provides an isolated system resources associated with networking-related stuff within a single host such as IP (Internet Protocol) either it is IPv4 or IPv6, NAT rules, firewall rules, and routing table.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/k8s-thing-how-namespace-work-in-pod/host.png" alt="main picture" title="main picture"&gt;&lt;/p&gt;
&lt;p&gt;Let’s imagine you are a parent who have children and live in a house. Take the computer host as a house and namespaces are rooms within that house. You assign those rooms to each of your children. They have their own privacy, so each child can only see what’s within his or her room and they can’t see what happens outside their room. However, as a parent you have a visibility to all rooms in the house. If you wish, you can visit each room.&lt;/p&gt;</description></item><item><title>K8S-thing: How Linux Namespace Works in a Pod</title><link>https://fauzislami.github.io/blog/k8s-thing-how-linux-namespace-works-in-a-pod/</link><pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/k8s-thing-how-linux-namespace-works-in-a-pod/</guid><description>&lt;h1 id="linux-network-namespace"&gt;Linux Network Namespace&lt;/h1&gt;
&lt;p&gt;Before we look into how Linux Network Namespace works in Kubernetes Pod, we need to know from the basic what it is and what the purpose of it. Network namespace in linux provides an isolated system resources associated with networking-related stuff within a single host such as IP (Internet Protocol) either it is IPv4 or IPv6, NAT rules, firewall rules, and routing table.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/k8s-thing-how-namespace-work-in-pod/host.png" alt="main picture" title="main picture"&gt;&lt;/p&gt;
&lt;p&gt;Let’s imagine you are a parent who have children and live in a house. Take the computer host as a house and namespaces are rooms within that house. You assign those rooms to each of your children. They have their own privacy, so each child can only see what’s within his or her room and they can’t see what happens outside their room. However, as a parent you have a visibility to all rooms in the house. If you wish, you can visit each room.&lt;/p&gt;</description></item><item><title>FluxCD: Image Watcher</title><link>https://fauzislami.github.io/blog/flux-image-watcher/</link><pubDate>Wed, 01 Feb 2023 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/flux-image-watcher/</guid><description>&lt;p&gt;This time I want to bring up a cool GitOps tool beside ArgoCD named &lt;a href="https://fluxcd.io/"&gt;&lt;strong&gt;FluxCD&lt;/strong&gt;&lt;/a&gt;. But I won’t discuss about what it is and the comparison between ArgoCD and FluxCD just yet. Instead, I find FluxCD has a cool feature of many features it provides which I don’t find this in ArgoCD (at least as the time as I write this topic). Probably, the introduction topic of FluxCD itself is worth having later on and it’s generally similar to ArgoCD as both work in the same area for Continous Deployment. But yet again, now let’s have a go with one of its sophisticated feature 😄&lt;/p&gt;</description></item><item><title>FluxCD: Image Watcher</title><link>https://fauzislami.github.io/blog/fluxcd-image-watcher/</link><pubDate>Wed, 01 Feb 2023 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/fluxcd-image-watcher/</guid><description>&lt;p&gt;This time I want to bring up a cool GitOps tool beside ArgoCD named &lt;a href="https://fluxcd.io/"&gt;&lt;strong&gt;FluxCD&lt;/strong&gt;&lt;/a&gt;. But I won’t discuss about what it is and the comparison between ArgoCD and FluxCD just yet. Instead, I find FluxCD has a cool feature of many features it provides which I don’t find this in ArgoCD (at least as the time as I write this topic). Probably, the introduction topic of FluxCD itself is worth having later on and it’s generally similar to ArgoCD as both work in the same area for Continuous Deployment. But yet again, now let’s have a go with one of its sophisticated feature 😄&lt;/p&gt;</description></item><item><title>Distribute Pods Across Nodes With topologySpreadConstraints</title><link>https://fauzislami.github.io/blog/pod-topology-spread-constraints/</link><pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/pod-topology-spread-constraints/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/podTopologySpreadConstraints/main.png" alt="main picture" title="main picture"&gt;&lt;/p&gt;
&lt;h1 id="intro"&gt;Intro&lt;/h1&gt;
&lt;p&gt;I had several works related to evenly spreading out pods across nodes in order to prevent potentially Kubernetes schedule the replicas of pods on the same node which will lead to a problem if that particular node falls over. I comprehended the case because there are some ways to schedule pods and the solution must be suitable to the environment in my case. As we might already know, Kubernetes has its own built-in mechanism to schedule a pod into a node named &lt;strong&gt;scheduler&lt;/strong&gt;. But Kubernetes gives us flexibility on how and where a pod is scheduled on which node, it depends on our needs. Let’s take an example such as &lt;strong&gt;taints &amp;amp; tolerations&lt;/strong&gt;, &lt;strong&gt;nodeSelector&lt;/strong&gt;, and even a more advanced way like &lt;strong&gt;podAntiAffinity&lt;/strong&gt;. Basically, it allows us to dictate the scheduler on where pods should be put on.&lt;/p&gt;</description></item><item><title>Golang\'s Linter Aggregator: Golangci-lint</title><link>https://fauzislami.github.io/blog/linter-aggregator-golangci-lint/</link><pubDate>Tue, 06 Sep 2022 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/linter-aggregator-golangci-lint/</guid><description>&lt;div&gt;&lt;svg width="0" height="0" style="display:none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;symbol id="tip-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;&lt;/symbol&gt;&lt;symbol id="note-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="warning-notice" viewBox="0 0 576 512"&gt;&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="info-notice" viewBox="0 0 512 512"&gt;&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;&lt;/symbol&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class="notice note"&gt;&lt;p class="first notice-title"&gt;&lt;span class="icon-notice baseline"&gt;&lt;svg&gt;&lt;use href="#note-notice"&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;Note&lt;/p&gt;</description></item><item><title>Terratest: Introduction to Automation Test For Infrastructure-as-Code</title><link>https://fauzislami.github.io/blog/terratest-golang-for-infrastructure-e2e-testing/</link><pubDate>Sun, 07 Aug 2022 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/terratest-golang-for-infrastructure-e2e-testing/</guid><description>&lt;div&gt;&lt;svg width="0" height="0" style="display:none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;symbol id="tip-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;&lt;/symbol&gt;&lt;symbol id="note-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="warning-notice" viewBox="0 0 576 512"&gt;&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="info-notice" viewBox="0 0 512 512"&gt;&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;&lt;/symbol&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class="notice note"&gt;&lt;p class="first notice-title"&gt;&lt;span class="icon-notice baseline"&gt;&lt;svg&gt;&lt;use href="#note-notice"&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;Note&lt;/p&gt;</description></item><item><title>JCasC (Jenkins Configuration as Code) : Setting up Jenkins in a fully reproducible way</title><link>https://fauzislami.github.io/blog/2022/02/18/jcasc-jenkins-configuration-as-code-setting-up-jenkins-in-a-fully-reproducible-way/</link><pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2022/02/18/jcasc-jenkins-configuration-as-code-setting-up-jenkins-in-a-fully-reproducible-way/</guid><description>&lt;div&gt;&lt;svg width="0" height="0" style="display:none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;symbol id="tip-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;&lt;/symbol&gt;&lt;symbol id="note-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="warning-notice" viewBox="0 0 576 512"&gt;&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="info-notice" viewBox="0 0 512 512"&gt;&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;&lt;/symbol&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class="notice info"&gt;&lt;p class="first notice-title"&gt;&lt;span class="icon-notice baseline"&gt;&lt;svg&gt;&lt;use href="#info-notice"&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;Info&lt;/p&gt;</description></item><item><title>Immutable Infrastructure, treating servers like “cattle”. Does it sound ridiculous ?</title><link>https://fauzislami.github.io/blog/2022/02/06/immutable-infrastructure-treating-servers-like-cattle-does-it-sound-ridiculous/</link><pubDate>Sun, 06 Feb 2022 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2022/02/06/immutable-infrastructure-treating-servers-like-cattle-does-it-sound-ridiculous/</guid><description>&lt;div&gt;&lt;svg width="0" height="0" style="display:none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;symbol id="tip-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;&lt;/symbol&gt;&lt;symbol id="note-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="warning-notice" viewBox="0 0 576 512"&gt;&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="info-notice" viewBox="0 0 512 512"&gt;&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;&lt;/symbol&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class="notice info"&gt;&lt;p class="first notice-title"&gt;&lt;span class="icon-notice baseline"&gt;&lt;svg&gt;&lt;use href="#info-notice"&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;Info&lt;/p&gt;</description></item><item><title>Highly Available Kubernetes Cluster Using HAproxy and Keepalived</title><link>https://fauzislami.github.io/blog/2021/10/17/highly-available-kubernetes-cluster-with-haproxy-and-keepalived/</link><pubDate>Sun, 17 Oct 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/10/17/highly-available-kubernetes-cluster-with-haproxy-and-keepalived/</guid><description>&lt;p&gt;Kubernetes provides us a convenient way to make our application easier to maintain and more scalable. Since kubernetes is only an abstraction that runs on a set of machines and consists of many components, we have some work to do to keep our kubernetes cluster well-established and healthy, especially to make that cluster highly available. In this case, I use two HAproxy instances to balance the load over the network or we usually say that as load balancing. Not only that, I also use Keepalived which will make it redundant between the two HAproxy instances. The diagram below depicts how HAproxy and Keepalived play their role :&lt;/p&gt;</description></item><item><title>Proxying Docker Registry Through Nexus Repository Manager</title><link>https://fauzislami.github.io/blog/2021/10/14/proxying-docker-registry-through-nexus-repository-manager/</link><pubDate>Thu, 14 Oct 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/10/14/proxying-docker-registry-through-nexus-repository-manager/</guid><description>&lt;div&gt;&lt;svg width="0" height="0" style="display:none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;symbol id="tip-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;&lt;/symbol&gt;&lt;symbol id="note-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="warning-notice" viewBox="0 0 576 512"&gt;&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="info-notice" viewBox="0 0 512 512"&gt;&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;&lt;/symbol&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class="notice info"&gt;&lt;p class="first notice-title"&gt;&lt;span class="icon-notice baseline"&gt;&lt;svg&gt;&lt;use href="#info-notice"&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;Info&lt;/p&gt;</description></item><item><title>Proxying PyPI Repository in Nexus Repository Manager</title><link>https://fauzislami.github.io/blog/2021/10/08/proxying-pypi-repository-in-nexus-repository-manager/</link><pubDate>Fri, 08 Oct 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/10/08/proxying-pypi-repository-in-nexus-repository-manager/</guid><description>&lt;div&gt;&lt;svg width="0" height="0" style="display:none" xmlns="http://www.w3.org/2000/svg"&gt;&lt;symbol id="tip-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/&gt;&lt;/symbol&gt;&lt;symbol id="note-notice" viewBox="0 0 512 512"&gt;&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="warning-notice" viewBox="0 0 576 512"&gt;&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/&gt;&lt;/symbol&gt;&lt;symbol id="info-notice" viewBox="0 0 512 512"&gt;&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/&gt;&lt;/symbol&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class="notice info"&gt;&lt;p class="first notice-title"&gt;&lt;span class="icon-notice baseline"&gt;&lt;svg&gt;&lt;use href="#info-notice"&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;Info&lt;/p&gt;</description></item><item><title>Securing K8S Secret Object Using SealedSecret</title><link>https://fauzislami.github.io/blog/2021/09/26/secure-k8s-secret-object-using-sealedsecret/</link><pubDate>Sun, 26 Sep 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/09/26/secure-k8s-secret-object-using-sealedsecret/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/sealed-secret/1.png" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;Managing kubernetes manifest on Git or any other SCM is a common task nowadays. It makes life easier if we talk about continuous deployment. However, there is a manifest that should not be stored on SCM, it’s secret object. Secret object on Kubernetes was made to hide any sensitive data including user credentials and key. Unfortunately, secret object is not completely secure, it does not encrypt but only uses base64 encoding scheme to hide the data and it can be easily decoded. Therefore, Sealed Secret is one of the solution to make the secret more secure and can be securely stored on SCM.&lt;/p&gt;</description></item><item><title>Service Mesh : Istio and Kiali Setup</title><link>https://fauzislami.github.io/blog/2021/08/01/service-mesh-istio-and-kiali-setup/</link><pubDate>Sun, 01 Aug 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/08/01/service-mesh-istio-and-kiali-setup/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/service-mesh-istio-kiali-setup/1.png" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;It’s the first time for me to learn what service mesh is, how it works, and how to start the lab to deep dive on this stuff. In this article, there will be some of my notes about how to install Istio and see the visualization of some microservices that will have been monitored by Istio and I’m going to write it up now.&lt;/p&gt;
&lt;p&gt;As usual, it would be better if we have good comprehension on what we’re going to learn.&lt;/p&gt;</description></item><item><title>Collecting Network Traffic Using TCPDump on POD Level in Openshift</title><link>https://fauzislami.github.io/blog/2021/07/23/collecting-network-traffic-using-tcpdump-on-pod-level-in-openshift/</link><pubDate>Fri, 23 Jul 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/07/23/collecting-network-traffic-using-tcpdump-on-pod-level-in-openshift/</guid><description>&lt;p&gt;Ada kalanya ketika sebuah aplikasi mengalami masalah dan tidak mengeluarkan log pada stdout secara lengkap dan cenderung tidak membantu untuk kebutuhan troubleshooting. Sehingga diperlukan analisa lebih dalam untuk mendapatkan petunjuk dari masalah tersebut, terutama jika masalahnya dalam ruang lingkup network yang perlu dilakukan analisa dari network traffic yang ada. Maka dari itu kita bisa melakukan TCPDump di level POD, namun pada umumnya tidak semua image aplikasi dibekali utilitas untuk melakukan hal itu. Oleh karena itu berikut adalah cara bagaimana melakukan TCPDump pada level POD di Openshift :&lt;/p&gt;</description></item><item><title>CI/CD Labs Part 3: Integrate Jenkins with Openshift</title><link>https://fauzislami.github.io/blog/2021/03/26/ci-cd-labs-part-3-integrate-jenkins-with-openshift/</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/26/ci-cd-labs-part-3-integrate-jenkins-with-openshift/</guid><description>&lt;p&gt;In this part 3 CI / CD lab the author will document how to integrate Jenkins with the OpenShift.&lt;/p&gt;
&lt;p&gt;What should be prepared:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1 VM Jenkins&lt;br&gt;
Spec:&lt;br&gt;
OS: Centos 7.9 (optional)&lt;br&gt;
• RAM: 16GB (this will be used until labs finish)&lt;br&gt;
• CPU: 4vCPU&lt;br&gt;
• HDD: 100GB&lt;br&gt;
• Internet connection&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 VM CRC (CodeReady Container) Mini OpenShift&lt;br&gt;
Spec:&lt;br&gt;
OS: Centos 7.9 (optional)&lt;br&gt;
• RAM: 16GB (this will be used until labs finish)&lt;br&gt;
• CPU: 4vCPU&lt;br&gt;
• HDD: 100GB&lt;br&gt;
• Internet connection&lt;/p&gt;</description></item><item><title>MachineConfigPool degraded saat updating : “Error when evicting pod”</title><link>https://fauzislami.github.io/blog/2021/03/20/machineconfigpool-degraded-saat-updating-error-when-evicting-pod/</link><pubDate>Sat, 20 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/20/machineconfigpool-degraded-saat-updating-error-when-evicting-pod/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/machineconfigpool-issue/1.png" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;Kejadian ini seringkali terjadi ketika melakukan sebuah perubahan cluster yang mengharuskan setiap nodes pada cluster konsolidasi dengan perubahan yang baru saja diterapkan. Pada masalah yang penulis alami, penulis ingin menambahkan private registry ke dalam cluster agar bisa dikenali sebagai insecure registry. Namun setelah selesai dikonfigurasi dan cluster otomatis melakukan konsolidasi konfigurasi ke setiap nodes (menambahkan insecure registry), terdapat suatu hal yang janggal ketika melihat kondisi salah satu node stuck di status &lt;strong&gt;&lt;em&gt;“Ready,SchedulingDisabled&lt;/em&gt;“&lt;/strong&gt; dengan waktu yang lama dan tidak normal. Setelah dilakukan pengecekan pada node ternyata terdapat 1 pod yang bermasalah yang tidak bisa dihapus dari node tersebut :&lt;/p&gt;</description></item><item><title>Menambahkan Trusted Certificate Pada JVM di Jenkins</title><link>https://fauzislami.github.io/blog/2021/03/10/menambahkan-trusted-certificate-pada-jvm-di-jenkins/</link><pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/10/menambahkan-trusted-certificate-pada-jvm-di-jenkins/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/add-trusted-certificate-in-jvm/1.png" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;Pada tulisan ini membahas sebuah kendala yang dialami penulis ketika melakukan integrasi Jenkins dengan Jira, Bitbucket dan Nexus yang menggunakan HTTPS sebagai protokolnya. Pada saat melakukan test connection terdapat error : &lt;strong&gt;&lt;em&gt;“&lt;/em&gt;&lt;/strong&gt;_ &lt;strong&gt;unable to find valid certification path to requested target jenkins&lt;/strong&gt;_ “&lt;/p&gt;
&lt;p&gt;Error itu berasal JVM ( Java Virtual Machine ). Ini karena environment pada Java tidak mempunyai informasi tentang HTTPS server yang ada pada Jira, Bitbucket dan Nexus tersebut untuk dilakukan verifikasi apakah itu merupakan website valid atau tidak. Biasanya sertifikat dapat diperoleh dari internal Root CA atau secara Self-Signed dan hal ini yang biasanya seolah membuat JVM bingung karena tidak satupun yang masuk “trusted list” nya. Oleh karena itu kita perlu melakukan import sertifikat secara manual pada JVM. Dengan begitu, artinya kita memberitahu JVM bahwa sertifikat tersebut terpercaya.&lt;/p&gt;</description></item><item><title>Namespace OpenShift Tidak Dapat Dihapus</title><link>https://fauzislami.github.io/blog/2021/03/10/namespace-openshift-tidak-dapat-dihapus/</link><pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/10/namespace-openshift-tidak-dapat-dihapus/</guid><description>&lt;p&gt;Ada sebuah kejadian di project yang cukup membuat frustasi penulis ketika melakukan penghapusan sebuah project/namespace pada openshift, yaitu namespace yang akan dihapus tidak terhapus walaupun sudah dipaksa untuk dihapus dengan menggunakan parameter &lt;strong&gt;–force –grace-period=0&lt;/strong&gt; , proses penghapusan stuck seperti gambar di bawah ini :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/openshift-namespace-cannot-be-deleted/1.jpeg" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;dan pada saat dilakukan describe namespace tersebut, stuck di status &lt;strong&gt;terminating&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/openshift-namespace-cannot-be-deleted/2.jpeg" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;Setelah bergoogling-googling ria dan bertanya pada ahlinya cc : mas @alan-prasetyo , titik terang untuk menghapus mulai terlihat. Hal itu bisa terjadi karena ketika melakukan penghapusan namespace, masih terdapat objek yang belum dihapus di dalamnya. Penulis baru tersadar bahwa objek yang masih ada hanyalah &lt;strong&gt;StorageCluster&lt;/strong&gt; .&lt;/p&gt;</description></item><item><title>StorageCluster OCS tidak dapat dihapus</title><link>https://fauzislami.github.io/blog/2021/03/10/storagecluster-ocs-tidak-dapat-dihapus/</link><pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/10/storagecluster-ocs-tidak-dapat-dihapus/</guid><description>&lt;p&gt;Ada kalanya keanehan terjadi ketika sedang mengerjakan tasks di project. Salah satu hal aneh tersebut yang penulis adalah menghapus sebuah objek yang tidak berhasil terhapus tanpa alasan yang diketahui sampai saat ini oleh penulis.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/cannot-delete-storagecluster/1.jpeg" alt="Scratchpad" title="Scratchpad"&gt;&lt;/p&gt;
&lt;p&gt;Setelah mencari-cari tahu cara menghapusnya secara paksa, cukup melakukan patch secara manual&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oc patch -n openshift-storage storagecluster/ocs-storagecluster --type=merge -p &amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;finalizers&amp;#34;:null}}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pada command di atas , terlihat jelas &lt;strong&gt;finalizers&lt;/strong&gt; dibuat valuenya menjadi &lt;strong&gt;null&lt;/strong&gt;. Namun sebenarnya, sebelum mengeksekusi command tersebut penulis mencoba untuk melakukannya dengan mengedit &lt;strong&gt;StorageCluster&lt;/strong&gt; tersebut secara manual dengan menggunakan perintah &lt;em&gt;oc edit storagecluster ocs-storagecluster&lt;/em&gt;, lalu merubah value pada key &lt;strong&gt;finalizers&lt;/strong&gt; menjajdi &lt;strong&gt;null&lt;/strong&gt;, namun ketika konfigurasi tersebut disimpan tidak terjadi apa-apa dan StorageCluster tetap stuck pada status &lt;strong&gt;Deleting&lt;/strong&gt;. Lalu setelah, barulah solusi di atas dieksekusi dan StorageCluster berhasil dihapus.&lt;/p&gt;</description></item><item><title>CI/CD Labs Part 2: Integrate Jenkins with Bitbucket Server</title><link>https://fauzislami.github.io/blog/2021/03/05/ci-cd-labs-part-2-integrate-jenkins-with-bitbucket-server/</link><pubDate>Fri, 05 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/05/ci-cd-labs-part-2-integrate-jenkins-with-bitbucket-server/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/ci-cd-labs-part2/1.png" alt="CI/CD Part 2" title="CI/CD Part 2"&gt;&lt;/p&gt;
&lt;p&gt;In this part 2 of the CI / CD labs, I will document how to do Jenkins integration with the Bitbucket server (not the cloud).&lt;/p&gt;
&lt;p&gt;What should be prepared :&lt;/p&gt;
&lt;p&gt;1 VM (Jenkins + Bitbucket Server)&lt;br&gt;
Specifications :&lt;br&gt;
• OS Centos 7.9 (optional)&lt;br&gt;
• RAM: 16GB (this will be used until labs get finished)&lt;br&gt;
• CPU: 4vCPU&lt;br&gt;
• HDD: 100GB&lt;br&gt;
• Internet connection&lt;/p&gt;
&lt;p&gt;Inside the VM are installed as follows :&lt;/p&gt;</description></item><item><title>CI/CD Labs Part 1: Integrate Jenkins with Nexus Repository OSS</title><link>https://fauzislami.github.io/blog/2021/03/03/ci-cd-labs-part-1-integrate-jenkins-with-nexus-repository-oss/</link><pubDate>Wed, 03 Mar 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/03/03/ci-cd-labs-part-1-integrate-jenkins-with-nexus-repository-oss/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/ci-cd-labs-part1/1.png" alt="CI/CD Part 1" title="CI/CD Part 1"&gt;&lt;/p&gt;
&lt;p&gt;This is the first lab of lab series to learn CI/CD. In this lab, I will only focus on documenting the implementations step by step and not on the installation. Maybe on another occasion, I may also include how to install each of the tools used in this lab.&lt;/p&gt;
&lt;p&gt;The following are some of the parts of this series :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Integrate Jenkins with Nexus Repository OSS&lt;/li&gt;
&lt;li&gt;Integrate Jenkins with Bitbucket&lt;/li&gt;
&lt;li&gt;Integrate Jenkins with OpenShift&lt;/li&gt;
&lt;li&gt;Integrate Jenkins with Jira&lt;/li&gt;
&lt;li&gt;Full CI / CD Pipeline&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;*Note : These labs don’t involve any tests.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Automating K8S Cluster Installation with Kubespray</title><link>https://fauzislami.github.io/blog/2021/01/18/automating-k8s-cluster-installation-with-kubespray/</link><pubDate>Mon, 18 Jan 2021 00:00:00 +0000</pubDate><guid>https://fauzislami.github.io/blog/2021/01/18/automating-k8s-cluster-installation-with-kubespray/</guid><description>&lt;p&gt;&lt;img src="https://fauzislami.github.io/images/automating-k8s-cluster-kubespray/pic-1.png" alt="kubespray" title="kubespray"&gt;&lt;/p&gt;
&lt;p&gt;There are various ways to perform a kubernetes installation. If you look at the environment in which kubernetes will be installed on, you have options that can be done, namely:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learning purposes :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Kind&lt;/em&gt; tools ( Kubernetes In Docker )&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Minikube&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Production purposes :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootstrapping K8S with &lt;em&gt;kubeadm&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Installing K8S with &lt;em&gt;kubespray&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Installing K8S with &lt;em&gt;kops&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this opportunity, I will do the installation of a kubernetes cluster using kubespray. Kubespray itself is a way to install Kubernetes cluster by automating it using ansible playbook.&lt;/p&gt;</description></item></channel></rss>