<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>이쿠의 슬기로운 개발생활</title>
    <link>https://ikcoo.tistory.com/</link>
    <description>IT지식 공유를 위해 시작.</description>
    <language>ko</language>
    <pubDate>Fri, 14 Aug 2026 09:46:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>이쿠우우</managingEditor>
    <image>
      <title>이쿠의 슬기로운 개발생활</title>
      <url>https://tistory1.daumcdn.net/tistory/4085570/attach/2d0e39eba1944b5cbff6b6cb7cea6801</url>
      <link>https://ikcoo.tistory.com</link>
    </image>
    <item>
      <title>Calico 리서치</title>
      <link>https://ikcoo.tistory.com/432</link>
      <description>&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;목표&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;Calico에 대해 알아봄.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPxFpT/dJMcacoib4o/BUfwVyYC4UPCksKneYcw91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPxFpT/dJMcacoib4o/BUfwVyYC4UPCksKneYcw91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPxFpT/dJMcacoib4o/BUfwVyYC4UPCksKneYcw91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPxFpT%2FdJMcacoib4o%2FBUfwVyYC4UPCksKneYcw91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;456&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;Calico 란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;Calico는 Container, VM 환경에서 L3기반 Virtual Network를 구축하게 도와주는 Networking Providers.&lt;/div&gt;
&lt;div&gt;kubernetes에서 사용 가능한 CNI (Container Network Interface)로 Flannel과 더불어서 대표적으로 사용되고 있는 CNI.&lt;/div&gt;
&lt;div&gt;Calico는 Kubernetes 이외에도 OpenShift, Mirantis Kubernetes Engine(MKE), OpenStack, Docker Shim등 다양한 플랫폼에서 사용 가능.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;CNI란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;CNI : Container Network Interface&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준.&lt;/div&gt;
&lt;div&gt;Kubernetes Cluster 내부는 Master Node 에 의해 여러 컨테이너가 생성 삭제 복구를 반복하고 있음&lt;/div&gt;
&lt;div&gt;그에 따라 각 컨테이너의 고정적이지 않고 재할당이 빈번함.&lt;/div&gt;
&lt;div&gt;이러한 특징을 해결하기 위해 Kubernetes Cluster는 가상 네트워크가 구성되어 있는데&amp;nbsp;&lt;/div&gt;
&lt;div&gt;기본적으로는 Worker Node 의 kube-proxy 가 네트워크를 관리하지만&lt;/div&gt;
&lt;div&gt;보다 효율적인 네트워크 환경을 구성하기 위해&lt;/div&gt;
&lt;div&gt;다양한 &lt;b&gt;네트워크 관련 Addon&lt;/b&gt; 이 제공됨&lt;/div&gt;
&lt;div&gt;&lt;b&gt;종류)&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot; data-keep-colors=&quot;true&quot;&gt;Flannel&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot; data-keep-colors=&quot;true&quot;&gt;Calico&lt;/span&gt;&lt;/b&gt;, Canal, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Cilium&lt;/b&gt;&lt;/span&gt;, CNI-Genie, Contiv, Multus, NSX-T, Nuage, Romana, Weave Net&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Flannel과 Calico의 차이점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;[Network Policy]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Flannel : 지원하지 않음&lt;/div&gt;
&lt;div&gt;Calico : 지원&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[Networking mode]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Flannel : VXLAN&lt;/div&gt;
&lt;div&gt;Calico : IP-in-IP, VXLAN, Direct&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[IPAM]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Flannel : HOST의 IPAM 사용함.&lt;/div&gt;
&lt;div&gt;Calico : Calico 전용 IPAM을 별도로 사용함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;Calico Components&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1387&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8dt6f/dJMcagEfLk0/7KJDrZVEI2GawKqffbXK80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8dt6f/dJMcagEfLk0/7KJDrZVEI2GawKqffbXK80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8dt6f/dJMcagEfLk0/7KJDrZVEI2GawKqffbXK80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8dt6f%2FdJMcagEfLk0%2F7KJDrZVEI2GawKqffbXK80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1387&quot; height=&quot;887&quot; data-origin-width=&quot;1387&quot; data-origin-height=&quot;887&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;&lt;b&gt;Calico-node&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;Daemonset으로 배포되어 모든 node에서 동작하고 있음.&lt;/div&gt;
&lt;div&gt;Calico CNI 동작의 핵심 역할을 수행하는 container가 모두 calico-node에 포함되어있음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Calico-node : Felix&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;Calico의 핵심 에이전트(Brain) 역할을 수행하며, 실제 패킷을 처리하기 위해 호스트의 커널을 조작하는 담당자.&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,0,0&quot;&gt;Interface 관리:&lt;/b&gt; Pod가 생성되면 호스트와 연결되는 가상 인터페이스(cali***)를 생성하고 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,1,0&quot;&gt;Route Table 관리 (Local):&lt;/b&gt; 내 노드에 떠 있는 Pod로 가는 경로(Local Route)를 호스트 라우팅 테이블에 설정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,2,0&quot;&gt;Network Policy (ACL) 관리:&lt;/b&gt; K8s NetworkPolicy 리소스를 감지하여 방화벽 룰(iptables 등)을 설정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,3,0&quot;&gt;상태 보고:&lt;/b&gt; 노드의 헬스 체크 및 상태 정보를 Datastore에 보고합니다. (etcd)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Datastore mode가 etcd인 경우 : etcd에 다이렉트로 상태보고함.&lt;/li&gt;
&lt;li&gt;Datastore mode가 Kubernetes API (KDD) 인 경우 : kube-apiserver 에 상태보고함&amp;nbsp;calicoNode라는 Custom Resource(CR)의 Status 필드를 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;[Felix vs BIRD : 라우팅 역할 분담]&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;Routing Table을 작성하는 작업은 두 프로세스가 역할을 나누어 수행합니다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;BIRD:&lt;/b&gt; 다른 노드(Peer)로부터 받은 &lt;b&gt;원격지 Pod 대역의 경로&lt;/b&gt;를 호스트 라우팅 테이블에 입력합니다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;(예: &quot;Node B로 가려면 eth0으로 가라&quot;)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Felix:&lt;/b&gt; &lt;b&gt;자기 노드에 생성된 Pod의 경로&lt;/b&gt;를 호스트 라우팅 테이블에 입력합니다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;(예: &quot;Pod A로 가려면 cali123 인터페이스로 가라&quot;)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h4 data-path-to-node=&quot;22&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22&quot;&gt;[kube-proxy와 Felix의 관계 &amp;amp; eBPF 모드]&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;23&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,0,0&quot;&gt;일반 모드 (Standard Linux Networking):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;23,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;kube-proxy:&lt;/b&gt; Service(ClusterIP) 연결 및 부하분산 담당 (iptables 또는 IPVS 사용).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Felix:&lt;/b&gt; Pod 통신 보안(Network Policy) 담당.&lt;/li&gt;
&lt;li&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,0,1,2,0&quot;&gt;&lt;b&gt;결론:&lt;/b&gt; 둘 다 실행되어야 함.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,1,0&quot;&gt;eBPF 모드 (Calico의 고성능 모드):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;23,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Felix&lt;/b&gt;가 eBPF 프로그램을 이용해 Network Policy뿐만 아니라 Service 부하분산까지 모두 처리함.&lt;/li&gt;
&lt;li&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,1,1,1,0&quot;&gt;&lt;b&gt;결론:&lt;/b&gt; 이 경우에만 kube-proxy를 비활성화(대체)할 수 있음.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Calico-node : BIRD&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt; CALICO_NETWORKING_BACKEND 설정이 &lt;b data-index-in-node=&quot;30&quot; data-path-to-node=&quot;11,0,1,0,0&quot;&gt;bird&lt;/b&gt; 일 때만 실행되는 BGP 데몬. &lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;(&lt;b data-index-in-node=&quot;54&quot; data-path-to-node=&quot;11,0,1,0,0&quot;&gt;vxlan&lt;/b&gt; 모드나 &lt;b data-index-in-node=&quot;64&quot; data-path-to-node=&quot;11,0,1,0,0&quot;&gt;none&lt;/b&gt; 모드에서는 실행되지 않음.) &lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;모든 노드에 배포되어 실행되며, 노드 간에 &lt;/span&gt;&lt;b data-index-in-node=&quot;24&quot; data-path-to-node=&quot;8,1,1,0,0&quot;&gt;BGP Peering&lt;/b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;을 맺음.&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;내 노드에 있는 Pod들의 IP 정보를 다른 노드(Peer)들에게 전파하는 역할을 담당.&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;이를 통해 각 노드는 클러스터 전체의 Pod 경로(Route)를 학습하게 됨.&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 bird 백엔드 모드에서는 IP-in-IP, VXLAN 캡슐화를 모두 지원하지만, 라우팅 정보 교환 자체는 BGP(BIRD)가 담당함.&lt;/p&gt;
&lt;div&gt;
&lt;p data-path-to-node=&quot;11,2,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0&quot;&gt;참고 (Backend=vxlan 인 경우):&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 모드에서는 BIRD가 배포되지 않으며, BGP 대신 &lt;b data-index-in-node=&quot;31&quot; data-path-to-node=&quot;11,2,1,0,0&quot;&gt;Felix&lt;/b&gt;가 Datastore 정보를 기반으로 라우팅을 직접 처리함.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h4 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;BGP Peering 모드 (Topology)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;BIRD가 노드끼리 통신하는 방식은 크게 두 가지로 나뉘며, 클러스터 규모에 따라 선택해야 함.&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;BGPConfiguration 리소스의 nodeToNodeMeshEnabled 값으로 설정 가능&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;Node-to-Node Mesh (Default):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;nodeToNodeMeshEnabled&lt;span&gt; : true&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;모든 노드가 서로 1:1로 연결됨 (Full Mesh).&lt;/li&gt;
&lt;li&gt;모든 노드가 서로 1:1로 연결되므로, 노드 수가 N개일 때 연결 수는 &lt;i data-index-in-node=&quot;40&quot; data-path-to-node=&quot;6,0,1,1,0&quot;&gt;&lt;i data-index-in-node=&quot;40&quot; data-path-to-node=&quot;6,0,1,1,0&quot;&gt;N&lt;/i&gt;(N-1)/2&lt;/i&gt;* 개가 됨.&lt;/li&gt;
&lt;li&gt;설정이 간편하나 노드 수가 많아지면 부하가 급증함.&lt;/li&gt;
&lt;li&gt;단점 : 노드가 100개면 약 5,000개의 연결이 필요하지만, 노드가 1,000개가 되면 약 50만 개의 연결이 필요해져 네트워크 부하가 급증함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;Route Reflector (RR):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;nodeToNodeMeshEnabled&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: false&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;특정 노드(RR)를 통해서만 라우팅 정보를 교환하는 중앙 집중형 구조.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,1,1,0&quot;&gt;비유:&lt;/b&gt; 교실(Cluster)에서 모든 학생(Node)이 서로 떠드는 것(Full Mesh) 대신, 반장(RR)에게만 이야기하고 반장이 이를 전체에게 전달하는 방식.&lt;/li&gt;
&lt;li&gt;이를 통해 연결 복잡도를 획기적으로 줄여 대규모 클러스터에서도 안정적인 통신이 가능함.&lt;/li&gt;
&lt;li&gt;대규모 클러스터(Node 100개 이상)에서 필수적임.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[BIRD 프로세스 동작 확인]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1768219739856&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps -ef | grep bird​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dna/cJW6at/dJMb99LRp4h/AAAAAAAAAAAAAAAAAAAAAC7H0ONXckxA0JormAa0CtpryH-5zTnVNAwz0Sr95keV/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1769871599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=OX6tBpERSNNFYKT6Cquu5bwcA4Q%3D&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;122&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[peering node 목록 확인 : calicoctl 사용]&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1768219819312&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;calicoctl node status&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WTE8E/dJMcaiWjvmk/87LWrTr8FBkyA9egkmRozk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WTE8E/dJMcaiWjvmk/87LWrTr8FBkyA9egkmRozk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WTE8E/dJMcaiWjvmk/87LWrTr8FBkyA9egkmRozk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWTE8E%2FdJMcaiWjvmk%2F87LWrTr8FBkyA9egkmRozk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;228&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[BGP 란?] &lt;/b&gt;&lt;/div&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;Border Gateway Protocol의 약자로
서로 다른 AS(Autonomous System) 즉
서로 다른 Router를 연결해주는 Protocol로 Packet을 어느 Router로 Routing할지 결정해줌.
따라서 각 Router는 자신이 전달할 수 있는 IP List를 알고 있어야 함.

[Calico에서의 역할]
Calico는 각 노드를 가상의 BGP 라우터로 취급함.
각 노드는 자신이 관리하는 Pod CIDR(IP 대역) 정보를 &quot;내 쪽으로 보내라&quot;고 다른 노드들에게 전파함.
- iBGP (Internal BGP): 같은 클러스터 내부의 노드끼리 통신할 때 사용 (기본 AS 번호: 64512).
- eBGP (External BGP): 클러스터 외부의 물리 라우터(ToR 스위치 등)와 통신할 때 사용.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Calico-node : Confd&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;calico-node 컨테이너 내부에서 동작하는 경량 설정 관리 도구.&lt;/div&gt;
&lt;div&gt;전통적인 라우팅 데몬인&amp;nbsp;&lt;b&gt;BIRD&lt;/b&gt;는 본래 정적인 설정 파일(bird.cfg)을 읽어 동작하는데,&lt;/div&gt;
&lt;div&gt;수시로 변하는 Kubernetes 환경(노드 추가/삭제, IP 대역 변경)에 대응할 수 있도록&lt;/div&gt;
&lt;div&gt;&lt;b&gt;동적으로 설정 파일을 생성하고 BIRD를 제어&lt;/b&gt;하는 역할을 수행함.&lt;/div&gt;
&lt;div&gt;Confd는 아래와 같은 순환 구조로 BIRD를 최신 상태로 유지함.&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Monitoring (감시):&lt;/b&gt;&amp;nbsp;Calico Datastore(etcd 또는 K8s API)의 특정 Key/Value 값들을 실시간으로 모니터링(Watch)함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Rendering (생성):&lt;/b&gt;&amp;nbsp;감지된 변경 사항(새로운 노드 정보, BGP 설정 변경 등)을 반영하여 BIRD 설정 템플릿을 기반으로 새로운 설정 파일(bird.cfg)을 생성함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Trigger (적용):&lt;/b&gt;&amp;nbsp;설정 파일이 변경되면, Confd가 BIRD 프로세스에 **&quot;설정을 다시 읽으라(Reload)&quot;**는 명령을 내려 라우팅 정보를 갱신함.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;Confd가 Datastore에서 주시하는 정보는 BGP Peering에 필수적인 데이터들임.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Node Information:&lt;/b&gt;&amp;nbsp;클러스터 내 다른 노드들의 IP 및 AS 번호 (Peering 대상).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pod CIDR:&lt;/b&gt;&amp;nbsp;각 노드에 할당된 Pod IP 대역 (전파해야 할 경로 정보).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BGP Configuration:&lt;/b&gt;&amp;nbsp;앞서 정리한 BGPConfiguration 리소스(Full Mesh 여부, RR 설정 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Calico Datastore&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;Calico가 클러스터 네트워킹을 구성하는 데 필요한 모든 설정과 상태 정보를 저장하는 중앙 저장소.&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;저장 데이터:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Configuration:&lt;/b&gt; IP Pool, BGP Configuration, Felix Configuration 등.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Policy:&lt;/b&gt; Network Policy, Global Network Policy (보안 규칙).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;Inventory:&lt;/b&gt; Node 정보, Endpoint(Pod) 정보 등.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;Datastore은 Kubernetes, etcd 2개의 mode 를 제공하고 있음.&lt;/div&gt;
&lt;div&gt;multi cluster가 아닌 경우에는 일반적으로 Kubernetes mode로 사용하는 것을 추천함.&lt;/div&gt;
&lt;div&gt;데이터 저장소를 사용할 수 없는 경우 Calico Network는 계속 작동하지만 업데이트할 수 없음.&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;저장소 모드&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Kubernetes mode(KDD: Kubernetes Datastore Driver)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;default mode.&lt;/li&gt;
&lt;li&gt;별도의 DB를 구축하지 않고, &lt;b data-index-in-node=&quot;17&quot; data-path-to-node=&quot;9,1,1,0,0&quot;&gt;Kubernetes API Server&lt;/b&gt;를 통해 데이터를 저장하고 조회함.&lt;/li&gt;
&lt;li&gt;데이터는 실제로 Kubernetes의 etcd에 저장되지만,&lt;/li&gt;
&lt;li&gt;Calico는 이를 &lt;b data-index-in-node=&quot;45&quot; data-path-to-node=&quot;9,1,1,1,0&quot;&gt;CRD(Custom Resource Definition)&lt;/b&gt; 형태로 관리함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;etcd mode&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;레거시(Legacy) 또는 특수 목적용으로 사용됨. kubernetes가 아닌 플랫폼(ex: openstack)&lt;/li&gt;
&lt;li&gt;kubernetes와 Calico 리소스를 분리할 수 있음.&lt;/li&gt;
&lt;li&gt;Calico가 &lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;11,1,1,0,0&quot;&gt;직접 etcd 클러스터에 접속&lt;/b&gt;하여 데이터를 읽고 씀.&lt;/li&gt;
&lt;li&gt;Multi-cluster에서 Calico 구성할 때 사용함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;Kubernetes API (KDD)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;etcd Mode&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;권장 환경&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;일반적인 Kubernetes 클러스터&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;OpenStack, Hybrid, 특수 대규모 환경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;데이터 접근&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;kube-apiserver 경유 (CRD)&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;etcd 직접 접속 (/calico/...)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;운영 복잡도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;낮음&lt;/b&gt; (추가 관리 요소 없음)&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;높음&lt;/b&gt; (별도 etcd 관리 및 백업 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;보안(RBAC)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;Kubernetes RBAC 사용 가능&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;별도 인증서/계정 관리 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Calico IPAM plugin&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;kubernentes cluster의 &lt;/span&gt;&lt;b data-index-in-node=&quot;23&quot; data-path-to-node=&quot;5,0,0&quot;&gt;Pod에 IP 주소를 할당하고 회수&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하는 관리자.&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;Calico Datastore에 저장되어있는 IP-Pools정보를 기반으로 Pod ip 대역을 설정함.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Kubernetes는 직접 Pod에 IP 주소를 할당하고 관리하는 대신 &lt;b&gt;IPAM 플러그인&lt;/b&gt;을 사용하도록 설계되어있음.&lt;/div&gt;
&lt;div&gt;CNI Plugin인과 마찬가지로 다양한 IPAM Plugin이 존재하지만, 보통은 CNI Plugin과 같이 제공됨.&lt;/div&gt;
&lt;div&gt;Calico 역시 자체 IPAM Plugin인 calico-ipam을 가지고 있음.&lt;/div&gt;
&lt;div&gt;kubernetes cluster는 default로 Host Local IPAM이 동작함.(각 Node별로 pod의 CIDR을 할당함)&lt;/div&gt;
&lt;div&gt;하지만, Calico에서는 Pod의 IP를 직접 관리하기 위해 별도의 IPAM이 할당됨.&lt;/div&gt;
&lt;div&gt;(참고 : &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Flannel의 경우 별도의 IPAM이 없고 Host의 IPAM을 사용함.)&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;Calico IPAM의 핵심 특징: Block Affinity&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;기존 방식 (Host-Local / Flannel):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,0,0&quot;&gt;고정 할당:&lt;/b&gt; 노드가 생성될 때 미리 큰 대역(예: /24, IP 256개)을 뚝 떼어 노드에 줌. (spec.podCIDR)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,1,1,0&quot;&gt;문제점:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pod가 5개밖에 없는 노드도 IP 256개를 점유하므로 &lt;b data-index-in-node=&quot;37&quot; data-path-to-node=&quot;8,0,1,1,0&quot;&gt;IP 낭비&lt;/b&gt;가 심함.&lt;/li&gt;
&lt;li&gt;반대로 Pod가 너무 많은 노드는 IP가 모자라 Pod 생성이 실패할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;Calico 방식 (Calico IPAM):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,1,0,0&quot;&gt;동적 블록 할당:&lt;/b&gt; 노드에 큰 대역을 미리 주지 않고, &lt;b data-index-in-node=&quot;30&quot; data-path-to-node=&quot;8,1,1,0,0&quot;&gt;작은 블록(Block, 기본 /26, IP 64개) 단위&lt;/b&gt;로 필요할 때마다 할당.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,1,1,0&quot;&gt;유연성:&lt;/b&gt; A 노드에 Pod가 많아져서 할당받은 블록을 다 쓰면, &lt;b data-index-in-node=&quot;36&quot; data-path-to-node=&quot;8,1,1,1,0&quot;&gt;동적으로 새로운 블록을 추가로 받아옴.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,1,2,0&quot;&gt;효율성:&lt;/b&gt; Pod가 적은 노드는 IP를 적게 가져가므로, 클러스터 전체의 IP 자원을 효율적으로 쓸 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;[Calico IPAM 설정 확인]&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;&lt;/span&gt;&lt;/b&gt;
&lt;pre id=&quot;code_1768221363556&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/etc/cni/net.d/10-calico.conflist&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JzkmU/dJMcabiC6TQ/kbJZBo1ziqz8IkJE9VWK80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JzkmU/dJMcabiC6TQ/kbJZBo1ziqz8IkJE9VWK80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JzkmU/dJMcabiC6TQ/kbJZBo1ziqz8IkJE9VWK80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJzkmU%2FdJMcabiC6TQ%2FkbJZBo1ziqz8IkJE9VWK80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;628&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sUB1T/dJMcaiIL8vZ/WwBgxe0CwhPP3H3oLBjJa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sUB1T/dJMcaiIL8vZ/WwBgxe0CwhPP3H3oLBjJa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sUB1T/dJMcaiIL8vZ/WwBgxe0CwhPP3H3oLBjJa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsUB1T%2FdJMcaiIL8vZ%2FWwBgxe0CwhPP3H3oLBjJa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;669&quot; height=&quot;155&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11&quot;&gt;[참고] IPAM이란?&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0,0&quot;&gt;정의:&lt;/b&gt; IP Address Management의 약자로, 네트워크 상의 IP 주소 할당, 추적, 관리를 자동화하는 솔루션.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,0&quot;&gt;K8s에서의 의미:&lt;/b&gt; CNI 프레임워크의 일부로서, 컨테이너에 중복되지 않는 고유한 IP를 발급해주는 역할을 수행하는 모듈.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;kube-controllers (Calico-kube-controllers)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;Kubernetes API Server를 모니터링(Watch)하여, 클러스터의 상태 변화를 Calico Datastore에 동기화하는 컨트롤러&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;첨부한 그림에서 보이는 것 같이 calico-kube-controllers는 kube-apiserver를 watch하고 있음.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt; Datastore 모드에 따른 역할 차이&lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;Etcd Mode인 경우:&lt;/b&gt; &lt;b&gt;(핵심 동기화 담당)&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;K8s의 NetworkPolicy, Service 등을 감지하여 Etcd에 Calico 전용 데이터 포맷으로 변환 및 저장함.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;이 컨트롤러가 죽으면 &lt;b&gt;새로운 정책(Policy)이 적용되지 않음.&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;b&gt;Kubernetes(KDD) Mode인 경우:&lt;/b&gt; &lt;b&gt;(리소스 정리 및 청소 담당)&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;Felix가 K8s CRD를 직접 읽으므로 정책 동기화 역할은 줄어듦.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;하지만 Garbage Collection(GC) 역할을 수행하기 위해 &lt;b&gt;반드시 필요함.&lt;/b&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;b&gt;예시:&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;kubectl delete node로 노드를 삭제했을 때, kube-controllers가 없으면&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Calico는 해당 노드에 할당된 &lt;b&gt;IP Block과 IP 정보를 삭제하지 않고 영원히 점유(Leak)&lt;/b&gt;하게 됨.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;즉, 클러스터의 리소스 효율성과 데이터 무결성을 위해 KDD 모드에서도 배포되어야 함.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;calico-kube-controller 내부 controller 항목&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;policy controller:&lt;/b&gt; watches network policies and programs Calico policies.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;namespace controller:&lt;/b&gt; watches namespaces and programs Calico profiles.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;serviceaccount controller:&lt;/b&gt; watches service accounts and programs Calico profiles.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;workloadendpoint controller:&lt;/b&gt; watches for changes to pod labels and updates Calico workload endpoints.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;node controller:&lt;/b&gt; watches for the removal of Kubernetes nodes and removes corresponding data from Calico, and optionally watches for node updates to create and sync host endpoints for each node.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;컨트롤러&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;역할&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Node Controller&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&amp;bull; K8s 노드 삭제 시, Calico 데이터(IP 할당 정보 등)를 함께 삭제(GC).&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&amp;bull; (Etcd 모드 시) K8s 노드 정보를 Calico 호스트 정보로 동기화.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Policy Controller&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;bull; (주로 Etcd 모드) K8s NetworkPolicy를 감지하여 Calico Policy로 변환/동기화.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Namespace Controller&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;bull; Namespace 생성/삭제를 감지하여 Calico Profile을 관리.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;ServiceAccount Controller&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;bull; ServiceAccount 변경 사항을 Calico Profile에 동기화.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;WorkloadEndpoint Controller&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;bull; Pod의 라벨(Label) 변경 등을 감지하여 Endpoint 정보를 갱신.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;kube-controllers가 생성하는 etcd key/value&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;/calico/resources/v3/projectcalico.org/&lt;/div&gt;
&lt;div&gt;하위에 calico가 동작하는데 필요한 cluster 정보를 저장함.&lt;/div&gt;
&lt;div&gt;(kubernetes mode로 동작하고 kube-controllers 가 없는 calico는 해당 key가 존재하지 않음.)&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wboqu/dJMcafL5Bo8/pv7KuEDA8ch4kfOmHwMbu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wboqu/dJMcafL5Bo8/pv7KuEDA8ch4kfOmHwMbu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wboqu/dJMcafL5Bo8/pv7KuEDA8ch4kfOmHwMbu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWboqu%2FdJMcafL5Bo8%2Fpv7KuEDA8ch4kfOmHwMbu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1550&quot; height=&quot;908&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Typha&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;Calico Datastore(K8s API/etcd)와 수백/수천 개의 Felix 인스턴스 사이의 &lt;b data-index-in-node=&quot;60&quot; data-path-to-node=&quot;10,0,0&quot;&gt;상태 캐싱 프록시(State Caching Proxy)&lt;/b&gt; 역할을 담당함.&lt;/div&gt;
&lt;div&gt;Typha가 없다면, 모든 노드의 Felix, confd가 각자 API 서버에 Watch 요청을 보냄.&lt;/div&gt;
&lt;div&gt;노드가 100개 이상 늘어나면 API 서버의 부하가 급증하여 클러스터 전체 성능 저하 발생.&lt;/div&gt;
&lt;div&gt;Typha를 도입하면, Typha가 대표로 한 번만 데이터를 받아와서 캐싱하고,&lt;/div&gt;
&lt;div&gt;이를 다수의 Felix에게 뿌려주어(Fan-out) &lt;b data-index-in-node=&quot;74&quot; data-path-to-node=&quot;10,1,1,2,0&quot;&gt;Datastore의 부하를 획기적으로 줄임.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;즉 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하나의 Typha 인스턴스가 수백 개의 Felix를 커버할 수 있음.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;Typha 설정은 아래 링크를 참고.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/reference/typha/configuration&quot;&gt;https://projectcalico.docs.tigera.io/reference/typha/configuration&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;calicoctl&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;calico object를 CRUD 할 수 있음, 즉 calico datastore에 접근 가능한 calico test tool.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;참고&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #383838;&quot; data-keep-colors=&quot;true&quot;&gt;&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico 개념]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/about/about-calico&quot;&gt;https://projectcalico.docs.tigera.io/about/about-calico&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/reference/architecture/overview&quot;&gt;https://projectcalico.docs.tigera.io/reference/architecture/overview&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://joshrosso.com/docs/2020/2020-10-01-calico-routing-modes/&quot;&gt;https://joshrosso.com/docs/2020/2020-10-01-calico-routing-modes/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MpbIZ1SmEkU&quot;&gt;https://www.youtube.com/watch?v=MpbIZ1SmEkU&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://leebriggs.co.uk/blog/2017/02/18/kubernetes-networking-calico&quot;&gt;https://leebriggs.co.uk/blog/2017/02/18/kubernetes-networking-calico&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://medium.com/@BalajiSA/k8s-networking-and-calico-cni-plugin-7ebf84bf7fec&quot;&gt;https://medium.com/@BalajiSA/k8s-networking-and-calico-cni-plugin-7ebf84bf7fec&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes-sigs/kubespray/blob/master/docs/calico.md&quot;&gt;https://github.com/kubernetes-sigs/kubespray/blob/master/docs/calico.md&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://tanzu.vmware.com/developer/guides/container-networking-calico-refarch/&quot;&gt;[잘 정리되어있음]&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://tanzu.vmware.com/developer/guides/container-networking-calico-refarch/&quot;&gt;https://tanzu.vmware.com/developer/guides/container-networking-calico-refarch/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico kube controller]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/reference/kube-controllers/&quot;&gt;https://projectcalico.docs.tigera.io/reference/kube-controllers/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico typha]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/reference/typha/&quot;&gt;https://projectcalico.docs.tigera.io/reference/typha/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico cni plugin]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/getting-started/kubernetes/hardway/install-cni-plugin&quot;&gt;https://projectcalico.docs.tigera.io/getting-started/kubernetes/hardway/install-cni-plugin&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico datastore]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://projectcalico.docs.tigera.io/getting-started/kubernetes/hardway/the-calico-datastore&quot;&gt;https://projectcalico.docs.tigera.io/getting-started/kubernetes/hardway/the-calico-datastore&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico IPAM]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://cwal.tistory.com/13&quot;&gt;https://cwal.tistory.com/13&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico routing mode]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://joshrosso.com/c/calico-routing-modes/&quot;&gt;https://joshrosso.com/c/calico-routing-modes/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;IP-in-IP : &lt;a href=&quot;https://ssup2.github.io/theory_analysis/Kubernetes_Calico_Plugin/&quot;&gt;https://ssup2.github.io/theory_analysis/Kubernetes_Calico_Plugin/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;3가지 mode : &lt;a href=&quot;https://coffeewhale.com/calico-mode&quot;&gt;https://coffeewhale.com/calico-mode&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://eddie.ee/186&quot;&gt;https://eddie.ee/186&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://tech.hostway.co.kr/2022/04/22/675/?print=print&quot;&gt;https://tech.hostway.co.kr/2022/04/22/675/?print=print&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[calico 한글 자료]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://ssup2.github.io/theory_analysis/Kubernetes_Calico_Plugin/&quot;&gt;https://ssup2.github.io/theory_analysis/Kubernetes_Calico_Plugin/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://velog.io/@200ok/Kubernetes-Calico-CNI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot;&gt;https://velog.io/@200ok/Kubernetes-Calico-CNI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://coffeewhale.com/packet-network2#bird-bgp&quot;&gt;https://coffeewhale.com/packet-network2#bird-bgp&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://coffeewhale.com/calico-mode&quot;&gt;https://coffeewhale.com/calico-mode&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://lahuman.github.io/kang_3week_1/&quot;&gt;https://lahuman.github.io/kang_3week_1/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://velog.io/@200ok/Kubernetes-Calico-CNI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot;&gt;https://velog.io/@200ok/Kubernetes-Calico-CNI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[ipip mode에서 vxlan mode 변경]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://tech.hostway.co.kr/2022/04/29/851/&quot;&gt;https://tech.hostway.co.kr/2022/04/29/851/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes/Calico</category>
      <category>BGP</category>
      <category>Bird</category>
      <category>Calico</category>
      <category>cni</category>
      <category>feilx</category>
      <category>k8s</category>
      <category>Kubernetes</category>
      <category>network</category>
      <category>VXLAN</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/432</guid>
      <comments>https://ikcoo.tistory.com/432#entry432comment</comments>
      <pubDate>Mon, 12 Jan 2026 21:47:55 +0900</pubDate>
    </item>
    <item>
      <title>kubernetes 모니터링 : Node Problem Detector(NPD)란?</title>
      <link>https://ikcoo.tistory.com/431</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;Node Problem Detector&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Node Problem Detector(NPD) 란?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;Node Problem Detector는 노드의 상태를 모니터링하고&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #202124;&quot; data-keep-colors=&quot;true&quot;&gt;하드웨어, 커널, 컨테이너 런타임 문제와 같은 일반적인 노드 문제를 감지하는 오픈소스 라이브러리.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;일반적으로 Kubernetes에 Daemonset으로 배포되어 동작함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;수집하는 metrics 계층&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #41ad1c;&quot; data-keep-colors=&quot;true&quot;&gt;=&amp;nbsp; system metrics&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;host에서 발생한&amp;nbsp;&lt;b&gt;&quot;에러 정보&quot;&lt;/b&gt;를 전달함&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;수집하는 metrics 정보 확인 링크&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;NPD는 config에 지정되어있는 설정에 따라 수집하는 지표 정보가 매우 유동적임&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;NPD 설정 확인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;--system-log-monitors=&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/tree/master/pkg/systemlogmonitor#metrics-reporting&quot;&gt;https://github.com/kubernetes/node-problem-detector/tree/master/pkg/systemlogmonitor#metrics-reporting&lt;/a&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;/config/kernel-monitor.json&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/blob/master/config/kernel-monitor.json&quot;&gt;https://github.com/kubernetes/node-problem-detector/blob/master/config/kernel-monitor.json&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;/config/kernel-monitor-filelog.json&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/blob/master/config/kernel-monitor-filelog.json&quot;&gt;https://github.com/kubernetes/node-problem-detector/blob/master/config/kernel-monitor-filelog.json&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;/config/docker-monitor.json&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/blob/master/config/docker-monitor.json&quot;&gt;https://github.com/kubernetes/node-problem-detector/blob/master/config/docker-monitor.json&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;/config/docker-monitor-filelog.json&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/blob/master/config/docker-monitor-filelog.json&quot;&gt;https://github.com/kubernetes/node-problem-detector/blob/master/config/docker-monitor-filelog.json&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;b&gt;--custom-plugin-monitors=&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;/config/network-problem-monitor.json&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/blob/master/config/network-problem-monitor.json&quot;&gt;https://github.com/kubernetes/node-problem-detector/blob/master/config/network-problem-monitor.json&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;b&gt;--config.system-stats-monitor=&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;/config/system-stats-monitor.json&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/blob/master/config/system-stats-monitor.json&quot;&gt;https://github.com/kubernetes/node-problem-detector/blob/master/config/system-stats-monitor.json&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;problem 지표 정보 목록은 아래와 같음&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;AUFSUmountHung&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;ConntrackFull&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;DockerHung&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;Ext4Error&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;Ext4Warning&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;FilesystemIsReadOnly&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;IOError&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;KernelOops&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;MemoryReadError&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;&lt;b&gt;&lt;span style=&quot;color: #fc1233;&quot; data-keep-colors=&quot;true&quot;&gt;OOMKilling&lt;/span&gt;&lt;/b&gt;&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;TaskHung&quot;} 15&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter{reason=&quot;UnregisterNetDevice&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_gauge{reason=&quot;AUFSUmountHung&quot;,type=&quot;KernelDeadlock&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_gauge{reason=&quot;DockerHung&quot;,type=&quot;KernelDeadlock&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_gauge{reason=&quot;FilesystemIsReadOnly&quot;,type=&quot;ReadonlyFilesystem&quot;} 0&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;전체 항목 설명&lt;/b&gt;&lt;/div&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;cpu_load_15m CPU average load (15m)
cpu_load_1m CPU average load (1m)
cpu_load_5m CPU average load (5m)
cpu_runnable_task_count The average number of runnable tasks in the run-queue during the last minute
cpu_usage_time CPU usage, in seconds
disk_avg_queue_len The average queue length on the disk
disk_bytes_used Disk bytes used, in Bytes
disk_io_time The IO time spent on the disk, in ms
disk_merged_operation_count Disk merged operations count
disk_operation_bytes_count Bytes transferred in disk operations
disk_operation_count Disk operations count
disk_operation_time Time spent in disk operations, in ms
disk_weighted_io The weighted IO on the disk, in ms
host_uptime The uptime of the operating system
memory_anonymous_used Anonymous memory usage, in Bytes. Summing values of all states yields the total anonymous memory used.
memory_bytes_used Memory usage by each memory state, in Bytes. Summing values of all states yields the total memory on the node.
memory_dirty_used Dirty pages usage, in Bytes. Dirty means the memory is waiting to be written back to disk, and writeback means the memory is actively being written back to disk.
memory_page_cache_used Page cache memory usage, in Bytes. Summing values of all states yields the total anonymous memory used.
memory_unevictable_used Unevictable memory usage, in Bytes
problem_counter Number of times a specific type of problem have occurred.
problem_gauge Whether a specific type of problem is affecting the node or not.
system_cpu_stat Cumulative time each cpu spent in various stages.
system_interrupts_total Total number of interrupts serviced (cumulative).
system_os_feature OS Features like GPU support, KTD kernel, third party modules as unknown modules. 1 if the feature is enabled and 0, if disabled.
system_processes_total Number of forks since boot.
system_procs_blocked Number of processes currently blocked.
system_procs_running Number of processes currently running.&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;어떤 에러 정보를 수집하는지에 대한 정보가 있음.&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector#problem-daemon&quot;&gt;https://github.com/kubernetes/node-problem-detector#problem-daemon&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;problem_gauge, problem_counter 차이&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;problem_gauge = 영구적인 문제&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;problem_counter = 일시적인 문제&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;참고 :&amp;nbsp;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/tree/master/pkg/systemlogmonitor#metrics-reporting&quot;&gt;https://github.com/kubernetes/node-problem-detector/tree/master/pkg/systemlogmonitor#metrics-reporting&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;problem_gauge의 카운트는&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;problem_counter항목의 condition에 명시되어있는 것과 매칭되면 증가함.&lt;/div&gt;
&lt;div&gt;즉 problem_counter와 problem_gauge가 동시에 증가함.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwnbYy/btsJHqnsm2i/7wsgVDUgzbdf2MM849iHl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwnbYy/btsJHqnsm2i/7wsgVDUgzbdf2MM849iHl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwnbYy/btsJHqnsm2i/7wsgVDUgzbdf2MM849iHl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwnbYy%2FbtsJHqnsm2i%2F7wsgVDUgzbdf2MM849iHl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;270&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;수집한 metrics 정보를 전달하는 방식&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #41ad1c;&quot; data-keep-colors=&quot;true&quot;&gt;=&amp;nbsp; Pull 방식&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;npd는 HTTP 통신을 통해 Prometheus Server와 같은 metrics server가 process-exporter가 수집한 Metric Data를 가져갈 수 있게&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;/metrics&amp;nbsp;&lt;/b&gt;라는 HTTP 엔드포인트를 제공함.&lt;/div&gt;
&lt;div&gt;exporter가 해당 엔드포인트를 제공하고 있어서 Server가 exporter의 엔드포인트로 HTTP GET 요청을 날려 Metric Data를 Pull방식으로 수집함.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #41ad1c;&quot; data-keep-colors=&quot;true&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #41ad1c;&quot; data-keep-colors=&quot;true&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;default port&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;20257&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;Node Problem Detector&lt;/span&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;&amp;nbsp;배포 방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;실행&lt;/div&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;---
apiVersion: v1
kind: ServiceAccount
metadata:
&amp;nbsp; name: node-problem-detector
&amp;nbsp; namespace: kube-system
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; kubernetes.io/cluster-service: &quot;true&quot;
&amp;nbsp; &amp;nbsp; addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
&amp;nbsp; name: magnum:podsecuritypolicy:node-problem-detector
&amp;nbsp; namespace: kube-system
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; addonmanager.kubernetes.io/mode: Reconcile
&amp;nbsp; &amp;nbsp; kubernetes.io/cluster-service: &quot;true&quot;
roleRef:
&amp;nbsp; apiGroup: rbac.authorization.k8s.io
&amp;nbsp; kind: ClusterRole
&amp;nbsp; name: magnum:podsecuritypolicy:privileged
subjects:
- kind: ServiceAccount
&amp;nbsp; name: node-problem-detector
&amp;nbsp; namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
&amp;nbsp; name: npd-binding
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; kubernetes.io/cluster-service: &quot;true&quot;
&amp;nbsp; &amp;nbsp; addonmanager.kubernetes.io/mode: Reconcile
roleRef:
&amp;nbsp; apiGroup: rbac.authorization.k8s.io
&amp;nbsp; kind: ClusterRole
&amp;nbsp; name: system:node-problem-detector
subjects:
- kind: ServiceAccount
&amp;nbsp; name: node-problem-detector
&amp;nbsp; namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
&amp;nbsp; name: npd
&amp;nbsp; namespace: kube-system
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; k8s-app: node-problem-detector
&amp;nbsp; &amp;nbsp; version: ${NODE_PROBLEM_DETECTOR_TAG}
&amp;nbsp; &amp;nbsp; kubernetes.io/cluster-service: &quot;true&quot;
&amp;nbsp; &amp;nbsp; addonmanager.kubernetes.io/mode: Reconcile
spec:
&amp;nbsp; selector:
&amp;nbsp; &amp;nbsp; matchLabels:
&amp;nbsp; &amp;nbsp; &amp;nbsp; k8s-app: node-problem-detector
&amp;nbsp; &amp;nbsp; &amp;nbsp; version: ${NODE_PROBLEM_DETECTOR_TAG}
&amp;nbsp; template:
&amp;nbsp; &amp;nbsp; metadata:
&amp;nbsp; &amp;nbsp; &amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; k8s-app: node-problem-detector
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; version: ${NODE_PROBLEM_DETECTOR_TAG}
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; kubernetes.io/cluster-service: &quot;true&quot;
&amp;nbsp; &amp;nbsp; spec:
&amp;nbsp; &amp;nbsp; &amp;nbsp; containers:
&amp;nbsp; &amp;nbsp; &amp;nbsp; - name: node-problem-detector
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ports:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - containerPort: 20257
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hostPort: 20257
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; protocol: TCP
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; image: ${_gcr_prefix}${NPD_REPO}:${NODE_PROBLEM_DETECTOR_TAG}
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &quot;/bin/sh&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &quot;-c&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Pass both config to support both journald and syslog.
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &quot;exec /node-problem-detector --logtostderr --system-log-monitors=/config/kernel-monitor.json,/config/kernel-monitor-filelog.json,/config/docker-monitor.json,/config/docker-monitor-filelog.json --logtostderr --enable-k8s-exporter=false --prometheus-address=0.0.0.0 --prometheus-port=20257 --custom-plugin-monitors=/config/network-problem-monitor.json --config.system-stats-monitor=/config/system-stats-monitor.json 2&amp;gt;&amp;amp;1 | tee /var/log/node-problem-detector.log&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; securityContext:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; privileged: true
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resources:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; limits:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cpu: &quot;200m&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memory: &quot;100Mi&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; requests:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cpu: &quot;20m&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memory: &quot;20Mi&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; env:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - name: NODE_NAME
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; valueFrom:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fieldRef:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fieldPath: spec.nodeName
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; volumeMounts:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - name: log
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mountPath: /var/log
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - name: localtime
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mountPath: /etc/localtime
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; readOnly: true
&amp;nbsp; &amp;nbsp; &amp;nbsp; volumes:
&amp;nbsp; &amp;nbsp; &amp;nbsp; - name: log
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hostPath:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; path: /var/log/
&amp;nbsp; &amp;nbsp; &amp;nbsp; - name: localtime
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hostPath:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; path: /etc/localtime
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; type: &quot;FileOrCreate&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; serviceAccountName: node-problem-detector
&amp;nbsp; &amp;nbsp; &amp;nbsp; tolerations:
&amp;nbsp; &amp;nbsp; &amp;nbsp; - operator: &quot;Exists&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; effect: &quot;NoExecute&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; - key: &quot;CriticalAddonsOnly&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; operator: &quot;Exists&quot;
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;NPD가 수집한 지표 정보 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;ex) curl 10.200.230.1:20257/metrics&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LycDM/btsJHYDWrLw/kGJkvflhlK3o1Iq9zXXz61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LycDM/btsJHYDWrLw/kGJkvflhlK3o1Iq9zXXz61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LycDM/btsJHYDWrLw/kGJkvflhlK3o1Iq9zXXz61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLycDM%2FbtsJHYDWrLw%2FkGJkvflhlK3o1Iq9zXXz61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;662&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;NPD 탐지 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;npd 테스트 예제 참고&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector/tree/master/test/kernel_log_generator/problems&quot;&gt;https://github.com/kubernetes/node-problem-detector/tree/master/test/kernel_log_generator/problems&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;problem_counter의 KernelOops 항목 탐지 확인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;아래와 같이 수동으로 에로 로그를 커널 로그에 추가&lt;/b&gt;&lt;/div&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;sudo sh -c &quot;echo 'kernel: BUG: unable to handle kernel NULL pointer dereference at TESTING' &amp;gt;&amp;gt; /dev/kmsg&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;이후 탐지 count 증가되는지 확인&lt;/b&gt;&lt;/div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;curl localhost:20257/metrics&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ny6Ea/btsJIhpJ6a8/OvAvcn84J1RKmVA6Hh6Xy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ny6Ea/btsJIhpJ6a8/OvAvcn84J1RKmVA6Hh6Xy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ny6Ea/btsJIhpJ6a8/OvAvcn84J1RKmVA6Hh6Xy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNy6Ea%2FbtsJIhpJ6a8%2FOvAvcn84J1RKmVA6Hh6Xy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1390&quot; height=&quot;734&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;problem_counter의 OOM항목 탐지 확인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;아래와 같이 수동으로 에로 로그를 커널 로그에 추가&lt;/b&gt;&lt;/div&gt;
&lt;pre class=&quot;llvm&quot;&gt;&lt;code&gt;sudo sh -c &quot;echo 'Killed process 4070 (iksoon-test) total-vm:8192780kB, anon-rss:7231748kB, file-rss:0kB, shmem-rss:0kB' &amp;gt;&amp;gt; /dev/kmsg&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;이후 탐지 count 증가되는지 확인&lt;/b&gt;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/srNxv/btsJHj9UNdb/cIjPl2wKTxIee03xMKAkX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/srNxv/btsJHj9UNdb/cIjPl2wKTxIee03xMKAkX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/srNxv/btsJHj9UNdb/cIjPl2wKTxIee03xMKAkX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsrNxv%2FbtsJHj9UNdb%2FcIjPl2wKTxIee03xMKAkX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1436&quot; height=&quot;738&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;탐지 이후 count는 감소되지 않고 유지,&lt;/div&gt;
&lt;div&gt;탐지 될 때 마다 count 증가함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;problem_gauge의 FilesystemIsReadOnly항목 탐지 확인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre class=&quot;llvm&quot;&gt;&lt;code&gt;sudo sh -c &quot;echo 'Remounting filesystem read-only' &amp;gt;&amp;gt; /dev/kmsg&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq0emA/btsJGWtzAo2/hZ3jlYKiBzUKKeKlxzkskk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq0emA/btsJGWtzAo2/hZ3jlYKiBzUKKeKlxzkskk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq0emA/btsJGWtzAo2/hZ3jlYKiBzUKKeKlxzkskk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq0emA%2FbtsJGWtzAo2%2FhZ3jlYKiBzUKKeKlxzkskk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1410&quot; height=&quot;758&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;참고&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/debug/debug-cluster/monitor-node-health/&quot;&gt;https://kubernetes.io/ko/docs/tasks/debug/debug-cluster/monitor-node-health/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/node-problem-detector&quot;&gt;https://github.com/kubernetes/node-problem-detector&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://stackoverflow.com/questions/48134835/how-to-use-k8s-node-problem-detector&quot;&gt;https://stackoverflow.com/questions/48134835/how-to-use-k8s-node-problem-detector&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>Kubernetes/Monitoring</category>
      <category>kubernetes 모니터링</category>
      <category>metrics</category>
      <category>node problem detector</category>
      <category>node-problem-detector</category>
      <category>npd</category>
      <category>problem_counter</category>
      <category>problem_gauge</category>
      <category>system_procs_blocked</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/431</guid>
      <comments>https://ikcoo.tistory.com/431#entry431comment</comments>
      <pubDate>Sun, 22 Sep 2024 21:25:20 +0900</pubDate>
    </item>
    <item>
      <title>kubernetes 모니터링 : process-exporter 란?</title>
      <link>https://ikcoo.tistory.com/430</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;Process Exporter&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;process-exporter 란?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;System Metrics 중&amp;nbsp;&lt;b&gt;&quot;process&quot;&lt;/b&gt;&amp;nbsp;관련 지표 정보를 수집할 수 있음.&lt;/div&gt;
&lt;div&gt;Prometheus와 연동 가능&lt;/div&gt;
&lt;div&gt;Prometheus에서 관리하는 프로젝트는 아님.&lt;/div&gt;
&lt;div&gt;MIT license로 제공&lt;/div&gt;
&lt;div&gt;참고 :&amp;nbsp;&lt;a href=&quot;https://github.com/ncabatoff/process-exporter&quot;&gt;https://github.com/ncabatoff/process-exporter&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;사용 case는 많지 않고... 관련 자료도 거의 없음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;수집하는 metrics 계층&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #41ad1c;&quot; data-keep-colors=&quot;true&quot;&gt;=&amp;nbsp; System Metrics&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Instanace에서 실행 중인 Process에 대한&amp;nbsp;&quot;&lt;b&gt;system metrics&lt;/b&gt;&quot;정보를 수집하여 API로 제공.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;수집하는 metrics 정보 확인 링크&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;[process-export의 metrics list 정보]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;별도로 없음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;직접 정리하면 아래와 같음.&lt;/div&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;# HELP namedprocess_namegroup_context_switches_total Context switches
# HELP namedprocess_namegroup_cpu_seconds_total Cpu user usage in seconds
# HELP namedprocess_namegroup_major_page_faults_total Major page faults
# HELP namedprocess_namegroup_memory_bytes number of bytes of memory in use
# HELP namedprocess_namegroup_minor_page_faults_total Minor page faults
# HELP namedprocess_namegroup_num_procs number of processes in this group
# HELP namedprocess_namegroup_num_threads Number of threads
# HELP namedprocess_namegroup_oldest_start_time_seconds start time in seconds since 1970/01/01 of oldest process in group
# HELP namedprocess_namegroup_open_filedesc number of open file descriptors for this group
# HELP namedprocess_namegroup_read_bytes_total number of bytes read by this group
# HELP namedprocess_namegroup_states Number of processes in states Running, Sleeping, Waiting, Zombie, or Other
# HELP namedprocess_namegroup_thread_context_switches_total Context switches for these threads
# HELP namedprocess_namegroup_thread_count Number of threads in this group with same threadname
# HELP namedprocess_namegroup_thread_cpu_seconds_total Cpu user/system usage in seconds
# HELP namedprocess_namegroup_thread_io_bytes_total number of bytes read/written by these threads
# HELP namedprocess_namegroup_thread_major_page_faults_total Major page faults for these threads
# HELP namedprocess_namegroup_thread_minor_page_faults_total Minor page faults for these threads
# HELP namedprocess_namegroup_threads_wchan Number of threads in this group waiting on each wchan
# HELP namedprocess_namegroup_worst_fd_ratio the worst (closest to 1) ratio between open fds and max fds among all procs in this group
# HELP namedprocess_namegroup_write_bytes_total number of bytes written by this group
# HELP namedprocess_scrape_errors general scrape errors: no proc metrics collected during a cycle
# HELP namedprocess_scrape_partial_errors incremented each time a tracked proc's metrics collection fails partially, e.g. unreadable I/O stats
# HELP namedprocess_scrape_procread_errors incremented each time a proc's metrics collection fails
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# HELP process_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which process_exporter was built.
# HELP process_max_fds Maximum number of open file descriptors.
# HELP process_open_fds Number of open file descriptors.
# HELP process_resident_memory_bytes Resident memory size in bytes.
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;수집한 metrics 정보를 전달하는 방식&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #41ad1c;&quot; data-keep-colors=&quot;true&quot;&gt;=&amp;nbsp; Pull 방식&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;node-exporter는 HTTP 통신을 통해 Prometheus Server와 같은 metrics server가 process-exporter가 수집한 Metric Data를 가져갈 수 있게&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;/metrics&amp;nbsp;&lt;/b&gt;라는 HTTP 엔드포인트를 제공함.&lt;/div&gt;
&lt;div&gt;exporter가 해당 엔드포인트를 제공하고 있어서 Server가 exporter의 엔드포인트로 HTTP GET 요청을 날려 Metric Data를 Pull방식으로 수집함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;process-exporter 배포 방법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;process-exporter.yaml&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;설정파일&lt;/div&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
&amp;nbsp; name: process-exporter-conf
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; name: process-exporter-conf
&amp;nbsp; namespace: monitoring
data:
&amp;nbsp; process-exporter-config.yml: |-
&amp;nbsp; &amp;nbsp; process_names:
&amp;nbsp; &amp;nbsp; - name: &quot;{{.Comm}}&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; cmdline:
&amp;nbsp; &amp;nbsp; &amp;nbsp; - '.+'&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;실행&lt;/div&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
&amp;nbsp; name: process-exporter-conf
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; name: process-exporter-conf
&amp;nbsp; namespace: monitoring
data:
&amp;nbsp; process-exporter-config.yml: |-
&amp;nbsp; &amp;nbsp; process_names:
&amp;nbsp; &amp;nbsp; - name: &quot;{{.Comm}}&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; cmdline:
&amp;nbsp; &amp;nbsp; &amp;nbsp; - '.+'
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
&amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; app.kubernetes.io/component: process-exporter
&amp;nbsp; &amp;nbsp; app.kubernetes.io/name: process-exporter
&amp;nbsp; name: process-exporter
&amp;nbsp; namespace: monitoring
spec:
&amp;nbsp; selector:
&amp;nbsp; &amp;nbsp; matchLabels:
&amp;nbsp; &amp;nbsp; &amp;nbsp; app.kubernetes.io/component: process-exporter
&amp;nbsp; &amp;nbsp; &amp;nbsp; app.kubernetes.io/name: process-exporter
&amp;nbsp; template:
&amp;nbsp; &amp;nbsp; metadata:
&amp;nbsp; &amp;nbsp; &amp;nbsp; labels:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app.kubernetes.io/component: process-exporter
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app.kubernetes.io/name: process-exporter
&amp;nbsp; &amp;nbsp; spec:
&amp;nbsp; &amp;nbsp; &amp;nbsp; containers:
&amp;nbsp; &amp;nbsp; &amp;nbsp; - args:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - -procfs=/host/proc
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - -config.path=/etc/process-exporter/process-exporter-config.yml
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: process-exporter
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; image: ncabatoff/process-exporter
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; securityContext:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; privileged: true
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ports:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - containerPort: 9256
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; protocol: TCP
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resources:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; limits:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cpu: 250m
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memory: 180Mi
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; requests:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cpu: 102m
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memory: 180Mi
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; volumeMounts:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - mountPath: /host/proc
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: proc-volume
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; readOnly: true
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - name: process-exporter-config-volume
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mountPath: /etc/process-exporter/
&amp;nbsp; &amp;nbsp; &amp;nbsp; volumes:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - name: proc-volume
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hostPath:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; path: /proc
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; type: &quot;&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - name: process-exporter-config-volume
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; configMap:
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; defaultMode: 420
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: process-exporter-conf
---
kind: Service
apiVersion: v1
metadata:
&amp;nbsp; name: process-exporter
&amp;nbsp; namespace: monitoring
&amp;nbsp; annotations:
&amp;nbsp; &amp;nbsp; &amp;nbsp; prometheus.io/scrape: 'true'
&amp;nbsp; &amp;nbsp; &amp;nbsp; prometheus.io/port:&amp;nbsp; '9256'
spec:
&amp;nbsp; selector:
&amp;nbsp; &amp;nbsp; &amp;nbsp; app.kubernetes.io/component: process-exporter
&amp;nbsp; &amp;nbsp; &amp;nbsp; app.kubernetes.io/name: process-exporter
&amp;nbsp; ports:
&amp;nbsp; - name: node-exporter
&amp;nbsp; &amp;nbsp; protocol: TCP
&amp;nbsp; &amp;nbsp; port: 9256
&amp;nbsp; &amp;nbsp; targetPort: 9256&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;참고&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/ncabatoff/process-exporter&quot;&gt;https://github.com/ncabatoff/process-exporter&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes/Monitoring</category>
      <category>Kubernetes Monitoring</category>
      <category>metrics</category>
      <category>ncabatoff/process-exporter</category>
      <category>process exporter</category>
      <category>process-exporter</category>
      <category>process_virtual_memory_bytes</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/430</guid>
      <comments>https://ikcoo.tistory.com/430#entry430comment</comments>
      <pubDate>Sun, 22 Sep 2024 21:02:05 +0900</pubDate>
    </item>
    <item>
      <title>metricbeat container 실행 방법</title>
      <link>https://ikcoo.tistory.com/429</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3665ee;&quot; data-keep-colors=&quot;true&quot;&gt;metricbeat container 실행 방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;worker node에서 metricbeat의&amp;nbsp; 메모리 사용량이 최대 60%까지 올라가는 이슈가 있었음.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 메모리 사용량 이슈는 metricbeat의 메모리릭 이슈로 확인됨.&lt;/li&gt;
&lt;li&gt;metricbeat git issues를 확인해보면 각 버전별로 항상 언급됨.&lt;/li&gt;
&lt;li&gt;고질병인가봄...&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;해당 이슈를 해결 할 수 있는 방법 중 하나로&lt;/div&gt;
&lt;div&gt;container로 실행 시켜서 CPU, Memory 사용량을 제한 하는 방법을 알아봄.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하는 tool은 nerdctl임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;nerdctl run 명령 시 CPU, Memory 사용량 제한 하는 옵션&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;--cpu-period uint&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Limit CPU CFS (Completely Fair Scheduler) period
&amp;nbsp; &amp;nbsp; &amp;nbsp; --cpu-quota int&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Limit CPU CFS (Completely Fair Scheduler) quota (default -1)
&amp;nbsp; &amp;nbsp; &amp;nbsp; --cpu-shares uint&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CPU shares (relative weight)
&amp;nbsp; &amp;nbsp; &amp;nbsp; --cpus float&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Number of CPUs
&amp;nbsp; &amp;nbsp; &amp;nbsp; --cpuset-cpus string&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CPUs in which to allow execution (0-3, 0,1)
&amp;nbsp; &amp;nbsp; &amp;nbsp; --cpuset-mems string&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MEMs in which to allow execution (0-3, 0,1)


-m, --memory string&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Memory limit
&amp;nbsp; &amp;nbsp; &amp;nbsp; --memory-reservation string&amp;nbsp; Memory soft limit
&amp;nbsp; &amp;nbsp; &amp;nbsp; --memory-swap string&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Swap limit equal to memory plus swap: '-1' to enable unlimited swap
&amp;nbsp; &amp;nbsp; &amp;nbsp; --memory-swappiness int&amp;nbsp; &amp;nbsp; &amp;nbsp; Tune container memory swappiness (0 to 100) (default -1) (default -1)
&amp;nbsp; &amp;nbsp; &amp;nbsp; --mount stringArray&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attach a filesystem mount to the container&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;metricbeat container 실행&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;nerdctl run \
--name=metricbeat \
--network host \
--privileged \
--volume=&quot;/etc/metricbeat:/etc/metricbeat:ro&quot; \
--volume=&quot;/var/run/docker.sock:/var/run/docker.sock:ro&quot; \
--volume=&quot;/sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro&quot; \
--volume=&quot;/proc:/hostfs/proc:ro&quot; \
--volume=&quot;/:/hostfs:ro&quot; \
docker.elastic.co/beats/metricbeat:8.7.0 metricbeat -e \
--path.config /etc/metricbeat/ -c /etc/metricbeat/metricbeat.yml&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;특이 사항&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;--system.hostfs 설정은 DEPRECATED 됨.&lt;/div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;DEPRECATED: The --system.hostfs flag will be removed in the future and replaced by a config value. Will be removed in version: 8.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7600d8;&quot; data-keep-colors=&quot;true&quot;&gt;Container로 실행 시 몇 가지 문제점이 있음&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;
&lt;div&gt;filesystem metricset에서 경로가 container 경로로 나옴 (host 부분 생략하면 실제 경로 이긴 함)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;process monitoring이 불가능함&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;일부 system metric 항목이 host에서 수집할 때와 다른 결과가 나옴.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;&lt;br /&gt;참고&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/beats/metricbeat/current/running-on-docker.html#monitoring-host&quot;&gt;https://www.elastic.co/guide/en/beats/metricbeat/current/running-on-docker.html#monitoring-host&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Kubernetes/Monitoring</category>
      <category>metricbeat</category>
      <category>metricbeat container</category>
      <category>metricbeat 메모리릭</category>
      <category>system.hostfs</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/429</guid>
      <comments>https://ikcoo.tistory.com/429#entry429comment</comments>
      <pubDate>Sun, 22 Sep 2024 20:40:02 +0900</pubDate>
    </item>
    <item>
      <title>metricbeat : Error initializing Kubernetes metadata enricher</title>
      <link>https://ikcoo.tistory.com/428</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;metricbeat 사용중 에러 발생&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오류명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Error&amp;nbsp;initializing&amp;nbsp;Kubernetes&amp;nbsp;metadata&amp;nbsp;enricher:&amp;nbsp;unable&amp;nbsp;to&amp;nbsp;build&amp;nbsp;kube&amp;nbsp;config&amp;nbsp;due&amp;nbsp;to&amp;nbsp;error:&amp;nbsp;invalid&amp;nbsp;configuration:&amp;nbsp;no&amp;nbsp;configuration&amp;nbsp;has&amp;nbsp;been&amp;nbsp;provided,&amp;nbsp;try&amp;nbsp;setting&amp;nbsp;KUBERNETES_MASTER&amp;nbsp;environment&amp;nbsp;variable&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3788&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brp5Te/btsJvadjwgY/1RcKVskPhPBrBBXakVQH8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brp5Te/btsJvadjwgY/1RcKVskPhPBrBBXakVQH8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brp5Te/btsJvadjwgY/1RcKVskPhPBrBBXakVQH8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrp5Te%2FbtsJvadjwgY%2F1RcKVskPhPBrBBXakVQH8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3788&quot; height=&quot;474&quot; data-origin-width=&quot;3788&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;원인&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;kubeconfig 파일을 찾지 못해서 발생하는 에러.&lt;/div&gt;
&lt;div&gt;근데 왜 worker node에서 kubeconfig 파일을 사용해야하는지는 ... 모르겠음.&lt;/div&gt;
&lt;div&gt;리서치 항목 : kubeconfig 있을 때, 없을 때 차이 비교해봐야함.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;kubeconifg 값에 아무것도 안주고 이상이 없는지 확인 (ERROR log 남는지 확인)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;kubeconfig 환경변수 추가 안하고 kube-proxy, state-metrics 등 정보 가져오는지 확인&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;kubeconfig 환경변수 정상 추가 후 kube-proxy, state-metrics 등 정보 가져오는지 확인&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;b&gt;결론 : 해당 에러는 단순하게 kubeconfig 환경변수 못찾아서 발생하는 오류고 실제 동작에는 영향이 없음.&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당&amp;nbsp;에러는&amp;nbsp;Metricbeat이&amp;nbsp;Kubernetes&amp;nbsp;API&amp;nbsp;서버와&amp;nbsp;통신하기&amp;nbsp;위해&amp;nbsp;필요한&amp;nbsp;구성&amp;nbsp;정보가&amp;nbsp;없어&amp;nbsp;발생하는&amp;nbsp;문제입니다.&amp;nbsp;로컬&amp;nbsp;환경에서&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;Metricbeat은&amp;nbsp;Kubernetes&amp;nbsp;클러스터&amp;nbsp;내부에서&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;Pod이나&amp;nbsp;Container가&amp;nbsp;아니므로,&amp;nbsp;InCluster&amp;nbsp;인증&amp;nbsp;방식을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해결책&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;kubernetes module의 kubeconfig 옵션을 사용해봤지만 해결되지 않음.&lt;/div&gt;
&lt;div&gt;그래서 환경 변수를 사용하는 아래와 같은 방법을 사용해야함.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;kubeconfig파일을 다운받고&lt;/div&gt;
&lt;div&gt;worker node의&lt;/div&gt;
&lt;div&gt;/etc/metricbeat/kubeconfig.yaml&lt;/div&gt;
&lt;div&gt;경로에 배치&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;cat /etc/systemd/system/metricbeat.service&lt;/div&gt;
&lt;div&gt;파일에&lt;/div&gt;
&lt;div&gt;Environment=KUBECONFIG=/etc/metricbeat/kubeconfig.yaml&lt;/div&gt;
&lt;div&gt;내용 추가해야함&lt;/div&gt;
&lt;div&gt;아래와 같이 수정.&lt;/div&gt;
&lt;pre id=&quot;code_1725710646322&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Unit]
Description=metricbeat

[Service]
Environment=KUBECONFIG=/etc/metricbeat/kubeconfig.yaml
ExecStart=/bin/bash -c '/bin/metricbeat --path.config /etc/metricbeat/ -c /etc/metricbeat/metricbeat.yml -e'
Delegate=yes
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후&lt;/p&gt;
&lt;pre id=&quot;code_1725710657075&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl restart metricbeat&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Kubernetes/Kubernetes 에러 경험</category>
      <category>error initializing kubernetes metadata enricher</category>
      <category>unable to build kube config due to error</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/428</guid>
      <comments>https://ikcoo.tistory.com/428#entry428comment</comments>
      <pubDate>Sat, 7 Sep 2024 21:04:40 +0900</pubDate>
    </item>
    <item>
      <title>metricbeat에서 worker node kubelet 접근 방법 리서치 중 오류 분석 내용</title>
      <link>https://ikcoo.tistory.com/427</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오류명&lt;/h2&gt;
&lt;pre id=&quot;code_1725710461344&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;util/kubernetes.go:114#011Error initializing Kubernetes metadata enricher: unable to build kube config due to error: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3788&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zupdx/btsJuE0gwn4/F35ZncQ9H1XzQ3OBSD7WV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zupdx/btsJuE0gwn4/F35ZncQ9H1XzQ3OBSD7WV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zupdx/btsJuE0gwn4/F35ZncQ9H1XzQ3OBSD7WV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzupdx%2FbtsJuE0gwn4%2FF35ZncQ9H1XzQ3OBSD7WV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3788&quot; height=&quot;432&quot; data-origin-width=&quot;3788&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;원인 &lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;인증 에러임.&lt;/div&gt;
&lt;div&gt;token 정보가 잘못되어있었음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해결책&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;bearer_token_file 옵션을 token형식이 아닌 crt, key파일로 변경해야함.&lt;/div&gt;
&lt;pre id=&quot;code_1725710482626&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
을 아래와 같이 변경
ssl.certificate: &quot;/path/to/certificate.crt&quot;
ssl.key: &quot;/path/to/private.key&quot;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Kubernetes/Kubernetes 에러 경험</category>
      <category>error initializing kubernetes metadata enricher</category>
      <category>invalid configuration</category>
      <category>no configuration has been provided</category>
      <category>try setting kubernetes_master environment variable</category>
      <category>unable to build kube config due to error</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/427</guid>
      <comments>https://ikcoo.tistory.com/427#entry427comment</comments>
      <pubDate>Sat, 7 Sep 2024 21:02:13 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes 모니터링 : metricbeat 란?</title>
      <link>https://ikcoo.tistory.com/426</link>
      <description>&lt;h2 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;metricbeat&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;metricbeat란?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;Elastic Stack의 일부인 오프소스 데이터 수집 에이전트로,&lt;/div&gt;
&lt;div&gt;System 및 Service Metrics를 수집하는데 사용됨.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;수집하는 metrics 계층&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #41ad1c;&quot;&gt;=&amp;nbsp; System, Service Metrics&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;metricbeat는 다양한 module을 제공하고 있어서&lt;/div&gt;
&lt;div&gt;system metrics 뿐만 아니라 다양한 Service Metrics도 수집할 수 있는 장점을 가지고 있음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[모듈 정보 list]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html&quot;&gt;https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;수집하는 metrics 정보 확인 링크&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;[system module&amp;nbsp; 이 수집하는 metrics 정보]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html&quot;&gt;https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[kubernetes module 이 수집하는 metrics 정보]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html&quot;&gt;https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;수집한 metrics 정보를 전달하는 방식&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #41ad1c;&quot;&gt;=&amp;nbsp; push 방식&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;metricbeat는 수집한 metrics정보를 특정 plugin으로 전달할 수 있음.&lt;/div&gt;
&lt;div&gt;주로 Elastic Stack 관련 제품으로 보낼 수 있음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;관련 설정&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;metricbeat 설정 파일 : /etc/metricbeat/metricbeat.yml&lt;/div&gt;
&lt;div&gt;&lt;b&gt;output.&quot;module 이름&quot;&lt;/b&gt; 으로 설정 가능&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;예제로 file 형식으로 push하고 싶다면 아래와 같이 설정할 수 있음.&lt;/div&gt;
&lt;pre id=&quot;code_1725710024771&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;output.file:
  path: &quot;/etc/metricbeat&quot; 
  filename: &quot;iksoon_test&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;전달 가능 대상&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;Elasticsearch Service&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Elasticsearch&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Logstash&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Kafka&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Redis&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;File&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Console&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;b&gt;[output module 목록 참고]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/beats/metricbeat/current/configuring-output.html&quot;&gt;https://www.elastic.co/guide/en/beats/metricbeat/current/configuring-output.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;metricbeat은 추가되는 모듈에 따라 스레드가 추가될까?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;직접 확인 cpu, memory, diskio 등 8개의 module을 추가하고 아래 명령으로 스레드 확인&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1725710044146&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pstree -hp &quot;metricbeat pid&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;ex) pstree -hp 2575026&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kVXL3/btsJvxTC6M0/b5SLU9OUIKJOjbwwPhv811/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kVXL3/btsJvxTC6M0/b5SLU9OUIKJOjbwwPhv811/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kVXL3/btsJvxTC6M0/b5SLU9OUIKJOjbwwPhv811/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkVXL3%2FbtsJvxTC6M0%2Fb5SLU9OUIKJOjbwwPhv811%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;150&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;확인 결과 동일하게 8개가 조회됨&lt;/div&gt;
&lt;hr data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;metricbeat에서 fields 지정하는 방법&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;아래와 같이 metricbeat.yaml 파일에서 설정 가능&lt;/div&gt;
&lt;div&gt;tags, fields 를 지정하여 설정 가능.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLLhO/btsJv7709xa/enqidbmhg6q2h0AzjgGW20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLLhO/btsJv7709xa/enqidbmhg6q2h0AzjgGW20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLLhO/btsJv7709xa/enqidbmhg6q2h0AzjgGW20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLLhO%2FbtsJv7709xa%2Fenqidbmhg6q2h0AzjgGW20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;421&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;수집한 정보는 아래와 같이 확인할 수 있음.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA0i41/btsJuzSbZCX/ALRFP2Lvd5eAQJkokKQCZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA0i41/btsJuzSbZCX/ALRFP2Lvd5eAQJkokKQCZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA0i41/btsJuzSbZCX/ALRFP2Lvd5eAQJkokKQCZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA0i41%2FbtsJuzSbZCX%2FALRFP2Lvd5eAQJkokKQCZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;614&quot; height=&quot;602&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp6tAr/btsJvemsQh4/Z8Num6PeocNRz1k3bPDGP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp6tAr/btsJvemsQh4/Z8Num6PeocNRz1k3bPDGP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp6tAr/btsJvemsQh4/Z8Num6PeocNRz1k3bPDGP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp6tAr%2FbtsJvemsQh4%2FZ8Num6PeocNRz1k3bPDGP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;579&quot; height=&quot;258&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;metricbeat에서 kubernetes 지표 정보 수집이 가능한가?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;결론&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;kubernetes 모듈을 사용하여 kubernetes 지표 정보 수집 가능.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;metricbeat에서 worker node kubelet 접근 방법 확인&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;metricbeat에서 kubernetes module 사용 시&lt;/div&gt;
&lt;div&gt;kubelet에 포함되어있는 cAdvisor로 부터 지표 정보를 가져옴.&lt;/div&gt;
&lt;div&gt;이때 kubelet에 접속하는 방법은 2가지로&amp;nbsp; token, key 방법이 있음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;metricbeat에서 worker node kubelet 접근 방법 (token)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;1. SA 생성&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725710193200&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: ServiceAccount
metadata:
  name: metricbeat
  namespace: kube-system
  labels:
    k8s-app: metricbeat&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&lt;b&gt;2. ClusterRole 생성&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725710201142&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metricbeat
  labels:
    k8s-app: metricbeat
rules:
- apiGroups: [&quot;&quot;]
  resources:
  - nodes
  - namespaces
  - events
  - pods
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
- apiGroups: [&quot;batch&quot;]
  resources:
  - jobs
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
- apiGroups: [&quot;extensions&quot;]
  resources:
  - replicasets
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
- apiGroups: [&quot;apps&quot;]
  resources:
  - statefulsets
  - deployments
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
- apiGroups:
  - &quot;&quot;
  resources:
  - nodes/stats
  - nodes/metrics
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&lt;b&gt;3. ClusterRoleBinding 생성&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725710209863&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metricbeat
subjects:
- kind: ServiceAccount
  name: metricbeat
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: metricbeat
  apiGroup: rbac.authorization.k8s.io&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&lt;b&gt;4. 1.24 버전 이상의 경우 SA 생성 시 secret token이 자동 생성 되지 않아서 수동 생성이 필요함&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725710217402&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
  name: metricbeat
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: metricbeat
type: kubernetes.io/service-account-token&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&lt;b&gt;5. SA 토큰 가져오기&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725710225726&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- module: kubernetes
  metricsets:
    - container
    - node
    - pod
    - system
    - volume
  period: 30s
  hosts: [&quot;https://iksoon-cidr-default-worker-node-0.novalocal:10250&quot;]
  bearer_token_file: /etc/metricbeat/token
  ssl.certificate_authorities:
    - /etc/kubernetes/pki/ca.crt&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;일반적으로 metricbeat을 kubernetes에 배포 시 Daemonset으로 배포함.&lt;/div&gt;
&lt;div&gt;배포 할 때 serviceaccount 생성 후&lt;/div&gt;
&lt;div&gt;serviceaccount의 secret token 경로를 명시함.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;b&gt;6. kubelet API 호출&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #fbfaf8; color: #333333;&quot; data-codeblock=&quot;true&quot; data-line-wrapping=&quot;false&quot;&gt;
&lt;div data-plaintext=&quot;true&quot;&gt;
&lt;pre id=&quot;code_1725710264647&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;curl -Ssk --header &quot;Authorization: Bearer ${TOKEN}&quot; https://localhost:10250/metrics/cadvisor&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;&lt;/b&gt;
&lt;h4 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 2 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;metricbeat에서 worker node kubelet 접근 방법 (키 사용)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;(kubelet API 호출)&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;kube-admin으로 생성된 클러스터의 경우 아래와 같이 &quot;apiserver-kubelet-client.key, crt&quot;을 사용함.&lt;/div&gt;
&lt;div style=&quot;background-color: #fbfaf8; color: #333333;&quot; data-line-wrapping=&quot;false&quot; data-codeblock=&quot;true&quot;&gt;
&lt;div data-plaintext=&quot;true&quot;&gt;
&lt;pre id=&quot;code_1725710340682&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl https://localhost:10250/metrics -k --cert &quot;키파일 경로&quot; --key &quot;키파일 경로&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;metricbeat의 kubernetes module에서 사용법&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;worker node 에서 진행&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;/etc/metricbeat/modules.d/kubernetes.yml&lt;/div&gt;
&lt;div&gt;&quot;ssl.certificate:&quot;, &quot;ssl.key:&quot;, &quot;ssl.certificate_authorities:&quot;&amp;nbsp; 옵션 사용.&lt;/div&gt;
&lt;pre id=&quot;code_1725710298128&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- module: kubernetes
  metricsets:
    - node
    - system
    - pod
    - container
    - volume
  period: 30s
  hosts: [&quot;https://iksoon-cidr-default-worker-node-0.novalocal:10250&quot;]
  ssl.certificate: 키파일 경로
  ssl.key: 키 파일 경로
  ssl.certificate_authorities:
    - 키 파일 경로&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 2 []&quot;&gt;/etc/metricbeat/metricbeat.yml&lt;/div&gt;
&lt;pre id=&quot;code_1725710401984&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;output.file:
  path: &quot;/etc/metricbeat&quot;
  filename: &quot;iksoon_test&quot;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Kubernetes/Monitoring</category>
      <category>metricbeat</category>
      <category>metricbeat k8s</category>
      <category>metricbeat kubernetes</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/426</guid>
      <comments>https://ikcoo.tistory.com/426#entry426comment</comments>
      <pubDate>Sat, 7 Sep 2024 21:00:35 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes 모니터링 : kube-state-metrics 란?</title>
      <link>https://ikcoo.tistory.com/425</link>
      <description>&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;kube-state-metrics(KSM)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;kube-state-metrics(KSM)란?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;kubernetes에서 공식적으로 제공하는 서비스로&lt;/div&gt;
&lt;div&gt;kubernetes 클러스터 내부의 Pod가 사용 중인 리소스 metric과 네트워크 I/O, Deployments 수, Pod 수 등의 다양한 정보를 수집함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;수집하는 metrics 계층&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #41ad1c;&quot;&gt;=&amp;nbsp; Service Metrics : kubernetes&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Container를 컨트롤 하는 Kubernetes 자체에 대한 모니터링&amp;nbsp;&lt;/div&gt;
&lt;div&gt;(Kubernetes의 자원인 Service, POD, Namespace 등)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;수집하는 metrics 정보 확인 링크&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/kube-state-metrics/blob/main/docs/pod-metrics.md&quot;&gt;https://github.com/kubernetes/kube-state-metrics/blob/main/docs/pod-metrics.md&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;수집한 metrics 정보를 전달하는 방식&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #41ad1c;&quot;&gt;=&amp;nbsp; Pull 방식&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;HTTP 통신을 통해 Prometheus Server와 같은 metrics server가 kube-state-metrics가 수집한 Metric Data를 가져갈 수 있게&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;/metrics &lt;/b&gt;라는 HTTP 엔드포인트를 제공함.&lt;/div&gt;
&lt;div&gt;exporter가 해당 엔드포인트를 제공하고 있어서 Server가 exporter의 엔드포인트로 HTTP GET 요청을 날려 Metric Data를 Pull방식으로 수집함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;kube-state-metrics&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;가 수집한 metrics 정보 확인하는 방법&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;kube-state-metrics는 모든 node에 접근하여 해당 node의 metric을 직접 수집하는 node-exporter와는 달리,&lt;/div&gt;
&lt;div&gt;kube-state-metrics는 kubernetes가 이미 갖고 있는 데이터를 kubernetes api 서버로부터 요청하여 가져오기 때문에&lt;/div&gt;
&lt;div&gt;cluster 내에 단 하나의 component만 배포함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;yaml&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;2023.01.30 기준 최신 version = v2.7.0
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;--- &lt;br /&gt;apiVersion:&amp;nbsp;rbac.authorization.k8s.io/v1 &lt;br /&gt;kind:&amp;nbsp;ClusterRole &lt;br /&gt;metadata: &lt;br /&gt;&amp;nbsp;&amp;nbsp;labels: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.kubernetes.io/component:&amp;nbsp;exporter &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.kubernetes.io/name:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.kubernetes.io/version:&amp;nbsp;2.8.2 &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-metrics &lt;br /&gt;rules: &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&quot;&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;configmaps &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;secrets &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;nodes &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;pods &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;services &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;serviceaccounts &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;resourcequotas &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;replicationcontrollers &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;limitranges &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;persistentvolumeclaims &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;persistentvolumes &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;namespaces &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;endpoints &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;apps &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;statefulsets &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;daemonsets &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;deployments &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;replicasets &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;batch &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;cronjobs &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;jobs &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;autoscaling &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;horizontalpodautoscalers &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;authentication.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;tokenreviews &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;create &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;authorization.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;subjectaccessreviews &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;create &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;policy &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;poddisruptionbudgets &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;certificates.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;certificatesigningrequests &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;discovery.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;endpointslices &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;storage.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;storageclasses &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;volumeattachments &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;admissionregistration.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;mutatingwebhookconfigurations &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;validatingwebhookconfigurations &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;networking.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;networkpolicies &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ingressclasses &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ingresses &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;coordination.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;leases &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;-&amp;nbsp;apiGroups: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;rbac.authorization.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;clusterrolebindings &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;clusterroles &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;rolebindings &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;roles &lt;br /&gt;&amp;nbsp;&amp;nbsp;verbs: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;list &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;watch &lt;br /&gt;--- &lt;br /&gt;apiVersion:&amp;nbsp;rbac.authorization.k8s.io/v1 &lt;br /&gt;kind:&amp;nbsp;ClusterRoleBinding &lt;br /&gt;metadata: &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-metrics &lt;br /&gt;roleRef: &lt;br /&gt;&amp;nbsp;&amp;nbsp;apiGroup:&amp;nbsp;rbac.authorization.k8s.io &lt;br /&gt;&amp;nbsp;&amp;nbsp;kind:&amp;nbsp;ClusterRole &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-metrics &lt;br /&gt;subjects: &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;kind:&amp;nbsp;ServiceAccount &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-metrics-account &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;namespace:&amp;nbsp;kube-system &lt;br /&gt;--- &lt;br /&gt;apiVersion:&amp;nbsp;v1 &lt;br /&gt;kind:&amp;nbsp;ServiceAccount &lt;br /&gt;metadata: &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-metrics-account &lt;br /&gt;&amp;nbsp;&amp;nbsp;namespace:&amp;nbsp;kube-system &lt;br /&gt;&lt;br /&gt;--- &lt;br /&gt;apiVersion:&amp;nbsp;apps/v1 &lt;br /&gt;kind:&amp;nbsp;Deployment &lt;br /&gt;metadata: &lt;br /&gt;&amp;nbsp;&amp;nbsp;labels: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;namespace:&amp;nbsp;kube-system &lt;br /&gt;spec: &lt;br /&gt;&amp;nbsp;&amp;nbsp;replicas:&amp;nbsp;1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;selector: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matchLabels: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;template: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;metadata: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;labels: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spec: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;containers: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;name:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image:&amp;nbsp;registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.7.0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resources: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requests: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cpu:&amp;nbsp;500m &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memory:&amp;nbsp;2Gi &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;limits: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cpu:&amp;nbsp;500m &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memory:&amp;nbsp;2Gi &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;livenessProbe: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpGet: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path:&amp;nbsp;/healthz &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;port:&amp;nbsp;8080 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initialDelaySeconds:&amp;nbsp;5 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeoutSeconds:&amp;nbsp;5 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ports: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;containerPort:&amp;nbsp;8080 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;scrape &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;containerPort:&amp;nbsp;8081 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;telemetry &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;readinessProbe: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpGet: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path:&amp;nbsp;/ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;port:&amp;nbsp;8081 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initialDelaySeconds:&amp;nbsp;5 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeoutSeconds:&amp;nbsp;5 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodeSelector: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kubernetes.io/os:&amp;nbsp;linux &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;serviceAccountName:&amp;nbsp;kube-state-metrics-account &lt;br /&gt;--- &lt;br /&gt;apiVersion:&amp;nbsp;v1&amp;nbsp; &lt;br /&gt;kind:&amp;nbsp;Service&amp;nbsp; &lt;br /&gt;metadata:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;labels:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-http-metrics-nodeport&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;namespace:&amp;nbsp;kube-system&amp;nbsp; &lt;br /&gt;spec:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;type:&amp;nbsp;NodePort&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;selector:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;ports:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;protocol:&amp;nbsp;TCP&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;port:&amp;nbsp;8080&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;targetPort:&amp;nbsp;8080&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodePort:&amp;nbsp;30001 &lt;br /&gt;---&amp;nbsp; &lt;br /&gt;apiVersion:&amp;nbsp;v1&amp;nbsp; &lt;br /&gt;kind:&amp;nbsp;Service&amp;nbsp; &lt;br /&gt;metadata:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;labels:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;kube-state-telemetry-nodeport&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;namespace:&amp;nbsp;kube-system&amp;nbsp; &lt;br /&gt;spec:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;type:&amp;nbsp;NodePort&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;selector:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app:&amp;nbsp;kube-state-metrics &lt;br /&gt;&amp;nbsp;&amp;nbsp;ports:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;protocol:&amp;nbsp;TCP&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;port:&amp;nbsp;8081&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;targetPort:&amp;nbsp;8081&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodePort:&amp;nbsp;30002&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h4 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;KSM port &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;8080 port : KSM으로 부터 metrics 정보를 확인하는 용도&lt;/div&gt;
&lt;div&gt;8081 port : self metrics로 metrics 정보 수집 시도 시 성공, 실패 상태를 확인할 수 있음.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;KSM의 metrics 수집 결과 확인&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1725539080887&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl {IP}:8080/metrics&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJEmGN/btsJr2gbXIB/I4rzyUgnhDzXnworR24nB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJEmGN/btsJr2gbXIB/I4rzyUgnhDzXnworR24nB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJEmGN/btsJr2gbXIB/I4rzyUgnhDzXnworR24nB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJEmGN%2FbtsJr2gbXIB%2FI4rzyUgnhDzXnworR24nB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1836&quot; height=&quot;1090&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1090&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;[kube-state-metrics의 metrics list 정보]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/kube-state-metrics/blob/main/docs/pod-metrics.md&quot;&gt;https://github.com/kubernetes/kube-state-metrics/blob/main/docs/pod-metrics.md&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[참고]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/kubernetes/kube-state-metrics&quot;&gt;https://github.com/kubernetes/kube-state-metrics&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://medium.com/finda-tech/kube-state-metrics%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-1303b10fb8f8&quot;&gt;https://medium.com/finda-tech/kube-state-metrics%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-1303b10fb8f8&lt;/a&gt;&lt;/div&gt;</description>
      <category>Kubernetes/Monitoring</category>
      <category>KSM</category>
      <category>kube state metrics</category>
      <category>kube-state-metrics</category>
      <category>metrics</category>
      <category>self metrics</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/425</guid>
      <comments>https://ikcoo.tistory.com/425#entry425comment</comments>
      <pubDate>Thu, 5 Sep 2024 21:26:15 +0900</pubDate>
    </item>
    <item>
      <title>오류 : inotify_add_watch /sys/fs/cgroup/cpuacct,cpu: no such file or directory</title>
      <link>https://ikcoo.tistory.com/424</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;오류 : inotify_add_watch /sys/fs/cgroup/cpuacct,cpu: no such file or directory&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[상황]&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;cAdvisor git에 있는 kubernetes deploy인 아래의 링크를 참고해서&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/google/cadvisor/blob/master/deploy/kubernetes/base/daemonset.yaml&quot;&gt;https://github.com/google/cadvisor/blob/master/deploy/kubernetes/base/daemonset.yaml&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;kubernetes cluster에 cAdvisor Daemonset 를 배포했는데&amp;nbsp;&lt;/div&gt;
&lt;div&gt;다음과 같은 오류가 발생함.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHAyBT/btsJrzFIcwd/yth0lkLurjKvYyxNyLjsCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHAyBT/btsJrzFIcwd/yth0lkLurjKvYyxNyLjsCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHAyBT/btsJrzFIcwd/yth0lkLurjKvYyxNyLjsCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHAyBT%2FbtsJrzFIcwd%2Fyth0lkLurjKvYyxNyLjsCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;894&quot; height=&quot;156&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;[오류 메세지]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory&lt;/div&gt;
&lt;div&gt;Failed to start container manager: inotify_add_watch /sys/fs/cgroup/cpuacct,cpu: no such file or directory&lt;/div&gt;
&lt;div&gt;none of the resources are being tracked.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAKhxa/btsJsfmddfG/29XlUybObDggFHPXMEhRr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAKhxa/btsJsfmddfG/29XlUybObDggFHPXMEhRr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAKhxa/btsJsfmddfG/29XlUybObDggFHPXMEhRr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAKhxa%2FbtsJsfmddfG%2F29XlUybObDggFHPXMEhRr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1508&quot; height=&quot;854&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[원인]&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;해당 오류는 volume mount에 관한 오류임.&lt;/div&gt;
&lt;div&gt;/sys/fs/cgroup 에 mount할 volume이 명시되어있지 않아서&lt;/div&gt;
&lt;div&gt;pod가 정상적으로 running 되지 못함.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[해결]&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;아래와 같이 cgroup 관련 volume을 추가해줘야함&lt;/div&gt;
&lt;div&gt;host에 / 경로에 cgroup 디렉터리도 생성해줘야함&lt;/div&gt;
&lt;pre id=&quot;code_1725538906899&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1 # for Kubernetes versions before 1.9.0 use apps/v1beta2
kind: DaemonSet
metadata:
  name: cadvisor
  namespace: cadvisor
spec:
  selector:
    matchLabels:
      name: cadvisor
  template:
    metadata:
      labels:
        name: cadvisor
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: cadvisor
        image: google/cadvisor:latest
        securityContext:
          privileged: true
        resources:
          requests:
            memory: 200Mi
            cpu: 150m
          limits:
            memory: 2000Mi
            cpu: 300m
        volumeMounts:
        - name: rootfs
          mountPath: /rootfs
          readOnly: true
        - name: var-run
          mountPath: /var/run
          readOnly: true
        - name: sys
          mountPath: /sys
          readOnly: true
        - name: docker
          mountPath: /var/lib/docker
          readOnly: true
        - name: disk
          mountPath: /dev/disk
          readOnly: true
        - name: cgroup
          mountPath: /sys/fs/cgroup
          readOnly: true
        ports:
          - name: http
            containerPort: 8080
            protocol: TCP
      automountServiceAccountToken: false
      terminationGracePeriodSeconds: 30
      volumes:
      - name: rootfs
        hostPath:
          path: /
      - name: var-run
        hostPath:
          path: /var/run
      - name: sys
        hostPath:
          path: /sys
      - name: docker
        hostPath:
          path: /var/lib/docker
      - name: disk
        hostPath:
          path: /dev/disk
      - name: cgroup
        hostPath:
          path: /cgroup&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Kubernetes/Kubernetes 에러 경험</category>
      <category>cgroup</category>
      <category>cpuacct</category>
      <category>inotify_add_watch</category>
      <category>No such file or directory</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/424</guid>
      <comments>https://ikcoo.tistory.com/424#entry424comment</comments>
      <pubDate>Thu, 5 Sep 2024 21:22:43 +0900</pubDate>
    </item>
    <item>
      <title>cAdvisor container로 배포 해서 확인 하는 방법(storage driver = Kafka)</title>
      <link>https://ikcoo.tistory.com/423</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #3665ee;&quot;&gt;cAdvisor container로 배포 해서 확인 하는 방법(storage driver = Kafka)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;cAdvisor에서 Kafka로 지표 전달 가능함.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;storage_driver 설정을 kafka로 설정하면 됨&lt;/div&gt;
&lt;div&gt;&lt;b&gt;[참고 링크]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://github.com/google/cadvisor/blob/master/docs/storage/kafka.md&quot;&gt;https://github.com/google/cadvisor/blob/master/docs/storage/kafka.md&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;Kafka 클러스터 실행&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;&lt;b&gt;kafka download&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725538638828&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://archive.apache.org/dist/kafka/3.1.0/kafka_2.13-3.1.0.tgz
tar xvf kafka_2.13-3.1.0.tgz
cd kafka_2.13-3.1.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;kafka 설정 파일 변경&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;vim config/server.properties&lt;/div&gt;
&lt;div&gt;아래 2개 내용 추가&lt;/div&gt;
&lt;pre id=&quot;code_1725538651559&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://133.186.163.60:9092&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;설정 참고 : &lt;a href=&quot;https://sharplee7.tistory.com/144&quot;&gt;https://sharplee7.tistory.com/144&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&lt;b&gt;kafka 실행&lt;/b&gt;&lt;/div&gt;
&lt;pre id=&quot;code_1725538664795&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;[kafka 명령어 정리]&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;토픽 생성&lt;/div&gt;
&lt;pre id=&quot;code_1725538673782&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic test&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;토픽 삭제&lt;/div&gt;
&lt;pre id=&quot;code_1725538685209&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./kafka-topics.sh --delete --topic kube_test --bootstrap-server localhost:9092&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;토픽 조회&lt;/div&gt;
&lt;pre id=&quot;code_1725538694104&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./kafka-topics.sh --describe --bootstrap-server localhost:9092&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;토픽 이벤트 조회&lt;/div&gt;
&lt;pre id=&quot;code_1725538701605&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic kube_test&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;&lt;b&gt;참고 링크&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://ifuwanna.tistory.com/488&quot;&gt;https://ifuwanna.tistory.com/488&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;cAdvisor container 실행&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1725538722316&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nerdctl run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --network host \
  --detach=true \
  --name=cadvisor \
  --privileged \
  gcr.io/cadvisor/cadvisor:v0.47.0 \
  --storage_driver=kafka \
  --storage_driver_kafka_broker_list=192.168.0.72:9092 \
  --storage_driver_kafka_topic=kube_test&lt;/code&gt;&lt;/pre&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;0 1 []&quot;&gt;storage_driver_kafka_broker_list 설정에&lt;/div&gt;
&lt;div&gt;kafka가 실행 중인 host ip 입력.&lt;/div&gt;
&lt;div&gt;토픽은 &quot;kube_test&quot;로 설정&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #7600d8;&quot;&gt;결과 확인&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;아래와 같이 cAdvisor 컨테이너가 정상 실행됨&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l9qHu/btsJtsEGHcY/q4cXH7mB2ju8wZD3lK6T81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l9qHu/btsJtsEGHcY/q4cXH7mB2ju8wZD3lK6T81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l9qHu/btsJtsEGHcY/q4cXH7mB2ju8wZD3lK6T81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl9qHu%2FbtsJtsEGHcY%2Fq4cXH7mB2ju8wZD3lK6T81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1049&quot; height=&quot;590&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;컨테이너가 실행되면서 kafka에 kube_test 토픽은 자동으로 생성됨.&lt;/div&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxmp49/btsJrTcGJy5/o5Zker8NhM83wlD3KTofT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxmp49/btsJrTcGJy5/o5Zker8NhM83wlD3KTofT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxmp49/btsJrTcGJy5/o5Zker8NhM83wlD3KTofT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcxmp49%2FbtsJrTcGJy5%2Fo5Zker8NhM83wlD3KTofT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1110&quot; height=&quot;56&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;토픽 이벤트에서 cadvisor 수집 내용 정상 확인 가능.&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dy0dxN/btsJtbDfI2E/O670I8654HOBFM4279LJf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dy0dxN/btsJtbDfI2E/O670I8654HOBFM4279LJf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dy0dxN/btsJtbDfI2E/O670I8654HOBFM4279LJf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdy0dxN%2FbtsJtbDfI2E%2FO670I8654HOBFM4279LJf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1896&quot; height=&quot;665&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-en-clipboard=&quot;true&quot; data-pm-slice=&quot;1 1 []&quot;&gt;아래와 같이 host에서 실행 중인 container의 지표 정보도 수집가능함.&lt;/div&gt;
&lt;pre id=&quot;code_1725538773287&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{&quot;timestamp&quot;:&quot;2023-04-03T00:00:12.674870998Z&quot;,&quot;machine_name&quot;:&quot;2e79b19d7a6d&quot;,&quot;container_Name&quot;:&quot;/system.slice/kube-apiserver.service&quot;,&quot;container_stats&quot;:{&quot;timestamp&quot;:&quot;2023-04-03T00:00:12.674832861Z&quot;,&quot;cpu&quot;:{&quot;usage&quot;:{&quot;total&quot;:1517422879969,&quot;per_cpu_usage&quot;:[758520079913,758902800056],&quot;user&quot;:752100000000,&quot;system&quot;:725360000000},&quot;cfs&quot;:{&quot;periods&quot;:0,&quot;throttled_periods&quot;:0,&quot;throttled_time&quot;:0},&quot;schedstat&quot;:{&quot;run_time&quot;:0,&quot;runqueue_time&quot;:0,&quot;run_periods&quot;:0},&quot;load_average&quot;:0},&quot;diskio&quot;:{&quot;io_service_bytes&quot;:[{&quot;device&quot;:&quot;/dev/vda&quot;,&quot;major&quot;:252,&quot;minor&quot;:0,&quot;stats&quot;:{&quot;Async&quot;:0,&quot;Read&quot;:24576,&quot;Sync&quot;:24576,&quot;Total&quot;:24576,&quot;Write&quot;:0}}],&quot;io_serviced&quot;:[{&quot;device&quot;:&quot;/dev/vda&quot;,&quot;major&quot;:252,&quot;minor&quot;:0,&quot;stats&quot;:{&quot;Async&quot;:0,&quot;Read&quot;:2,&quot;Sync&quot;:2,&quot;Total&quot;:2,&quot;Write&quot;:0}}]},&quot;memory&quot;:{&quot;usage&quot;:9777152,&quot;max_usage&quot;:10592256,&quot;cache&quot;:0,&quot;rss&quot;:8450048,&quot;swap&quot;:0,&quot;mapped_file&quot;:0,&quot;working_set&quot;:9773056,&quot;failcnt&quot;:0,&quot;container_data&quot;:{&quot;pgfault&quot;:6864,&quot;pgmajfault&quot;:0,&quot;numa_stats&quot;:{}},&quot;hierarchical_data&quot;:{&quot;pgfault&quot;:6864,&quot;pgmajfault&quot;:0,&quot;numa_stats&quot;:{}}},&quot;network&quot;:{&quot;name&quot;:&quot;&quot;,&quot;rx_bytes&quot;:0,&quot;rx_packets&quot;:0,&quot;rx_errors&quot;:0,&quot;rx_dropped&quot;:0,&quot;tx_bytes&quot;:0,&quot;tx_packets&quot;:0,&quot;tx_errors&quot;:0,&quot;tx_dropped&quot;:0,&quot;tcp&quot;:{&quot;Established&quot;:0,&quot;SynSent&quot;:0,&quot;SynRecv&quot;:0,&quot;FinWait1&quot;:0,&quot;FinWait2&quot;:0,&quot;TimeWait&quot;:0,&quot;Close&quot;:0,&quot;CloseWait&quot;:0,&quot;LastAck&quot;:0,&quot;Listen&quot;:0,&quot;Closing&quot;:0},&quot;tcp6&quot;:{&quot;Established&quot;:0,&quot;SynSent&quot;:0,&quot;SynRecv&quot;:0,&quot;FinWait1&quot;:0,&quot;FinWait2&quot;:0,&quot;TimeWait&quot;:0,&quot;Close&quot;:0,&quot;CloseWait&quot;:0,&quot;LastAck&quot;:0,&quot;Listen&quot;:0,&quot;Closing&quot;:0},&quot;udp&quot;:{&quot;Listen&quot;:0,&quot;Dropped&quot;:0,&quot;RxQueued&quot;:0,&quot;TxQueued&quot;:0},&quot;udp6&quot;:{&quot;Listen&quot;:0,&quot;Dropped&quot;:0,&quot;RxQueued&quot;:0,&quot;TxQueued&quot;:0},&quot;tcp_advanced&quot;:{&quot;RtoAlgorithm&quot;:0,&quot;RtoMin&quot;:0,&quot;RtoMax&quot;:0,&quot;MaxConn&quot;:0,&quot;ActiveOpens&quot;:0,&quot;PassiveOpens&quot;:0,&quot;AttemptFails&quot;:0,&quot;EstabResets&quot;:0,&quot;CurrEstab&quot;:0,&quot;InSegs&quot;:0,&quot;OutSegs&quot;:0,&quot;RetransSegs&quot;:0,&quot;InErrs&quot;:0,&quot;OutRsts&quot;:0,&quot;InCsumErrors&quot;:0,&quot;EmbryonicRsts&quot;:0,&quot;SyncookiesSent&quot;:0,&quot;SyncookiesRecv&quot;:0,&quot;SyncookiesFailed&quot;:0,&quot;PruneCalled&quot;:0,&quot;RcvPruned&quot;:0,&quot;OfoPruned&quot;:0,&quot;OutOfWindowIcmps&quot;:0,&quot;LockDroppedIcmps&quot;:0,&quot;TW&quot;:0,&quot;TWRecycled&quot;:0,&quot;TWKilled&quot;:0,&quot;TCPTimeWaitOverflow&quot;:0,&quot;TCPTimeouts&quot;:0,&quot;TCPSpuriousRTOs&quot;:0,&quot;TCPLossProbes&quot;:0,&quot;TCPLossProbeRecovery&quot;:0,&quot;TCPRenoRecoveryFail&quot;:0,&quot;TCPSackRecoveryFail&quot;:0,&quot;TCPRenoFailures&quot;:0,&quot;TCPSackFailures&quot;:0,&quot;TCPLossFailures&quot;:0,&quot;DelayedACKs&quot;:0,&quot;DelayedACKLocked&quot;:0,&quot;DelayedACKLost&quot;:0,&quot;ListenOverflows&quot;:0,&quot;ListenDrops&quot;:0,&quot;TCPHPHits&quot;:0,&quot;TCPPureAcks&quot;:0,&quot;TCPHPAcks&quot;:0,&quot;TCPRenoRecovery&quot;:0,&quot;TCPSackRecovery&quot;:0,&quot;TCPSACKReneging&quot;:0,&quot;TCPFACKReorder&quot;:0,&quot;TCPSACKReorder&quot;:0,&quot;TCPRenoReorder&quot;:0,&quot;TCPTSReorder&quot;:0,&quot;TCPFullUndo&quot;:0,&quot;TCPPartialUndo&quot;:0,&quot;TCPDSACKUndo&quot;:0,&quot;TCPLossUndo&quot;:0,&quot;TCPFastRetrans&quot;:0,&quot;TCPSlowStartRetrans&quot;:0,&quot;TCPLostRetransmit&quot;:0,&quot;TCPRetransFail&quot;:0,&quot;TCPRcvCollapsed&quot;:0,&quot;TCPDSACKOldSent&quot;:0,&quot;TCPDSACKOfoSent&quot;:0,&quot;TCPDSACKRecv&quot;:0,&quot;TCPDSACKOfoRecv&quot;:0,&quot;TCPAbortOnData&quot;:0,&quot;TCPAbortOnClose&quot;:0,&quot;TCPAbortOnMemory&quot;:0,&quot;TCPAbortOnTimeout&quot;:0,&quot;TCPAbortOnLinger&quot;:0,&quot;TCPAbortFailed&quot;:0,&quot;TCPMemoryPressures&quot;:0,&quot;TCPMemoryPressuresChrono&quot;:0,&quot;TCPSACKDiscard&quot;:0,&quot;TCPDSACKIgnoredOld&quot;:0,&quot;TCPDSACKIgnoredNoUndo&quot;:0,&quot;TCPMD5NotFound&quot;:0,&quot;TCPMD5Unexpected&quot;:0,&quot;TCPMD5Failure&quot;:0,&quot;TCPSackShifted&quot;:0,&quot;TCPSackMerged&quot;:0,&quot;TCPSackShiftFallback&quot;:0,&quot;TCPBacklogDrop&quot;:0,&quot;PFMemallocDrop&quot;:0,&quot;TCPMinTTLDrop&quot;:0,&quot;TCPDeferAcceptDrop&quot;:0,&quot;IPReversePathFilter&quot;:0,&quot;TCPReqQFullDoCookies&quot;:0,&quot;TCPReqQFullDrop&quot;:0,&quot;TCPFastOpenActive&quot;:0,&quot;TCPFastOpenActiveFail&quot;:0,&quot;TCPFastOpenPassive&quot;:0,&quot;TCPFastOpenPassiveFail&quot;:0,&quot;TCPFastOpenListenOverflow&quot;:0,&quot;TCPFastOpenCookieReqd&quot;:0,&quot;TCPSynRetrans&quot;:0,&quot;TCPOrigDataSent&quot;:0,&quot;PAWSActive&quot;:0,&quot;PAWSEstab&quot;:0}},&quot;task_stats&quot;:{&quot;nr_sleeping&quot;:0,&quot;nr_running&quot;:0,&quot;nr_stopped&quot;:0,&quot;nr_uninterruptible&quot;:0,&quot;nr_io_wait&quot;:0},&quot;processes&quot;:{&quot;process_count&quot;:0,&quot;fd_count&quot;:0,&quot;socket_count&quot;:0},&quot;resctrl&quot;:{},&quot;cpuset&quot;:{&quot;memory_migrate&quot;:0}}}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Kubernetes/Monitoring</category>
      <category>cAdvisor</category>
      <category>cadvisor container</category>
      <category>kafka</category>
      <category>kafka download</category>
      <category>kafka-topics.sh</category>
      <category>storage driver = kafka</category>
      <author>이쿠우우</author>
      <guid isPermaLink="true">https://ikcoo.tistory.com/423</guid>
      <comments>https://ikcoo.tistory.com/423#entry423comment</comments>
      <pubDate>Thu, 5 Sep 2024 21:20:29 +0900</pubDate>
    </item>
  </channel>
</rss>