<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Cloud, DevOps, Opensource 따라잡기</title>
    <link>https://paas.tistory.com/</link>
    <description>Cloud, DevOps, AI, LLM, IT Automation, Digital Transformation, Opensource에 대한 글을 게재합니다.</description>
    <language>ko</language>
    <pubDate>Sun, 28 Jun 2026 21:35:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>freedream</managingEditor>
    <image>
      <title>Cloud, DevOps, Opensource 따라잡기</title>
      <url>https://tistory1.daumcdn.net/tistory/3132783/attach/cdbd36b8574644989fdd8bf222bb1e93</url>
      <link>https://paas.tistory.com</link>
    </image>
    <item>
      <title>CNCF Landscape 가이드</title>
      <link>https://paas.tistory.com/19</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cloud Native application &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 기술을 조사했다면 CNCF에서 제공하는 Cloud Native 환경을 많이 접했을 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Landscape &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가이드는 이러한 많은 범주의 기술들을 기능 별로 깔금하게 구성하여 쉽게 탐색할 수 있게 해 줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1. Provisioning&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;프로비저닝은 클라우드 네이티브 환경의 첫 번째 계층입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주에는 클라우드 네이티브 앱이 구축되는 기반을 만들고 강화하는 데 사용되는 제품들이 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4;&quot; width=&quot;698&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인프라를 자동으로 구성, 생성 및 관리하고 컨테이너 이미지를 스캔, 서명 및 저장하는 도구를 찾을 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정책 설정 및 시행, 내장된 인증 및 권한 부여, secret 배포 처리를 가능하게 하는 도구를 사용하여 보안으로 확장됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로비저닝 계층은 인프라 프로비저닝에서 컨테이너 레지스트리, 보안에 이르기까지 모든 것을 처리하는 도구를 사용하여 클라우드 네이티브 플랫폼 및 애플리케이션의 기반을 구축하는 데 중점을 둡니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Automation &amp;amp; Configuration&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;자동화 및 구성 도구는 컴퓨팅 리소스(가상 머신, 네트워크, 방화벽 규칙, 로드 밸런서 등)의 생성 및 구성 속도를 높입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품은 프로비저닝 프로세스의 다른 부분을 처리하거나 모든 것을 종단 간 제어하는 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;전통적으로 IT 프로세스는 일반적으로 3개월에서 6개월 사이의 길고 노동 집약적인 수동 릴리스 주기에 의존했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품을 사용하면 자동화를 통해 컴퓨팅 환경을 구축할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Terraform&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과 같은 자동화된 도구는 수백 개의 방화벽 규칙으로 수십 개의 서버와 네트워크를 확장하는 데 필요한 노력을 줄여줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Puppet, Chef &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 Ansible과 같은 도구는 신규 서버와 애플리케이션을 프로그래밍 방식으로 프로비저닝 및 구성하여 개발자가 사용할 수 있도록 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;Kubernetes 클러스터를 위한 컴퓨팅 환경, CPU, 메모리, 스토리지 및 네트워킹을 배치하는 과정의 일부로 하나 이상의 자동화 도구가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Infrastructure-as-Code (IaC)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Automation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Declarative Configuration&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;●&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Akri (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CDK for Kubernetes (CDK8s) (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cloud Custodian (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;DevStream (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KubeDL (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KubeEdge (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Metal (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenYurt (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SuperEdge (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Tinkerbell (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;01-Automation_Configuration.PNG&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8D5s9/btscYNbcNWn/Ya8jwaDmR30rvmaYd5CBL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8D5s9/btscYNbcNWn/Ya8jwaDmR30rvmaYd5CBL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8D5s9/btscYNbcNWn/Ya8jwaDmR30rvmaYd5CBL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8D5s9%2FbtscYNbcNWn%2FYa8jwaDmR30rvmaYd5CBL0%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;2186&quot; height=&quot;968&quot; data-filename=&quot;01-Automation_Configuration.PNG&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;968&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) Container Registry&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 애플리케이션은 패키징되어 컨테이너로 실행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;컨테이너 레지스트리는 이러한 앱을 실행하는 데 필요한 컨테이너 이미지를 저장하고 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;모든 컨테이너 이미지를 한 곳에 중앙 집중식으로 저장하면 해당 앱에서 작업하는 모든 개발자가 쉽게 액세스할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;기본적으로 레지스트리는 컨테이너 런타임이 이미지를 저장하고 검색할 수 있도록 하는 웹 API입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품들은 저장하는 이미지를 스캔, 서명 및 검사하기 위한 통합을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dragonfly&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 Harbor는 CNCF 프로젝트이며 Harbor는 최근 최초의 OCI 준수 레지스트리라는 명성을 얻었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OCI Image&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Registry&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Distribution (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dragonfly (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Harbor (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;zot (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;02-Container-Registry.PNG&quot; data-origin-width=&quot;2185&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXO8RF/btscZSQpxIb/P0Kw7BqNVD77AuPFcsaZKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXO8RF/btscZSQpxIb/P0Kw7BqNVD77AuPFcsaZKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXO8RF/btscZSQpxIb/P0Kw7BqNVD77AuPFcsaZKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXO8RF%2FbtscZSQpxIb%2FP0Kw7BqNVD77AuPFcsaZKk%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;2185&quot; height=&quot;406&quot; data-filename=&quot;02-Container-Registry.PNG&quot; data-origin-width=&quot;2185&quot; data-origin-height=&quot;406&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3) Security &amp;amp; Compliance&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;보안 및 규정 준수 도구는 플랫폼 및 애플리케이션 보안을 강화, 모니터링 및 적용하는 데 도움이 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;컨테이너에서 Kubernetes 환경에 이르기까지 이러한 도구를 사용하면 규정 준수를 위한 정책을 설정하고, 기존 취약성에 대한 통찰력을 얻고, 잘못된 구성을 포착하고, 컨테이너 및 클러스터를 강화할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;컨테이너를 안전하게 실행하려면 알려진 취약점이 있는지 컨테이너를 스캔하고 변조되지 않았는지 확인하기 위해 서명해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품과 프로젝트는 클러스터를 강화하고 시스템이 비정상적으로 작동하는 시기를 감지하는 데 도움이 됩니다.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Image scanning&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Image signing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Policy enforcement&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Audit&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Certificate Management&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cert-manager (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Confidential Containers (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ContainerSSH (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Curiefense (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dex (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;external-secrets (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Falco (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hexa (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;in-toto (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Keylime (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KubeArmor (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubescape (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubewarden (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kyverno (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Notary (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open Policy Agent (OPA) (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open Policy Containers (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenFGA (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Paralus (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Parsec (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The Update Framework (TUF) (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Keycloak (incubating)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03-Security-Compliance.PNG&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;1618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lDrRn/btscY3Zdkvk/oTGrCc705yNYG4hsZU9sK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lDrRn/btscY3Zdkvk/oTGrCc705yNYG4hsZU9sK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lDrRn/btscY3Zdkvk/oTGrCc705yNYG4hsZU9sK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlDrRn%2FbtscY3Zdkvk%2FoTGrCc705yNYG4hsZU9sK1%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;1639&quot; height=&quot;1618&quot; data-filename=&quot;03-Security-Compliance.PNG&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;1618&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4) Key Management&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;애플리케이션과 운영이 새로운 클라우드 네이티브 환경에 적응함에 따라 보안 도구는 새로운 보안 요구 사항을 충족하도록 진화하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품 및 프로젝트는 암호 및 기타 Secret(API 키, 암호화 키 등과 같은 민감한 데이터)을 안전하게 저장하는 방법부터 마이크로 서비스 환경에서 암호 및 Secret을 안전하게 제거하는 방법에 이르기까지 모든 것을 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;또한 Secret 및 key 또는 인증, 권한 부여와 관련된 서비스 또는 사양을 안전하게 배포하는 방법을 제공합니다.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AuthN and AuthZ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Identity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Access&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Secrets&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Athenz (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SPIFFE (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SPIRE (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Teller (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;04-Key-Management.PNG&quot; data-origin-width=&quot;2173&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uVUKV/btsc9aBW95N/AgqCiclVyftKbZDwZKrWE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uVUKV/btsc9aBW95N/AgqCiclVyftKbZDwZKrWE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uVUKV/btsc9aBW95N/AgqCiclVyftKbZDwZKrWE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuVUKV%2Fbtsc9aBW95N%2FAgqCiclVyftKbZDwZKrWE1%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;2173&quot; height=&quot;386&quot; data-filename=&quot;04-Key-Management.PNG&quot; data-origin-width=&quot;2173&quot; data-origin-height=&quot;386&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. Runtime&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이제 클라우드 네이티브 환경의 기반을 구축했으므로 하나의 인프라 계층을 위로 이동하여 런타임 계층으로 확대합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;런타임은 컨테이너가 클라우드 네이티브 환경에서 실행되는 데 필요한 모든 것을 포함합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;여기에는 컨테이너 런타임이라고 하는 컨테이너를 시작하는 데 사용되는 코드가 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; 컨테이너 런타임은 컨테이너에서 영구 스토리지를 사용할 수 있도록 하고 컨테이너 환경의&amp;nbsp; 네트워크 관리 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품은 컨테이너를 시작 및 중지하고, 데이터를 저장하고, 서로 통신할 수 있도록 하는 데 사용됩니다.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Cloud Native Storage&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Storage&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 앱의 영구 데이터가 저장되는 곳으로 종종 persistent volume이라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;애플리케이션이 안정적으로 작동하려면 스토리지에 쉽게 액세스할 수 있어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;수동 프로비저닝과 자동 크기 조정은 호환되지 않으므로 클라우드의 탄력성을 활용하려면 스토리지를 자동으로 프로비저닝해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품은 다음과 같은 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4;&quot; width=&quot;698&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너용 클라우드 네이티브 스토리지 옵션 제공&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너와 스토리지 공급자 간의 인터페이스를 표준화&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;백업 및 복원 작업을 통해 데이터 보호를 제공&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 스토리지는 컨테이너에 파일 및 블록 스토리지를 제공하기 위한 표준 API를 제공하는 컨테이너 스토리지 인터페이스(CSI)에 의해 크게 가능해졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주에는 CSI를 활용하여 컨테이너용 on-demand 스토리지를 제공하는 오픈 소스 및 벤더 제공 도구가 많이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Minio&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 객체 스토리지를 위한 S3 호환 API를 제공하는 인기 있는 프로젝트입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Velero&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 Kubernetes 클러스터 자체와 애플리케이션에서 사용하는 영구 데이터의 백업 및 복원 프로세스를 단순화하는 데 도움이 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Persistent volume&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CSI&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Storage API&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Backup and restore&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Carina (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CubeFS (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Curve (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;K8up (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Longhorn (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenEBS (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ORAS (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Piraeus Datastore (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rook (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Vineyard (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;05-CloudNative-Storage.PNG&quot; data-origin-width=&quot;2165&quot; data-origin-height=&quot;1368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdUYRY/btsc2pGFl9s/s3A5iBUeRDRSbVcw5uYcok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdUYRY/btsc2pGFl9s/s3A5iBUeRDRSbVcw5uYcok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdUYRY/btsc2pGFl9s/s3A5iBUeRDRSbVcw5uYcok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdUYRY%2Fbtsc2pGFl9s%2Fs3A5iBUeRDRSbVcw5uYcok%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;2165&quot; height=&quot;1368&quot; data-filename=&quot;05-CloudNative-Storage.PNG&quot; data-origin-width=&quot;2165&quot; data-origin-height=&quot;1368&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) Container Runtime&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;컨테이너 런타임은 컨테이너화된 애플리케이션을 실행하는 소프트웨어입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;런타임이 없으면 컨테이너화된 앱의 모양을 지정하는 저장 파일인 컨테이너 이미지만 갖게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; 런타임은 컨테이너 내에서 앱을 시작하고 필요한 리소스를 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 제품은 다음과 같은 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4;&quot; width=&quot;698&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 이미지는 표준화되고 안전하며 격리된 방식으로 실행&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 환경에서 표준화된 방식으로 앱을 시작하고 보안 경계를 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앱 간에 영향을 미치거나 받지 않도록 격리&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; application&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 CPU, 스토리지 및 메모리와 같은 리소스 제한 설정&lt;/span&gt;&lt;/span&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MicroVM&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;containerd (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CRI-O (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Inclavare Containers (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Lima (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;rkt (archived)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WasmEdge Runtime (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Container-Runtime.PNG&quot; data-origin-width=&quot;2699&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8M8XC/btsc0pOrXdX/d60v5vudgfdARkdoq2ivB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8M8XC/btsc0pOrXdX/d60v5vudgfdARkdoq2ivB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8M8XC/btsc0pOrXdX/d60v5vudgfdARkdoq2ivB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8M8XC%2Fbtsc0pOrXdX%2Fd60v5vudgfdARkdoq2ivB0%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;2699&quot; height=&quot;462&quot; data-filename=&quot;Container-Runtime.PNG&quot; data-origin-width=&quot;2699&quot; data-origin-height=&quot;462&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;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;3) Cloud Native Network&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;컨테이너는 클라우드 네이티브 네트워크를 통해 서로 통신하고 인프라 계층과 통신합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;분산 응용 프로그램에는 다양한 목적으로 네트워크를 사용하는 여러 구성 요소가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 도구는 앱이 통신할 수 있도록 특별히 기존 네트워크 위에 가상 네트워크를 만듭니다. 이를 overlay network라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 네트워킹은 데이터 흐름을 제어, 검사 및 수정하기 위해 소프트웨어를 사용하기 때문에 컨테이너 간의 연결을 관리, 보호 및 격리하는 것이 훨씬 쉽습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;경우에 따라 방화벽 및 액세스 규칙과 같은 컨테이너 네트워크 및 네트워크 정책을 확장하여 앱이 컨테이너 네트워크 외부에서 실행되는 가상 머신 또는 서비스에 연결할 수 있도록 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 네트워킹의 프로그래밍 가능하고 종종 선언적인 특성이 이를 가능하게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 프로젝트 및 제품은 CNCF 프로젝트인 CNI(컨테이너 네트워크 인터페이스)를 사용하여 컨테이너화된 애플리케이션에 네트워킹 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Flannel&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과 같은 일부 도구는 다소 미니멀하여 컨테이너에 기본 연결을 제공합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NSX-T&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 같은 기타 제품은 모든 Kubernetes 네임스페이스에 대해 격리된 가상 네트워크를 생성하는 전체 소프트웨어 정의 네트워킹 계층을 제공합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 공간의 다양성과 혁신은 주로 CNI(위에서 언급한 스토리지 및 컨테이너 스토리지 인터페이스와 유사)에 의해 가능해졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNI&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 네트워크 계층이 포드에 기능을 제공하는 방식을 표준화합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;환경에 적합한 컨테이너 네트워크를 선택하는 것이 중요하며 선택할 수 있는 도구가 많이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Weave Net, Antrea, Calico &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 Flannel은 모두 효과적인 오픈 소스 네트워킹 계층을 제공합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SDN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Overlay&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNI&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Antrea (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cilium (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNI-Genie (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container Network Interface (CNI) (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FabEdge (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kube-OVN (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Service Mesh (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Submariner (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;CloudNativeNetwork.PNG&quot; data-origin-width=&quot;2697&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buF40b/btsc1MCbS2f/9OulGFZi6EKOKBsp0TKqPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buF40b/btsc1MCbS2f/9OulGFZi6EKOKBsp0TKqPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buF40b/btsc1MCbS2f/9OulGFZi6EKOKBsp0TKqPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuF40b%2Fbtsc1MCbS2f%2F9OulGFZi6EKOKBsp0TKqPK%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;2697&quot; height=&quot;709&quot; data-filename=&quot;CloudNativeNetwork.PNG&quot; data-origin-width=&quot;2697&quot; data-origin-height=&quot;709&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. Orchestration &amp;amp; Management&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;프로비저닝 및 런타임 레이어를 모두 다루었으므로 이제 오케스트레이션 및 관리에 대해 자세히 알아볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;여기에서 클라우드 네이티브 애플리케이션 실행 및 연결을 처리하는 도구를 찾을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 섹션에서는 클라우드 네이티브 개발의 핵심 인에이블러 중 하나인 쿠버네티스 자체부터 앱 간 및 외부 통신을 담당하는 인프라 계층에 이르기까지 모든 것을 다룹니다.&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Scheduling &amp;amp; Orchestration&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;오케스트레이션 및 스케줄링은 클러스터 전체에서 컨테이너를 실행하고 관리하는 것을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클러스터는 네트워크를 통해 연결된 물리적 또는 가상 머신 그룹입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 아키텍처에서 애플리케이션은 각각 컨테이너에 배치되는 마이크로 서비스로 나뉩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이러한 각 서비스에는 문제가 발생하면 리소스, 모니터링 및 수정이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;단일 서비스에 대해 이러한 모든 작업을 수동으로 수행하는 것이 가능할 수 있지만 각각 자체 컨테이너가 있는 여러 서비스를 처리할 때는 자동화된 프로세스가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 가장 일반적으로 사용되고 적극적으로 유지 관리되는 오케스트레이터입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cluster&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Scheduler&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Orchestration&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Armada (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Clusternet (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Clusterpedia (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Crossplane (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Fluid (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Karmada (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kube-rs (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kured (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open Cluster Management (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Volcano (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;wasmCloud (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;06-Scheduling-Orchestration.PNG&quot; data-origin-width=&quot;2192&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0eMqI/btsc7wefESA/CE0dkNdEuztIkUPUcfKBL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0eMqI/btsc7wefESA/CE0dkNdEuztIkUPUcfKBL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0eMqI/btsc7wefESA/CE0dkNdEuztIkUPUcfKBL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0eMqI%2Fbtsc7wefESA%2FCE0dkNdEuztIkUPUcfKBL1%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;2192&quot; height=&quot;765&quot; data-filename=&quot;06-Scheduling-Orchestration.PNG&quot; data-origin-width=&quot;2192&quot; data-origin-height=&quot;765&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) Coordination &amp;amp; Service Discovery&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 아키텍처는 동적이고 유동적이므로 끊임없이 변화합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;컨테이너가 한 노드에서 충돌하면 이를 대체하기 위해 새 컨테이너가 다른 노드에서 가동됩니다. 또는 앱이 확장되면 복제본이 네트워크 전체에 분산됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;특정 서비스가 있는 곳은 없습니다. 모든 것의 위치는 끊임없이 변화합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 도구는 필요할 때 서비스가 서로를 찾을 수 있도록 네트워크 내의 서비스를 추적합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 검색 도구는 개별 서비스를 찾고 잠재적으로 식별할 수 있는 공통 위치를 제공하여 이 문제를 해결합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; 이 범주에는 기본적으로 두 가지 유형의 도구가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4;&quot; width=&quot;698&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; Service discovery engine: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 서비스에 대한 정보와 이를 찾는 방법을 저장하는 데이터베이스와 같은 도구&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; Name resolution tool: &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 위치 요청을 수신하고 네트워크 주소 정보를 반환하는 도구 (예: CoreDNS)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;분산 시스템이 점점 더 보편화됨에 따라 기존 DNS 프로세스와 로드 밸런서는 변화하는 엔드포인트 정보를 따라잡지 못하는 경우가 많았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이러한 단점을 보완하기 위해 서비스 검색 도구는 개별 응용 프로그램 인스턴스를 신속하게 등록 및 등록 취소합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CoreDNS &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 etcd와 같은 일부 옵션은 CNCF 프로젝트이며 Kubernetes에 내장되어 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service Discovery&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CoreDNS (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;etcd (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;k8gb (sandbox)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;07-Coordination_Service-Discovery.PNG&quot; data-origin-width=&quot;2472&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Zejd/btsc9aorge7/QaHZy0ZACQK5kM7wiTBZ10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Zejd/btsc9aorge7/QaHZy0ZACQK5kM7wiTBZ10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Zejd/btsc9aorge7/QaHZy0ZACQK5kM7wiTBZ10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Zejd%2Fbtsc9aorge7%2FQaHZy0ZACQK5kM7wiTBZ10%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;2472&quot; height=&quot;460&quot; data-filename=&quot;07-Coordination_Service-Discovery.PNG&quot; data-origin-width=&quot;2472&quot; data-origin-height=&quot;460&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3) Remote Procedure Call&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원격 프로시저 호출)는 응용 프로그램이 서로 통신할 수 있도록 하는 특정 기술입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;앱 커뮤니케이션을 구성하는 한 가지 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;최신 앱은 협업을 위해 통신해야 하는 수많은 개별 서비스로 구성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 응용 프로그램 간의 통신을 처리하기 위한 옵션 중 하나입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 서비스 간의 통신을 처리하는 긴밀하게 결합되고 독단적인 방식을 제공합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;대역폭 효율적인 통신이 가능하고 많은 프로그래밍 언어로 RPC 인터페이스 구현이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 코딩 연결을 더 쉽게 만들고 네트워크 계층을 매우 효율적으로 사용하고 서비스 간에 잘 구성된 통신을 허용합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gRPC&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 특히 널리 사용되는 RPC 구현이며 CNCF에서 채택했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #e9f5fb; color: #000000; text-align: start;&quot;&gt;gRPC&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gRPC (incubating)&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;08-RemoteProcedureCall.PNG&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b09MSa/btsc2nB7GtH/IwN0mgkPzSqGh6jdqs3cKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b09MSa/btsc2nB7GtH/IwN0mgkPzSqGh6jdqs3cKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b09MSa/btsc2nB7GtH/IwN0mgkPzSqGh6jdqs3cKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb09MSa%2Fbtsc2nB7GtH%2FIwN0mgkPzSqGh6jdqs3cKk%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;1918&quot; height=&quot;338&quot; data-filename=&quot;08-RemoteProcedureCall.PNG&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4) Service Proxy&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 프록시는 지정된 서비스에서 들어오고 나가는 트래픽을 가로채고 일부 논리를 적용한 다음 해당 트래픽을 다른 서비스로 전달하는 도구입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;기본적으로 네트워크 트래픽에 대한 정보를 수집하고 규칙을 적용할 수 있는 &quot;중개자&quot; 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이는 트래픽을 개별 애플리케이션으로 전달하는 로드 밸런서 역할을 하는 것처럼 간단할 수도 있고, 모든 네트워크 연결을 처리하는 컨테이너화된 개별 애플리케이션과 나란히 실행되는 프록시의 상호 연결된 메시처럼 복잡할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 프록시는 데이터 수집 및 네트워크 트래픽 관리 기능을 &quot;외부화&quot;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 프록시 위치는 앱 내에 있지 않고 플랫폼 계층에 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이는 개발자가 애플리케이션 코드를 작성하는 데 전적으로 집중할 수 있도록 하여 트래픽을 처리하는 보편적인 작업을 플랫폼 팀이 관리할 수 있도록 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;하나의 공통 위치에서 Routing 또는 TLS termination와 같이 필요한 서비스 기능의 배포 및 관리를 중앙 집중화하면 서비스 간의 통신이 보다 안정적이고 안전하며 성능이 향상될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;프록시는 중요한 데이터를 수집하고 서비스 간에 트래픽을 고르게 분산하거나 서비스 중단 시 재 라우팅하는 등의 라우팅 관리 기능을 하고, 연결을 암호화하고 콘텐츠를 캐시합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service Proxy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BFE (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contour (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Envoy (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenELB (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;09-ServiceProxy.PNG&quot; data-origin-width=&quot;2167&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SO2lI/btsc91NQH4O/gh7hTkc4FE2uBs9a53EsRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SO2lI/btsc91NQH4O/gh7hTkc4FE2uBs9a53EsRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SO2lI/btsc91NQH4O/gh7hTkc4FE2uBs9a53EsRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSO2lI%2Fbtsc91NQH4O%2Fgh7hTkc4FE2uBs9a53EsRk%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;2167&quot; height=&quot;586&quot; data-filename=&quot;09-ServiceProxy.PNG&quot; data-origin-width=&quot;2167&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5) API Gateway&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게이트웨이를 사용하면 조직에서 애플리케이션 간의 요청 수를 승인하거나 제한하는 것과 같은 주요 기능을 중앙에서 관리되는 위치로 이동할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 API 소비자에 대한 공통 인터페이스 기능을 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게이트웨이를 사용하면 개발자가 더 적은 사용자 정의 코드를 작성하고 유지할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게이트웨이는 사용자와 애플리케이션 사이에 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;사용자의 메시지(요청)를 받아 적절한 서비스로 전달하는 중개자 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;요청을 전달하기 전에 사용자가 하려는 작업을 수행할 수 있는지 여부를 평가하고 요청한 사람과 요청한 횟수에 대한 세부 정보를 기록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게이트웨이는 일련의 다운스트림 애플리케이션에 대한 공통 진입점 역할을 하는 동시에 팀이 비즈니스 로직을 추가하여 승인, 속도 제한 및 지불 거절을 처리할 수 있는 장소를 제공합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이를 통해 애플리케이션 개발자는 고객의 다운스트림 API에 대한 변경 사항을 추상화하고 신규 고객 온보딩과 같은 작업을 게이트웨이로 오프로드할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #e9f5fb; color: #000000; text-align: start;&quot;&gt;API Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Emissary-Ingress (incubating)&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10-APIGateway.PNG&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcodMc/btscZpOsAhi/VeD8NFpoUVzAD2JxottJ10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcodMc/btscZpOsAhi/VeD8NFpoUVzAD2JxottJ10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcodMc/btscZpOsAhi/VeD8NFpoUVzAD2JxottJ10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcodMc%2FbtscZpOsAhi%2FVeD8NFpoUVzAD2JxottJ10%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;1897&quot; height=&quot;516&quot; data-filename=&quot;10-APIGateway.PNG&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;6) Service Mesh&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 메시는 서비스 간의 트래픽을 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이를 통해 플랫폼 팀은 코드를 변경할 필요 없이 클러스터 내에서 실행되는 모든 서비스에 걸쳐 안정성, 관찰 가능성 및 보안 기능을 균일하게 추가할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 함께 서비스 메시는 클라우드 네이티브 스택의 가장 중요한 인프라 구성 요소 중 일부가 되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 메시는 앱 코드를 건드리지 않고 플랫폼 계층의 모든 서비스에 걸쳐 안정성, 관찰 가능성 및 보안 기능을 균일하게 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;모든 프로그래밍 언어와 호환되므로 개발 팀이 비즈니스 로직 작성에 집중할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;명령 및 제어 신호를 서비스 프록시 네트워크에 제공하여 서비스 간 통신을 관리하는 인프라 계층입니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service mesh&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sidecar&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data plane&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Control plane&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Aeraki Mesh (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Istio (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kuma (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linkerd (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Merbridge (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Meshery (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open Service Mesh (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service Mesh Interface (SMI) (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service Mesh Performance (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11-ServiceMesh.PNG&quot; data-origin-width=&quot;1900&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzYCrm/btsc0qM5XJ6/YBwi4uxDZRrK4k1xJjVbz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzYCrm/btsc0qM5XJ6/YBwi4uxDZRrK4k1xJjVbz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzYCrm/btsc0qM5XJ6/YBwi4uxDZRrK4k1xJjVbz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzYCrm%2Fbtsc0qM5XJ6%2FYBwi4uxDZRrK4k1xJjVbz1%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;1900&quot; height=&quot;525&quot; data-filename=&quot;11-ServiceMesh.PNG&quot; data-origin-width=&quot;1900&quot; data-origin-height=&quot;525&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. App Definition and Development&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;환경의 마지막 계층인 애플리케이션 정의 및 개발 계층에 대해 설명합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;database, streaming &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 messaging, 애플리케이션 정의, CICD(continuous integration and continuous delivery)를 다룹니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;지금까지 다루었던 내용은 안정적이고 안전한 환경을 구축하고 필요한 모든 종속성을 제공하는 것과 관련이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이제 CNCF 클라우드 네이티브 환경의 최상위 계층에 도달했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;응용 프로그램 정의 및 개발 계층은 엔지니어가 응용 프로그램을 구축할 수 있도록 하는 도구에 중점을 둡니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Database&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;데이터베이스는 다른 앱이 데이터를 효율적으로 저장하고 검색할 수 있는 애플리케이션입니다. 데이터베이스를 사용하면 데이터를 저장하고 권한이 있는 사용자만 데이터에 액세스할 수 있으며 사용자가 특수 요청을 통해 데이터를 검색할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 부상과 stateful application 지원 기능으로 차세대 데이터베이스가 컨테이너화를 활용하는 것을 볼 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 데이터베이스는 Kubernetes의 확장성 및 가용성 이점을 데이터베이스에 제공하는 것을 목표로 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 데이터베이스로 YugabyteDB 및 Couchbase 등을 들 수 있습니다만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MySQL&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과 Postgres와 같은 보다 전통적인 데이터베이스도 Kubernetes 클러스터 환경에서 성공적이고도 효율적으로 실행되는 것을 볼 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DB&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Persistence&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SchemaHero (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TiKV (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Vitess (graduated)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;12-Database.PNG&quot; data-origin-width=&quot;2154&quot; data-origin-height=&quot;1361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAkl85/btsc73pwOu6/SqPT78IyareXdkHrbE8vW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAkl85/btsc73pwOu6/SqPT78IyareXdkHrbE8vW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAkl85/btsc73pwOu6/SqPT78IyareXdkHrbE8vW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAkl85%2Fbtsc73pwOu6%2FSqPT78IyareXdkHrbE8vW0%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;2154&quot; height=&quot;1361&quot; data-filename=&quot;12-Database.PNG&quot; data-origin-width=&quot;2154&quot; data-origin-height=&quot;1361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) Streaming &amp;amp; Messaging&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;스트리밍 및 메시징 도구는 시스템 간에 메시지를 전송하여 서비스 간 통신을 가능하게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;스트리밍 또는 메시징 플랫폼은 시스템 내에서 발생하는 모든 이벤트를 게시하고 읽을 수 있는 중앙 위치를 제공하므로 응용 프로그램이 서로에 대해 전혀 알지 못하는 상태에서 함께 작동할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NATS &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 Cloudevents 프로젝트는 CNCF 프로젝트를 인큐베이팅하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NATS&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 성숙한 메시징 시스템을 제공하고 Cloudevents는 시스템 간의 메시지 형식을 표준화하려는 노력입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Strimzi, Pravega &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 Tremor는 각각 스트리밍 및 메시징과 관련된 고유한 사용 사례에 맞게 조정되는 샌드박스 프로젝트입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Choreography&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Streaming&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MQ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Message bus&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CloudEvents (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NATS (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pravega (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Strimzi (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Tremor (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;13-Streaming-Messaging.PNG&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sEOsl/btscY3Sxbwp/RoIcRMDAxY8zF7iqGZ9vP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sEOsl/btscY3Sxbwp/RoIcRMDAxY8zF7iqGZ9vP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sEOsl/btscY3Sxbwp/RoIcRMDAxY8zF7iqGZ9vP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsEOsl%2FbtscY3Sxbwp%2FRoIcRMDAxY8zF7iqGZ9vP0%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;2156&quot; height=&quot;776&quot; data-filename=&quot;13-Streaming-Messaging.PNG&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3) Application Definition &amp;amp; Image Build&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;애플리케이션 정의 및 이미지 빌드는 두 개의 주요 하위 그룹으로 나눌 수 있는 광범위한 범주입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;첫째, 컨테이너 및/또는 Kubernetes에 애플리케이션 코드를 빌드하는 데 도움이 되는 개발자 중심 도구입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;둘째, 표준화된 방식으로 앱을 배포하는 운영 중심 도구입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;개발 환경의 속도를 높이거나 단순화하거나 third-party앱을 배포하는 표준화된 방법을 제공하거나 새로운 Kubernetes 확장 작성 프로세스를 단순화하려는 경우, 이 범주는 Kubernetes 개발자 및 운영자 경험을 최적화하는 여러 프로젝트 및 제품에 대한 포괄적인 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 보다 일반적으로 컨테이너화된 환경은 매우 유연하고 강력합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이러한 유연성은 주로 여러 구성 옵션의 형태와 다양한 사용 사례에 대한 여러 요구 사항의 형태로 복잡성도 수반합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4;&quot; width=&quot;698&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;개발자는 코드를 컨테이너화할 때 재현 가능한 이미지를 생성할 수 있는 기능이 필요합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #eef8e4; color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;운영자는 컨테이너 환경에 앱을 배포하는 표준화된 방법이 필요하며,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #eef8e4; color: #000000; text-align: start;&quot;&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;플랫폼 팀은 사내 및 타사 애플리케이션 모두에 대해 이미지 생성 및 애플리케이션 배포를 단순화하는 도구를 제공해야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 도구는 이러한 개발자 또는 운영자 문제 중 일부를 해결하는 것을 목표로 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; 개발자 측에는 Kubernetes를 확장하여 애플리케이션을 빌드, 배포 및 연결하는 프로세스를 간소화하는 도구가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Helm&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을 사용하면 Kubernetes 사용자가 많은 인기 있는 타사 앱을 배포하고 사용자 지정할 수 있으며 Artifact Hub(CNCF 샌드박스 프로젝트)와 같은 다른 프로젝트에서 채택되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Bitnami&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 같은 회사도 엄선된 앱 카탈로그를 제공합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Operator Framework&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 Operator 구축 및 배포 프로세스를 단순화하는 것을 목표로 하는 인큐베이팅 프로젝트입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Package Management&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Charts&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Operators&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Artifact Hub (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Backstage (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Buildpacks (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Carvel (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Devfile (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DevSpace (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Helm (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ko (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Konveyor (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Krator (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KubeVela (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KubeVirt (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KUDO (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nocalhost (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Operator Framework (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Porter (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sealer (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Serverless Workflow (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Telepresence (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;14-ApplicationDefinition-ImageBuild.PNG&quot; data-origin-width=&quot;2164&quot; data-origin-height=&quot;1363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5qmUJ/btsc2WxxISN/kdnywp0b6jH0oAO4dszKRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5qmUJ/btsc2WxxISN/kdnywp0b6jH0oAO4dszKRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5qmUJ/btsc2WxxISN/kdnywp0b6jH0oAO4dszKRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5qmUJ%2Fbtsc2WxxISN%2Fkdnywp0b6jH0oAO4dszKRK%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;2164&quot; height=&quot;1363&quot; data-filename=&quot;14-ApplicationDefinition-ImageBuild.PNG&quot; data-origin-width=&quot;2164&quot; data-origin-height=&quot;1363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4) Continuous Integration &amp;amp; Delivery&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CI(Continuous integration) &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 CD(continuous delivery) 도구를 사용하면 내장된 품질 보증을 통해 빠르고 효율적인 개발이 가능합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CI&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 코드를 즉시 빌드하고 테스트하여 코드 변경을 자동화하여 배포 가능한 아티팩트를 생성하도록 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 한 단계 더 나아가 배포 단계를 통해 artifact를 push합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;성숙한 CI/CD 시스템은 소스 코드의 변경 사항을 감시하고 코드를 자동으로 빌드 및 테스트한 다음 프로세스를 계속할지 또는 실패할지 결정하기 위해 다양한 테스트 또는 유효성 검사를 통과해야 하는 개발에서 프로덕션으로 이동하기 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 도구는 이러한 접근 방식을 가능하게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;시장에서 가장 많은 CI 도구인 Jenkins와 같은 일부 기존 도구는 Kubernetes 생태계에 더 잘 맞도록 조정되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Flux &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 Argo는 OpenGitOps 프로젝트가 벤더 중립적 표준으로 정의하기 위해 노력하고 있는 GitOps라는 새로운 지속적 제공 방법을 개척했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CI/CD&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Continuous integration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Continuous delivery&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Continuous deployment&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Blue/green&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Canary deploy&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Argo (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Brigade (archived)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Flux (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Keptn (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenFeature (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenGitOps (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenKruise (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;werf (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;15-ContinuousIntegration-Delivery.PNG&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;1372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bek5X0/btscZTBP7Mw/C60NkcYFIdFm7PCr6Uqi61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bek5X0/btscZTBP7Mw/C60NkcYFIdFm7PCr6Uqi61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bek5X0/btscZTBP7Mw/C60NkcYFIdFm7PCr6Uqi61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbek5X0%2FbtscZTBP7Mw%2FC60NkcYFIdFm7PCr6Uqi61%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;2160&quot; height=&quot;1372&quot; data-filename=&quot;15-ContinuousIntegration-Delivery.PNG&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;1372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5. Observability and Analysis&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이제 CNCF 환경의 계층을 통해 작업했으므로 관측 가능성 및 분석으로 시작하는 열에 초점을 맞출 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Observability&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은 외부 출력에서 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​​&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템을 이해할 수 있는 정도를 설명하는 시스템 특성입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; CPU 시간, 메모리, 디스크 공간, 대기 시간, 오류 등으로 측정되는 컴퓨터 시스템은 어느 정도 관찰 가능할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Analysis&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 관찰 가능한 데이터를 보고 이해하는 활동입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서비스 중단이 발생하지 않도록 하려면 애플리케이션의 모든 측면을 관찰하고 분석하여 모든 이상 현상을 즉시 감지하고 수정해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 도구는 로깅, 모니터링, 추적 및 카오스 엔지니어링으로 분류됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Monitoring&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;모니터링은 동작에 대한 이해도를 높이기 위해 로그와 메트릭을 수집, 집계 및 분석하기 위해 앱을 계측하는 것을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;로그는 특정 이벤트를 설명하지만 메트릭은 지정된 시점의 시스템 측정치입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;두 가지가 서로 다르지만 둘 다 시스템 상태를 전체적으로 파악하는 데 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;모니터링에는 개별 노드의 디스크 공간, CPU 사용량 및 메모리 소비를 관찰하는 것부터 상세한 가상 트랜잭션을 수행하여 시스템 또는 애플리케이션이 적시에 올바르게 응답하는지 확인하는 것까지 모든 것이 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;시스템 및 응용 프로그램을 모니터링하는 방법에는 여러 가지가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Monitoring&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Time series&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alerting&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Metrics&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cortex (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Fonio (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kuberhealthy (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenMetrics (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pixie (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Skooner (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Thanos (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Trickster (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;16-Monitoring.PNG&quot; data-origin-width=&quot;1904&quot; data-origin-height=&quot;1544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ziY0n/btscZUHJWoZ/mZGZITsLRry1ZckaqHIH0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ziY0n/btscZUHJWoZ/mZGZITsLRry1ZckaqHIH0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ziY0n/btscZUHJWoZ/mZGZITsLRry1ZckaqHIH0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FziY0n%2FbtscZUHJWoZ%2FmZGZITsLRry1ZckaqHIH0K%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;1904&quot; height=&quot;1544&quot; data-filename=&quot;16-Monitoring.PNG&quot; data-origin-width=&quot;1904&quot; data-origin-height=&quot;1544&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) Logging&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;애플리케이션은 주어진 시간에 수행 중인 작업을 설명하는 꾸준한 로그 메시지 스트림을 내보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이러한 로그 메시지는 실패하거나 성공한 작업, 감사 정보 또는 상태 이벤트와 같이 시스템에서 발생하는 다양한 이벤트를 캡처합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;로깅 도구는 이러한 메시지를 수집, 저장 및 분석하여 오류 보고서 및 관련 데이터를 추적합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; 메트릭 및 추적과 함께 로깅은 관찰 가능성의 기둥 중 하나입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 네이티브 환경에서 Fluentd와 같은 로그 수집 도구는 애플리케이션 컨테이너와 함께 실행되며 애플리케이션에서 직접 메시지를 수집합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;그런 다음 메시지는 집계 및 분석을 위해 중앙 로그 저장소로 전달됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #e9f5fb; color: #000000; text-align: start;&quot;&gt;Logging&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Fluentd (graduated)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;17-Logging.PNG&quot; data-origin-width=&quot;2166&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btnvin/btsc1vHavNz/mw9K2ZnkVmOrQEgrLBKKG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btnvin/btsc1vHavNz/mw9K2ZnkVmOrQEgrLBKKG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btnvin/btsc1vHavNz/mw9K2ZnkVmOrQEgrLBKKG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtnvin%2Fbtsc1vHavNz%2Fmw9K2ZnkVmOrQEgrLBKKG0%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;2166&quot; height=&quot;582&quot; data-filename=&quot;17-Logging.PNG&quot; data-origin-width=&quot;2166&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3) Tracing&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Logging&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 전문적인 사용인 Tracing을 통해 분산 시스템을 통해 이동할 때 요청 경로를 추적할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Tracing&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은 응용 프로그램에서 보낸 메시지에 고유 식별자를 추가하여 이 문제를 해결합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 고유 식별자를 사용하면 개별 트랜잭션이 시스템을 통해 이동할 때 추적할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 정보를 사용하여 애플리케이션의 상태를 확인하고 문제가 있는 마이크로 서비스 또는 활동을 디버그할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Tracing &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터를 내보내려면 응용 프로그램 코드를 수정해야 하며 모든 범위는 응용 프로그램의 데이터 경로에서 인프라 구성 요소(예: 서비스 메시 및 해당 프록시)에 의해 전파되어야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jaeger &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;및 Open Tracing은 이 분야의 CNCF 프로젝트입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Span&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Tracing&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jaeger (graduated)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenTelemetry (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenTracing (archived)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;18-Tracing.PNG&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0zCOk/btsc0qfmd7K/0SKwrvZqp2Q3ZBDZykwRTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0zCOk/btsc0qfmd7K/0SKwrvZqp2Q3ZBDZykwRTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0zCOk/btsc0qfmd7K/0SKwrvZqp2Q3ZBDZykwRTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0zCOk%2Fbtsc0qfmd7K%2F0SKwrvZqp2Q3ZBDZykwRTK%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;2160&quot; height=&quot;577&quot; data-filename=&quot;18-Tracing.PNG&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4) Chaos Engineering&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;카오스 엔지니어링은 탄력성을 테스트하고 응용 프로그램 및 엔지니어링 팀이 예기치 않은 이벤트를 견딜 수 있도록 시스템에 의도적으로 결함을 도입하는 관행을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;카오스 엔지니어링 도구는 애플리케이션의 특정 인스턴스에 대해 결함을 도입하고 특정 실험을 실행하는 제어된 방법을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #e9f5fb; color: #000000; text-align: start;&quot;&gt;Chaos Engineering&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Chaos Mesh (incubating)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Chaosblade (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Litmus (incubating)&lt;/span&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Chaos-Engineering.PNG&quot; data-origin-width=&quot;2462&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p10Y8/btsc0YCTgIC/qsLKKu7IhcWw1mHxsuSWhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p10Y8/btsc0YCTgIC/qsLKKu7IhcWw1mHxsuSWhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p10Y8/btsc0YCTgIC/qsLKKu7IhcWw1mHxsuSWhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp10Y8%2Fbtsc0YCTgIC%2FqsLKKu7IhcWw1mHxsuSWhK%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;2462&quot; height=&quot;468&quot; data-filename=&quot;Chaos-Engineering.PNG&quot; data-origin-width=&quot;2462&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;6. Platform&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;플랫폼은 오케스트레이션 도구, 컨테이너 런타임, 서비스 검색, 네트워킹, API 게이트웨이 등의 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;서로 다른 계층의 서로 다른 도구를 함께 묶어 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;소규모 엔지니어링 팀이 있는 조직의 경우 플랫폼이 클라우드 네이티브 접근 방식을 채택하는 유일한 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;모든 플랫폼이 클라우드 네이티브 스택의 핵심인 Kubernetes를 중심으로 구성되어 가고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1) Certified Kubernetes - Distribution&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;배포판은 공급업체가 core Kubernetes를 가져와 재 배포를 위해 패키징하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt; 일반적으로 여기에는 Kubernetes 소프트웨어를 찾아 검증하고 클러스터 설치 및 업그레이드를 처리하는 메커니즘을 제공하는 것이 수반됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;많은 Kubernetes 배포에는 공급업체 별 독점적이거나 오픈 소스 애플리케이션이 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;252&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;범주&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #eef8e4; text-align: center;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNCF Projects&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #e9f5fb;&quot; width=&quot;252&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;background-color: #ffffff;&quot; width=&quot;445&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;●&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;k3s (sandbox)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;19-CertifiedKubernetes-Distribution.PNG&quot; data-origin-width=&quot;2171&quot; data-origin-height=&quot;1165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r3zmd/btsc7xqIDq3/vbTGAEddZIkGPil1pDptkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r3zmd/btsc7xqIDq3/vbTGAEddZIkGPil1pDptkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r3zmd/btsc7xqIDq3/vbTGAEddZIkGPil1pDptkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr3zmd%2Fbtsc7xqIDq3%2FvbTGAEddZIkGPil1pDptkK%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;2171&quot; height=&quot;1165&quot; data-filename=&quot;19-CertifiedKubernetes-Distribution.PNG&quot; data-origin-width=&quot;2171&quot; data-origin-height=&quot;1165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2) Certified Kubernetes - Hosted&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;호스팅된 Kubernetes는 AWS, Digital Ocean, Azure 및 Google과 같은 인프라 공급자가 제공하는 서비스로 고객이 필요에 따라 Kubernetes 클러스터를 가동할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;클라우드 공급자는 일반적으로 컨트롤 플레인이라고 하는 Kubernetes 클러스터의 일부를 관리할 책임이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;배포판과 비슷하지만 인프라에서 클라우드 공급자가 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;공급자가 모든 관리 세부 사항을 처리하므로 호스팅된 Kubernetes는 클라우드 네이티브를 시작하는 가장 쉬운 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;모든 사용자는 앱을 개발하고 호스팅된 Kubernetes 서비스에 배포하기만 하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;오퍼링은 클라우드 공급자에 바인딩되며 Kubernetes 사용자는 컨트롤 플레인에 액세스할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20-CertifiedKubernetes-Hosted.PNG&quot; data-origin-width=&quot;2178&quot; data-origin-height=&quot;979&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RROPz/btsc7xqIJAz/DcqR4X73Y12Ah0wv70nQS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RROPz/btsc7xqIJAz/DcqR4X73Y12Ah0wv70nQS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RROPz/btsc7xqIJAz/DcqR4X73Y12Ah0wv70nQS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRROPz%2Fbtsc7xqIJAz%2FDcqR4X73Y12Ah0wv70nQS1%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;2178&quot; height=&quot;979&quot; data-filename=&quot;20-CertifiedKubernetes-Hosted.PNG&quot; data-origin-width=&quot;2178&quot; data-origin-height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3) Certified Kubernetes - Installer&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 프로그램은 컴퓨터에 Kubernetes를 설치하는 데 도움이 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 및 구성 프로세스를 자동화하고 업그레이드를 지원할 수도 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 프로그램은 종종 Kubernetes 배포 또는 호스팅된 Kubernetes 제품과 결합되거나 사용됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 프로그램은 Kubernetes 설치 프로세스를 용이하게 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;배포판과 마찬가지로 소스 코드 및 버전에 대해 검증된 소스를 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;또한 공급업체 별 독단적인 Kubernetes 환경 구성과 함께 제공되는 경우가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KIND (Docker&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 Kubernetes) 와 같은 Kubernetes 설치 프로그램을 사용하면 단일 명령으로 Kubernetes 클러스터를 가져올 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;CertifiedKubernetes-Installer.PNG&quot; data-origin-width=&quot;1894&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2lmRm/btsc2oA4cK0/CS5HE5kRFGaWhvGIInltK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2lmRm/btsc2oA4cK0/CS5HE5kRFGaWhvGIInltK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2lmRm/btsc2oA4cK0/CS5HE5kRFGaWhvGIInltK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2lmRm%2Fbtsc2oA4cK0%2FCS5HE5kRFGaWhvGIInltK0%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;1894&quot; height=&quot;506&quot; data-filename=&quot;CertifiedKubernetes-Installer.PNG&quot; data-origin-width=&quot;1894&quot; data-origin-height=&quot;506&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4) PaaS/Container Service&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PaaS(Platform-as-a-Service)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 사용자가 기본 컴퓨팅 리소스의 세부 정보에 신경 쓰지 않고 애플리케이션을 실행할 수 있는 환경입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;이 범주의 PaaS 및 컨테이너 서비스는 개발자용 PaaS를 호스팅하거나 개발자가 사용할 수 있는 서비스를 호스팅하는 메커니즘입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;21-PaaS-Container_Service.PNG&quot; data-origin-width=&quot;2706&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Id8El/btsc03xbqgD/Eh6e0EO2pDVhxMb2Noj6s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Id8El/btsc03xbqgD/Eh6e0EO2pDVhxMb2Noj6s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Id8El/btsc03xbqgD/Eh6e0EO2pDVhxMb2Noj6s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FId8El%2Fbtsc03xbqgD%2FEh6e0EO2pDVhxMb2Noj6s0%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;2706&quot; height=&quot;478&quot; data-filename=&quot;21-PaaS-Container_Service.PNG&quot; data-origin-width=&quot;2706&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;※ 참고 URL&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://landscape.cncf.io/guide&quot;&gt;https://landscape.cncf.io/guide&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Cloud Platform/Kubernetes</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/19</guid>
      <comments>https://paas.tistory.com/19#entry19comment</comments>
      <pubDate>Fri, 28 Apr 2023 13:16:54 +0900</pubDate>
    </item>
    <item>
      <title>Install ELK Stack on CentOS 7</title>
      <link>https://paas.tistory.com/18</link>
      <description>&lt;p&gt;&lt;b&gt;Install ELK Stack on CentOS 7&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;How can I install ELK Stack on CentOS 7 / Fedora ? &amp;ldquo;&lt;/span&gt;&lt;span&gt;ELK&lt;/span&gt;&lt;span&gt;&amp;rdquo; is the acronym for&amp;nbsp;&lt;/span&gt;&lt;span&gt;Elasticsearch, Logstash, and Kibana&lt;/span&gt;&lt;span&gt;. A short description of these tools is covered in the next block.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Elasticsearch&lt;/span&gt;&lt;span&gt;: This is an open source, distributed, RESTful, JSON-based search engine. It is scalable,&amp;nbsp;easy to use, and flexible&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Logstash&lt;/span&gt;&lt;span&gt;&amp;nbsp;: This is a server‑side data processing pipeline that ingests data from multiple sources simultaneously, transforms it, and then sends it to a &amp;ldquo;stash&amp;rdquo; like Elasticsearch.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Kibana&lt;/span&gt;&lt;span&gt;&amp;nbsp;lets users visualize data with charts and graphs in Elasticsearch.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For RHEL 8, refer to:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://computingforgeeks.com/how-to-install-the-elk-stack-on-rhel-8/&quot;&gt;How to Install ELK Stack on RHEL / CentOS 8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please follow our steps below to install and configure ELK stack tools on CentOS 7 / Fedora 31/30/29 Linux.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1: Install Java&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;As Elasticsearch depends on Java, you need to install Java on your CentOS 7 / Fedora system.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum -y install java-openjdk-devel java-openjdk&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: Add ELK repository&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Once you have Java installed, add ELK stack repository which provides ELK stack packages.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;For Elasticsearch 7.x&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo&lt;/p&gt;
&lt;p&gt;[elasticsearch-7.x]&lt;/p&gt;
&lt;p&gt;name=Elasticsearch repository for 7.x packages&lt;/p&gt;
&lt;p&gt;baseurl=&lt;a href=&quot;https://artifacts.elastic.co/packages/7.x/yum&quot;&gt;https://artifacts.elastic.co/packages/7.x/yum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;gpgkey=&lt;a href=&quot;https://artifacts.elastic.co/GPG-KEY-elasticsearch&quot;&gt;https://artifacts.elastic.co/GPG-KEY-elasticsearch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;autorefresh=1&lt;/p&gt;
&lt;p&gt;type=rpm-md&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;For Elasticsearch 6.x&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo&lt;/p&gt;
&lt;p&gt;[elasticsearch-6.x]&lt;/p&gt;
&lt;p&gt;name=Elasticsearch repository for 6.x packages&lt;/p&gt;
&lt;p&gt;baseurl=&lt;a href=&quot;https://artifacts.elastic.co/packages/6.x/yum&quot;&gt;https://artifacts.elastic.co/packages/6.x/yum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;gpgkey=&lt;a href=&quot;https://artifacts.elastic.co/GPG-KEY-elasticsearch&quot;&gt;https://artifacts.elastic.co/GPG-KEY-elasticsearch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;autorefresh=1&lt;/p&gt;
&lt;p&gt;type=rpm-md&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After adding the repo, import GPG key:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo rpm --import &lt;a href=&quot;https://artifacts.elastic.co/GPG-KEY-elasticsearch&quot;&gt;https://artifacts.elastic.co/GPG-KEY-elasticsearch&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Clear and update your YUM package index.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum clean all&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum makecache&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Install and Configure Elasticsearch&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Elasticsearch repository is ready for use. You can install Elasticsearch using the command below:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum -y install elasticsearch&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Confirm package installation.&lt;/p&gt;
&lt;p&gt;$ &lt;b&gt;&lt;span&gt;rpm -qi elasticsearch &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Name&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: elasticsearch&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Epoch&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: 0&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Version&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: 7.0.1&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Release&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: 1&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Architecture: x86_64&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Install Date: Mon 06 May 2019 09:59:57 PM EAT&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Group&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: Application/Internet&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Size&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: 571521653&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;License&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: Elastic License&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Signature&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: RSA/SHA512, Mon 29 Apr 2019 05:14:11 PM EAT, Key ID d27d666cd88e42b4&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Source RPM&lt;span&gt;&amp;nbsp; &lt;/span&gt;: elasticsearch-7.0.1-1-src.rpm&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Build Date&lt;span&gt;&amp;nbsp; &lt;/span&gt;: Mon 29 Apr 2019 04:06:59 PM EAT&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Build Host&lt;span&gt;&amp;nbsp; &lt;/span&gt;: packer-virtualbox-iso-1553723689&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Relocations : /usr&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Packager&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: Elasticsearch&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Vendor&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: Elasticsearch&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;URL&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: &lt;a href=&quot;https://www.elastic.co/&quot;&gt;https://www.elastic.co/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Summary&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;: Elasticsearch is a distributed RESTful search engine built for the cloud. Reference documentation can be found at &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html&quot;&gt;https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html&lt;/a&gt; and the 'Elasticsearch: The Definitive Guide' book can be found at &lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html&quot;&gt;https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Description :&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Elasticsearch subproject :distribution:packages&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You can set JVM options like memory limits by editing the file:&amp;nbsp;&lt;/span&gt;&lt;span&gt;/etc/elasticsearch/jvm.options&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Example below sets initial/maximum size of total heap space&lt;/p&gt;
&lt;p&gt;-Xms1g&lt;/p&gt;
&lt;p&gt;-Xmx1g&lt;/p&gt;
&lt;p&gt;If your system has less memory, you can configure it to use small megabytes of ram.&lt;/p&gt;
&lt;p&gt;-Xms256m&lt;/p&gt;
&lt;p&gt;-Xmx512m&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Start and enable elasticsearch service on boot:&lt;/p&gt;
&lt;p&gt;$ &lt;b&gt;&lt;span&gt;sudo systemctl enable --now elasticsearch.service &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Synchronizing state of elasticsearch.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Executing: /usr/lib/systemd/systemd-sysv-install enable elasticsearch&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service &amp;rarr; /usr/lib/systemd/system/elasticsearch.service.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Test to verify that it is working:&lt;/p&gt;
&lt;p&gt;$ &lt;b&gt;&lt;span&gt;curl &lt;/span&gt;&lt;a href=&quot;http://127.0.0.1:9200/&quot;&gt;&lt;span&gt;http://127.0.0.1:9200 &lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;name&quot; : &quot;bBzN5Kg&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;cluster_name&quot; : &quot;elasticsearch&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;cluster_uuid&quot; : &quot;LKyqXXSvRvCpX9QAwKlP2Q&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;version&quot; : {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;number&quot; : &quot;6.5.4&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;build_flavor&quot; : &quot;default&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;build_type&quot; : &quot;rpm&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;build_hash&quot; : &quot;d2ef93d&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;build_date&quot; : &quot;2018-12-17T21:17:40.758843Z&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;build_snapshot&quot; : false,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;lucene_version&quot; : &quot;7.5.0&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;minimum_wire_compatibility_version&quot; : &quot;5.6.0&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;minimum_index_compatibility_version&quot; : &quot;5.0.0&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;},&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;tagline&quot; : &quot;You Know, for Search&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Create a test index:&lt;/p&gt;
&lt;p&gt;$ &lt;b&gt;&lt;span&gt;curl -X PUT &quot;&lt;/span&gt;&lt;a href=&quot;http://127.0.0.1:9200/mytest_index&quot;&gt;&lt;span&gt;http://127.0.0.1:9200/mytest_index&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;{&quot;acknowledged&quot;:true,&quot;shards_acknowledged&quot;:true,&quot;index&quot;:&quot;mytest_index&quot;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 4: Install and Configure Kibana&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Download and install Kibana from the added Elasticsearch repository.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum -y install kibana&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;After a successful installation, configure Kibana:&lt;/p&gt;
&lt;p&gt;$&lt;b&gt;&lt;span&gt; sudo vim /etc/kibana/kibana.yml&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;server.host: &quot;0.0.0.0&quot;&lt;/p&gt;
&lt;p&gt;server.name: &quot;&lt;a href=&quot;http://kibana.example.com/&quot;&gt;kibana.example.com&lt;/a&gt;&quot;&lt;/p&gt;
&lt;p&gt;elasticsearch.hosts: &quot;&lt;a href=&quot;http://localhost:9200/&quot;&gt;http://localhost:9200&lt;/a&gt;&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Change other settings as desired then start kibana service:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo systemctl enable --now kibana&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Access&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://computingforgeeks.com/&quot;&gt;&lt;span&gt;http://ip-address:5601&lt;/span&gt;&lt;/a&gt;&amp;nbsp;to open Kibana Dashboard:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If you have an active firewall service, allow TCP port&amp;nbsp;&lt;/span&gt;&lt;span&gt;5601&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo firewall-cmd --add-port=5601/tcp --permanent&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo firewall-cmd --reload&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 5: Install and Configure Logstash&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The last installation is for Logstash. It will act as a centralized logs server for your client systems which runs an agent like&amp;nbsp;&lt;a href=&quot;https://www.elastic.co/products/beats/filebeat&quot;&gt;filebeat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum -y install logstash&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Logstash custom configurations can be placed under&amp;nbsp;the&amp;nbsp;&lt;/span&gt;&lt;span&gt;/etc/logstash/conf.d/&lt;/span&gt;&lt;span&gt;directory.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Check&amp;nbsp;&lt;a href=&quot;https://www.elastic.co/guide/en/logstash/current/index.html&quot;&gt;Logstash Configuration manual&amp;nbsp;&lt;/a&gt;for more details.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 6: Install other ELK tools &amp;ndash; Bonus&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Other ELK tools that can be installed include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Filebeat&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Lightweight Shipper for Logs. It helps you keep the simple things simple by offering a lightweight way to forward and centralize logs and files&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Metricbeat&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Collect metrics from your systems and services. From CPU to memory, Redis to NGINX, and much more, Metricbeat is a lightweight way to send system and service statistics.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Packetbeat&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Lightweight Shipper for Network Data&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Heartbeat&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Lightweight Shipper for Uptime Monitoring. It helps you monitor services for their availability with active probing&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span&gt;Auditbeat&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Lightweight shipper that helps you audit the activities of users and processes on your systems&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;These tools can be installed&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt;&amp;nbsp;package&amp;nbsp;manager using their respective names. The example below will install all ELK addon tools.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sudo yum install filebeat auditbeat metricbeat packetbeat heartbeat-elastic&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Refer to official&amp;nbsp;&lt;a href=&quot;https://www.elastic.co/guide/index.html&quot;&gt;ELK stack documentation&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;https://www.elastic.co/learn&quot;&gt;Resources and Training&lt;/a&gt;&amp;nbsp;for each tool configuration and further reading.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://computingforgeeks.com/how-to-install-elk-stack-on-centos-fedora/&quot;&gt;https://computingforgeeks.com/how-to-install-elk-stack-on-centos-fedora/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Monitoring Logging/elasticsearch</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/18</guid>
      <comments>https://paas.tistory.com/18#entry18comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:52:08 +0900</pubDate>
    </item>
    <item>
      <title>Install Python 3 on CentOS 7</title>
      <link>https://paas.tistory.com/17</link>
      <description>&lt;p&gt;&lt;b&gt;How to Install Python 3 on CentOS 7&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;the pre-installed version of Python found on CentOS 7 is a much older version. In order to have the latest version of Python, the user will have to install it manually.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In this tutorial, we will show you two methods of installing Python version 3.6.8 on your CentOS 7 machine. The reason there are two methods is that Python 3.6.8 does not come by default in the built-in Yum repositories. So, we can either compile Python on our machine from the source code or add a repository that has a pre-compiled version of Python for CentOS 7.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Method 1: Install Python 3 on CentOS 7 From a Repository&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is the easier method of the two for installing Python on your machine. Here, we simply add a repository that has the pre-compiled version ready for us to install. In this case, we are adding the&amp;nbsp;&lt;span&gt;Inline with Upstream Stable&lt;/span&gt;&amp;nbsp;repository, a community project whose goal is to bring new versions of software to RHEL-based systems.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 1: Open a Terminal and add the repository to your Yum install.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;sudo yum install -y &lt;a href=&quot;https://repo.ius.io/ius-release-el7.rpm&quot;&gt;https://repo.ius.io/ius-release-el7.rpm&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 2: Update Yum to finish adding the repository.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;sudo yum update&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 3: Download and install Python.&lt;/p&gt;
&lt;p&gt;This will not only install Python &amp;ndash; but it will also install pip to help you with installing add-ons.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;sudo yum install -y python36u python36u-libs python36u-devel python36u-pip&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once these commands are executed, simply check if the correct version of Python has been installed by executing the following command:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;python3.6 -V&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You have now finished installing Python 3.6.8 on your CentOS 7 machine, as well as installing a native Python package management tool called pip.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;sudo easy_install-3.6 pip&lt;/p&gt;
&lt;p&gt;pip --version&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Add python alias&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;which python3.6&lt;/p&gt;
&lt;p&gt;/usr/bin/python3.6&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sudo vi ~/.bashrc&lt;/p&gt;
&lt;p&gt;alias python=&quot;/usr/bin/python3.6&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;python --version&lt;/p&gt;
&lt;p&gt;Python 3.6.8&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Method 2: Compiling Python 3.7.9 on CentOS 7 From Source Code&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is the more complicated method of the two, and will take more time &amp;ndash; however, this method gives you more control over what gets installed and what doesn&amp;rsquo;t. It can also be more secure at times, depending on where the software package is downloaded from.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Important:&amp;nbsp;&lt;/span&gt;Keep in mind that your Yum package manager&amp;nbsp;&lt;span&gt;will not know&lt;/span&gt;&amp;nbsp;that you have installed Python 3.7.9 (or any other software) if you install software by manually compiling the source code. This means that&amp;nbsp;&lt;span&gt;no updates&lt;/span&gt;&amp;nbsp;will be available for your manually installed software.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 1: Install the development tools needed for compilation.&lt;/p&gt;
&lt;p&gt;First, we will need the tools in order to be able to compile and install programs from their source code. To do this, we will install the group &amp;ldquo;Development Tools&amp;rdquo; through Yum itself:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;sudo yum groupinstall -y &quot;Development Tools&quot;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once this is done, move on to step 2.&lt;/p&gt;
&lt;p&gt;Step 2: Download the Python source files.&lt;/p&gt;
&lt;p&gt;First, we need to create a directory in which our install will take place. Make a directory with a name of your choosing, then enter the directory. Once you are in your new directory, enter the following command to download the compressed Python source file.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;wget &lt;a href=&quot;https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz&quot;&gt;https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once the file is finished downloading, uncompress the file by using tar, then enter into the new directory that was just created:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;tar -xJf Python-3.7.9.tar.xz&lt;/p&gt;
&lt;p&gt;cd Python-3.7.9&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 3: Run the configuration script.&lt;/p&gt;
&lt;p&gt;Use the following command to have the installation software check your system before actually starting the installation process.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;./configure&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This command ensures that the install will work, along with creating a special &amp;lsquo;makefile&amp;rsquo; that is unique to your system. This makefile is what you will use to install Python onto your system.&lt;/p&gt;
&lt;p&gt;Step 4: Install Python.&lt;/p&gt;
&lt;p&gt;Now we can finally execute the makefile. Run the following command to install Python onto your system. Note: This will take a few minutes. The speed of the compilation and install will depend on the speed of your processor.&lt;/p&gt;
&lt;p&gt;First, we run the &amp;lsquo;make&amp;rsquo; command which compiles the program.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;make&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then, once that is finished, we can run the installation command.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;make install&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once this command finishes, you will have installed Python successfully, along with pip and setuptools. From here, creating a virtual environment is easy, and coding and executing the latest Python code is now possible.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Of course, you don&amp;rsquo;t have to install Python 3.7.9 on CentOS 7, if you use one of our high-speed&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.rosehosting.com/python-hosting.html&quot;&gt;Python VPS hosting&lt;/a&gt;&lt;span&gt;&amp;nbsp;plans &amp;ndash; in which case you can simply ask our expert Linux admins to install Python 3.7.9 for you. They are available 24&amp;times;7 and will take care of your request immediately.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.rosehosting.com/blog/how-to-install-python-3-6-4-on-centos-7/&quot;&gt;https://www.rosehosting.com/blog/how-to-install-python-3-6-4-on-centos-7/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programming/Python</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/17</guid>
      <comments>https://paas.tistory.com/17#entry17comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:49:14 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes Monitoring - Prometheus</title>
      <link>https://paas.tistory.com/16</link>
      <description>&lt;p&gt;&lt;span&gt;Kubernetes Monitoring - Prometheus 실습&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이번 포스팅에서는 쿠버네티스 클러스터의 메트릭들을 프로메테우스로 수집하고 web UI를 통해 시각화 시키는 작업을 해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;참고 링크 :&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://twofootdog.tistory.com/17&quot;&gt;&lt;span&gt;쿠버네티스 시작하기(11) - Prometheus &amp;amp; Node-Exporter &amp;amp; AlertManager 연동&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Prerequisites&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;먼저 쿠버네티스 클러스터를 생성해주세요.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;참고링크 :&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://gruuuuu.github.io/cloud/k8s-install/&quot;&gt;&lt;span&gt;호롤리한하루/Install Kubernetes on CentOS/RHEL&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;본 실습에서 사용한 spec :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;OS : CentOS v7.6&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Arch : x86&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Kubernetes&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;v1.16.2&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Master&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;: 4cpu, ram16G (1개)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Node&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;: 4cpu, ram16G (2개)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Step&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. Prometheus 배포&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;namespace&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;제일먼저 해줘야 할 것은 프로메테우스관련 오브젝트들이 사용할 namespace를 생성해 주는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl create ns monitoring&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Cluster Role&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;다음으로는 프로메테우스 컨테이너가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;쿠버네티스 api에 접근할 수 있는 권한&lt;/span&gt;&lt;span&gt;을 부여해주기 위해&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ClusterRole&lt;/span&gt;&lt;span&gt;을 설정해주고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ClusterRoleBinding&lt;/span&gt;&lt;span&gt;을 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;생성된 ClusterRole은 monitoring namespace의 기본 서비스어카운트와 연동되어 권한을 부여해줍니다.&lt;/p&gt;
&lt;p&gt;# prometheus-cluster-role.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1beta1&lt;/p&gt;
&lt;p&gt;kind: ClusterRole&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: prometheus&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;rules:&lt;/p&gt;
&lt;p&gt;- apiGroups: [&quot;&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- nodes&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- nodes/proxy&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- services&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- endpoints&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- pods&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- extensions&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- ingresses&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- nonResourceURLs: [&quot;/metrics&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;get&quot;]&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1beta1&lt;/p&gt;
&lt;p&gt;kind: ClusterRoleBinding&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: prometheus&lt;/p&gt;
&lt;p&gt;roleRef:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;apiGroup: rbac.authorization.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;kind: ClusterRole&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: prometheus&lt;/p&gt;
&lt;p&gt;subjects:&lt;/p&gt;
&lt;p&gt;- kind: ServiceAccount&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: default&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Configmap&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;프로메테우스가 기동되려면 환경설정파일이 필요한데 해당 환경설정 파일을 정의해주는 부분입니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;data 밑에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;prometheus.rules&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;prometheus.yml&lt;/span&gt;&lt;span&gt;를 각각 정의하게 되어있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;prometheus.rules&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;: 수집한 지표에 대한 알람조건을 지정하여 특정 조건이 되면 AlertManager로 알람을 보낼 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;prometheus.yml&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;: 수집할 지표(metric)의 종류와 수집 주기등을 기입&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;# prometheus-config-map.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: v1&lt;/p&gt;
&lt;p&gt;kind: ConfigMap&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: prometheus-server-conf&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: prometheus-server-conf&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;data:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;prometheus.rules: |-&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;groups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: container memory alert&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rules:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- alert: container memory usage rate is very high( &amp;gt; 55%)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;expr: sum(container_memory_working_set_bytes{pod!=&quot;&quot;, name=&quot;&quot;})/ sum (kube_node_status_allocatable_memory_bytes) * 100 &amp;gt; 55&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;for: 1m&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;severity: fatal&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;annotations:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;summary: High Memory Usage on&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;identifier: &quot;&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;description: &quot; Memory Usage: &quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: container CPU alert&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rules:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- alert: container CPU usage rate is very high( &amp;gt; 10%)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;expr: sum (rate (container_cpu_usage_seconds_total{pod!=&quot;&quot;}[1m])) / sum (machine_cpu_cores) * 100 &amp;gt; 10&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;for: 1m&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;severity: fatal&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;annotations:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;summary: High Cpu Usage&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;prometheus.yml: |-&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;global:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scrape_interval: 5s&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;evaluation_interval: 5s&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rule_files:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- /etc/prometheus/prometheus.rules&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;alerting:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;alertmanagers:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- scheme: http&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;static_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- targets:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- &quot;alertmanager.monitoring.svc:9093&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scrape_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- job_name: 'kubernetes-apiservers'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetes_sd_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- role: endpoints&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scheme: https&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tls_config:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;relabel_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: keep&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: default;kubernetes;https&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- job_name: 'kubernetes-nodes'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scheme: https&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tls_config:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetes_sd_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- role: node&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;relabel_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- action: labelmap&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: __meta_kubernetes_node_label_(.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- target_label: __address__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replacement: kubernetes.default.svc:443&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_node_name]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: (.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __metrics_path__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replacement: /api/v1/nodes/${1}/proxy/metrics&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- job_name: 'kubernetes-pods'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetes_sd_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- role: pod&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;relabel_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: keep&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: true&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __metrics_path__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: (.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: ([^:]+)(?::\d+)?;(\d+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replacement: $1:$2&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __address__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- action: labelmap&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: __meta_kubernetes_pod_label_(.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_namespace]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: kubernetes_namespace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_pod_name]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: kubernetes_pod_name&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- job_name: 'kube-state-metrics'&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;static_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080']&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- job_name: 'kubernetes-cadvisor'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scheme: https&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tls_config:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetes_sd_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- role: node&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;relabel_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- action: labelmap&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: __meta_kubernetes_node_label_(.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- target_label: __address__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replacement: kubernetes.default.svc:443&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_node_name]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: (.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __metrics_path__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- job_name: 'kubernetes-service-endpoints'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetes_sd_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- role: endpoints&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;relabel_configs:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: keep&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: true&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __scheme__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: (https?)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __metrics_path__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: (.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: __address__&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: ([^:]+)(?::\d+)?;(\d+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replacement: $1:$2&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- action: labelmap&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;regex: __meta_kubernetes_service_label_(.+)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_namespace]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: kubernetes_namespace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- source_labels: [__meta_kubernetes_service_name]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;action: replace&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target_label: kubernetes_name&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;deployment&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;프로메테우스 이미지를 담은 pod을 담은 deployment controller&lt;/p&gt;
&lt;p&gt;# prometheus-deployment.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: apps/v1&lt;/p&gt;
&lt;p&gt;kind: Deployment&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: prometheus-deployment&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;replicas: 1&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;matchLabels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: prometheus-server&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;template:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: prometheus-server&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;containers:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: prometheus&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;image: prom/prometheus:latest&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;args:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- &quot;--config.file=/etc/prometheus/prometheus.yml&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- &quot;--storage.tsdb.path=/prometheus/&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- containerPort: 9090&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;volumeMounts:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: prometheus-config-volume&lt;/p&gt;
&lt;p&gt;&lt;span&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; &lt;/span&gt;mountPath: /etc/prometheus/&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: prometheus-storage-volume&lt;/p&gt;
&lt;p&gt;&lt;span&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; &lt;/span&gt;mountPath: /prometheus/&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;volumes:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: prometheus-config-volume&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;configMap:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;defaultMode: 420&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: prometheus-server-conf&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: prometheus-storage-volume&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;emptyDir: {}&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;node exporter&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;프로메테우스가 수집하는 메트릭은 쿠버네티스에서 기본으로 제공하는 system metric만 수집하는게 아니라 그 외의 것들도 수집하기 때문에 수집역할을 하는 에이전트를 따로 두어야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그 역할을 해주는게&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;node-exporter&lt;/span&gt;&lt;span&gt;이고 각 노드에 하나씩 띄워야 하므로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;DaemonSet&lt;/span&gt;&lt;span&gt;으로 구성해주도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# prometheus-node-exporter.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: apps/v1&lt;/p&gt;
&lt;p&gt;kind: DaemonSet&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s-app: node-exporter&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;matchLabels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s-app: node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;template:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s-app: node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;containers:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- image: prom/node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- containerPort: 9100&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;protocol: TCP&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: http&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;apiVersion: v1&lt;/p&gt;
&lt;p&gt;kind: Service&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s-app: node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: node-exporter&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: kube-system&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- name: http&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;port: 9100&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nodePort: 31672&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;protocol: TCP&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;type: NodePort&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s-app: node-exporter&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;마지막으로 프로메테우스 pod을 외부로 노출시키는 서비스를 구성해줍니다.&lt;/p&gt;
&lt;p&gt;# prometheus-svc.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: v1&lt;/p&gt;
&lt;p&gt;kind: Service&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: prometheus-service&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;annotations:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prometheus.io/scrape: 'true'&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prometheus.io/port:&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;'9090'&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: prometheus-server&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;type: NodePort&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- port: 8080&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;targetPort: 9090&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nodePort: 30003&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;배포&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;한 번에 배포 :&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; prometheus-cluster-role.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; prometheus-config-map.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; prometheus-deployment.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; prometheus-node-exporter.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; prometheus-svc.yaml&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;prometheus pod도 정상적으로 동작하고, 현재 실습환경은 노드가 2개이므로 node-exporter도 2개 뜬 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl get pod &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; monitoring&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;NAME&lt;span&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;READY&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;STATUS&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RESTARTS&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AGE&lt;br /&gt;node-exporter-99w2v&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;18s&lt;br /&gt;node-exporter-f9q7f&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;18s&lt;br /&gt;prometheus-deployment-7bcb5ff899-h4rb7&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;65s&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ip:30003&lt;/span&gt;&lt;span&gt;로 접근해보면 prometheus의 web ui로 접근할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;쿠버네티스의 다양한 metric들을 그래프로 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;301&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cb4X1z/btqGYK9qIFh/iHuEheeKibxGiKHlfOqaN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cb4X1z/btqGYK9qIFh/iHuEheeKibxGiKHlfOqaN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cb4X1z/btqGYK9qIFh/iHuEheeKibxGiKHlfOqaN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcb4X1z%2FbtqGYK9qIFh%2FiHuEheeKibxGiKHlfOqaN1%2Fimg.png&quot; width=&quot;600&quot; height=&quot;301&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;369&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7TKSD/btqGRQJ4SwH/wuscQt1IsfKlhos6AHM9qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7TKSD/btqGRQJ4SwH/wuscQt1IsfKlhos6AHM9qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7TKSD/btqGRQJ4SwH/wuscQt1IsfKlhos6AHM9qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7TKSD%2FbtqGRQJ4SwH%2FwuscQt1IsfKlhos6AHM9qK%2Fimg.png&quot; width=&quot;600&quot; height=&quot;369&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;522&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byIIvz/btqGX562Mof/8kMpVwPewsv4ph7vCijVc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byIIvz/btqGX562Mof/8kMpVwPewsv4ph7vCijVc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byIIvz/btqGX562Mof/8kMpVwPewsv4ph7vCijVc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyIIvz%2FbtqGX562Mof%2F8kMpVwPewsv4ph7vCijVc0%2Fimg.png&quot; width=&quot;600&quot; height=&quot;522&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;상단 메뉴의 Status &amp;gt; Targets를 들어가보면, 프로메테우스가 현재 모니터링하고있는 타겟을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;근데 이 중&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;kube-state-metrics&lt;/span&gt;&lt;span&gt;가 (0/1 up)으로 아직 올라가지 않은 것으로 표시됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;284&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCuw3a/btqGK25Fwio/5OKZRj9XyYTYPNC8KTJBNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCuw3a/btqGK25Fwio/5OKZRj9XyYTYPNC8KTJBNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCuw3a/btqGK25Fwio/5OKZRj9XyYTYPNC8KTJBNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCuw3a%2FbtqGK25Fwio%2F5OKZRj9XyYTYPNC8KTJBNK%2Fimg.png&quot; width=&quot;600&quot; height=&quot;284&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;kube-state-metrics&lt;/span&gt;&lt;span&gt;는 쿠버네티스 클러스터 내 오브젝트(예를들면 Pod)에 대한 지표정보를 생성하는 서비스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;따라서 Pod 상태정보를 모니터링하기 위해서는 kube-state-metrics가 떠 있어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Kube State Metrics 배포&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;첫번째로 배포할 것은 ClusterRole과 ClusterRoleBinding입니다.&lt;/p&gt;
&lt;p&gt;# kube-state-cluster-role.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1&lt;/p&gt;
&lt;p&gt;kind: ClusterRoleBinding&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;roleRef:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;apiGroup: rbac.authorization.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;kind: ClusterRole&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;subjects:&lt;/p&gt;
&lt;p&gt;- kind: ServiceAccount&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: kube-system&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1&lt;/p&gt;
&lt;p&gt;kind: ClusterRole&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;rules:&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- &quot;&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;configmaps&quot;, &quot;secrets&quot;, &quot;nodes&quot;, &quot;pods&quot;, &quot;services&quot;, &quot;resourcequotas&quot;, &quot;replicationcontrollers&quot;, &quot;limitranges&quot;, &quot;persistentvolumeclaims&quot;, &quot;persistentvolumes&quot;, &quot;namespaces&quot;, &quot;endpoints&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;,&quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- extensions&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;daemonsets&quot;, &quot;deployments&quot;, &quot;replicasets&quot;, &quot;ingresses&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- apps&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;statefulsets&quot;, &quot;daemonsets&quot;, &quot;deployments&quot;, &quot;replicasets&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- batch&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;cronjobs&quot;, &quot;jobs&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- autoscaling&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;horizontalpodautoscalers&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- authentication.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;tokenreviews&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;create&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- authorization.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;subjectaccessreviews&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;create&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- policy&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;poddisruptionbudgets&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- certificates.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;certificatesigningrequests&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- storage.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;storageclasses&quot;, &quot;volumeattachments&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- admissionregistration.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;mutatingwebhookconfigurations&quot;, &quot;validatingwebhookconfigurations&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;p&gt;- apiGroups:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- networking.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;resources: [&quot;networkpolicies&quot;]&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;verbs: [&quot;list&quot;, &quot;watch&quot;]&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 ClusterRole과 연동될 서비스어카운트를 생성해줍니다.&lt;/p&gt;
&lt;p&gt;# kube-state-svcaccount.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: v1&lt;/p&gt;
&lt;p&gt;kind: ServiceAccount&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: kube-system&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kube-state-metrics의 deployment도 구성해줍니다.&lt;/p&gt;
&lt;p&gt;# kube-state-deployment.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: apps/v1&lt;/p&gt;
&lt;p&gt;kind: Deployment&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: kube-system&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;replicas: 1&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;matchLabels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;template:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;containers:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- image: quay.io/coreos/kube-state-metrics:v1.8.0&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;livenessProbe:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;httpGet:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;path: /healthz&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;port: 8080&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;initialDelaySeconds: 5&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;timeoutSeconds: 5&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- containerPort: 8080&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: http-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- containerPort: 8081&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: telemetry&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;readinessProbe:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;httpGet:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;path: /&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;port: 8081&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;initialDelaySeconds: 5&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;timeoutSeconds: 5&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nodeSelector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetes.io/os: linux&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;serviceAccountName: kube-state-metrics&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막으로 kube-state-metrics의 서비스를 생성해주고 :&lt;/p&gt;
&lt;p&gt;# kube-state-svc.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: v1&lt;/p&gt;
&lt;p&gt;kind: Service&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kube-state-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: kube-system&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;clusterIP: None&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- name: http-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;port: 8080&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;targetPort: http-metrics&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- name: telemetry&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;port: 8081&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;targetPort: telemetry&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: kube-state-metrics&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포해주면 끝입니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; kube-state-cluster-role.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; kube-state-deployment.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; kube-state-svcaccount.yaml&lt;br /&gt;&lt;/span&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; kube-state-svc.yaml&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl get pod &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; kube-system&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;NAME&lt;span&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;READY&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;STATUS&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RESTARTS&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AGE&lt;br /&gt;...&lt;br /&gt;kube-state-metrics-59bd4d9d-nbfrq&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;50s&lt;/p&gt;
&lt;p&gt;&lt;span&gt;다시 프로메테우스의 웹으로 돌아가서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Target&lt;/span&gt;&lt;span&gt;을 확인해보면&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;kube-state-metrics&lt;/span&gt;&lt;span&gt;가 정상적으로 실행되고 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;259&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFyOeG/btqGTR3qstO/KvGhsTOiHKQOGtb7CqjH9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFyOeG/btqGTR3qstO/KvGhsTOiHKQOGtb7CqjH9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFyOeG/btqGTR3qstO/KvGhsTOiHKQOGtb7CqjH9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFyOeG%2FbtqGTR3qstO%2FKvGhsTOiHKQOGtb7CqjH9K%2Fimg.png&quot; width=&quot;600&quot; height=&quot;259&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. Grafana 연동&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그라파나는 수집 지표 정보를 분석 및 시각화 시키는 오픈소스 툴입니다.&lt;/p&gt;
&lt;p&gt;주로 데이터를 시각화 하기 위한 대시보드로 주로 사용됩니다.&lt;/p&gt;
&lt;p&gt;위에서 모니터링툴인 프로메테우스를 사용해 쿠버네티스의 metric들을 수집하는 것까지 했는데 이번엔 그라파나를 붙여서 프로메테우스의 데이터들을 시각화시켜보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;먼저 그라파나 pod과 svc를 생성해줍니다.&lt;/p&gt;
&lt;p&gt;# grafana.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: apps/v1&lt;/p&gt;
&lt;p&gt;kind: Deployment&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;replicas: 1&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;matchLabels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;template:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;labels:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;containers:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;image: grafana/grafana:latest&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;containerPort: 3000&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;env:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: GF_SERVER_HTTP_PORT&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value: &quot;3000&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: GF_AUTH_BASIC_ENABLED&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value: &quot;false&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: GF_AUTH_ANONYMOUS_ENABLED&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value: &quot;true&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: GF_AUTH_ANONYMOUS_ORG_ROLE&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value: Admin&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- name: GF_SERVER_ROOT_URL&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;value: /&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;apiVersion: v1&lt;/p&gt;
&lt;p&gt;kind: Service&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;namespace: monitoring&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;annotations:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prometheus.io/scrape: 'true'&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prometheus.io/port:&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;'3000'&lt;/p&gt;
&lt;p&gt;spec:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;selector:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;app: grafana&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;type: NodePort&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;ports:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;- port: 3000&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;targetPort: 3000&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nodePort: 30004&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl apply &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; grafana.yaml&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl get pod &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; monitoring&lt;br /&gt;NAME&lt;span&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;READY&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;STATUS&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RESTARTS&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AGE&lt;br /&gt;grafana-799c99855d-kxhkm&lt;span&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;16s&lt;br /&gt;node-exporter-99w2v&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;66m&lt;br /&gt;node-exporter-f9q7f&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;66m&lt;br /&gt;prometheus-deployment-7bcb5ff899-h4rb7&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;1/1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Running&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;67m&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;datasource 추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ip:30004&lt;/span&gt;&lt;span&gt;로 접속해보면 다음 화면을 보실 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이제 그라파나와 프로메테우스를 연동시켜줄겁니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Add data source&lt;/span&gt;&lt;span&gt;로 이동 :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;252&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9FLpK/btqGRRWvfan/IJshzCTpfgwgxovetkJ6QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9FLpK/btqGRRWvfan/IJshzCTpfgwgxovetkJ6QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9FLpK/btqGRRWvfan/IJshzCTpfgwgxovetkJ6QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9FLpK%2FbtqGRRWvfan%2FIJshzCTpfgwgxovetkJ6QK%2Fimg.png&quot; width=&quot;600&quot; height=&quot;252&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;시계열 데이터모델을 지원하는 여러 db를 확인할 수 있고, 우리는 프로메테우스를 사용할 것이니 프로메테우스를 선택 :&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;254&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhz25r/btqGX6dOmQ7/sP2KB3Y46CB29zKYGnM1rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhz25r/btqGX6dOmQ7/sP2KB3Y46CB29zKYGnM1rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhz25r/btqGX6dOmQ7/sP2KB3Y46CB29zKYGnM1rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbhz25r%2FbtqGX6dOmQ7%2FsP2KB3Y46CB29zKYGnM1rk%2Fimg.png&quot; width=&quot;600&quot; height=&quot;254&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;연동할 프로메테우스의 정보를 기입해주어야 합니다.&lt;/p&gt;
&lt;p&gt;url은 서비스의 internal ip를 참고해서 적어주도록 합니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;kubectl get svc &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; monitoring&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;NAME&lt;span&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TYPE&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CLUSTER-IP&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EXTERNAL-IP&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;PORT&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;S&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AGE&lt;br /&gt;grafana&lt;span&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; &lt;/span&gt;NodePort&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;10.101.152.163&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;none&amp;gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;3000:30004/TCP&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;6m43s&lt;br /&gt;prometheus-service&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;NodePort&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;10.101.196.111&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;none&amp;gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;8080:30003/TCP&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;73m&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;500&quot; height=&quot;273&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s5v9k/btqGWTMBFXL/oCcfbVWkI7yBJ5WFqxVAi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s5v9k/btqGWTMBFXL/oCcfbVWkI7yBJ5WFqxVAi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s5v9k/btqGWTMBFXL/oCcfbVWkI7yBJ5WFqxVAi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs5v9k%2FbtqGWTMBFXL%2FoCcfbVWkI7yBJ5WFqxVAi0%2Fimg.png&quot; width=&quot;500&quot; height=&quot;273&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Save &amp;amp; Test 버튼을 눌렀을 때 &amp;ldquo;Data source is working&amp;rdquo;메세지가 떠야합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;399&quot; height=&quot;138&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XFqmu/btqGNDLkgq4/ta4VKcfPxMxM2YwSAHG9iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XFqmu/btqGNDLkgq4/ta4VKcfPxMxM2YwSAHG9iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XFqmu/btqGNDLkgq4/ta4VKcfPxMxM2YwSAHG9iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXFqmu%2FbtqGNDLkgq4%2Fta4VKcfPxMxM2YwSAHG9iK%2Fimg.png&quot; width=&quot;399&quot; height=&quot;138&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;해당 메세지가 뜨면 연동은 성공!&lt;/p&gt;
&lt;p&gt;연동을 했으니 프로메테우스의 데이터들을 시각화 해줄 dashboard를 만들어야합니다.&lt;/p&gt;
&lt;p&gt;PromQL을 통해 사용자가 직접 원하는 대시보드를 만들수도있지만,&lt;/p&gt;
&lt;p&gt;남이 만든것을 쉽게 가져다가 사용할수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;dashboard 추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이번 실습에서는 PromQL을 작성하는게 아니라 다른사람이 만든 대시보드를 import해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://grafana.com/&quot;&gt;&lt;span&gt;Grafana&lt;/span&gt;&lt;/a&gt;&lt;span&gt;페이지로 이동 -&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Grafana &amp;gt; Dashboard로 이동해서 kubernetes를 검색합니다.&lt;/p&gt;
&lt;p&gt;아무거나 마음에 드는것을 고르고 copy id를 눌러 대시보드의 id를 복사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;289&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TfAyh/btqGX5TvplB/5Z5toWLBF4xEdpOgX2gcXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TfAyh/btqGX5TvplB/5Z5toWLBF4xEdpOgX2gcXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TfAyh/btqGX5TvplB/5Z5toWLBF4xEdpOgX2gcXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTfAyh%2FbtqGX5TvplB%2F5Z5toWLBF4xEdpOgX2gcXk%2Fimg.png&quot; width=&quot;600&quot; height=&quot;289&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그라파나 UI로 돌아와서 Import Dashboard로 이동해 복사한 번호를 붙여넣기 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;334&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oqDuL/btqGNCS4osC/Wr3uky5GBcFdNdqPkW8TmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oqDuL/btqGNCS4osC/Wr3uky5GBcFdNdqPkW8TmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oqDuL/btqGNCS4osC/Wr3uky5GBcFdNdqPkW8TmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoqDuL%2FbtqGNCS4osC%2FWr3uky5GBcFdNdqPkW8TmK%2Fimg.png&quot; width=&quot;600&quot; height=&quot;334&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;296&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbmJ1U/btqGSrX9kWa/ursL7M3I9gT0j6P3SNZ7IK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbmJ1U/btqGSrX9kWa/ursL7M3I9gT0j6P3SNZ7IK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbmJ1U/btqGSrX9kWa/ursL7M3I9gT0j6P3SNZ7IK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbmJ1U%2FbtqGSrX9kWa%2FursL7M3I9gT0j6P3SNZ7IK%2Fimg.png&quot; width=&quot;600&quot; height=&quot;296&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;항목입력해주고 Import해주면 예쁜 dashboard를 확인할 수 있습니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;413&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl7aBj/btqGRnV2xGn/cKY0gRwjwnkYCauI4ObYIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl7aBj/btqGRnV2xGn/cKY0gRwjwnkYCauI4ObYIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl7aBj/btqGRnV2xGn/cKY0gRwjwnkYCauI4ObYIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl7aBj%2FbtqGRnV2xGn%2FcKY0gRwjwnkYCauI4ObYIk%2Fimg.png&quot; width=&quot;600&quot; height=&quot;413&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Deployment memory usage가 N/A로 뜨는 이유는 해당 dashboard의 PromQL이 저희의 prometheus와 맞지 않아서인데요&amp;hellip; PromQL을 수정해주면 잘 뜬다고 하는데 한번 도전해보시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;마치며&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이렇게 쿠버네티스-프로메테우스-그라파나 가 완성되었습니다.&lt;/p&gt;
&lt;p&gt;모니터링 구조의 기초 뼈대는 갖춰진 셈이니 이제 상황과 요구에 맞게 추가하시고 수정하시면 될 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;출처&lt;/span&gt;&lt;span&gt;: &amp;lt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://gruuuuu.github.io/cloud/monitoring-02/#&quot;&gt;https://gruuuuu.github.io/cloud/monitoring-02/#&lt;/a&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Monitoring Logging/Prometheus</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/16</guid>
      <comments>https://paas.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:47:28 +0900</pubDate>
    </item>
    <item>
      <title>Install Jira On Centos7</title>
      <link>https://paas.tistory.com/15</link>
      <description>&lt;p&gt;&lt;span&gt;Install Jira On Centos7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JIRA&amp;nbsp;&lt;/span&gt;&lt;span&gt;is a issue tracking product, It is used for bug tracking, issue tracking, and project management system. In this blog, I will explain that how to install and configure latest version of JIRA on a Centos.This blog will help you to configure a JIRA with MySQL.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Requirement&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JIRA require at least 1GB of RAM. If you not use a swap file, I recommend over 2GB of RAM.root privileges&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JAVA software package is require for JIRA establishment. First. You need to install the java software package &amp;ldquo;java-1.8.0-openjdk-devel &amp;ldquo;on your centos server.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;yum list java*jdk-devel&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;yum install -y java-1.8.0-openjdk-devel.x86_64&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ls -l /usr/bin/javac&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;/usr/bin/javac -&amp;gt; /etc/alternatives/javac&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ls -l /etc/alternatives/javac&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;/etc/alternatives/javac -&amp;gt; /usr/lib/jvm/java-1.8.0/bin/javac&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;alternatives --config java&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;alternatives --config javac&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;java -version&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Set&amp;nbsp;JAVA_HOME&amp;nbsp;environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;echo &quot;export JAVA_HOME=/usr/lib/jvm/java-1.8.0&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;echo &quot;PATH=$PATH:$JAVA_HOME/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;source ~/.bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;env | grep JAVA&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JAVA_HOME=/usr/lib/jvm/java-1.8.0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;To install Jira on CentOS, please refer the following steps:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You need to download the latest JIRA Installer (.bin) file from the JIRA official page or given link to directory /opt&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.atlassian.com/ko/software/jira/update&quot;&gt;https://www.atlassian.com/ko/software/jira/update&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;cd /opt&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;wget &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-7.3.0-x64.bin&quot;&gt;https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-7.3.0-x64.bin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;wget &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-8.5.6-x64.bin&quot;&gt;https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-8.5.6-x64.bin&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;After that, give the execute permission to .bin file and install JIRA.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;#chmod +x atlassian-jira-software-7.3.0-x64.bin&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#./atlassian-jira-software-7.3.0-x64.bin&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;Installation Directory: /opt/atlassian/jira&lt;/p&gt;
&lt;p&gt;Home Directory: /var/atlassian/application-data/jira&lt;/p&gt;
&lt;p&gt;HTTP Port: 8080&lt;/p&gt;
&lt;p&gt;RMI Port: 8005&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;## Add the firewall rules&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;firewall-cmd --permanent --add-service=http&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --add-port={8080,8005}/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;After you successful installation Jira, login URL is displayed and use it to login&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://server-ip:8080/&quot;&gt;&lt;span&gt;http://server-ip:8080&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;or &lt;/span&gt;&lt;a href=&quot;http://server-hostname:8080/&quot;&gt;&lt;span&gt;http://server-hostname:8080&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To connect JIRA with MySQL, you need to copy the MySQL JDBC driver to your Jira server. Also, Copy the MySQL JDBC driver jar file to the JIRA installation directory /opt/atlassian/jira/lib/ . Also create a database and new user for JIRA.Also, you give the full permission for JIRA mysql user.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To configure the MySQL database&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To create a database user for JIRA using following command:&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;#mysql -u root -p&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;grant all privileges on jiradb.* to 'jira'@'%' identified by 'syslint123!@#';&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;flush privileges;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;exit&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;Copy the MySQL JDBC driver to your Jira server&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;After you installing the JIRA, you require MySQL Connector driver. You can download either the .tar.gz or the .zip file from official site. Otherwise, you can use the following command:&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;cd /opt&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;wget &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.35.tar.gz&quot;&gt;http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.35.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Extract the archive file&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;tar -zxvf mysql-connector-java-5.1.35.tar.gz&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Copy the MySQL JDBC driver jar file to the JIRA installation directory /opt/atlassian/jira/lib/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;cd /opt/mysql-connector-java-5.1.35&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;cp mysql-connector-java-5.1.35-bin.jar /opt/atlassian/jira/lib/&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;To restart Jira Service&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cd /opt/atlassian/jira/bin/&lt;/p&gt;
&lt;p&gt;./shutdown.sh&lt;/p&gt;
&lt;p&gt;./startup.sh&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;852&quot; height=&quot;425&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rijxS/btqGNCFybbv/YHg8pk7sEGSl2RDlofkZFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rijxS/btqGNCFybbv/YHg8pk7sEGSl2RDlofkZFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rijxS/btqGNCFybbv/YHg8pk7sEGSl2RDlofkZFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrijxS%2FbtqGNCFybbv%2FYHg8pk7sEGSl2RDlofkZFk%2Fimg.png&quot; width=&quot;852&quot; height=&quot;425&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://syslint.com/blog/tutorial/how-to-install-jira-on-centos/&quot;&gt;https://syslint.com/blog/tutorial/how-to-install-jira-on-centos/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://confluence.atlassian.com/adminjiraserver071/installing-jira-applications-on-linux-802592173.html&quot;&gt;https://confluence.atlassian.com/adminjiraserver071/installing-jira-applications-on-linux-802592173.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://confluence.atlassian.com/jirasoftware/jira-software-8-5-x-release-notes-975014654.html#JiraSoftware8.5.xreleasenotes-check&quot;&gt;https://confluence.atlassian.com/jirasoftware/jira-software-8-5-x-release-notes-975014654.html#JiraSoftware8.5.xreleasenotes-check&lt;/a&gt;&lt;/p&gt;</description>
      <category>DevOps CICD/Jira</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/15</guid>
      <comments>https://paas.tistory.com/15#entry15comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:45:44 +0900</pubDate>
    </item>
    <item>
      <title>Install Artifactory on CentOS 7</title>
      <link>https://paas.tistory.com/14</link>
      <description>&lt;p&gt;&lt;span&gt;Installing JFrog Artifactory on CentOS / RHEL 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Artifactory&lt;/span&gt;&lt;span&gt;&amp;nbsp;is a universal repository manager created by&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://jfrog.com/&quot;&gt;&lt;span&gt;JFrog&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. A repository manager is software application designed to manage binary components related to an application. Being a universal repository manager, Artifactory supports all major packaging formats like Apache Maven, Gradle, Docker and many more.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In DevOps environments, Artifactory is used by build tools such as Apache Ant, Maven and Gradle to serve as the local repository for their respective artifacts. Although using Artifactory is not mandatory in DevOps environment, but it can be used to accelerate the CI/CD process.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JFrog Artifactory is a commercial product. However, there is an&amp;nbsp;&lt;/span&gt;&lt;span&gt;OSS&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Open Source Software) version is available with limited features. We will use this OSS version in our article. We will install JFrog Artifactory OSS on CentOS / RHEL 7 server and deploy and use MariaDB database as the backend database for Artifactory.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For more information on DevOps best practices and CI/CD implementation, please read&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://amzn.to/2XDsAum&quot;&gt;&lt;span&gt;Continuous Delivery for Java Apps&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;by&amp;nbsp;&lt;/span&gt;&lt;span&gt;Leanpub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This Article Provides:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.centlinux.com/2019/01/install-jfrog-artifactory-on-centos-rhel-7.html#point1&quot;&gt;&lt;span&gt;System Specification&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.centlinux.com/2019/01/install-jfrog-artifactory-on-centos-rhel-7.html#point2&quot;&gt;&lt;span&gt;Installing Java Development Kit on CentOS 7&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.centlinux.com/2019/01/install-jfrog-artifactory-on-centos-rhel-7.html#point3&quot;&gt;&lt;span&gt;Installing JFrog Artifactory OSS on CentOS 7&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.centlinux.com/2019/01/install-jfrog-artifactory-on-centos-rhel-7.html#point4&quot;&gt;&lt;span&gt;Installing MariaDB Database on CentOS 7&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. System Specification&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We have used a CentOS 7 virtual machine with following specification for this article.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Hostname&lt;/span&gt;&lt;span&gt;&amp;nbsp;- artifactory-01.example.com&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;IP Address&lt;/span&gt;&lt;span&gt;&amp;nbsp;- 192.168.116.130/24&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Operating System&lt;/span&gt;&lt;span&gt;&amp;nbsp;- CentOS 7.6&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. Installing Java Development Kit on CentOS 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JFrog Artifactory requires Java Development Kit (JDK) 8 update 45 or above.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In CentOS 7, the&amp;nbsp;&lt;/span&gt;&lt;span&gt;OpenJDK&lt;/span&gt;&lt;span&gt;&amp;nbsp;(an open-source Java Development Kit) can be installed using&amp;nbsp;&lt;/span&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt;&amp;nbsp;command. However, if you are using a Red Hat Enterprise Linux (RHEL) 7 then you have to configure a&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.centlinux.com/2018/07/configure-local-yum-repository-iso-rhel7.html&quot;&gt;&lt;span&gt;Local yum Repository&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;and then you will be able to install OpenJDK using&amp;nbsp;&lt;/span&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt;&amp;nbsp;command.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;yum list java*jdk-devel&lt;/p&gt;
&lt;p&gt;yum install java-1.8.0-openjdk-devel.x86_64&lt;/p&gt;
&lt;p&gt;# ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64 /usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -l /usr/bin/javac&lt;/p&gt;
&lt;p&gt;/usr/bin/javac -&amp;gt; /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;ls -l /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;/etc/alternatives/javac -&amp;gt; /usr/lib/jvm/java-1.8.0/bin/javac&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;alternatives --config java&lt;/p&gt;
&lt;p&gt;alternatives --config javac&lt;/p&gt;
&lt;p&gt;java -version&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;Set&amp;nbsp;&lt;/span&gt;&lt;span&gt;JAVA_HOME&lt;/span&gt;&lt;span&gt;&amp;nbsp;environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;echo &quot;export JAVA_HOME=/usr/lib/jvm/java-1.8.0&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;PATH=$PATH:$JAVA_HOME/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;p&gt;env | grep JAVA&lt;/p&gt;
&lt;p&gt;JAVA_HOME=/usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3. Installing JFrog Artifactory OSS on CentOS 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Install preqrequisite packages using&amp;nbsp;&lt;/span&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt;&amp;nbsp;command.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;yum install -y net-tools rsync&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;Download latest&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://jfrog.com/open-source/&quot;&gt;&lt;span&gt;JFrog Artifactory OSS&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;RPM and copy it to the home directory of&amp;nbsp;&lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt;&amp;nbsp;user.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://jfrog.com/open-source/#artifactory&quot;&gt;https://jfrog.com/open-source/#artifactory&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;wget &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://bintray.com/jfrog/artifactory-rpms/rpm&quot;&gt;https://bintray.com/jfrog/artifactory-rpms/rpm&lt;/a&gt; -O /etc/yum.repos.d/bintray-jfrog-artifactory-oss-rpms.repo&lt;span&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;yum install jfrog-artifactory-oss&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# vi /etc/yum.repos.d/bintray-jfrog-artifactory-oss-rpms.repo&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;[bintray--jfrog-artifactory-rpms]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;name=bintray--jfrog-artifactory-rpms&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;baseurl=&lt;a href=&quot;https://jfrog.bintray.com/artifactory-rpms&quot;&gt;https://jfrog.bintray.com/artifactory-rpms&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;gpgcheck=0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;repo_gpgcheck=0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;enabled=1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Install Jfrog Artifactory RPM&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;yum localinstall -y jfrog-artifactory-oss-7.4.3.rpm&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# download tar.gz&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://api.bintray.com/content/jfrog/artifactory/org/artifactory/oss/jfrog-artifactory-oss/$latest/jfrog-artifactory-oss-$latest-linux.tar.gz?bt_package=jfrog-artifactory-oss&quot;&gt;https://api.bintray.com/content/jfrog/artifactory/org/artifactory/oss/jfrog-artifactory-oss/$latest/jfrog-artifactory-oss-$latest-linux.tar.gz?bt_package=jfrog-artifactory-oss&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;mkdir -p /opt/jfrog&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;tar -xvf jfrog-artifactory-oss-7.4.3-linux.tar.gz -O /opt/jfrog/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ln -s /opt/jfrog/artifactory-oss-7.4.3 /opt/jfrog/artifactory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;chown -R artifactory:artifactory /opt/jfrog/artifactory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Set&amp;nbsp;&lt;/span&gt;&lt;span&gt;ARTIFACTORY_HOME&lt;/span&gt;&lt;span&gt;&amp;nbsp;environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;echo &quot;export ARTIFACTORY_HOME=/opt/jfrog/artifactory&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;source ~/.bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;env | grep ARTIFACTORY_HOME&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;JFrog Artifactory has been installed on CentOS 7.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4. Installing MariaDB Database on CentOS 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;It is recommended to use JFrog Artifactory with an external database. Being a hardcore&amp;nbsp;&lt;/span&gt;&lt;span&gt;FOSS&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Fan of Open Source Software), we selected MariaDB Database for this purpose.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Install MariaDB Server from CentOS yum repository.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;yum install -y mariadb-server&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Start and Enable MariaDB Service.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;systemctl start mariadb&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl enable mariadb&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl status mariadb&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;cat /usr/lib/systemd/system/mariadb.service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;mysql_secure_installation&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SERVERS IN PRODUCTION USE!&lt;span&gt;&amp;nbsp; &lt;/span&gt;PLEASE READ EACH STEP CAREFULLY!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In order to log into MariaDB to secure it, we'll need the current&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;password for the root user.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you've just installed MariaDB, and&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;you haven't set the root password yet, the password will be blank,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;so you should just press enter here.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Enter current password for root (enter for none):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;OK, successfully used password, moving on...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Setting the root password ensures that nobody can log into the MariaDB&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root user without the proper authorisation.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Set root password? [Y/n] Y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;New password:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Re-enter new password:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Password updated successfully!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Reloading privilege tables..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;... Success!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;By default, a MariaDB installation has an anonymous user, allowing anyone&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;to log into MariaDB without having to have a user account created for&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;them.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is intended only for testing, and to make the installation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;go a bit smoother.&lt;span&gt;&amp;nbsp; &lt;/span&gt;You should remove them before moving into a&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;production environment.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Remove anonymous users? [Y/n] Y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;... Success!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Normally, root should only be allowed to connect from 'localhost'.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ensures that someone cannot guess at the root password from the network.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Disallow root login remotely? [Y/n] Y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;... Success!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;By default, MariaDB comes with a database named 'test' that anyone can&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;access.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is also intended only for testing, and should be removed&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;before moving into a production environment.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Remove test database and access to it? [Y/n] Y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- Dropping test database...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;... Success!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- Removing privileges on test database...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;... Success!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Reloading the privilege tables will ensure that all changes made so far&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;will take effect immediately.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Reload privilege tables now? [Y/n] Y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;... Success!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Cleaning up...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;All done!&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you've completed all of the above steps, your MariaDB&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;installation should now be secure.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks for using MariaDB!&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;cat /opt/jfrog/artifactory/var/etc/system.yaml&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;cat /opt/jfrog/artifactory/var/etc/security/master.key&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;cat /opt/jfrog/artifactory/var/etc/security/join.key&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl restart mariadb&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl status mariadb&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● Create and configure Artifactory database&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Edit&amp;nbsp;&lt;/span&gt;&lt;span&gt;artifactory.service&lt;/span&gt;&lt;span&gt;&amp;nbsp;and add the user and group who own the service.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;/opt/jfrog/artifactory/app/bin/installService.sh&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;vi&lt;span&gt;&amp;nbsp; &lt;/span&gt;/usr/lib/systemd/system/artifactory.service&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;[Unit]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Description=Artifactory service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;After=network.target&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;[Service]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Type=forking&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;User=artifactory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Group=artifactory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;GuessMainPID=yes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;PIDFile=/var/run/artifactory.pid&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ExecStart=/opt/jfrog/artifactory/app/bin/artifactoryManage.sh start&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ExecStop=/opt/jfrog/artifactory/app/bin/artifactoryManage.sh stop&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;LimitNOFILE=65536&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;LimitNPROC=8192&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Restart=always&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;RestartSec=60&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;[Install]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;WantedBy=multi-user.target&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Alias=artifactory.service&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Set open file limits for the artifactory user.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;echo &quot;artifactory soft nofile 32000&quot; &amp;gt;&amp;gt; /etc/security/limits.conf&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;echo &quot;artifactory hard nofile 32000&quot; &amp;gt;&amp;gt; /etc/security/limits.conf&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# start artifactory service&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;systemctl daemon-reload&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl restart artifactory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl enable artifactory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl status artifactory&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;tail -f /opt/jfrog/artifactory/var/log/console.log&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# SELinux &lt;/span&gt;&lt;span&gt;활성화 시&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;chmod -R +r /opt/jfrog/artifactory/app/artifactory/tomcat/webapps&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;restorecon -vR /opt/jfrog/artifactory/app/artifactory/tomcat/webapps&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#&lt;span&gt;&amp;nbsp; &lt;/span&gt;SELinux &lt;/span&gt;&lt;span&gt;비활성화(disabled or &lt;/span&gt;&lt;span&gt;permissive)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;setenforce 0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# firewall setting&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;firewall-cmd --permanent --add-port=8081/tcp&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;firewall-cmd --reload&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Browse URL&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://artifactory-01.example.com:8081&quot;&gt;http://artifactory-01.example.com:8081&lt;/a&gt;&lt;span&gt;&amp;nbsp;from a client browser. ( default: admin / password )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;894&quot; height=&quot;412&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djCJIG/btqGQbHFOyw/F1QGTV4FqG4aKModyAivgK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djCJIG/btqGQbHFOyw/F1QGTV4FqG4aKModyAivgK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djCJIG/btqGQbHFOyw/F1QGTV4FqG4aKModyAivgK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjCJIG%2FbtqGQbHFOyw%2FF1QGTV4FqG4aKModyAivgK%2Fimg.jpg&quot; width=&quot;894&quot; height=&quot;412&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Click on&amp;nbsp;&lt;/span&gt;&lt;span&gt;Next&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;892&quot; height=&quot;412&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boJ04N/btqGSsJuKs2/ieczw7pGNg3g5xdANQfrT1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boJ04N/btqGSsJuKs2/ieczw7pGNg3g5xdANQfrT1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boJ04N/btqGSsJuKs2/ieczw7pGNg3g5xdANQfrT1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboJ04N%2FbtqGSsJuKs2%2Fieczw7pGNg3g5xdANQfrT1%2Fimg.jpg&quot; width=&quot;892&quot; height=&quot;412&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Set the password for default&amp;nbsp;&lt;/span&gt;&lt;span&gt;admin&lt;/span&gt;&lt;span&gt;&amp;nbsp;user of Artifactory and click on&amp;nbsp;&lt;/span&gt;&lt;span&gt;Next&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;891&quot; height=&quot;411&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q2cIR/btqGYoemqjX/bbnoYGbYhzmIdkDloVLwJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q2cIR/btqGYoemqjX/bbnoYGbYhzmIdkDloVLwJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q2cIR/btqGYoemqjX/bbnoYGbYhzmIdkDloVLwJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ2cIR%2FbtqGYoemqjX%2FbbnoYGbYhzmIdkDloVLwJK%2Fimg.jpg&quot; width=&quot;891&quot; height=&quot;411&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If this server access the Internet through a proxy, then configure it here or click on&amp;nbsp;&lt;/span&gt;&lt;span&gt;Skip&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;888&quot; height=&quot;410&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHHI5k/btqGYLmXqdF/VK23bAbxN90rinz4PsHhT0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHHI5k/btqGYLmXqdF/VK23bAbxN90rinz4PsHhT0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHHI5k/btqGYLmXqdF/VK23bAbxN90rinz4PsHhT0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHHI5k%2FbtqGYLmXqdF%2FVK23bAbxN90rinz4PsHhT0%2Fimg.jpg&quot; width=&quot;888&quot; height=&quot;410&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Select the package types for which you want to create repositories. The default repositories for the selected package types will be created by the Artifactory. Or click on&amp;nbsp;&lt;/span&gt;&lt;span&gt;Skip&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;888&quot; height=&quot;410&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyid7a/btqGUdxWOSz/yOSwh8wjU3r0wPaRcPxFa1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyid7a/btqGUdxWOSz/yOSwh8wjU3r0wPaRcPxFa1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyid7a/btqGUdxWOSz/yOSwh8wjU3r0wPaRcPxFa1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feyid7a%2FbtqGUdxWOSz%2FyOSwh8wjU3r0wPaRcPxFa1%2Fimg.jpg&quot; width=&quot;888&quot; height=&quot;410&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The initial configuration of Artifactory has been completed. Click on&amp;nbsp;&lt;/span&gt;&lt;span&gt;Finish&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;889&quot; height=&quot;410&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/umgLI/btqGUf3ZA4q/ObSlLcaKIUtEA6P91iOYe0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/umgLI/btqGUf3ZA4q/ObSlLcaKIUtEA6P91iOYe0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/umgLI/btqGUf3ZA4q/ObSlLcaKIUtEA6P91iOYe0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FumgLI%2FbtqGUf3ZA4q%2FObSlLcaKIUtEA6P91iOYe0%2Fimg.jpg&quot; width=&quot;889&quot; height=&quot;410&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You have reached at the Dashboard of&amp;nbsp;&lt;/span&gt;&lt;span&gt;Jfrog Artifactory Web UI&lt;/span&gt;&lt;span&gt;. This dashboard is enriched with links to guides and documentation related to JFrog Artifactory. You can browse these links and start using JFrog Artifactory accordingly.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;JFrog Artifactory has been successfully installed and configured on CentOS / RHEL 7 server.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.centlinux.com/2019/01/install-jfrog-artifactory-on-centos-rhel-7.html&quot;&gt;https://www.centlinux.com/2019/01/install-jfrog-artifactory-on-centos-rhel-7.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.jfrog.com/confluence/display/JFROG/Installing+Artifactory&quot;&gt;https://www.jfrog.com/confluence/display/JFROG/Installing+Artifactory&lt;/a&gt;&lt;/p&gt;</description>
      <category>DevOps CICD/Artifactory</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/14</guid>
      <comments>https://paas.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:43:43 +0900</pubDate>
    </item>
    <item>
      <title>Install SonarQube on CentOS 7</title>
      <link>https://paas.tistory.com/13</link>
      <description>&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- Install SonarQube on CentOS 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sonarQube is an open-source platform for continuous inspection of code quality. It is used to perform automatic reviews with static analysis of code to detect bugs, code smells, and security vulnerabilities on more than 20 programming languages.&lt;/p&gt;
&lt;p&gt;Here we are going to install and configure SonarQube 7.9.x LTS with Oracle JAVA 11, PostgreSQL 10.x, Nginx, and Let&amp;rsquo;s Encrypt certificates.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Execute the following commands using the root user.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. Update System&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum update&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. Disable SELinux&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;vim /etc/sysconfig/selinux&lt;/p&gt;
&lt;p&gt;Change &quot;SELINUX=enforcing&quot; to &quot;SELINUX=disabled&quot;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;setenforce 0&lt;/p&gt;
&lt;p&gt;sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3. Install Base Packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum install wget vim zip unzip -y&lt;/p&gt;
&lt;p&gt;hostnamectl set-hostname $DOMAIN_NAME&lt;/p&gt;
&lt;p&gt;reboot&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4. Prerequisite&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;You can check the official document for complete information.&lt;/p&gt;
&lt;p&gt;&amp;bull; Java (Oracle JRE 11 or OpenJDK 11)&lt;/p&gt;
&lt;p&gt;&amp;bull; PostgreSQL 10 or 9.3&amp;ndash;9.6&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hardware Requirements&lt;/p&gt;
&lt;p&gt;&amp;bull; Server with 2GB or plus RAM&lt;/p&gt;
&lt;p&gt;&amp;bull; Systems setting for Linux&lt;/p&gt;
&lt;p&gt;vm.max_map_count is greater or equals to 262144&lt;/p&gt;
&lt;p&gt;fs.file-max is greater or equals to 65536&lt;/p&gt;
&lt;p&gt;the user running SonarQube can open at least 65536 file descriptors&lt;/p&gt;
&lt;p&gt;the user running SonarQube can open at least 4096 threads&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5. Add System settings&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;vim /etc/sysctl.conf&lt;/p&gt;
&lt;p&gt;vm.max_map_count=262144&lt;/p&gt;
&lt;p&gt;fs.file-max=65536&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sysctl -w vm.max_map_count=262144&lt;/p&gt;
&lt;p&gt;sysctl -w fs.file-max=65536&lt;/p&gt;
&lt;p&gt;sysctl -p&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vim /etc/security/limits.conf&lt;/p&gt;
&lt;p&gt;session&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;required&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pam_limits.so&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;root hard nofile 65535&lt;/p&gt;
&lt;p&gt;root soft nofile 65535&lt;/p&gt;
&lt;p&gt;root hard nproc 65535&lt;/p&gt;
&lt;p&gt;root soft nproc 65535&lt;/p&gt;
&lt;p&gt;# elasticsearch&lt;/p&gt;
&lt;p&gt;sonar hard nofile 65535&lt;/p&gt;
&lt;p&gt;sonar soft nofile 65535&lt;/p&gt;
&lt;p&gt;sonar hard nproc 65535&lt;/p&gt;
&lt;p&gt;sonar soft nproc 65535&lt;/p&gt;
&lt;p&gt;sonar hard memlock unlimited&lt;/p&gt;
&lt;p&gt;sonar soft memlock unlimited&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /etc/security/limits.d/20-nproc.conf&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reboot&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ulimit -Sa&lt;/p&gt;
&lt;p&gt;ulimit -Ha&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;6. Install OpenJDK 11&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum list java*jdk-devel&lt;/p&gt;
&lt;p&gt;yum install java-11-openjdk-devel.x86_64&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -l /usr/bin/javac&lt;/p&gt;
&lt;p&gt;/usr/bin/javac -&amp;gt; /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;ls -l /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;/etc/alternatives/javac -&amp;gt; /usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/bin/javac&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;alternatives --config java&lt;/p&gt;
&lt;p&gt;alternatives --config javac&lt;/p&gt;
&lt;p&gt;java -version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Set&amp;nbsp;JAVA_HOME&amp;nbsp;environment variable.&lt;/p&gt;
&lt;p&gt;echo &quot;export JAVA_HOME=/usr/lib/jvm/java-11&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;PATH=$PATH:$JAVA_HOME/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;p&gt;env | grep JAVA&lt;/p&gt;
&lt;p&gt;JAVA_HOME=/usr/lib/jvm/java-11&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;7. Install PostgreSQL 10&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;1) PostgreSQL Yum Repository download / Install&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.postgresql.org/download/linux/redhat/&quot;&gt;https://www.postgresql.org/download/linux/redhat/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm&quot;&gt;https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;yum localinstall pgdg-redhat-repo-latest.noarch.rpm&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) Install server&lt;/p&gt;
&lt;p&gt;yum install postgresql10-server postgresql10-contrib&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3)Initialize the database&lt;/p&gt;
&lt;p&gt;/usr/pgsql-10/bin/postgresql-10-setup initdb&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) Modify pg_hba.conf file&lt;/p&gt;
&lt;p&gt;change &quot;peer&quot; to &quot;trust&quot; and &quot;idnet&quot; to &quot;md5&quot;.&lt;/p&gt;
&lt;p&gt;vim /var/lib/pgsql/10/data/pg_hba.conf&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;# TYPE&lt;span&gt;&amp;nbsp; &lt;/span&gt;DATABASE&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;USER&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ADDRESS&lt;span&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;METHOD&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# &quot;local&quot; is for Unix domain socket connections only&lt;/p&gt;
&lt;p&gt;local&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;all&lt;span&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;peer&lt;span&gt;&amp;nbsp; &lt;/span&gt;=&amp;gt; trust&lt;/p&gt;
&lt;p&gt;# IPv4 local connections:&lt;/p&gt;
&lt;p&gt;host&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;127.0.0.1/32&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ident =&amp;gt; md5&lt;/p&gt;
&lt;p&gt;# IPv6 local connections:&lt;/p&gt;
&lt;p&gt;host&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;::1/128&lt;span&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ident =&amp;gt; md5&lt;/p&gt;
&lt;p&gt;# Allow replication connections from localhost, by a user with the&lt;/p&gt;
&lt;p&gt;# replication privilege.&lt;/p&gt;
&lt;p&gt;local&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replication&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;all&lt;span&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;peer&lt;/p&gt;
&lt;p&gt;host&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replication&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;127.0.0.1/32&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ident&lt;/p&gt;
&lt;p&gt;host&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replication&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;all&lt;span&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; &lt;/span&gt;::1/128&lt;span&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ident&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5) To start service and set on boot, enable PostgreSQL on system boot&lt;/p&gt;
&lt;p&gt;systemctl start postgresql-10&lt;/p&gt;
&lt;p&gt;systemctl enable postgresql-10&lt;/p&gt;
&lt;p&gt;systemctl status postgresql-10&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6) create Postgres user &amp;amp; database&lt;/p&gt;
&lt;p&gt;# Change the default password&lt;/p&gt;
&lt;p&gt;passwd postgres&lt;/p&gt;
&lt;p&gt;su - postgres&lt;/p&gt;
&lt;p&gt;# Create a new user&lt;/p&gt;
&lt;p&gt;createuser sonar&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Switch to PostgreSQL shell&lt;/p&gt;
&lt;p&gt;psql&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Set a password for the newly created user for the SonarQube database&lt;/p&gt;
&lt;p&gt;ALTER USER sonar WITH ENCRYPTED password 'd98ffW@123?Q';&lt;/p&gt;
&lt;p&gt;# CREATE USER sonar WITH ENCRYPTED PASSWORD 'd98ffW@123?Q';&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Create a new database for the PostgreSQL database&lt;/p&gt;
&lt;p&gt;CREATE DATABASE sonar OWNER sonar;&lt;/p&gt;
&lt;p&gt;ALTER ROLE sonar WITH createdb;&lt;/p&gt;
&lt;p&gt;GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Exit from the psql shell.&lt;/p&gt;
&lt;p&gt;\q&lt;/p&gt;
&lt;p&gt;# Exit from the &quot;postgres&quot; user.&lt;/p&gt;
&lt;p&gt;exit&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl restart postgresql-10&lt;/p&gt;
&lt;p&gt;systemctl status postgresql-10&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;8. Download and configure SonarQube&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;1) Download Latest LTS version&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.sonarqube.org/downloads/&quot;&gt;https://www.sonarqube.org/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.3.1.34397.zip&quot;&gt;https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.3.1.34397.zip&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-check-certificate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;wget &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.3.zip&quot;&gt;https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.3.zip&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-check-certificate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;unzip sonarqube-7.9.3.zip -d /opt&lt;/p&gt;
&lt;p&gt;mv /opt/sonarqube-7.9.3 /opt/sonarqube&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) Modify sonar.properties&lt;/p&gt;
&lt;p&gt;vim /opt/sonarqube/conf/sonar.properties&lt;/p&gt;
&lt;p&gt;sonar.jdbc.username=sonar&lt;/p&gt;
&lt;p&gt;sonar.jdbc.password=d98ffW@123?Q&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sonar.jdbc.url=jdbc:postgresql://localhost/sonar&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sonar.web.javaAdditionalOpts=-server&lt;/p&gt;
&lt;p&gt;sonar.web.host=127.0.0.1&lt;/p&gt;
&lt;p&gt;sonar.web.port=9000&lt;/p&gt;
&lt;p&gt;sonar.web.http.maxThreads=50&lt;/p&gt;
&lt;p&gt;sonar.web.http.minThreads=5&lt;/p&gt;
&lt;p&gt;sonar.web.http.acceptCount=25&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sonar.web.javaOpts=-server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError&lt;/p&gt;
&lt;p&gt;sonar.search.javaOpts=-server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Configuring the Elasticsearch storage path&lt;/p&gt;
&lt;p&gt;sonar.path.data=/var/sonarqube/data&lt;/p&gt;
&lt;p&gt;sonar.path.temp=/var/sonarqube/temp&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# log setting&lt;/p&gt;
&lt;p&gt;sonar.log.level=INFO&lt;/p&gt;
&lt;p&gt;sonar.log.level.app=INFO&lt;/p&gt;
&lt;p&gt;sonar.log.level.web=INFO&lt;/p&gt;
&lt;p&gt;sonar.log.level.ce=INFO&lt;/p&gt;
&lt;p&gt;sonar.log.level.es=INFO&lt;/p&gt;
&lt;p&gt;sonar.path.logs=logs&lt;/p&gt;
&lt;p&gt;sonar.log.rollingPolicy=time:yyyy-MM-dd&lt;/p&gt;
&lt;p&gt;sonar.log.maxFiles=7&lt;/p&gt;
&lt;p&gt;sonar.web.accessLogs.enable=true&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) Create a user for sonar&lt;/p&gt;
&lt;p&gt;groupadd -g 1005 -r sonar&lt;/p&gt;
&lt;p&gt;useradd -c &quot;sonar&quot; -u 1005 -g sonar -s /bin/bash -r -p password sonar&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) Modify folder permissions&lt;/p&gt;
&lt;p&gt;chown -R sonar:sonar /opt/sonarqube&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Create folders and grant permission&lt;/p&gt;
&lt;p&gt;mkdir -p /var/sonarqube/data&lt;/p&gt;
&lt;p&gt;mkdir -p /var/sonarqube/temp&lt;/p&gt;
&lt;p&gt;chown -R sonar:sonar /var/sonarqube&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5) Setting up Sonarqube as a service&lt;/p&gt;
&lt;p&gt;vim /etc/systemd/system/sonarqube.service&lt;/p&gt;
&lt;p&gt;[Unit]&lt;/p&gt;
&lt;p&gt;Description=SonarQube service&lt;/p&gt;
&lt;p&gt;After=syslog.target network.target&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Service]&lt;/p&gt;
&lt;p&gt;Type=forking&lt;/p&gt;
&lt;p&gt;User=sonar&lt;/p&gt;
&lt;p&gt;Group=sonar&lt;/p&gt;
&lt;p&gt;ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start&lt;/p&gt;
&lt;p&gt;ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop&lt;/p&gt;
&lt;p&gt;ExecReload=/opt/sonarqube/bin/linux-x86-64/sonar.sh restart&lt;/p&gt;
&lt;p&gt;LimitNOFILE=65536&lt;/p&gt;
&lt;p&gt;LimitNPROC=8192&lt;/p&gt;
&lt;p&gt;Restart=on-failure&lt;/p&gt;
&lt;p&gt;TimeoutStartSec=60&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Install]&lt;/p&gt;
&lt;p&gt;WantedBy=multi-user.target&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Reload daemon and enable sonar on system boot&lt;/p&gt;
&lt;p&gt;systemctl daemon-reload&lt;/p&gt;
&lt;p&gt;systemctl restart sonarqube&lt;/p&gt;
&lt;p&gt;systemctl enable sonarqube&lt;/p&gt;
&lt;p&gt;systemctl status sonarqube&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6) logfile location&lt;/p&gt;
&lt;p&gt;cd /opt/sonarqube/logs/&lt;/p&gt;
&lt;p&gt;&amp;bull; SonarQube service log&lt;/p&gt;
&lt;p&gt;tail -f /opt/sonarqube/logs/sonar.log&lt;/p&gt;
&lt;p&gt;&amp;bull; Web Server Logs&lt;/p&gt;
&lt;p&gt;tail -f /opt/sonarqube/logs/web.log&lt;/p&gt;
&lt;p&gt;&amp;bull; ElasticSearch logs&lt;/p&gt;
&lt;p&gt;tail -f /opt/sonarqube/logs/es.log&lt;/p&gt;
&lt;p&gt;&amp;bull; Compute Engine logs&lt;/p&gt;
&lt;p&gt;tail -f /opt/sonarqube/logs/ce.log&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;9. elasticsearch setting&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/opt/sonarqube/elasticsearch&lt;/p&gt;
&lt;p&gt;vi /opt/sonarqube/elasticsearch/bin/elasticsearch-env&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# JDK 1.8 &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;JAVA_HOME=/usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;/opt/sonarqube/elasticsearch/config&lt;/p&gt;
&lt;p&gt;vi /opt/sonarqube/elasticsearch/config/jvm.options&lt;/p&gt;
&lt;p&gt;# JVM heap size setting&lt;/p&gt;
&lt;p&gt;-Xms1g -Xmx4g&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /opt/sonarqube/elasticsearch/config/elasticsearch.yml&lt;/p&gt;
&lt;p&gt;cluster.name: my-application&lt;/p&gt;
&lt;p&gt;node.name: node-1&lt;/p&gt;
&lt;p&gt;node.attr.rack: r1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;path.data: /var/sonarqube/data&lt;/p&gt;
&lt;p&gt;path.logs: /var/sonarqube/logs&lt;/p&gt;
&lt;p&gt;bootstrap.memory_lock: true&lt;/p&gt;
&lt;p&gt;network.host: ip&lt;/p&gt;
&lt;p&gt;http.port: 9200&lt;/p&gt;
&lt;p&gt;discovery.zen.ping.unicast.hosts: [&quot;127.0.0.1&quot;, &quot;ip&quot;]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /opt/sonarqube/elasticsearch/config/log4j2.properties&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;10. Configure reverse proxy&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;# Install Nginx, start service, and enable on system boot&lt;/p&gt;
&lt;p&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/yum.repos.d/nginx.repo&lt;/p&gt;
&lt;p&gt;[nginx]&lt;/p&gt;
&lt;p&gt;name=Nginx Repository \$basearch - Archive&lt;/p&gt;
&lt;p&gt;baseurl=&lt;a href=&quot;http://nginx.org/packages/centos/&quot;&gt;http://nginx.org/packages/centos/&lt;/a&gt;\$releasever/\$basearch/&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;gpgkey=&lt;a href=&quot;https://nginx.org/keys/nginx_signing.key&quot;&gt;https://nginx.org/keys/nginx_signing.key&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;yum install -y nginx&lt;/p&gt;
&lt;p&gt;systemctl start nginx&lt;/p&gt;
&lt;p&gt;systemctl enable nginx&lt;/p&gt;
&lt;p&gt;systemctl status nginx&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;11. Configure SSL&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;# Enable epel repo&lt;/p&gt;
&lt;p&gt;yum install &amp;ndash; y epel-release&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# create certificate&lt;/p&gt;
&lt;p&gt;&lt;span&gt;=&amp;gt; SSL &lt;/span&gt;&lt;span&gt;구성 &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;vim /etc/nginx/nginx.conf&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# add the following contents to a Location Blocks.&lt;/p&gt;
&lt;p&gt;location / {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;proxy_pass &quot;&lt;a href=&quot;http://127.0.0.1:9000&quot;&gt;http://127.0.0.1:9000&lt;/a&gt;&quot;;&lt;/p&gt;
&lt;p&gt;proxy_http_version 1.1;&lt;/p&gt;
&lt;p&gt;proxy_set_header Upgrade $http_upgrade;&lt;/p&gt;
&lt;p&gt;proxy_set_header Connection 'upgrade';&lt;/p&gt;
&lt;p&gt;proxy_set_header Host $host;&lt;/p&gt;
&lt;p&gt;proxy_cache_bypass $http_upgrade;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Check syntax &amp;amp; Restart Nginx&lt;/p&gt;
&lt;p&gt;nginx -t&lt;/p&gt;
&lt;p&gt;systemctl restart nginx&lt;/p&gt;
&lt;p&gt;systemctl status nginx&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;12. DNS&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Then go to your DNS manager and add A record for your sonar server.&lt;/p&gt;
&lt;p&gt;A&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Domain Name&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Server IP&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;13. Modify Firewall Rules&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;firewall-cmd --zone=public --permanent --add-service=https&lt;/p&gt;
&lt;p&gt;firewall-cmd --zone=public --add-port=9000/tcp --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --zone=public --add-port=443/tcp --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Firewall Rule HTTPS&lt;/p&gt;
&lt;p&gt;if you need to open sonar for specific IP, run the below command&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-rich-rule='&lt;/p&gt;
&lt;p&gt;rule family=&quot;ipv4&quot;&lt;/p&gt;
&lt;p&gt;source address=&quot;122.43.8.188/32&quot;&lt;/p&gt;
&lt;p&gt;port protocol=&quot;tcp&quot; port=&quot;443&quot; accept'&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;14. Browse Sonarqube&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Go to your browser and type your domain name.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sonar.example.com/&quot;&gt;https://sonar.example.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sonar.example.com:9000&quot;&gt;http://sonar.example.com:9000&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The default username and password is &quot;admin&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.fosslinux.com/24429/how-to-install-and-configure-sonarqube-on-centos-7.htm&quot;&gt;https://www.fosslinux.com/24429/how-to-install-and-configure-sonarqube-on-centos-7.htm&lt;/a&gt;&lt;/p&gt;</description>
      <category>DevOps CICD/SonarQube</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/13</guid>
      <comments>https://paas.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:39:21 +0900</pubDate>
    </item>
    <item>
      <title>Install Nexus OSS on Centos 7</title>
      <link>https://paas.tistory.com/12</link>
      <description>&lt;p&gt;&lt;span&gt;1. system Requirements&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;● cpu&lt;/p&gt;
&lt;p&gt;Minimum CPUs: 4, Recommended CPUs: 8+&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● memory&lt;/p&gt;
&lt;p&gt;&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JVM Heap&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JVM Direct&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Host Physical RAM&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Minimum ( default ) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2703MB&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2703MB&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;8GB&lt;/p&gt;
&lt;p&gt;Maximum&lt;span&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;&amp;nbsp;&amp;nbsp; &lt;/span&gt;4GB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(host physical RAM * 2/3) - JVM max heap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;no limit&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● disk space&lt;/p&gt;
&lt;p&gt;formats like Docker and Maven can use very large amounts of storage (500Gb easily).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. yum update &amp;amp; install OpenJDK&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum update -y&lt;/p&gt;
&lt;p&gt;yum -y install wget vim&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Install OpenJDK&lt;/p&gt;
&lt;p&gt;yum list java*jdk-devel&lt;/p&gt;
&lt;p&gt;yum install -y java-1.8.0-openjdk-devel.x86_64&lt;/p&gt;
&lt;p&gt;java-1.8.0-openjdk-devel-1.8.0.252.b09-2.el7_8.x86_64.rpm&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64 /usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -l /usr/bin/javac&lt;/p&gt;
&lt;p&gt;/usr/bin/javac -&amp;gt; /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;ls -l /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;/etc/alternatives/javac -&amp;gt; /usr/lib/jvm/java-1.8.0/bin/javac&lt;/p&gt;
&lt;p&gt;alternatives --config java&lt;/p&gt;
&lt;p&gt;alternatives --config javac&lt;/p&gt;
&lt;p&gt;java -version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Set&amp;nbsp;JAVA_HOME&amp;nbsp;environment variable.&lt;/p&gt;
&lt;p&gt;echo &quot;export JAVA_HOME=/usr/lib/jvm/java-1.8.0&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;PATH=$PATH:$JAVA_HOME/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;p&gt;env | grep JAVA&lt;/p&gt;
&lt;p&gt;JAVA_HOME=/usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3. Download and extract nexus&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;wget -O nexus.tar.gz &lt;a href=&quot;https://download.sonatype.com/nexus/3/latest-unix.tar.gz&quot;&gt;https://download.sonatype.com/nexus/3/latest-unix.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;tar xvf nexus.tar.gz -C /opt&lt;/p&gt;
&lt;p&gt;/opt/nexus-3.23.0-03&lt;/p&gt;
&lt;p&gt;/opt/sonatype-work&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ln -s /opt/nexus-3.23.0-03/ /opt/nexus&lt;/p&gt;
&lt;p&gt;ln -s /opt/nexus/bin/nexus /etc/init.d/nexus&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# nexus 2 download&lt;/p&gt;
&lt;p&gt;wget -O nexus2.tar.gz &lt;a href=&quot;https://download.sonatype.com/nexus/oss/nexus-latest-bundle.tar.gz&quot;&gt;https://download.sonatype.com/nexus/oss/nexus-latest-bundle.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4. Setup nexus user&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;# Create nexus user&lt;/p&gt;
&lt;p&gt;groupadd -g 1002 -r nexus&lt;/p&gt;
&lt;p&gt;useradd -c &quot;nexus3 oss&quot; -u 1002 -g nexus -s /bin/bash -r -p password nexus&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;chown -R nexus:nexus /opt/nexus&lt;/p&gt;
&lt;p&gt;chown -R nexus:nexus /opt/sonatype-work&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5. Running as nexus user&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;vim /opt/nexus/bin/nexus.rc&lt;/p&gt;
&lt;p&gt;run_as_user=&quot;nexus&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#VM options&lt;/p&gt;
&lt;p&gt;vim /opt/nexus/bin/nexus.vmoptions&lt;/p&gt;
&lt;p&gt;-Xms2703m&lt;/p&gt;
&lt;p&gt;-Xmx2703m&lt;/p&gt;
&lt;p&gt;-XX:MaxDirectMemorySize=2703m&lt;/p&gt;
&lt;p&gt;-XX:+UnlockDiagnosticVMOptions&lt;/p&gt;
&lt;p&gt;-XX:+LogVMOutput&lt;/p&gt;
&lt;p&gt;-XX:LogFile=../sonatype-work/nexus3/log/jvm.log&lt;/p&gt;
&lt;p&gt;-XX:-OmitStackTraceInFastThrow&lt;/p&gt;
&lt;p&gt;-Djava.net.preferIPv4Stack=true&lt;/p&gt;
&lt;p&gt;-Dkaraf.home=.&lt;/p&gt;
&lt;p&gt;-Dkaraf.base=.&lt;/p&gt;
&lt;p&gt;-Dkaraf.etc=etc/karaf&lt;/p&gt;
&lt;p&gt;-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties&lt;/p&gt;
&lt;p&gt;-Dkaraf.data=../sonatype-work/nexus3&lt;/p&gt;
&lt;p&gt;-Dkaraf.log=../sonatype-work/nexus3/log&lt;/p&gt;
&lt;p&gt;-Djava.io.tmpdir=../sonatype-work/nexus3/tmp&lt;/p&gt;
&lt;p&gt;-Dkaraf.startLocalConsole=false&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;6. Running nexus as Linux service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;#ln -s /opt/nexus/bin/nexus /etc/init.d/nexus&lt;/p&gt;
&lt;p&gt;systemctl enable nexus&lt;/p&gt;
&lt;p&gt;Executing /sbin/chkconfig nexus ons&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#cd /etc/init.d&lt;/p&gt;
&lt;p&gt;#chkconfig --add nexus&lt;/p&gt;
&lt;p&gt;#chkconfig --levels 345 nexus on&lt;/p&gt;
&lt;p&gt;#service nexus start&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# vim /etc/security/limits.conf&lt;/p&gt;
&lt;p&gt;nexus - nofile 65536&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# vim /etc/systemd/system/nexus.service&lt;/p&gt;
&lt;p&gt;[Unit]&lt;/p&gt;
&lt;p&gt;Description=nexus service&lt;/p&gt;
&lt;p&gt;After=network.target&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Service]&lt;/p&gt;
&lt;p&gt;Type=forking&lt;/p&gt;
&lt;p&gt;LimitNOFILE=65536&lt;/p&gt;
&lt;p&gt;User=nexus&lt;/p&gt;
&lt;p&gt;Group=nexus&lt;/p&gt;
&lt;p&gt;ExecStart=/opt/nexus/bin/nexus start&lt;/p&gt;
&lt;p&gt;ExecStop=/opt/nexus/bin/nexus stop&lt;/p&gt;
&lt;p&gt;User=nexus&lt;/p&gt;
&lt;p&gt;Restart=on-abort&lt;/p&gt;
&lt;p&gt;TimeoutSec=600&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[Install]&lt;/p&gt;
&lt;p&gt;WantedBy=multi-user.target&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;7. Starting nexus&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;# open firewall&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=22/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=8081/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --list-all&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl daemon-reload&lt;/p&gt;
&lt;p&gt;systemctl enable nexus&lt;/p&gt;
&lt;p&gt;systemctl restart nexus&lt;/p&gt;
&lt;p&gt;systemctl status nexus&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;tail -f /opt/sonatype-work/nexus3/log/nexus.log&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# console login&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://localhost:8081&quot;&gt;http://localhost:8081&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Default username is admin / admin123&lt;/p&gt;
&lt;p&gt;# default admin password&lt;/p&gt;
&lt;p&gt;cat /opt/sonatype-work/nexus3/admin.password&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;8. Running behind reverse proxy&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum install -y httpd&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# vim /opt/sonatype-work/nexus3/etc/nexus.properties&lt;/p&gt;
&lt;p&gt;nexus-context-path=/nexus&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# vim /etc/httpd/conf.d/nexus.conf&lt;/p&gt;
&lt;p&gt;ProxyRequests Off&lt;/p&gt;
&lt;p&gt;ProxyPreserveHost On&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;VirtualHost 127.0.0.1:80&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ServerName centos.dev&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ServerAdmin admin@centos.dev&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ProxyPass /nexus &lt;a href=&quot;http://localhost:8081/nexus&quot;&gt;http://localhost:8081/nexus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ProxyPassReverse /nexus &lt;a href=&quot;http://localhost:8081/nexus&quot;&gt;http://localhost:8081/nexus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ErrorLog /var/log/nexus/error.log&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CustomLog /var/log/nexus/access.log common&lt;/p&gt;
&lt;p&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;9. ErrorLog and CustomLog directives configuration&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;mkdir /var/log/nexus&lt;/p&gt;
&lt;p&gt;apachectl configtest&lt;/p&gt;
&lt;p&gt;Syntax OK&lt;/p&gt;
&lt;p&gt;systemctl httpd restart&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;10. Maven Artifacts Uploader&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;This is a friendly command line tool for uploading a directory of artifacts to Nexus 3.x repository&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Installation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● &lt;/span&gt;&lt;span&gt;Clone package&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;git clone &lt;a href=&quot;https://github.com/ronbadur/maven-artifacts-uploader.git&quot;&gt;https://github.com/ronbadur/maven-artifacts-uploader.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cd maven-artifacts-uploader&lt;/p&gt;
&lt;p&gt;mvn install&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● &lt;/span&gt;&lt;span&gt;conf/&lt;/span&gt;&lt;span&gt;config.properties&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;=&amp;gt; repository url, repositroy id&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● &lt;/span&gt;&lt;span&gt;PATH enviroment&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;echo &quot;export MVN-UPLOAD=/opt/maven-artifacts-uploader&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;PATH=$PATH:$MVN-UPLOAD/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● &lt;/span&gt;&lt;span&gt;settings.xml&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;servers&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;server&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;id&amp;gt;nexus&amp;lt;/id&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;password&amp;gt;admin123&amp;lt;/password&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/server&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;/servers&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) upload all the artifacts in specific directory&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;mvnUploader -d path/to/your/artifacts&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;java -jar ./lib\nexus-uploader.jar -d /opt/mvn-repo&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;To get all the options that available&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;mvnUploader -h&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;11. upload files into Nexus 3&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;curl -v -u admin:admin123 --upload-file pom.xml &lt;a href=&quot;http://localhost:8081/repository/maven-releases/org/foo/1.0/foo-1.0.pom&quot;&gt;http://localhost:8081/repository/maven-releases/org/foo/1.0/foo-1.0.pom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Example without a pom file&lt;/p&gt;
&lt;p&gt;mvn deploy:deploy-file -DgroupId=com.somecompany -DartifactId=project -Dversion=1.0.0 -DgeneratePom=true -Dpackaging=jar -DrepositoryId=nexus -Durl=http://localhost:8081/repository/maven-releases -Dfile=target/project-1.0.0.jar&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# With a pom file&lt;/p&gt;
&lt;p&gt;mvn deploy:deploy-file -DgeneratePom=false -DrepositoryId=nexus -Durl=http://localhost:8081/repository/maven-releases -DpomFile=pom.xml -Dfile=target/project-1.0.0.jar&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;12. Gradle&lt;/span&gt;&lt;span&gt;을 이용한&lt;/span&gt;&lt;span&gt; Nexus &lt;/span&gt;&lt;span&gt;저장소&lt;/span&gt;&lt;span&gt; Upload&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Nexus &lt;/span&gt;&lt;span&gt;배포를 위한&lt;/span&gt;&lt;span&gt; uploadArchives &lt;/span&gt;&lt;span&gt;스크립트를 작성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# vi build.gradle&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apply plugin: 'maven'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;group = &quot;paas.test&quot;&lt;/p&gt;
&lt;p&gt;version = '0.0.1-SNAPSHOT'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;project.group = 'paas.test'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;uploadArchives {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;repositories {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mavenDeployer {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;repository(url: '&lt;a href=&quot;http://your.nexus.repository.com/nexus/content/repositories/releases/&quot;&gt;http://your.nexus.repository.com/nexus/content/repositories/releases/&lt;/a&gt;') {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;authentication(userName: '&lt;/span&gt;&lt;span&gt;계정명&lt;/span&gt;&lt;span&gt;', password: '&lt;/span&gt;&lt;span&gt;비밀번호&lt;/span&gt;&lt;span&gt;')&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;snapshotRepository(url: '&lt;a href=&quot;http://your.nexus.repository.com/nexus/content/repositories/snapshot/&quot;&gt;http://your.nexus.repository.com/nexus/content/repositories/snapshot/&lt;/a&gt;') {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;authentication(userName: '&lt;/span&gt;&lt;span&gt;계정명&lt;/span&gt;&lt;span&gt;', password: '&lt;/span&gt;&lt;span&gt;비밀번호&lt;/span&gt;&lt;span&gt;')&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;=&amp;gt; eclipse&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; uploadArchives&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행하&lt;/span&gt;&lt;span&gt;여&lt;/span&gt;&lt;span&gt; Nexus&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업로드&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://help.sonatype.com/repomanager3/installation&quot;&gt;https://help.sonatype.com/repomanager3/installation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drmanalo.github.io/blog/2017/installing-nexus-centos7.html&quot;&gt;https://drmanalo.github.io/blog/2017/installing-nexus-centos7.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://devopscube.com/how-to-install-latest-sonatype-nexus-3-on-linux/&quot;&gt;https://devopscube.com/how-to-install-latest-sonatype-nexus-3-on-linux/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://help.sonatype.com/repomanager2/download&quot;&gt;https://help.sonatype.com/repomanager2/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ronbadur/maven-artifacts-uploader&quot;&gt;https://github.com/ronbadur/maven-artifacts-uploader&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-files-into-Nexus-3&quot;&gt;https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-files-into-Nexus-3&lt;/a&gt;-&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kingbbode.tistory.com/37&quot;&gt;https://kingbbode.tistory.com/37&lt;/a&gt;&lt;/p&gt;</description>
      <category>DevOps CICD/Nexus</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/12</guid>
      <comments>https://paas.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:37:53 +0900</pubDate>
    </item>
    <item>
      <title>Install Harbor 2.0 on CentOS 7</title>
      <link>https://paas.tistory.com/11</link>
      <description>&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 1. Install Python&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Install Python Dependencies&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum -y groupinstall &quot;Development Tools&quot;&lt;/p&gt;
&lt;p&gt;yum -y install openssl-devel bzip2-devel libffi-devel&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;gcc --version&lt;/p&gt;
&lt;p&gt;gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Download latest Python 3.8 Archive&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum -y install wget&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz&quot;&gt;https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;tar xvf Python-3.8.3.tgz -O /opt&lt;/p&gt;
&lt;p&gt;cd /opt/Python-3.8.3&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3) Install Python 3.8&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;./configure --enable-optimizations&lt;/p&gt;
&lt;p&gt;make altinstall&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4) Check Python 3.8&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;python3.8 --version&lt;/p&gt;
&lt;p&gt;pip3.8 --version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 2. Install Docker Engine&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Uninstall old versions:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum remove docker docker-common docker-selinux docker-engine&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Install Prereqs&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum install -y yum-utils device-mapper-persistent-data lvm2&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3) Setup stable repo&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum-config-manager --add-repo &lt;a href=&quot;https://download.docker.com/linux/centos/docker-ce.repo&quot;&gt;https://download.docker.com/linux/centos/docker-ce.repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4) Install Docker CE&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum -y install docker-ce docker-ce-cli containerd.io&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5) If you get dependency errors, the run&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;yum install -y --setopt=obsoletes=0 docker-ce docker-ce-selinux&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;6) Start and enable docker service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;systemctl start docker &amp;amp;&amp;amp; systemctl enable docker&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl enable --now docker&lt;/p&gt;
&lt;p&gt;systemctl is-active docker&lt;/p&gt;
&lt;p&gt;systemctl is-enabled docker&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;newgrp docker&lt;/p&gt;
&lt;p&gt;docker version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;usermod -aG docker root&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Create Harbor User&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;groupadd -g 1001 -r harbor&lt;/p&gt;
&lt;p&gt;useradd -c &quot;Harbor&quot; -u 1001 -g harbor -s /bin/bash -r -p password harbor&lt;/p&gt;
&lt;p&gt;usermod -aG docker harbor&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 3. Install Docker Compose&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;● Run this command to download the current stable release of Docker Compose&lt;/p&gt;
&lt;p&gt;curl -L &quot;&lt;a href=&quot;https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname&quot;&gt;https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname&lt;/a&gt;&lt;a href=&quot;https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname%20-s)-$(uname%20-m)&quot;&gt; -s)-$(uname -m)&lt;/a&gt;&quot; -o /usr/local/bin/docker-compose&lt;/p&gt;
&lt;p&gt;chmod +x /usr/local/bin/docker-compose&lt;/p&gt;
&lt;p&gt;ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● install command completion for the bash&lt;/p&gt;
&lt;p&gt;curl -L &lt;a href=&quot;https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose&quot;&gt;https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose&lt;/a&gt;&lt;a href=&quot;https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose%20-o%20/etc/bash_completion.d/docker-compose&quot;&gt; -o /etc/bash_completion.d/docker-compose&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Source the file or re-login to enjoy completion feature.&lt;/p&gt;
&lt;p&gt;source /etc/bash_completion.d/docker-compose&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● Test the installation.&lt;/p&gt;
&lt;p&gt;docker-compose --version&lt;/p&gt;
&lt;p&gt;docker-compose version 1.25.5, build 8a1c60f6&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● Upgrading&lt;/p&gt;
&lt;p&gt;docker-compose 1.5.0&lt;/p&gt;
&lt;p&gt;docker container rm -f -v myapp_web_1 myapp_db_1 ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● Uninstallation&lt;/p&gt;
&lt;p&gt;# To uninstall Docker Compose if you installed using curl&lt;/p&gt;
&lt;p&gt;rm /usr/local/bin/docker-compose&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# To uninstall Docker Compose if you installed using pip&lt;/p&gt;
&lt;p&gt;pip uninstall docker-compose&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;●&lt;span&gt;&amp;nbsp; &lt;/span&gt;docker image pull &amp;amp; tag&lt;/p&gt;
&lt;p&gt;# harbor docker image pull&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------&lt;/p&gt;
&lt;p&gt;docker pull goharbor/harbor-log:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/registry-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/harbor-registryctl:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/harbor-db:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/harbor-core:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/harbor-portal:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/harbor-jobservice:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/redis-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/nginx-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/notary-server-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/notary-signer-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/clair-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/clair-adapter-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker pull goharbor/chartmuseum-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# harbor docker image save&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------&lt;/p&gt;
&lt;p&gt;docker save -o harbor-images.tar \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/harbor-log:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/registry-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/harbor-registryctl:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/harbor-db:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/harbor-core:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/harbor-portal:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/harbor-jobservice:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/redis-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/nginx-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/notary-server-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/notary-server-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/notary-signer-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/clair-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/clair-adapter-photon:v2.0.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;goharbor/chartmuseum-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# harbor docker image load&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------&lt;/p&gt;
&lt;p&gt;docker load -i harbor-images.tar&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# harbor docker image tag&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------&lt;/p&gt;
&lt;p&gt;docker tag goharbor/harbor-log:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/harbor-log:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/registry-photon:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/registry-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/harbor-registryctl:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/harbor-registryctl:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/harbor-db:v2.0.0&lt;span&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; &lt;/span&gt;registry.test.paas/library/harbor-db:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/harbor-core:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/harbor-core:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/harbor-portal:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/harbor-portal:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/harbor-jobservice:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/harbor-jobservice:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/redis-photon:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/redis-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/nginx-photon:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/nginx-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/notary-server-photon:v2.0.0&lt;span&gt;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/notary-server-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/notary-signer-photon:v2.0.0&lt;span&gt;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/notary-signer-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/clair-photon:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/clair-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/clair-adapter-photon:v2.0.0&lt;span&gt;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/clair-adapter-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker tag goharbor/chartmuseum-photon:v2.0.0&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;registry.test.paas/library/chartmuseum-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# harbor docker image push to registry&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/harbor-log:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/registry-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/harbor-registryctl:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/harbor-db:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/harbor-core:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/harbor-portal:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/harbor-jobservice:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/redis-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/nginx-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/notary-server-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/notary-signer-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/clair-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/clair-adapter-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/chartmuseum-photon:v2.0.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /opt/harbor/docker-compose.yml&lt;/p&gt;
&lt;p&gt;&lt;span&gt;=&amp;gt; tag image &lt;/span&gt;&lt;span&gt;편집&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 4. Download the Harbor Installer&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;* Online installer: The online installer downloads the Harbor images from Docker hub. For this reason, the installer is very small in size.&lt;/p&gt;
&lt;p&gt;* Offline installer: Use the offline installer if the host to which are are deploying Harbor does not have a connection to the Internet.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;The offline installer contains pre-built images, so it is larger than the online installer.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● Download and Unpack the Installer&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/goharbor/harbor/releases&quot;&gt;https://github.com/goharbor/harbor/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#wget &lt;a href=&quot;https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz&quot;&gt;https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://storage.googleapis.com/harbor-releases/release-2.0.0/harbor-online-installer-v2.0.0.tgz&quot;&gt;https://storage.googleapis.com/harbor-releases/release-2.0.0/harbor-online-installer-v2.0.0.tgz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;tar xvf harbor-online-installer-v2.0.0.tgz&lt;/p&gt;
&lt;p&gt;mv /app/harbor /opt&lt;/p&gt;
&lt;p&gt;ls -l /opt&lt;/p&gt;
&lt;p&gt;root docker&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;94 Jun&lt;span&gt;&amp;nbsp; &lt;/span&gt;2 10:58 harbor&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 5. Registry disk setting (optional)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;● partitioning disk&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;fdisk -l&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;fdisk /dev/sdb&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Welcome to fdisk (util-linux 2.23.2).&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Changes will remain in memory only, until you decide to write them.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Be careful before using the write command.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Device does not contain a recognized partition table&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Building a new DOS disklabel with disk identifier 0xf3f4d873.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Command (m for help): n&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Partition type:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;p&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;primary (0 primary, 0 extended, 4 free)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;e&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;extended&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Select (default p): p&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Partition number (1-4, default 1):&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;First sector (2048-209715199, default 2048):&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Using default value 2048&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199):&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Using default value 209715199&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Partition 1 of type Linux and of size 100 GiB is set&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Command (m for help): p&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Disk /dev/sdc: 107.4 GB, 107374182400 bytes, 209715200 sectors&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Units = sectors of 1 * 512 = 512 bytes&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Sector size (logical/physical): 512 bytes / 512 bytes&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Disk label type: dos&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Disk identifier: 0xf3f4d873&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Device Boot&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Start&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;End&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Blocks&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Id&lt;span&gt;&amp;nbsp; &lt;/span&gt;System&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;/dev/sdc1&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2048&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;209715199&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;104856576&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;83&lt;span&gt;&amp;nbsp; &lt;/span&gt;Linux&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Command (m for help): t&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Selected partition 1&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Hex code (type L to list all codes): 8e&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Changed type of partition 'Linux' to 'Linux LVM'&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Command (m for help): w&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;The partition table has been altered!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;yum install lvm2&lt;/p&gt;
&lt;p&gt;fdisk -l&lt;/p&gt;
&lt;p&gt;pvcreate /dev/sdb1&lt;/p&gt;
&lt;p&gt;vgcreate registry-vg /dev/sdb1&lt;/p&gt;
&lt;p&gt;lvcreate -n registry-lv -l 100%FREE registry-vg&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#mkfs.ext4 /dev/mapper/registry--vg-registry--lv&lt;/p&gt;
&lt;p&gt;mkfs.xfs /dev/mapper/registry--vg-registry--lv&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mkfs.xfs -f -ssize=4k /dev/mapper/registry--vg-registry--lv&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;fsck -y /dev/mapper/registry--vg-registry--lv&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mkdir /harbor-data&lt;/p&gt;
&lt;p&gt;mount /dev/mapper/registry--vg-registry--lv /harbor-data&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /etc/fstab&lt;/p&gt;
&lt;p&gt;#/dev/mapper/registry--vg-registry--lv&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/harbor-data&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ext4&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;defaults&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0 0&lt;/p&gt;
&lt;p&gt;/dev/mapper/registry--vg-registry--lv&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/harbor-data&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xfs&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;defaults&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0 0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● install NFS Server&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum install nfs-utils libnfsidmap&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl enable rpcbind&lt;/p&gt;
&lt;p&gt;systemctl enable nfs-server&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl start rpcbind&lt;/p&gt;
&lt;p&gt;systemctl start nfs-server&lt;/p&gt;
&lt;p&gt;systemctl start rpc-statd&lt;/p&gt;
&lt;p&gt;systemctl start nfs-idmapd&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl enable nfs.service&lt;/p&gt;
&lt;p&gt;systemctl start nfs.service&lt;/p&gt;
&lt;p&gt;chkconfig nfs on&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mkdir -p /harbor-data/registry&lt;/p&gt;
&lt;p&gt;chmod 750 /harbor-data/registry&lt;/p&gt;
&lt;p&gt;chown nfsnobody:nfsnobody /harbor-data/registry&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mkdir -p /harbor-data/db-data&lt;/p&gt;
&lt;p&gt;chmod 750 /harbor-data/db-data&lt;/p&gt;
&lt;p&gt;chown nfsnobody:nfsnobody /harbor-data/db-data&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /etc/exports&lt;/p&gt;
&lt;p&gt;/harbor-data/registry *(rw,async,all_squash)&lt;/p&gt;
&lt;p&gt;/harbor-data/db-data *(rw,async,all_squash)&lt;/p&gt;
&lt;p&gt;exportfs -a&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;setsebool -P virt_use_nfs on&lt;span&gt;&amp;nbsp; &lt;/span&gt;(server, client &lt;/span&gt;&lt;span&gt;둘다 등록&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● configure NFS server firewall&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;# add-service&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone public --add-service mountd&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone public --add-service rpc-bind&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone public --add-service nfs&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# add-port(server, client &lt;/span&gt;&lt;span&gt;둘다 등록&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=53248/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=50825/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=20048/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=2049/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=111/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;exportfs -r&lt;/p&gt;
&lt;p&gt;exportfs -v&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;client)&lt;/p&gt;
&lt;p&gt;mount -t nfs registry.test.paas:/harbor-data /mnt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 6. Configure HTTPS Access to Harbor&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;mkdir -p ./openssl&lt;/p&gt;
&lt;p&gt;cd openssl&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● Generate a Certificate Authority Certificate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Generate a CA certificate private key&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;openssl genrsa -out ca.key 4096&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Generate the CA certificate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;openssl req -x509 -new -nodes -sha512 -days 3650 \&lt;/p&gt;
&lt;p&gt;-subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=registry.test.paas&quot; \&lt;/p&gt;
&lt;p&gt;-key ca.key \&lt;/p&gt;
&lt;p&gt;-out ca.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● Generate a Server Certificate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Generate a private key&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;openssl genrsa -out registry.test.paas.key 4096&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Generate a certificate signing request (CSR)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new \&lt;/p&gt;
&lt;p&gt;-subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=registry.test.paas&quot; \&lt;/p&gt;
&lt;p&gt;-key registry.test.paas.key \&lt;/p&gt;
&lt;p&gt;-out registry.test.paas.csr&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3) Generate an x509 v3 extension file&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;cat &amp;gt; v3.ext &amp;lt;&amp;lt;-EOF&lt;/p&gt;
&lt;p&gt;authorityKeyIdentifier=keyid,issuer&lt;/p&gt;
&lt;p&gt;basicConstraints=CA:FALSE&lt;/p&gt;
&lt;p&gt;keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment&lt;/p&gt;
&lt;p&gt;extendedKeyUsage = serverAuth&lt;/p&gt;
&lt;p&gt;subjectAltName = @alt_names&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[alt_names]&lt;/p&gt;
&lt;p&gt;DNS.1=registry.test.paas&lt;/p&gt;
&lt;p&gt;DNS.2=registry&lt;/p&gt;
&lt;p&gt;DNS.3=harbor.test.paas&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4) Use the&amp;nbsp;v3.ext&amp;nbsp;file to generate a certificate for your Harbor host&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-extfile v3.ext \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-CA ca.crt -CAkey ca.key -CAcreateserial \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-in registry.test.paas.csr \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;-out registry.test.paas.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● Provide the Certificates to Harbor and Docker&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1) Copy the server certificate and key into the certficates folder on your Harbor host.&lt;/p&gt;
&lt;p&gt;mkdir -p /harbor-data/cert/&lt;/p&gt;
&lt;p&gt;nfs)&lt;/p&gt;
&lt;p&gt;chmod 750 /harbor-data/cert&lt;/p&gt;
&lt;p&gt;chown nfsnobody:nfsnobody /harbor-data/cert&lt;/p&gt;
&lt;p&gt;vi /etc/exports&lt;/p&gt;
&lt;p&gt;/harbor-data/cert *(rw,async,all_squash)&lt;/p&gt;
&lt;p&gt;exportfs -a&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.crt /harbor-data/cert/&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.key /harbor-data/cert/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) Convert registry.test.paas.crt to registry.test.paas.cert, for use by Docker.&lt;/p&gt;
&lt;p&gt;openssl x509 -inform PEM -in registry.test.paas.crt -out registry.test.paas.cert&lt;/p&gt;
&lt;p&gt;# openssl x509 -inform PEM -in ca.crt -out ca.cert&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) Copy the server certificate, key and CA files into the Docker certificates folder on the Harbor host. You must create the appropriate folders first.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(80)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;mkdir -p /etc/docker/certs.d/registry.test.paas/&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.cert /etc/docker/certs.d/registry.test.paas/&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.key /etc/docker/certs.d/registry.test.paas/&lt;/p&gt;
&lt;p&gt;cp ca.crt /etc/docker/certs.d/registry.test.paas/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# https&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(443)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;mkdir -p /etc/docker/certs.d/registry.test.paas:443/&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.cert /etc/docker/certs.d/registry.test.paas:443/&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.key /etc/docker/certs.d/registry.test.paas:443/&lt;/p&gt;
&lt;p&gt;cp ca.crt /etc/docker/certs.d/registry.test.paas:443/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cp registry.test.paas.crt /etc/pki/ca-trust/source/anchors/registry.test.paas.crt&lt;/p&gt;
&lt;p&gt;update-ca-trust&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Restart Docker Engine.&lt;/p&gt;
&lt;p&gt;systemctl restart docker&lt;/p&gt;
&lt;p&gt;systemctl status docker&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;/etc/docker/certs.d/&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;└── yourdomain.com:port&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├&lt;/span&gt;&lt;span&gt;── yourdomain.com.cert&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;-- Server certificate signed by CA&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├&lt;/span&gt;&lt;span&gt;── yourdomain.com.key&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;-- Server key signed by CA&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;└── ca.crt&lt;span&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; &lt;/span&gt;&amp;lt;-- Certificate authority that signed the registry certificate&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 7. Configure Internal TLS communication between Harbor Component&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;mkdir -p&lt;span&gt;&amp;nbsp; &lt;/span&gt;/harbor-data/tls/cert&lt;/p&gt;
&lt;p&gt;nfs)&lt;/p&gt;
&lt;p&gt;chmod 750 /harbor-data/tls&lt;/p&gt;
&lt;p&gt;chown nfsnobody:nfsnobody /harbor-data/tls&lt;/p&gt;
&lt;p&gt;vi /etc/exports&lt;/p&gt;
&lt;p&gt;/harbor-data/tls *(rw,async,all_squash)&lt;/p&gt;
&lt;p&gt;exportfs -a&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cp /harbor-install/openssl/cat.crt /harbor-data/tls/cert/&lt;/p&gt;
&lt;p&gt;cp /harbor-install/openssl/cat.key /harbor-data/tls/cert/&lt;/p&gt;
&lt;p&gt;cp /harbor-install/openssl/v3.ext /harbor-data/tls/cert/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cd /harbor-data/tls/cert&lt;/p&gt;
&lt;p&gt;1) harbor_internal_ca&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out harbor_internal_ca.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=harbor_internal_ca&quot; -key harbor_internal_ca.key -out harbor_internal_ca.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor_internal_ca.csr -out harbor_internal_ca.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) core&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out core.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=core&quot; -key core.key -out core.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in core.csr -out core.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) job_service&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out job_service.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=job_service&quot; -key job_service.key -out job_service.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in job_service.csr -out job_service.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) proxy&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out proxy.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=proxy&quot; -key proxy.key -out proxy.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in proxy.csr -out proxy.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5) portal&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out portal.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=portal&quot; -key portal.key -out portal.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in portal.csr -out portal.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6) registry&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out registry.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=registry&quot; -key registry.key -out registry.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in registry.csr -out registry.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;7) registryctl&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out registryctl.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=registryctl&quot; -key registryctl.key -out registryctl.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in registryctl.csr -out registryctl.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;8) notary_server&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out notary_server.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=notary_server&quot; -key notary_server.key -out notary_server.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in notary_server.csr -out notary_server.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;9) notary_signer&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out notary_signer.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=notary_signer&quot; -key notary_signer.key -out notary_signer.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in notary_signer.csr -out notary_signer.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;10) trivy_adapter&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out trivy_adapter.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=trivy_adapter&quot; -key trivy_adapter.key -out trivy_adapter.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in trivy_adapter.csr -out trivy_adapter.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;11) clair&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out clair.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=clair&quot; -key clair.key -out clair.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in clair.csr -out clair.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;12) clair_adapter&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out clair_adapter.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=clair_adapter&quot; -key clair_adapter.key -out clair_adapter.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in clair_adapter.csr -out clair_adapter.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;13) chartmuseum&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;openssl genrsa -out chartmuseum.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=freedream/OU=IT Department/CN=chartmuseum&quot; -key chartmuseum.key -out chartmuseum.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in chartmuseum.csr -out chartmuseum.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# offline docker images save&lt;/p&gt;
&lt;p&gt;docker save -o goharbor.tar goharbor/prepare:v2.0.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker run -v /:/harbor-data goharbor/prepare:v2.0.0 gencert -p /harbor-data/tls/cert&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 8. Configure the Harbor YML File&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;● Configure the Harbor YML File&lt;/p&gt;
&lt;p&gt;cd harbor&lt;/p&gt;
&lt;p&gt;cp harbor.yml.tmpl harbor.yml&lt;/p&gt;
&lt;p&gt;# vi harbor.yml&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;hostname: registry.test.paas&lt;/p&gt;
&lt;p&gt;# http related config&lt;/p&gt;
&lt;p&gt;http:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# port for http, default is 80. If https enabled, this port will redirect to https port&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;port: 80&lt;/p&gt;
&lt;p&gt;https:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# https port for harbor, default is 443&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;port: 443&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# The path of cert and key files for nginx&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;certificate: /harbor-data/cert/registry.test.paas.crt&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;private_key: /harbor-data/cert/registry.test.paas.key&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# enable tls communication between all harbor components&lt;/p&gt;
&lt;p&gt;internal_tls:&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# set enabled to true means internal tls is enabled&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;enabled: true&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# put your cert and key files on dir&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;dir: /harbor-data/tls/cert&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;harbor_admin_password: Harbor12345&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Harbor DB configuration&lt;/p&gt;
&lt;p&gt;database:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# The password for the root user of Harbor DB. Change this before any production use.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;password: root123&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# The maximum number of connections in the idle connection pool. If it &amp;lt;=0, no idle connections are retained.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;max_idle_conns: 50&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# The maximum number of open connections to the database. If it &amp;lt;= 0, then there is no limit on the number of open connections.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# Note: the default number of connections is 100 for postgres.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;max_open_conns: 100&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# The default data volume&lt;/p&gt;
&lt;p&gt;data_volume: /harbor-data/db-data&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Harbor Storage settings by default is using /data dir on local filesystem&lt;/p&gt;
&lt;p&gt;# Uncomment storage_service setting If you want to using external storage&lt;/p&gt;
&lt;p&gt;# storage_service:&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# ca_bundle is the path to the custom root ca certificate, which will be injected into the truststore&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# of registry's and chart repository's containers.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is usually needed when the user hosts a internal storage with self signed certificate.&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ca_bundle:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# storage backend, default is filesystem, options include filesystem, azure, gcs, s3, swift and oss&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# for more info about this configuration please refer &lt;a href=&quot;https://docs.docker.com/registry/configuration/&quot;&gt;https://docs.docker.com/registry/configuration/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;filesystem:&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;maxthreads: 100&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# set disable to true when you want to disable registry redirect&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;redirect:&lt;/p&gt;
&lt;p&gt;#&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;disabled: false&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;# Log configurations&lt;/p&gt;
&lt;p&gt;log:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# options are debug, info, warning, error, fatal&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;level: info&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;# configs for logs in local storage&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;local:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Log files are rotated log_rotate_count times before being removed. If count is 0, old versions are removed rather than rotated.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rotate_count: 50&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# Log files are rotated only if they grow bigger than log_rotate_size bytes. If size is followed by k, the size is assumed to be in kilobytes.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# are all valid.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rotate_size: 200M&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;# The directory on your host that store log&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;location: /var/log/harbor&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;cd /opt/openssl&lt;/p&gt;
&lt;p&gt;openssl genrsa -out harbor_db.key 4096&lt;/p&gt;
&lt;p&gt;openssl req -sha512 -new -subj &quot;/C=KR/ST=Seoul/L=Seoul/O=INSoft/OU=Cloud Department/CN=harbor_db&quot; -key harbor_db.key -out harbor_db.csr&lt;/p&gt;
&lt;p&gt;openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor_db.csr -out harbor_db.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mkdir -p /harbor-data/db-data/secret/tls&lt;/p&gt;
&lt;p&gt;cp harbor_db.crt /harbor-data/db-data/secret/tls/&lt;/p&gt;
&lt;p&gt;cp harbor_db.key /harbor-data/db-data/secret/tls/&lt;/p&gt;
&lt;p&gt;cp harbor_db.csr /harbor-data/db-data/secret/tls/&lt;/p&gt;
&lt;p&gt;chown -R 10000:10000 /harbor-data/db-data/secret/tls/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;tail -f /var/log/harbor/registry.log&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-- 9. Run the Installer Script&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Default installation without Notary, Clair, or Chart Repository Service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;cd /opt/harbor&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Connecting to Harbor via HTTP&lt;/p&gt;
&lt;p&gt;vi /etc/docker/daemon.json&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&quot;insecure-registries&quot; : [&quot;myregistrydomain.com:5000&quot;, &quot;0.0.0.0&quot;]&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;./install.sh&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://registry.test.paas&quot;&gt;https://registry.test.paas&lt;/a&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;admin / Harbor12345&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker login reg.yourdomain.com&lt;/p&gt;
&lt;p&gt;docker push reg.yourdomain.com/myproject/myrepo:mytag&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Installation with Notary, Clair, and Chart Repository Service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;cd /opt/harbor&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Run the prepare script to enable HTTPS&lt;/p&gt;
&lt;p&gt;./prepare --with-notary --with-clair --with-chartmuseum&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;./install.sh --with-notary --with-clair --with-chartmuseum&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# If Harbor is running, stop and remove the existing instance&lt;/p&gt;
&lt;p&gt;docker-compose down -v&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3) Restart Harbor&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;docker-compose stop&lt;/p&gt;
&lt;p&gt;docker-compose start&lt;/p&gt;
&lt;p&gt;docker-compose restart&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4) Reconfigure Harbor&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# stop Harbor&lt;/p&gt;
&lt;p&gt;docker-compose down -v&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# update&lt;/p&gt;
&lt;p&gt;vim harbor.yml&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# populate the configuration&lt;/p&gt;
&lt;p&gt;./prepare&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# start Harbor&lt;/p&gt;
&lt;p&gt;docker-compose up -d&lt;/p&gt;
&lt;p&gt;docker-compose ps&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# remove docker-compose&lt;/p&gt;
&lt;p&gt;docker-compose rm -f&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5) Verify the HTTPS Connection&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://registry.test.paas&quot;&gt;https://registry.test.paas&lt;/a&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;admin / Harbor12345&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl restart docker&lt;/p&gt;
&lt;p&gt;systemctl status docker&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=443/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;6) Harbor management&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# harbor console&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://registry.test.paas&quot;&gt;https://registry.test.paas&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;admin / Harbor12345&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# create harbor user&lt;/p&gt;
&lt;p&gt;Harbor console &amp;gt; Administration &amp;gt; User &amp;gt; New User&lt;/p&gt;
&lt;p&gt;&lt;span&gt;set as admin &lt;/span&gt;&lt;span&gt;권한 부여&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# docker login to registry&lt;/p&gt;
&lt;p&gt;docker login registry.test.paas&lt;/p&gt;
&lt;p&gt;harbor / Harbor12345&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# docker image push to registry&lt;/p&gt;
&lt;p&gt;docker pull nginx:latest&lt;/p&gt;
&lt;p&gt;docker tag nginx:latest registry.test.paas/library/nginx:latest&lt;/p&gt;
&lt;p&gt;docker push registry.test.paas/library/nginx:latest&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# docker image pull from registry&lt;/p&gt;
&lt;p&gt;# docker rmi nginx:latest&lt;/p&gt;
&lt;p&gt;# docker rmi registry.test.paas/library/nginx:latest&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker pull registry.test.paas/library/nginx:latest&lt;/p&gt;</description>
      <category>DevOps CICD/Harbor</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/11</guid>
      <comments>https://paas.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:36:15 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes Off-Line Install Guide</title>
      <link>https://paas.tistory.com/10</link>
      <description>&lt;p&gt;&lt;span&gt;Kubernetes Off-Line Install Guide&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; OS: CentOS8 x86_64 minimal&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; docker: 18.09.1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; kubernetes: 1.17&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. Yum Repository Server &lt;/span&gt;&lt;span&gt;구성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Online Obtaining Repository Packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;a) Install required packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;sudo yum -y install yum-utils createrepo git&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b) Make a directory to store the software in the server&lt;/span&gt;&lt;span&gt;&amp;rsquo;&lt;/span&gt;&lt;span&gt;s storage&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;mkdir -p /var/www/html/repos&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; SELinux &lt;/span&gt;&lt;span&gt;비활성화&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;setenforce 0&lt;/p&gt;
&lt;p&gt;sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# permissive mode&lt;/p&gt;
&lt;p&gt;sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;c) Repository &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; docker ce repository &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;sudo dnf config-manager --add-repo=&lt;a href=&quot;https://download.docker.com/linux/centos/docker-ce.repo&quot;&gt;https://download.docker.com/linux/centos/docker-ce.repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;centos7) &lt;/span&gt;&lt;span&gt;yum-config-manager --add-repo &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://download.docker.com/linux/centos/docker-ce.repo&quot;&gt;https://download.docker.com/linux/centos/docker-ce.repo&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;[docker-ce-stable]&lt;/p&gt;
&lt;p&gt;name=Docker CE Stable - $basearch&lt;/p&gt;
&lt;p&gt;baseurl=&lt;a href=&quot;https://download.docker.com/linux/centos/7/$basearch/stable&quot;&gt;https://download.docker.com/linux/centos/7/$basearch/stable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#baseurl=&lt;a href=&quot;https://download.docker.com/linux/centos/7/x86_64/stable&quot;&gt;https://download.docker.com/linux/centos/7/x86_64/stable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;gpgkey=&lt;a href=&quot;https://download.docker.com/linux/centos/gpg&quot;&gt;https://download.docker.com/linux/centos/gpg&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;yum install docker-ce&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; kubernetes repository &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/yum.repos.d/kubernetes.repo&lt;/p&gt;
&lt;p&gt;[kubernetes]&lt;/p&gt;
&lt;p&gt;name=Kubernetes&lt;/p&gt;
&lt;p&gt;baseurl=&lt;a href=&quot;https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64&quot;&gt;https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;repo_gpgcheck=1&lt;/p&gt;
&lt;p&gt;gpgkey=&lt;a href=&quot;https://packages.cloud.google.com/yum/doc/yum-key.gpg&quot;&gt;https://packages.cloud.google.com/yum/doc/yum-key.gpg&lt;/a&gt; &lt;a href=&quot;https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg&quot;&gt;https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; CentOS8 BaseOS &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/yum.repos.d/CentOS-Base.repo&lt;/p&gt;
&lt;p&gt;[centos8-base]&lt;/p&gt;
&lt;p&gt;name=CentOS-$releasever - Base&lt;/p&gt;
&lt;p&gt;mirrorlist=&lt;a href=&quot;http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=BaseOS&amp;amp;infra=$infra&quot;&gt;http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=BaseOS&amp;amp;infra=$infra&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#baseurl=&lt;a href=&quot;http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/&quot;&gt;http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#baseurl=&lt;a href=&quot;http://mirror.centos.org/centos/8.1.1911/BaseOS/x86_64/os/&quot;&gt;http://mirror.centos.org/centos/8.1.1911/BaseOS/x86_64/os/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; CentOS8 Extras &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/yum.repos.d/CentOS-Extras.repo&lt;/p&gt;
&lt;p&gt;[centos8-extras]&lt;/p&gt;
&lt;p&gt;name=CentOS-$releasever - Extras&lt;/p&gt;
&lt;p&gt;mirrorlist=&lt;a href=&quot;http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=extras&amp;amp;infra=$infra&quot;&gt;http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=extras&amp;amp;infra=$infra&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#baseurl=&lt;a href=&quot;http://mirror.centos.org/$contentdir/$releasever/extras/$basearch/os/&quot;&gt;http://mirror.centos.org/$contentdir/$releasever/extras/$basearch/os/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; CentOS8 AppStream &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/yum.repos.d/CentOS-AppStream.repo&lt;/p&gt;
&lt;p&gt;[centos8-appstream]&lt;/p&gt;
&lt;p&gt;name=CentOS-$releasever - AppStream&lt;/p&gt;
&lt;p&gt;mirrorlist=&lt;a href=&quot;http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=AppStream&amp;amp;infra=$infra&quot;&gt;http://mirrorlist.centos.org/?release=$releasever&amp;amp;arch=$basearch&amp;amp;repo=AppStream&amp;amp;infra=$infra&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#baseurl=&lt;a href=&quot;http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/&quot;&gt;http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;gpgcheck=1&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;d) Sync the packages and create the repository&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;dnf update; dnf repolist;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;for repo in \&lt;/p&gt;
&lt;p&gt;centos8-base \&lt;/p&gt;
&lt;p&gt;centos8-extras \&lt;/p&gt;
&lt;p&gt;centos8-appstream \&lt;/p&gt;
&lt;p&gt;docker-ce-stable \&lt;/p&gt;
&lt;p&gt;kubernetes&lt;/p&gt;
&lt;p&gt;do&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;reposync --gpgcheck -lm --repoid=${repo} --download_path=/var/www/html/repos&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;createrepo -v /var/www/html/repos/${repo} -o /var/www/html/repos/${repo}&lt;/p&gt;
&lt;p&gt;done&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;e) Compress tar Repository Packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tar -cvf kubenetes-repo.tar /var/www/html/repos&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Offline Install Repository Server&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;a) Prepare the webserver&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;dnf install httpd&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b) Extract tar Repository Packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tar -xvzf kubenetes-repo.tar /var/www/html/&lt;/p&gt;
&lt;p&gt;ls /var/www/html/repos&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;c) Permission repository files&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;chmod -R +r /var/www/html/repos&lt;/p&gt;
&lt;p&gt;restorecon -vR /var/www/html&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;d) Add the firewall rules&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;sudo firewall-cmd --permanent --add-service=http&lt;/p&gt;
&lt;p&gt;sudo firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;e) Enable and start webserver&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;systemctl enable httpd&lt;/p&gt;
&lt;p&gt;systemctl start httpd&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. Kubernetes Offline Installation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Prepare Packages/Images for Kubernetes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;a) Obtaining Packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt; rpm package&lt;/span&gt;&lt;span&gt;로 설치 시&lt;/span&gt;&lt;span&gt; (offline yum server &lt;/span&gt;&lt;span&gt;구성 시 생략&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;yum makecache --timer&lt;/p&gt;
&lt;p&gt;yumdownloader --resolve kubelet kubeadm kubectl&lt;/p&gt;
&lt;p&gt;35625b6ab1da6c58ce4946742181c0dcf9ac9b6c2b5bea2c13eed4876024c342-kubectl-1.17.3-0.x86_64.rpm&lt;/p&gt;
&lt;p&gt;3f1db71d0bb6d72bc956d788ffee737714e5717c629b26355a2dcf1dba4ad231-kubelet-1.17.3-0.x86_64.rpm&lt;/p&gt;
&lt;p&gt;d0c889d5fae925a9266aa521f6aed361ea53792c86a51c38f5d92cd3f03e2d30-kubeadm-1.17.3-0.x86_64.rpm&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;yumdownloader --assumeyes --destdir=&amp;lt;your_rpm_dir&amp;gt; --resolve yum-utils kubeadm-1.17.* kubelet-1.17.* kubectl-1.17.* ebtables&lt;/p&gt;
&lt;p&gt;yum install -y --cacheonly --disablerepo=* &amp;lt;your_rpm_dir&amp;gt;/*.rpm&lt;/p&gt;
&lt;p&gt;kubeadm config images list&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b) Obtaining images&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; pull kubernetes images&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;docker pull k8s.gcr.io/kube-apiserver:v1.17.3&lt;/p&gt;
&lt;p&gt;docker pull k8s.gcr.io/kube-controller-manager:v1.17.3&lt;/p&gt;
&lt;p&gt;docker pull k8s.gcr.io/kube-scheduler:v1.17.3&lt;/p&gt;
&lt;p&gt;docker pull k8s.gcr.io/kube-proxy:v1.17.3&lt;/p&gt;
&lt;p&gt;docker pull k8s.gcr.io/pause:3.1&lt;/p&gt;
&lt;p&gt;docker pull k8s.gcr.io/etcd:3.4.3-0&lt;/p&gt;
&lt;p&gt;docker pull k8s.gcr.io/coredns:1.6.5&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker pull kubernetesui/dashboard:v2.0.3&lt;/p&gt;
&lt;p&gt;docker pull kubernetesui/metrics-scraper:v1.0.4&lt;/p&gt;
&lt;p&gt;docker pull weaveworks/weave-npc:2.6.0&lt;/p&gt;
&lt;p&gt;docker pull weaveworks/weave-kube:2.6.0&lt;/p&gt;
&lt;p&gt;docker pull quay.io/coreos/flannel:v0.11.0-amd64&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;※ dashboard&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kubernetesui/dashboard:v2.0.3&lt;/p&gt;
&lt;p&gt;kubernetesui/metrics-scraper:v1.0.4&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/kubernetes/dashboard/releases&quot;&gt;https://github.com/kubernetes/dashboard/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;=&amp;gt; k&lt;/span&gt;&lt;span&gt;ubernetes &lt;/span&gt;&lt;span&gt;지원&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;버전에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;맞는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;버전&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;Kubernetes version&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;1.15&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;1.16&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;1.17&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;1.18&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;Compatibility&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;?&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;?&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;?&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;✓&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Exporting images&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# Create a directory to store&lt;/p&gt;
&lt;p&gt;mkdir -p ~/k8s-images&lt;/p&gt;
&lt;p&gt;cd ~/k8s-images&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Export kubernetes images&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;docker save -o kube-master-images.tar \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/kube-proxy:v1.17.3 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/kube-apiserver:v1.17.3 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/kube-controller-manager:v1.17.3 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/kube-scheduler:v1.17.3 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/coredns:1.6.5 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/etcd:3.4.3-0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/pause:3.1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker save -o kube-node-images.tar \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/kube-proxy:v1.17.3 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/coredns:1.6.5 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;k8s.gcr.io/pause:3.1 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;jettech/kube-webhook-certgen:v1.0.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker save -o dashboard-images.tar \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetesui/dashboard:v2.0.0-rc5 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;kubernetesui/metrics-scraper:v1.0.3&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker save -o network-images.tar \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;weaveworks/weave-npc:2.6.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;weaveworks/weave-kube:2.6.0 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;quay.io/coreos/flannel:v0.11.0-amd64&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;c) pod-network download&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Weave network download&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;export kubever=$(kubectl version | base64 | tr -d '\n')&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://cloud.weave.works/k8s/net?k8s-version=$kubever&quot;&gt;https://cloud.weave.works/k8s/net?k8s-version=$kubever&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;kube-flannel download&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&quot;&gt;https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;d) dashboard download&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/kubernetes/dashboard/releases&quot;&gt;https://github.com/kubernetes/dashboard/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;=&amp;gt; kubernetes &lt;/span&gt;&lt;span&gt;지원 버전에 맞는&lt;/span&gt;&lt;span&gt; dashboard &lt;/span&gt;&lt;span&gt;버전 설치&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml&quot;&gt;https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) VM &lt;/span&gt;&lt;span&gt;환경 구성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Architecture&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;hostname&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;address&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cpu&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;memory&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;disk&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;master.k8s.paas&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;x.x.20.11&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;4&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;8G&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;300G&lt;/p&gt;
&lt;p&gt;node01.k8s.paas&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;x.x.20.21&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;4G&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;300G&lt;/p&gt;
&lt;p&gt;node02.k8s.paas&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;x.x.20.22&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;2&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;4G&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;300G&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; hostname &lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;hostnamectl --static set-hostname master01.k8s.paas&lt;/p&gt;
&lt;p&gt;hostnamectl&lt;/p&gt;
&lt;p&gt;hostname&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /etc/hosts&lt;/p&gt;
&lt;p&gt;x.x.20.11 master.k8s.paas&lt;/p&gt;
&lt;p&gt;x.x.20.21 node01.k8s.paas&lt;/p&gt;
&lt;p&gt;x.x.20.22 node02.k8s.paas&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; network connection &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;# create a connection with the name enp0s8&lt;/p&gt;
&lt;p&gt;# nmcli con add type ethernet con-name enp0s3 ifname enp0s3&lt;/p&gt;
&lt;p&gt;nmcli con mod enp0s3 ipv4.address x.x.20.11/24&lt;/p&gt;
&lt;p&gt;nmcli con mod enp0s3 ipv4.gateway x.x.20.1&lt;/p&gt;
&lt;p&gt;nmcli con mod enp0s3 ipv4.method manual&lt;/p&gt;
&lt;p&gt;nmcli con mod enp0s3 +ipv4.dns 8.8.8.8&lt;/p&gt;
&lt;p&gt;nmcli con mod enp0s3 +ipv4.dns-search k8s.paas&lt;/p&gt;
&lt;p&gt;nmcli con mod enp0s3 connection.autoconnect yes&lt;/p&gt;
&lt;p&gt;nmcli con up enp0s3&lt;/p&gt;
&lt;p&gt;nmcli con show enp0s3&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;more /etc/resolv.conf&lt;/p&gt;
&lt;p&gt;more /etc/sysconfig/network-scripts/ifcfg-enp0s3&lt;/p&gt;
&lt;p&gt;nmcli dev show enp0s3&lt;/p&gt;
&lt;p&gt;nmcli dev status&lt;/p&gt;
&lt;p&gt;#nmcli con del enp0s3&lt;/p&gt;
&lt;p&gt;#nmcli con del f653ccb6-4a12-496b-bceb-78f0ea33aa72&lt;/p&gt;
&lt;p&gt;ip a&lt;/p&gt;
&lt;p&gt;ip r&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● 방화벽 설정&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;# systemctl disable firewalld &amp;amp;&amp;amp; systemctl stop firewalld&lt;/p&gt;
&lt;p&gt;▶ Kubernetes service ports in Linux firewall&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;# Master node&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;firewall-cmd --add-port={6443,2379-2380,10250,10251,10252,5473,179,5473}/tcp --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --add-port={4789,8285,8472}/udp --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Worker nodes&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;firewall-cmd --add-port={10250,30000-32767,5473,179,5473}/tcp --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --add-port={4789,8285,8472}/udp --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● 필요한 패키지 설치&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt; install yum-utils device-mapper-persistent-data lvm2&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt; install wget git net-tools bind-utils iptables-services bash-completion kexec-tools sos psacct vim&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b) Yum Repository &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;매&lt;/span&gt;&lt;span&gt; vm &lt;/span&gt;&lt;span&gt;별로 추가&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/yum.repos.d/kubernetes-offline.repo&lt;/p&gt;
&lt;p&gt;[docker-ce-stable]&lt;/p&gt;
&lt;p&gt;name=docker-ce-stable&lt;/p&gt;
&lt;p&gt;baseurl=http://&amp;lt;server_IP&amp;gt;/repos/docker-ce-stable&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[kubernetes]&lt;/p&gt;
&lt;p&gt;name=kubernetes&lt;/p&gt;
&lt;p&gt;baseurl=http://&amp;lt;server_IP&amp;gt;/repos/kubernetes&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[centos8-base]&lt;/p&gt;
&lt;p&gt;name=centos8-base&lt;/p&gt;
&lt;p&gt;baseurl=http://&amp;lt;server_IP&amp;gt;/repos/centos8-base&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[centos8-extras]&lt;/p&gt;
&lt;p&gt;name=centos8-extras&lt;/p&gt;
&lt;p&gt;baseurl=http://&amp;lt;server_IP&amp;gt;/repos/centos8-extras&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[centos8-appstream]&lt;/p&gt;
&lt;p&gt;name=centos8-appstream&lt;/p&gt;
&lt;p&gt;baseurl=http://&amp;lt;server_IP&amp;gt;/repos/centos8-appstream&lt;/p&gt;
&lt;p&gt;enabled=1&lt;/p&gt;
&lt;p&gt;gpgcheck=0&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;c) install Docker&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● &lt;/span&gt;&lt;span&gt;docker version list&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;dnf list docker-ce --showduplicates | sort -r&lt;/p&gt;
&lt;p&gt;&lt;span&gt;docker-ce.x86_64&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;3:18.09.1-3.el7&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@docker-ce-stable&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;- &lt;/span&gt;&lt;span&gt;안정된 버전이&lt;/span&gt;&lt;span&gt; @&lt;/span&gt;&lt;span&gt;로 표시됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Install docker&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;# latest version&lt;/p&gt;
&lt;p&gt;dnf install --nobest docker-ce&lt;/p&gt;
&lt;p&gt;dnf install docker-ce&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# stable version&lt;/p&gt;
&lt;p&gt;dnf update &amp;amp;&amp;amp; dnf install docker-ce-3:18.09.1-3.el7 --allowerasing&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl enable --now docker&lt;/p&gt;
&lt;p&gt;newgrp docker&lt;/p&gt;
&lt;p&gt;docker version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;usermod -aG docker $USER&lt;/p&gt;
&lt;p&gt;usermod -aG docker paasuser&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# remove &lt;/span&gt;&lt;span&gt;docker group&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;#gpasswd -d paasuser docker&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● &lt;/span&gt;&lt;span&gt;daemon.json &lt;/span&gt;&lt;span&gt;수정&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;gt; /etc/docker/daemon.json &amp;lt;&amp;lt;EOF&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;exec-opts&quot;: [&quot;native.cgroupdriver=systemd&quot;],&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;log-driver&quot;: &quot;json-file&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;log-opts&quot;: {&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;max-size&quot;: &quot;100m&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;},&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;storage-driver&quot;: &quot;overlay2&quot;,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;storage-opts&quot;: [&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;overlay2.override_kernel_check=true&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;],&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;insecure-registries&quot;: [&quot;registry.k8s.paas:5000&quot;,&quot;172.30.0.0/16&quot;]&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; docker &lt;/span&gt;&lt;span&gt;재시작&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;systemctl daemon-reload&lt;/p&gt;
&lt;p&gt;systemctl restart docker&lt;/p&gt;
&lt;p&gt;systemctl status docker&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;d) Install Kubernetes packages&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; kubernetes package &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; systemctl reboot&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;yum &lt;/span&gt;&lt;span&gt;install -y epel-release kubelet kubeadm kubectl kubernetes-cni --disableexcludes=kubernetes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;systemctl enable --now kubelet&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;curl -LO &lt;a href=&quot;https://storage.googleapis.com/kubernetes-release/release/v1.19.0-rc.4/bin/linux/amd64/kubectl&quot;&gt;https://storage.googleapis.com/kubernetes-release/release/v1.19.0-rc.4/bin/linux/amd64/kubectl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;curl -LO &lt;a href=&quot;https://storage.googleapis.com/kubernetes-release/release/v1.17.9/bin/linux/amd64/kubectl&quot;&gt;https://storage.googleapis.com/kubernetes-release/release/v1.17.9/bin/linux/amd64/kubectl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/releases&quot;&gt;https://github.com/kubernetes/kubernetes/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;yumdownloader --assumeyes --destdir=&amp;lt;your_rpm_dir&amp;gt; --resolve yum-utils kubeadm-1.17.* kubelet-1.17.* kubectl-1.17.* ebtables&lt;/p&gt;
&lt;p&gt;yum install -y --cacheonly --disablerepo=* &amp;lt;your_rpm_dir&amp;gt;/*.rpm&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubeadm config images list&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;※ rpm package로 설치 시&lt;/p&gt;
&lt;p&gt;rpm -ivh --replacefiles --replacepkgs ~/k8s-images/*.rpm&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; net bridge &lt;/span&gt;&lt;span&gt;등록&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/sysctl.d/k8s.conf&lt;/p&gt;
&lt;p&gt;net.bridge.bridge-nf-call-ip6tables = 1&lt;/p&gt;
&lt;p&gt;net.bridge.bridge-nf-call-iptables = 1&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;p&gt;modprobe br_netfilter&lt;/p&gt;
&lt;p&gt;modprobe overlay&lt;/p&gt;
&lt;p&gt;echo '1' &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;/p&gt;
&lt;p&gt;sysctl --system&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; swap &lt;/span&gt;&lt;span&gt;비활성화&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;swapoff -a &amp;amp;&amp;amp; sed -i '/ swap / s/^/#/' /etc/fstab&lt;/p&gt;
&lt;p&gt;cat /etc/fstab&lt;/p&gt;
&lt;p&gt;#/dev/mapper/cl-swap&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;swap&lt;span&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;swap&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;defaults&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0 0&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Configure cgroup driver used by kubelet on control-plane node&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;vi /var/lib/kubelet/config.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: kubelet.config.k8s.io/v1beta1&lt;/p&gt;
&lt;p&gt;kind: KubeletConfiguration&lt;/p&gt;
&lt;p&gt;cgroupDriver: &amp;lt;value&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;e) VM &lt;/span&gt;&lt;span&gt;복제&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt; master&lt;/span&gt;&lt;span&gt;서버를 구성 후 이를&lt;/span&gt;&lt;span&gt; node&lt;/span&gt;&lt;span&gt;서버로 복제하여 사용할 경우&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; VM&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; hostname &lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;hostnamectl --static set-hostname node01.k8s.paas&lt;/p&gt;
&lt;p&gt;hostnamectl&lt;/p&gt;
&lt;p&gt;hostname&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi /etc/hosts&lt;/p&gt;
&lt;p&gt;x.x.20.11 master.k8s.paas&lt;/p&gt;
&lt;p&gt;x.x.20.21 node01.k8s.paas&lt;/p&gt;
&lt;p&gt;x.x.20.22 node02.k8s.paas&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; network connection &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;nmcli con mod enp0s3 ipv4.address x.x.25.61/24&lt;/p&gt;
&lt;p&gt;nmcli con up enp0s3&lt;/p&gt;
&lt;p&gt;nmcli con show enp0s3&lt;/p&gt;
&lt;p&gt;more /etc/resolv.conf&lt;/p&gt;
&lt;p&gt;more /etc/sysconfig/network-scripts/ifcfg-enp0s3&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; ssh keygen&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;ssh-keygen&lt;/p&gt;
&lt;p&gt;cat ~/.ssh/id_rsa.pub&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ssh-copy-id master01&lt;/p&gt;
&lt;p&gt;ssh-copy-id worker01&lt;/p&gt;
&lt;p&gt;ssh-copy-id worker02&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;lt;&amp;lt;EOF&lt;/p&gt;
&lt;p&gt;ssh-rsa ...root@master01.k8s.paas&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ssh master01&lt;/p&gt;
&lt;p&gt;ssh worker01&lt;/p&gt;
&lt;p&gt;ssh worker02&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cat ~/.ssh/authorized_keys&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;● 각&lt;/span&gt;&lt;span&gt; VM&lt;/span&gt;&lt;span&gt;별&lt;/span&gt;&lt;span&gt; Kubernetes images Load&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;# master&lt;/p&gt;
&lt;p&gt;docker load -i ~/k8s-images/kube-master-images.tar&lt;/p&gt;
&lt;p&gt;# node&lt;/p&gt;
&lt;p&gt;docker load -i ~/k8s-images/kube-node-images.tar&lt;/p&gt;
&lt;p&gt;# network (master, node)&lt;/p&gt;
&lt;p&gt;docker load -i ~/k8s-images/kube-network-images.tar&lt;/p&gt;
&lt;p&gt;# dashboard (master, node)&lt;/p&gt;
&lt;p&gt;docker load -i ~/k8s-images/kube-dashboard-images.tar&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3) Offline Install Kubernetes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;a) Configure a master node&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;# centos8)&lt;/p&gt;
&lt;p&gt;dnf provides tc&lt;/p&gt;
&lt;p&gt;dnf install iproute-tc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Initialize your control-plane node&lt;/p&gt;
&lt;p&gt;lsmod | grep br_netfilter&lt;/p&gt;
&lt;p&gt;systemctl enable kubelet&lt;/p&gt;
&lt;p&gt;kubeadm config images pull&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.6&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubeadm init&lt;/p&gt;
&lt;p&gt;#kubeadm init --ignore-preflight-errors=all --pod-network-cidr 10.244.0.0/16&lt;/p&gt;
&lt;p&gt;kubeadm alpha certs certificate-key&lt;/p&gt;
&lt;p&gt;cd35c5f3a27bf418bbc9f1f778e9f7fe865f008dc404a2b2c44dbe2a4f314f12&lt;/p&gt;
&lt;p&gt;kubeadm init phase upload-certs --upload-certs --certificate-key=SOME_VALUE --ignore-preflight-errors=all --pod-network-cidr 10.244.0.0/16&lt;/p&gt;
&lt;p&gt;kubeadm init phase bootstrap-token&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/&quot;&gt;https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;To start using your cluster, you need to run the following as a regular user:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;mkdir -p $HOME/.kube&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;sudo chown $(id -u):$(id -g) $HOME/.kube/config&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You should now deploy a pod network to the cluster.&lt;/p&gt;
&lt;p&gt;Run &quot;kubectl apply -f [podnetwork].yaml&quot; with one of the options listed at:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;https://kubernetes.io/docs/concepts/cluster-administration/addons/&quot;&gt;https://kubernetes.io/docs/concepts/cluster-administration/addons/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then you can join any number of worker nodes by running the following on each as root:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubeadm join 192.168.x.x:6443 --token qza4mi.qtcm7soz32jwatpi \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;--discovery-token-ca-cert-hash sha256:553f30ff39cbf3929cd30c8e2d57109641a43a21e6ec4a909e512512f9789756&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b) KUBECONFIG &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;unset KUBECONFIG&lt;/p&gt;
&lt;p&gt;echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Enable bash completion for kubectl&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt; install bash-completion -y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kubectl completion bash &amp;gt;/etc/bash_completion.d/kubectl&lt;/p&gt;
&lt;p&gt;echo 'alias k=kubectl' &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo 'complete -F __start_kubectl k' &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;c) cluster &lt;/span&gt;&lt;span&gt;사용 설정&lt;/span&gt;&lt;span&gt; (master node)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;mkdir -p $HOME/.kube&lt;/p&gt;
&lt;p&gt;cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&lt;/p&gt;
&lt;p&gt;chown $(id -u):$(id -g) $HOME/.kube/config&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; client&lt;/span&gt;&lt;span&gt;서버에서&lt;/span&gt;&lt;span&gt; cluster &lt;/span&gt;&lt;span&gt;사용 시&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;scp root@master01.k8s.paas:/etc/kubernetes/admin.conf ~/.kube/config&lt;/p&gt;
&lt;p&gt;chown $(id -u):$(id -g) ~/.kube/config&lt;/p&gt;
&lt;p&gt;chmod 644 /root/.kube/config&lt;/p&gt;
&lt;p&gt;echo 'export KUBECONFIG=~/.kube/config' &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;●&lt;/span&gt;&lt;span&gt; Start and enable kubelet.service&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;systemctl enable kubelet.service&lt;/p&gt;
&lt;p&gt;systemctl start kubelet.service&lt;/p&gt;
&lt;p&gt;systemctl status kubelet.service&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;d) pod network &lt;/span&gt;&lt;span&gt;설정&lt;/span&gt;&lt;span&gt; (master)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;# Flannel network&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kubectl apply -f &lt;a href=&quot;https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&quot;&gt;https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;kubectl apply -f ~/k8s-images/kube-flannel.yml&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubectl get pods -o wide -w -n kube-system&lt;/p&gt;
&lt;p&gt;kubectl -n kube-system get pods -l app=flannel&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Weave network&lt;/p&gt;
&lt;p&gt;export kubever=$(kubectl version | base64 | tr -d '\n')&lt;/p&gt;
&lt;p&gt;kubectl apply -f &quot;&lt;a href=&quot;https://cloud.weave.works/k8s/net?k8s-version=$kubever&quot;&gt;https://cloud.weave.works/k8s/net?k8s-version=$kubever&lt;/a&gt;&quot;&lt;/p&gt;
&lt;p&gt;kubectl&lt;span&gt;&amp;nbsp; &lt;/span&gt;get pods&lt;span&gt;&amp;nbsp; &lt;/span&gt;--all-namespaces&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubectl apply -f ~/k8s-images/weave.yml&lt;/p&gt;
&lt;p&gt;sudo curl -L git.io/weave -o /usr/local/bin/weave&lt;/p&gt;
&lt;p&gt;sudo chmod a+x /usr/local/bin/weave&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# calico 사용 시 (192.168.0.0/16)&lt;/p&gt;
&lt;p&gt;kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address={ip address}&lt;/p&gt;
&lt;p&gt;kubectl apply -f &lt;a href=&quot;https://docs.projectcalico.org/v3.8/manifests/calico.yaml&quot;&gt;https://docs.projectcalico.org/v3.8/manifests/calico.yaml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubectl taint nodes --all node-role.kubernetes.io/master-&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#systemctl restart docker&lt;/p&gt;
&lt;p&gt;#systemctl status docker&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;e) join worker nodes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt; worker node&lt;/span&gt;&lt;span&gt;에서 실행&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;kubeadm join $cluster-ip:6443 --token 9rfr3o.n1i8di8exqeut723 \&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;--discovery-token-ca-cert-hash sha256:4184bd55ac8a8daf29049fd68fe24a4e258fef0b1e2289a5e77b66adc57b2084&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;kubectl get pods -n kube-system&lt;/p&gt;
&lt;p&gt;kubectl get nodes&lt;/p&gt;
&lt;p&gt;kubectl get po --all-namespaces&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;f) kubeadm re-install&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;# Master node&lt;/p&gt;
&lt;p&gt;kubectl drain master.k8s.paas --delete-local-data --force --ignore-daemonsets&lt;/p&gt;
&lt;p&gt;iptables -F &amp;amp;&amp;amp; iptables -t nat -F &amp;amp;&amp;amp; iptables -t mangle -F &amp;amp;&amp;amp; iptables -X&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;ipvsadm -C&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kubectl delete node master.k8s.paas&lt;/p&gt;
&lt;p&gt;kubeadm reset&lt;/p&gt;
&lt;p&gt;docker rm -f $(docker ps -a -q)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;rm -f $HOME/.kube/config&lt;/p&gt;
&lt;p&gt;rm -rf /etc/kubernetes&lt;/p&gt;
&lt;p&gt;rm -rf /var/lib/kubelet&lt;/p&gt;
&lt;p&gt;rm -rf /var/lib/etcd&lt;/p&gt;
&lt;p&gt;rm -rf /etc/cni/net.d&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Worker node&lt;/p&gt;
&lt;p&gt;kubeadm reset&lt;/p&gt;
&lt;p&gt;docker rm -f $(docker ps -a -q)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;#kubeadm init phase bootstrap-token&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3. Dashboard Installation (Off-line)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Install Dashboard&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;# kubectl delete ns kubernetes-dashboard&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;a) &lt;/span&gt;&lt;span&gt;cluster-admin ClusterRole Binding &lt;/span&gt;&lt;span&gt;적용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;vim ~/k8s-images/recommended.yaml&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1&lt;/p&gt;
&lt;p&gt;kind: ClusterRoleBinding&lt;/p&gt;
&lt;p&gt;metadata:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kubernetes-dashboard&lt;/p&gt;
&lt;p&gt;roleRef:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;apiGroup: rbac.authorization.k8s.io&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;kind: ClusterRole&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;name: kubernetes-dashboard =&amp;gt; cluster-admin&lt;/span&gt;&lt;span&gt;로 변경&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;subjects:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;- kind: ServiceAccount&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;name: kubernetes-dashboard&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;namespace: kubernetes-dashboard&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;install dashboard&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kubectl apply -f ~/k8s-images/recommended.yaml&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2) Dashboard login&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;) API Server&lt;/span&gt;&lt;span&gt;를 활용하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d &amp;gt;&amp;gt; kubecfg.crt&lt;/p&gt;
&lt;p&gt;cat kubecfg.crt&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d &amp;gt;&amp;gt; kubecfg.key&lt;/p&gt;
&lt;p&gt;cat kubecfg.key&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name &quot;kubernetes-ha&quot;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;신뢰할 수 있는 루트인증기관 인증서 적용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;certutil.exe -addstore &quot;Root&quot; D:\app\cert\ca.crt&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;개인용 인증서 적용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;certutil.exe -p &lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt; -user -importPFX D:\app\cert\kubecfg.p12&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;인증서 확인&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;certmgr.msc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;b) dashboard login&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep kubernetes-dashboard | awk '{print $1}')&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d &quot;:&quot; | tr -d &quot; &quot;)&lt;/p&gt;
&lt;p&gt;SECRET_NAME=$(kubectl -n kubernetes-dashboard get secrets | grep ^kubernetes-dashboard-token | cut -f1 -d ' ')&lt;/p&gt;
&lt;p&gt;TOKEN=$(kubectl -n kubernetes-dashboard describe secret $SECRET_NAME | grep -E '^token' | cut -f2 -d':' | tr -d &quot; &quot;)&lt;/p&gt;
&lt;p&gt;echo $TOKEN&lt;/p&gt;
&lt;p&gt;curl $APISERVER/api --header &quot;Authorization: Bearer $TOKEN&quot; --insecure&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://:$IP:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/&quot;&gt;&lt;span&gt;https://:$IP:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://phoenixnap.com/kb/how-to-install-kubernetes-on-centos&quot;&gt;https://phoenixnap.com/kb/how-to-install-kubernetes-on-centos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://computingforgeeks.com/install-kubernetes-cluster-on-centos-with-kubeadm/&quot;&gt;https://computingforgeeks.com/install-kubernetes-cluster-on-centos-with-kubeadm/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://docs.openshift.com/container-platform/3.11/install/disconnected_install.html&quot;&gt;https://docs.openshift.com/container-platform/3.11/install/disconnected_install.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://ahmermansoor.blogspot.com/2019/04/install-kubernetes-k8s-offline-on-centos-7.html&quot;&gt;https://ahmermansoor.blogspot.com/2019/04/install-kubernetes-k8s-offline-on-centos-7.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/access-application-cluster/web-ui-dashboard/&quot;&gt;https://kubernetes.io/ko/docs/tasks/access-application-cluster/web-ui-dashboard/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Cloud Platform/Kubernetes</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/10</guid>
      <comments>https://paas.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 19 Aug 2020 17:24:26 +0900</pubDate>
    </item>
    <item>
      <title>Using JBoss 7.2 Image and Template for OpenShift</title>
      <link>https://paas.tistory.com/8</link>
      <description>&lt;p&gt;1.&amp;nbsp;On&amp;nbsp;line&amp;nbsp;Imagestreams&amp;nbsp;and&amp;nbsp;Templates&amp;nbsp;Import &lt;br /&gt;-------------------------------------------------------------------------------- &lt;br /&gt;for&amp;nbsp;resource&amp;nbsp;in&amp;nbsp;&lt;a href=&quot;eap72-image-stream.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-image-stream.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-amq-persistent-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-amq-persistent-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-amq-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-amq-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-basic-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-basic-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-https-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-https-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-mongodb-persistent-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-mongodb-persistent-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-mongodb-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-mongodb-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-mysql-persistent-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-mysql-persistent-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-mysql-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-mysql-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-postgresql-persistent-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-postgresql-persistent-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-postgresql-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-postgresql-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-sso-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-sso-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-third-party-db-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-third-party-db-s2i.json&lt;/a&gt;&amp;nbsp;\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;eap72-tx-recovery-s2i.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-tx-recovery-s2i.json&lt;/a&gt; &lt;br /&gt;do &lt;br /&gt;&amp;nbsp;&amp;nbsp;oc&amp;nbsp;replace&amp;nbsp;-n&amp;nbsp;openshift&amp;nbsp;--force&amp;nbsp;-f&amp;nbsp;&lt;a href=&quot;https://raw.githubusercontent.com/jboss-container-images/jboss-eap-7-openshift-image/eap72/templates/$&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://raw.githubusercontent.com/jboss-container-images/jboss-eap-7-openshift-image/eap72/templates/$&lt;/a&gt;{resource} &lt;br /&gt;done &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Off&amp;nbsp;Line&amp;nbsp;Imagestreams&amp;nbsp;and&amp;nbsp;Templates&amp;nbsp;Import &lt;br /&gt;-------------------------------------------------------------------------------- &lt;br /&gt;2.1&amp;nbsp;Obtaining&amp;nbsp;images&amp;nbsp;(on&amp;nbsp;line) &lt;br /&gt;docker&amp;nbsp;login&amp;nbsp;&lt;a href=&quot;registry.redhat.io&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;pull&amp;nbsp;&lt;a href=&quot;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;save&amp;nbsp;-o&amp;nbsp;&lt;a href=&quot;eap72-openshift.tar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-openshift.tar&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;2.2&amp;nbsp;private&amp;nbsp;docker&amp;nbsp;registry&amp;nbsp;Image&amp;nbsp;Import&amp;nbsp;(off&amp;nbsp;line) &lt;br /&gt;※&amp;nbsp;prerequisites:&amp;nbsp;private&amp;nbsp;docker&amp;nbsp;registry&amp;nbsp;(distribution&amp;nbsp;docker,&amp;nbsp;Quay,&amp;nbsp;etc) &lt;br /&gt;&lt;br /&gt;docker&amp;nbsp;load&amp;nbsp;-i&amp;nbsp;&lt;a href=&quot;eap72-openshift.tar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-openshift.tar&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;docker&amp;nbsp;login&amp;nbsp;-u user -p&amp;nbsp;$(oc&amp;nbsp;whoami&amp;nbsp;-t)&amp;nbsp;&lt;a href=&quot;registry.example.com:5000&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;tag&amp;nbsp;&lt;a href=&quot;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;tag&amp;nbsp;&lt;a href=&quot;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:1.0&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;push&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;push&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:1.0&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;2.3&amp;nbsp;Obtaining&amp;nbsp;and&amp;nbsp;Modifing&amp;nbsp;ImageStream&amp;nbsp;template&amp;nbsp;(ex.&amp;nbsp;&lt;a href=&quot;eap72-image-stream.json)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-image-stream.json)&lt;/a&gt; &lt;br /&gt;git&amp;nbsp;clone&amp;nbsp;&lt;a href=&quot;https://github.com/jboss-container-images/jboss-eap-7-openshift-image.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/jboss-container-images/jboss-eap-7-openshift-image.git&lt;/a&gt; &lt;br /&gt;cd&amp;nbsp;jboss-eap-7-openshift-image &lt;br /&gt;vi&amp;nbsp;&lt;a href=&quot;eap72-image-stream.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap72-image-stream.json&lt;/a&gt; &lt;br /&gt;#&amp;nbsp;DockerImage &lt;br /&gt;&lt;a href=&quot;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io/jboss-eap-7/eap72-openshift:latest&lt;/a&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;registry.redhat.io/jboss-eap-7/eap72-openshift:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.redhat.io/jboss-eap-7/eap72-openshift:1.0&lt;/a&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/eap72-openshift:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/eap72-openshift:1.0&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;2.4&amp;nbsp;Importing&amp;nbsp;ImageStreams&amp;nbsp;and&amp;nbsp;Templates &lt;br /&gt;oc&amp;nbsp;create&amp;nbsp;-f&amp;nbsp;templates&amp;nbsp;-n&amp;nbsp;openshift &lt;br /&gt;&lt;br /&gt;※&amp;nbsp;push&amp;nbsp;images&amp;nbsp;from&amp;nbsp;the&amp;nbsp;integrated&amp;nbsp;container&amp;nbsp;registry&amp;nbsp;directly &lt;br /&gt;docker&amp;nbsp;login&amp;nbsp;-p&amp;nbsp;$(oc&amp;nbsp;whoami&amp;nbsp;-t)&amp;nbsp;-e&amp;nbsp;unused&amp;nbsp;-u&amp;nbsp;unused&amp;nbsp;&lt;a href=&quot;docker-registry-default.apps.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docker-registry-default.apps.example.com&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;tag&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;docker-registry-default.apps.example.com/openshift/jboss-eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docker-registry-default.apps.example.com/openshift/jboss-eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;push&amp;nbsp;&lt;a href=&quot;docker-registry-default.apps.example.com/openshift/jboss-eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docker-registry-default.apps.example.com/openshift/jboss-eap72-openshift:latest&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;2.5&amp;nbsp;Updating&amp;nbsp;and&amp;nbsp;Tagging&amp;nbsp;Existing&amp;nbsp;Images &lt;br /&gt;oc&amp;nbsp;import-image&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/jboss-eap-7/jboss-eap72-openshift:latest&lt;/a&gt;&amp;nbsp;--insecure=true&amp;nbsp;--confirm&amp;nbsp;-n&amp;nbsp;openshift &lt;br /&gt;oc&amp;nbsp;tag&amp;nbsp;jboss-eap72-openshift:latest&amp;nbsp;jboss-eap72-openshift:1.0&amp;nbsp;-n&amp;nbsp;openshift &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;Template&amp;nbsp;spec&amp;nbsp;check&amp;nbsp;(parameter) &lt;br /&gt;-------------------------------------------------------------------------------- &lt;br /&gt;oc&amp;nbsp;process&amp;nbsp;eap72-mysql-s2i&amp;nbsp;--parameters&amp;nbsp;-n&amp;nbsp;openshift&amp;nbsp;&amp;gt;&amp;nbsp;&lt;a href=&quot;tem_eap72-mysql-s2i_spec.txt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tem_eap72-mysql-s2i_spec.txt&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;Creating&amp;nbsp;New&amp;nbsp;Applications&amp;nbsp;With&amp;nbsp;Templates &lt;br /&gt;-------------------------------------------------------------------------------- &lt;br /&gt;●&amp;nbsp;Application&amp;nbsp;Building&amp;nbsp;with&amp;nbsp;parameter&amp;nbsp;settings &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;&lt;a href=&quot;build.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;build.sh&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;#!/bin/sh &lt;br /&gt;&lt;br /&gt;PROJECT_NAME=eap72-mysql-s2i &lt;br /&gt;SVC_ACCOUNT_NAME=eap7-service-account &lt;br /&gt;SECRET_NAME=eap7-app-secret &lt;br /&gt;CUSTOM_DB_USERNAME=openshift &lt;br /&gt;CUSTOM_DB_PASSWORD=password &lt;br /&gt;CUSTOM_DB_NAME=mysql57 &lt;br /&gt;TEMPLATE_NAME=eap72-mysql-s2i &lt;br /&gt;&lt;br /&gt;oc&amp;nbsp;new-project&amp;nbsp;$PROJECT_NAME&amp;nbsp;--display-name=&quot;eap72-mysql-s2i&quot;&amp;nbsp;--description=&quot;EAP72-MYSQL-S2I&amp;nbsp;TEST&quot; &lt;br /&gt;oc&amp;nbsp;project&amp;nbsp;$PROJECT_NAME &lt;br /&gt;oc&amp;nbsp;create&amp;nbsp;serviceaccount&amp;nbsp;$SVC_ACCOUNT_NAME&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;policy&amp;nbsp;add-role-to-user&amp;nbsp;view&amp;nbsp;system:serviceaccount:$(oc&amp;nbsp;project&amp;nbsp;-q):$SVC_ACCOUNT_NAME&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;policy&amp;nbsp;add-role-to-user&amp;nbsp;view&amp;nbsp;system:serviceaccount:$(oc&amp;nbsp;project&amp;nbsp;-q):default&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;&lt;br /&gt;oc&amp;nbsp;create&amp;nbsp;secret&amp;nbsp;generic&amp;nbsp;$SECRET_NAME&amp;nbsp;--from-literal=username=developer --from-literal=password=password&amp;nbsp;&lt;a href=&quot;--type=kubernetes.io/basic-auth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;--type=kubernetes.io/basic-auth&lt;/a&gt;&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;secrets&amp;nbsp;link&amp;nbsp;&amp;nbsp;$SVC_ACCOUNT_NAME&amp;nbsp;$SECRET_NAME&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;&lt;br /&gt;#oc&amp;nbsp;get&amp;nbsp;--export&amp;nbsp;template&amp;nbsp;-n&amp;nbsp;openshift&amp;nbsp;-o&amp;nbsp;json&amp;nbsp;$TEMPLATE_NAME&amp;nbsp;&amp;gt;&amp;nbsp;$&lt;a href=&quot;TEMPLATE_NAME.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TEMPLATE_NAME.json&lt;/a&gt; &lt;br /&gt;#oc&amp;nbsp;process&amp;nbsp;-f&amp;nbsp;$&lt;a href=&quot;TEMPLATE_NAME.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TEMPLATE_NAME.json&lt;/a&gt;&amp;nbsp;-p&amp;nbsp;DB_USERNAME=$CUSTOM_DB_USERNAME&amp;nbsp;-p&amp;nbsp;DB_PASSWORD=$CUSTOM_DB_PASSWORD&amp;nbsp;-p&amp;nbsp;DB_DATABASE=$CUSTOM_DB_NAME&amp;nbsp;|&amp;nbsp;oc&amp;nbsp;create&amp;nbsp;-f&amp;nbsp;-&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;process&amp;nbsp;$TEMPLATE_NAME&amp;nbsp;-p&amp;nbsp;DB_USERNAME=$CUSTOM_DB_USERNAME&amp;nbsp;-p&amp;nbsp;DB_PASSWORD=$CUSTOM_DB_PASSWORD&amp;nbsp;-p&amp;nbsp;DB_DATABASE=$CUSTOM_DB_NAME&amp;nbsp;|&amp;nbsp;oc&amp;nbsp;create&amp;nbsp;-f&amp;nbsp;-&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;app&amp;nbsp;test &lt;br /&gt;-------------------------------------------------------------------------------- &lt;br /&gt;oc&amp;nbsp;logs&amp;nbsp;-f&amp;nbsp;bc/eap-app &lt;br /&gt;oc&amp;nbsp;logs&amp;nbsp;-f&amp;nbsp;dc/eap-app &lt;br /&gt;oc&amp;nbsp;get&amp;nbsp;route&amp;nbsp;-n&amp;nbsp;eap72-mysql-s2i &lt;br /&gt;oc&amp;nbsp;describe&amp;nbsp;route&amp;nbsp;eap-app&amp;nbsp;-n&amp;nbsp;eap72-mysql-s2i &lt;br /&gt;curl&amp;nbsp;&lt;a href=&quot;eap-app-eap72-mysql-s2i.apps.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;eap-app-eap72-mysql-s2i.apps.example.com&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Reference&amp;nbsp;URL) &lt;br /&gt;&lt;a href=&quot;https://github.com/jboss-container-images/jboss-eap-7-openshift-image/blob/eap72-dev/docs/templates/eap72-mysql-s2i.adoc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/jboss-container-images/jboss-eap-7-openshift-image/blob/eap72-dev/docs/templates/eap72-mysql-s2i.adoc&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.2/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Cloud Platform/OpenShift</category>
      <category>Container</category>
      <category>docker</category>
      <category>openshift</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/8</guid>
      <comments>https://paas.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 29 Jul 2019 17:51:17 +0900</pubDate>
    </item>
    <item>
      <title>JBoss Application / Web Server 설치 가이드</title>
      <link>https://paas.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Red&amp;nbsp;Hat&amp;nbsp;Linux&amp;nbsp;환경에서&amp;nbsp;JBoss&amp;nbsp;WebServer와&amp;nbsp;JBoss&amp;nbsp;Application&amp;nbsp;Server의&amp;nbsp;설치,&amp;nbsp;구성,&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;1.&amp;nbsp;설치&amp;nbsp;환경&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;●&amp;nbsp;Red&amp;nbsp;Hat&amp;nbsp;Enterprise&amp;nbsp;Linux7.5&amp;nbsp;(64bit) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;rhel-server-7.5-x86_64-dvd.iso&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;rhel-server-7.5-x86_64-dvd.iso&lt;/a&gt; &lt;br /&gt;●&amp;nbsp;Oracle&amp;nbsp;JDK&amp;nbsp;1.8&amp;nbsp;(64bit) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;jdk-8u144-linux-x64.tar.gz&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jdk-8u144-linux-x64.tar.gz&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt; &lt;br /&gt;●&amp;nbsp;Red&amp;nbsp;Hat&amp;nbsp;JBoss&amp;nbsp;Web&amp;nbsp;Server&amp;nbsp;3.0.3 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;jws-application-servers-3.0.3-RHEL7-x86_64.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jws-application-servers-3.0.3-RHEL7-x86_64.zip&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;jws-httpd-3.0.3-RHEL7-x86_64.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jws-httpd-3.0.3-RHEL7-x86_64.zip&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&lt;a href=&quot;https://access.redhat.com/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://access.redhat.com/downloads/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;JDK&amp;nbsp;설치 &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;tar&amp;nbsp;-xvzf&amp;nbsp;&lt;a href=&quot;jdk-7u80-linux-x64.tar.gz&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jdk-7u80-linux-x64.tar.gz&lt;/a&gt; &lt;br /&gt;mv&amp;nbsp;jdk1.7.0_80&amp;nbsp;/usr/java/jdk1.7.0_80 &lt;br /&gt;&lt;br /&gt;rm&amp;nbsp;-f&amp;nbsp;/usr/java/latest &lt;br /&gt;ln&amp;nbsp;-s&amp;nbsp;/usr/java/jdk1.7.0_80&amp;nbsp;/usr/java/jdk1.7 &lt;br /&gt;&lt;br /&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/java&amp;nbsp;java&amp;nbsp;/usr/java/jdk1.7/bin/java&amp;nbsp;10000 &lt;br /&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/javac&amp;nbsp;javac&amp;nbsp;/usr/java/jdk1.7/bin/javac&amp;nbsp;10000 &lt;br /&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/javaws&amp;nbsp;javaws&amp;nbsp;/usr/java/jdk1.7/jre/bin/javaws&amp;nbsp;10000 &lt;br /&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/jar&amp;nbsp;jar&amp;nbsp;/usr/java/jdk1.7/bin/jar&amp;nbsp;10000 &lt;br /&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/keytool&amp;nbsp;keytool&amp;nbsp;/usr/java/jdk1.7/bin/keytool&amp;nbsp;10000 &lt;br /&gt;&lt;br /&gt;alternatives&amp;nbsp;--config&amp;nbsp;java &lt;br /&gt;alternatives&amp;nbsp;--config&amp;nbsp;javac &lt;br /&gt;&lt;br /&gt;which&amp;nbsp;java &lt;br /&gt;readlink&amp;nbsp;-f&amp;nbsp;/usr/bin/javac&amp;nbsp;/usr/java/jdk1.7.0_80/bin/javac &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;package&amp;nbsp;설치 &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;yum&amp;nbsp;-y&amp;nbsp;update &lt;br /&gt;yum&amp;nbsp;clean&amp;nbsp;all;&amp;nbsp;yum&amp;nbsp;repolist &lt;br /&gt;&lt;br /&gt;yum&amp;nbsp;remove&amp;nbsp;tomcatjss &lt;br /&gt;yum&amp;nbsp;install&amp;nbsp;apr&amp;nbsp;apr-devel&amp;nbsp;apr-util&amp;nbsp;apr-util-devel&amp;nbsp;apr-util-ldap&amp;nbsp;elinks&amp;nbsp;krb5-workstation&amp;nbsp;mailcap &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;JBoss&amp;nbsp;Web&amp;nbsp;Server&amp;nbsp;install &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;&lt;a href=&quot;jws-application-servers-3.0.3-RHEL7-x86_64.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jws-application-servers-3.0.3-RHEL7-x86_64.zip&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;jws-httpd-3.0.3-RHEL7-x86_64.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jws-httpd-3.0.3-RHEL7-x86_64.zip&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;JAVA_HOME,&amp;nbsp;Tomcat,&amp;nbsp;Apache&amp;nbsp;User &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;●&amp;nbsp;Creating&amp;nbsp;a&amp;nbsp;Tomcat&amp;nbsp;User &lt;br /&gt;groupadd&amp;nbsp;-g&amp;nbsp;91&amp;nbsp;-r&amp;nbsp;tomcat &lt;br /&gt;useradd&amp;nbsp;-c&amp;nbsp;&quot;Tomcat&quot;&amp;nbsp;-u&amp;nbsp;91&amp;nbsp;-g&amp;nbsp;tomcat&amp;nbsp;-s&amp;nbsp;/bin/bash&amp;nbsp;-r&amp;nbsp;-p&amp;nbsp;tomcat1234&amp;nbsp;tomcat &lt;br /&gt;&lt;br /&gt;chown&amp;nbsp;-R&amp;nbsp;tomcat:tomcat&amp;nbsp;tomcat &lt;br /&gt;chmod&amp;nbsp;-R&amp;nbsp;u+X&amp;nbsp;tomcat &lt;br /&gt;&lt;br /&gt;vi&amp;nbsp;/home/${user}/.bash_profile &lt;br /&gt;JAVA_HOME=/usr/java/jdk1.7 &lt;br /&gt;&lt;br /&gt;PATH=$PATH:$JAVA_HOME/bin:$HOME/bin &lt;br /&gt;export&amp;nbsp;PATH &lt;br /&gt;&lt;br /&gt;umask&amp;nbsp;022 &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Enviroment&amp;nbsp;Variable &lt;br /&gt;export&amp;nbsp;LANG=ko_KR.utf8 &lt;br /&gt;export&amp;nbsp;EDITOR=vi &lt;br /&gt;export&amp;nbsp;TERM=vt100 &lt;br /&gt;set&amp;nbsp;-o&amp;nbsp;vi &lt;br /&gt;PS1=&quot;$(whoami)@$(hostname)]&quot; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Alias &lt;br /&gt;alias&amp;nbsp;cdtomcat=&amp;rsquo;cd&amp;nbsp;/app/jws-3.0/tomcat7&amp;rsquo; &lt;br /&gt;alias&amp;nbsp;cdhttpd=&amp;rsquo;cd&amp;nbsp;/app/jws-3.0/httpd&amp;rsquo; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;setclasspath.sh,&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;setclasspath.sh,&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;catalina.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;catalina.sh&lt;/a&gt; &lt;br /&gt;export&amp;nbsp;JAVA_HOME=/usr/java/jdk1.7 &lt;br /&gt;&lt;br /&gt;●&amp;nbsp;Creating&amp;nbsp;an&amp;nbsp;Apache&amp;nbsp;User &lt;br /&gt;groupadd&amp;nbsp;-g&amp;nbsp;48&amp;nbsp;-r&amp;nbsp;apache &lt;br /&gt;useradd&amp;nbsp;-c&amp;nbsp;&quot;Apache&quot;&amp;nbsp;-u&amp;nbsp;48&amp;nbsp;-g&amp;nbsp;apache&amp;nbsp;-s&amp;nbsp;/bin/bash&amp;nbsp;-r&amp;nbsp;-p&amp;nbsp;apache1234&amp;nbsp;apache &lt;br /&gt;&lt;br /&gt;chown&amp;nbsp;-R&amp;nbsp;apache:apache&amp;nbsp;httpd &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;※&amp;nbsp;Removing&amp;nbsp;/Re-Adding&amp;nbsp;SSL&amp;nbsp;Support &lt;br /&gt;JWS_HOME/httpd/conf.d/&lt;a href=&quot;ssl.conf.disabled&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ssl.conf.disabled&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;●&amp;nbsp;Enabling&amp;nbsp;log4j&amp;nbsp;Logging&amp;nbsp;for&amp;nbsp;Tomcat &lt;br /&gt;cd&amp;nbsp;JWS_HOME/extras/ &lt;br /&gt;cp log4j.properties $tomcat/lib/ &lt;br /&gt;cp&amp;nbsp;&lt;a href=&quot;log4j-eap6.jar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;log4j-eap6.jar&lt;/a&gt; $tomcat/lib/ &lt;br /&gt;cp&amp;nbsp;&lt;a href=&quot;tomcat-juli-adapters.jar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tomcat-juli-adapters.jar&lt;/a&gt; $tomcat/lib/ &lt;br /&gt;cp&amp;nbsp;&lt;a href=&quot;tomcat-juli.jar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tomcat-juli.jar&lt;/a&gt; $tomcat/bin/ &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;HTTPD&amp;nbsp;Configuring&amp;nbsp;mod_jk &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;●&amp;nbsp;JWS_HOME/httpd/conf.d/&lt;a href=&quot;mod_jk.conf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mod_jk.conf&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;●&amp;nbsp;JWS_HOME/httpd/conf.d/workers.properties &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;worker.list=loadbalancer,jkstatus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.list=loadbalancer,jkstatus&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;worker.template.type=ajp13&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.template.type=ajp13&lt;/a&gt; &lt;br /&gt;worker.template.lbfactor=1 &lt;br /&gt;worker.template.ping_mode=A &lt;br /&gt;worker.template.ping_timeout=5000 &lt;br /&gt;worker.template.prepost_timeout=5000 &lt;br /&gt;worker.template.connect_timeout=5000 &lt;br /&gt;worker.template.socket_timeout=300 &lt;br /&gt;worker.template.socket_keepalive=true &lt;br /&gt;worker.template.connection_pool_size=64 &lt;br /&gt;worker.template.connection_pool_minsize=32 &lt;br /&gt;worker.template.connection_pool_timeout=60 &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Set&amp;nbsp;properties&amp;nbsp;for&amp;nbsp;node01 &lt;br /&gt;worker.tomcat01.reference=worker.template &lt;br /&gt;&lt;a href=&quot;worker.tomcat01.host=serverip1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.tomcat01.host=serverip1&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;worker.tomcat01.port=8009&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.tomcat01.port=8009&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Set&amp;nbsp;properties&amp;nbsp;for&amp;nbsp;node02 &lt;br /&gt;worker.tomcat02.reference=worker.template &lt;br /&gt;&lt;a href=&quot;worker.tomcat02.host=serverip2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.tomcat02.host=serverip2&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;worker.tomcat02.port=8109&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.tomcat02.port=8109&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;worker.loadbalancer.type=lb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.loadbalancer.type=lb&lt;/a&gt; &lt;br /&gt;worker.loadbalancer.balance_workers=tomcat01,tomcat02 &lt;br /&gt;&lt;a href=&quot;worker.loadbalancer.method=Session&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.loadbalancer.method=Session&lt;/a&gt; &lt;br /&gt;worker.loadbalancer.sticky_session=True &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;worker.jkstatus.type=status&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;worker.jkstatus.type=status&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;●&amp;nbsp;JWS_HOME/httpd/conf.d/uriworkermap.properties &lt;br /&gt;!/*.html=loadbalancer&lt;br /&gt;!/*.css=loadbalancer&lt;br /&gt;!/*.js=loadbalancer&lt;br /&gt;!/*.gif=loadbalancer&lt;br /&gt;!/*.png=loadbalancer&lt;br /&gt;!/*.jpg=loadbalancer&lt;br /&gt;!/*.swf=loadbalancer&amp;nbsp;&lt;br /&gt;/*=loadbalancer&lt;br /&gt;!/server-status/*=loadbalancer&lt;br /&gt;&lt;br /&gt;●&amp;nbsp;JWS_HOME/httpd/conf/&lt;a href=&quot;httpd.conf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;httpd.conf&lt;/a&gt; &lt;br /&gt;Timeout&amp;nbsp;60 &lt;br /&gt;KeepAlive&amp;nbsp;Off &lt;br /&gt;MaxKeepAliveRequests&amp;nbsp;200 &lt;br /&gt;KeepAliveTimeout&amp;nbsp;3 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;VirtualHost&amp;nbsp;*:80&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; DocumentRoot&amp;nbsp;/app/htdocs &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DirectoryIndex&amp;nbsp;&lt;a href=&quot;index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;index.html&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;index.jsp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;index.jsp&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ErrorLog&amp;nbsp;&quot;|/JWS_HOME/httpd/sbin/rotatelogs&amp;nbsp;/JWS_HOME/httpd/logs/error_log.%Y%m%d&amp;nbsp;86400&amp;nbsp;+540&quot; &lt;br /&gt;LogFormat&amp;nbsp;&quot;%h&amp;nbsp;%l&amp;nbsp;%u&amp;nbsp;%t&amp;nbsp;\&quot;%r\&quot;&amp;nbsp;%&amp;gt;s&amp;nbsp;%b&amp;nbsp;\&quot;%{Referer}i\&quot;&amp;nbsp;\&quot;%{User-Agent}i\&quot;&amp;nbsp;\&quot;%{Cookie}i\&quot;&quot;&amp;nbsp;combined &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CustomLog&amp;nbsp;&quot;|/JWS_HOME/httpd/sbin/rotatelogs&amp;nbsp;/JWS_HOME/httpd/logs/access_log.%Y%m%d&amp;nbsp;86400&amp;nbsp;+540&quot;&amp;nbsp;combined&amp;nbsp;env=!dont_log &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JkMountFile&amp;nbsp;/JWS_HOME/httpd/conf.d/uriworkermap.properties &lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;●&amp;nbsp;JWS_HOME/httpd/conf.modules.d/&lt;a href=&quot;00-mpm.conf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;00-mpm.conf&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;#LoadModule&amp;nbsp;mpm_prefork_module&amp;nbsp;modules/&lt;a href=&quot;mod_mpm_prefork.so&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mod_mpm_prefork.so&lt;/a&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;주석&amp;nbsp;처리 &lt;br /&gt;LoadModule&amp;nbsp;mpm_worker_module&amp;nbsp;modules/&lt;a href=&quot;mod_mpm_worker.so&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mod_mpm_worker.so&lt;/a&gt;&amp;nbsp;=&amp;gt;&amp;nbsp;주석&amp;nbsp;해지 &lt;br /&gt;&lt;br /&gt;&amp;lt;IfModule&amp;nbsp;worker.c&amp;gt;&lt;br /&gt;StartServers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 &lt;br /&gt;MaxRequestWorkers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1024 &lt;br /&gt;MinSpareThreads&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;128 &lt;br /&gt;MaxSpareThreads&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;256 &lt;br /&gt;ThreadsPerChild&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;64 &lt;br /&gt;MaxConnectionsPerChild&amp;nbsp;&amp;nbsp;0 &lt;br /&gt;&amp;lt;/IfModule&amp;gt;&lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;Running&amp;nbsp;the&amp;nbsp;Apache&amp;nbsp;HTTP&amp;nbsp;Server&amp;nbsp;Post-Installation&amp;nbsp;Script &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;cd&amp;nbsp;JWS_HOME/httpd &lt;br /&gt;#&amp;nbsp;./.postinstall &lt;br /&gt;&lt;br /&gt;chown&amp;nbsp;root:root&amp;nbsp;httpd &lt;br /&gt;chmod&amp;nbsp;u+s&amp;nbsp;httpd &lt;br /&gt;&lt;br /&gt;cp&amp;nbsp;/JWS_HOME/httpd/sbin/apachectl&amp;nbsp;/etc/init.d/httpd &lt;br /&gt;&lt;br /&gt;vi&amp;nbsp;/etc/init.d/httpd &lt;br /&gt;#!/bin/sh &lt;br /&gt;#&amp;nbsp;chkconfig:&amp;nbsp;2345&amp;nbsp;90&amp;nbsp;90 &lt;br /&gt;#&amp;nbsp;description:&amp;nbsp;init&amp;nbsp;file&amp;nbsp;for&amp;nbsp;Apache&amp;nbsp;server&amp;nbsp;daemon &lt;br /&gt;#&amp;nbsp;processname:&amp;nbsp;/app/jws-3.0/httpd/sbin/apachectl &lt;br /&gt;#&amp;nbsp;config:&amp;nbsp;/app/jws-3.0/httpd/conf/&lt;a href=&quot;httpd.conf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;httpd.conf&lt;/a&gt; &lt;br /&gt;#&amp;nbsp;pidfile:&amp;nbsp;/app/jws-3.0/httpd/logs/&lt;a href=&quot;httpd.pid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;httpd.pid&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;chkconfig&amp;nbsp;--add&amp;nbsp;httpd &lt;br /&gt;chkconfig&amp;nbsp;--del&amp;nbsp;httpd &lt;br /&gt;&lt;br /&gt;chkconfig&amp;nbsp;--list&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;httpd &lt;br /&gt;&lt;br /&gt;systemctl&amp;nbsp;enable&amp;nbsp;httpd.service &lt;br /&gt;systemctl&amp;nbsp;start&amp;nbsp;httpd.service &lt;br /&gt;&lt;br /&gt;※&amp;nbsp;Compile&amp;nbsp;SELinux&amp;nbsp;Policies &lt;br /&gt;#&amp;nbsp;cd&amp;nbsp;/etc/tomcat7/selinux/packages/tomcat7 &lt;br /&gt;#&amp;nbsp;make&amp;nbsp;-f&amp;nbsp;/usr/share/selinux/devel/Makefile &lt;br /&gt;#&amp;nbsp;semodule&amp;nbsp;-i&amp;nbsp;&lt;a href=&quot;tomcat7.pp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tomcat7.pp&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;cd&amp;nbsp;/etc/tomcat8/selinux/packages/tomcat8 &lt;br /&gt;#&amp;nbsp;make&amp;nbsp;-f&amp;nbsp;/usr/share/selinux/devel/Makefile &lt;br /&gt;#&amp;nbsp;semodule&amp;nbsp;-i&amp;nbsp;&lt;a href=&quot;tomcat8.pp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tomcat8.pp&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;●&amp;nbsp;Add&amp;nbsp;the&amp;nbsp;firewall&amp;nbsp;rules &lt;br /&gt;firewall-cmd&amp;nbsp;--permanent&amp;nbsp;--add-service=http &lt;br /&gt;firewall-cmd&amp;nbsp;--reload &lt;br /&gt;iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-m&amp;nbsp;state&amp;nbsp;--state&amp;nbsp;NEW&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-m&amp;nbsp;tcp&amp;nbsp;--dport&amp;nbsp;80&amp;nbsp;-j&amp;nbsp;ACCEPT &lt;br /&gt;iptables-save&amp;nbsp;&amp;gt;&amp;nbsp;/etc/sysconfig/iptables &lt;br /&gt;&lt;br /&gt;firewall-cmd&amp;nbsp;--permanent&amp;nbsp;--zone=public&amp;nbsp;--add-port=80/tcp &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Mod&amp;nbsp;Cluster&amp;nbsp;firewall&amp;nbsp;설정 &lt;br /&gt;firewall-cmd&amp;nbsp;--permanent&amp;nbsp;--zone=public&amp;nbsp;--add-port=23364/udp &lt;br /&gt;firewall-cmd&amp;nbsp;--permanent&amp;nbsp;--zone=public&amp;nbsp;--add-port=8888/tcp &lt;br /&gt;&lt;br /&gt;/sbin/iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;5&amp;nbsp;-p&amp;nbsp;udp&amp;nbsp;-d&amp;nbsp;224.0.1.0/24&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;-m&amp;nbsp;comment&amp;nbsp;--comment&amp;nbsp;&quot;mod_cluster&amp;nbsp;traffic&quot; &lt;br /&gt;/sbin/iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;6&amp;nbsp;-p&amp;nbsp;udp&amp;nbsp;-d&amp;nbsp;224.0.0.0/4&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;-m&amp;nbsp;comment&amp;nbsp;--comment&amp;nbsp;&quot;JBoss&amp;nbsp;Cluster&amp;nbsp;traffic&quot; &lt;br /&gt;/sbin/iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;9&amp;nbsp;-p&amp;nbsp;udp&amp;nbsp;-s&amp;nbsp;192.168.1.0/24&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;-m&amp;nbsp;comment&amp;nbsp;--comment&amp;nbsp;&quot;cluster&amp;nbsp;subnet&amp;nbsp;for&amp;nbsp;inter-node&amp;nbsp;communication&quot; &lt;br /&gt;/sbin/iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;10&amp;nbsp;-p&amp;nbsp;tcp&amp;nbsp;-s&amp;nbsp;192.168.1.0/24&amp;nbsp;-j&amp;nbsp;ACCEPT&amp;nbsp;-m&amp;nbsp;comment&amp;nbsp;--comment&amp;nbsp;&quot;cluster&amp;nbsp;subnet&amp;nbsp;for&amp;nbsp;inter-node&amp;nbsp;communication&quot; &lt;br /&gt;#&amp;nbsp;/etc/init.d/iptables&amp;nbsp;save &lt;br /&gt;iptables-save&amp;nbsp;&amp;gt;&amp;nbsp;/etc/sysconfig/iptables &lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;Tomcat&amp;nbsp;설정 &lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;●&amp;nbsp;mod&amp;nbsp;_cluster&amp;nbsp;JBoss&amp;nbsp;WebServer &lt;br /&gt;#&amp;nbsp;&lt;a href=&quot;server.xml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;server.xml&lt;/a&gt; &lt;br /&gt;-------------------------------------------------------------------- &lt;br /&gt;&amp;lt;Listener&amp;nbsp;className=&quot;org.jboss.modcluster.container.catalina.standalone.ModClusterListener&quot;&amp;nbsp;advertise=&quot;true&quot;&amp;nbsp;stickySession=&quot;true&quot;&amp;nbsp;stickySessionForce=&quot;false&quot;&amp;nbsp;stickySessionRemove=&quot;true&quot;&amp;nbsp;/&amp;gt; &lt;br /&gt;&amp;lt;Engine&amp;nbsp;name=&quot;Catalina&quot;&amp;nbsp;defaultHost=&quot;localhost&quot;&amp;nbsp;jvmRoute=&quot;worker01&quot;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;-Dorg.jboss.modcluster.container.catalina.status-frequency=6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;-Dorg.jboss.modcluster.container.catalina.status-frequency=6&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;##&amp;nbsp;JBoss&amp;nbsp;WebServer&amp;nbsp;Worker&amp;nbsp;Node&amp;nbsp;with&amp;nbsp;a&amp;nbsp;Static&amp;nbsp;Proxy&amp;nbsp;List &lt;br /&gt;#&amp;nbsp;&lt;a href=&quot;server.xml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;server.xml&lt;/a&gt; &lt;br /&gt;-------------------------------------------------------------------- &lt;br /&gt;&amp;lt;Listener&amp;nbsp;className=&quot;org.jboss.modcluster.container.catalina.standalone.ModClusterListener&quot;&amp;nbsp;advertise=&quot;false&quot;&amp;nbsp;stickySession=&quot;true&quot;&amp;nbsp;stickySessionForce=&quot;false&quot;&amp;nbsp;stickySessionRemove=&quot;true&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;●&amp;nbsp;Static&amp;nbsp;ProxyList &lt;br /&gt;-------------------------------------------------------------------- &lt;br /&gt;&amp;lt;Listener&amp;nbsp;className=&quot;org.jboss.modcluster.container.catalina.standalone.ModClusterListener&quot;&amp;nbsp;advertise=&quot;false&quot;&amp;nbsp;stickySession=&quot;true&quot;&amp;nbsp;stickySessionForce=&quot;false&quot;&amp;nbsp;stickySessionRemove=&quot;true&quot;&amp;nbsp;proxyList=&quot;10.33.144.3:6666,10.33.144.1:6666&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;●&amp;nbsp;Heap&amp;nbsp;Memory&amp;nbsp;설정 &lt;br /&gt;#&amp;nbsp;&lt;a href=&quot;catalina.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;catalina.sh&lt;/a&gt; &lt;br /&gt;JAVA_OPTS=&quot;$JAVA_OPTS&amp;nbsp;-server&amp;nbsp;-Xms1024m&amp;nbsp;-Xmx1024m&amp;nbsp;-XX:NewSize=512m&amp;nbsp;-XX:MaxNewSize=512m&amp;nbsp;-XX:PermSize=512m&amp;nbsp;-XX:MaxPermSize=512m&quot; &lt;br /&gt;JAVA_OPTS=&quot;$JAVA_OPTS&amp;nbsp;-XX:+DisableExplicitGC&amp;nbsp;-XX:-HeapDumpOnOutOfMemoryError&amp;nbsp;-XX:HeapDumpPath=/logs/heapdump&quot; &lt;br /&gt;JAVA_OPTS=&quot;$JAVA_OPTS&amp;nbsp;-XX:ParallelGCThreads=2&amp;nbsp;-XX:-UseConcMarkSweepGC&quot; &lt;br /&gt;JAVA_OPTS=&quot;$JAVA_OPTS&amp;nbsp;-XX:-PrintGC&amp;nbsp;-XX:-PrintGCDetails&amp;nbsp;-XX:-PrintGCTimeStamps&amp;nbsp;-XX:-TraceClassUnloading&amp;nbsp;-XX:-TraceClassLoading&quot; &lt;br /&gt;JAVA_OPTS=&quot;$JAVA_OPTS&amp;nbsp;&lt;a href=&quot;-Djava.awt.headless=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;-Djava.awt.headless=true&lt;/a&gt;&amp;nbsp;-Dfile.encoding=UTF-8&quot; &lt;br /&gt;&lt;br /&gt;-Xmx3550m&amp;nbsp;-Xms3550m&amp;nbsp;-Xmn2g&amp;nbsp;-Xss128k&amp;nbsp;-XX:+UseParallelGC&amp;nbsp;-XX:ParallelGCThreads=20&amp;nbsp;-XX:+UseParallelOldGC&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;&lt;a href=&quot;server.xml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;server.xml&lt;/a&gt; &lt;br /&gt;&amp;lt;Listener&amp;nbsp;className=&quot;org.apache.catalina.core.JreMemoryLeakPreventionListener&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;connectionTimeout=&quot;10000&quot;&amp;nbsp;redirectPort=&quot;8443&quot;&amp;nbsp;URIEncoding=&quot;UTF-8&quot;&amp;nbsp; &lt;br /&gt;&amp;nbsp;maxConnection=&quot;8192&quot;&amp;nbsp;maxThreads=&quot;250&quot;&amp;nbsp;maxHttpHeaderSize=&quot;8192&quot;&amp;nbsp;emptySessionPath=&quot;true&quot; &lt;br /&gt;&amp;nbsp;enableLookups=&quot;false&quot;&amp;nbsp;acceptCount=&quot;100&quot;&amp;nbsp;disableUploadTimeout=&quot;true&quot;/&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Engine&amp;nbsp;name=&quot;Catalina&quot;&amp;nbsp;defaultHost=&quot;localhost&quot;&amp;nbsp;jvmRoute=&quot;tomcat01&quot;&amp;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;datasource&amp;nbsp;설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;/META-INF/&lt;a href=&quot;context.xml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;context.xml&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Context&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;lt;Resource&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; name=&quot;jdbc/DsWebAppDB&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auth=&quot;Container&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type=&quot;&lt;a href=&quot;javax.sql.DataSource&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;javax.sql.DataSource&lt;/a&gt;&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;username=&quot;sa&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password=&quot;&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driverClassName=&quot;&lt;a href=&quot;org.h2.Driver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;org.h2.Driver&lt;/a&gt;&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url=&quot;jdbc:h2:mem:target/test/db/h2/hibernate&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;maxActive=&quot;8&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;maxIdle=&quot;4&quot;/&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/Context&amp;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;a href=&quot;web.xml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;web.xml&lt;/a&gt; &lt;br /&gt;&lt;!--?xml  version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt; &lt;!--?xml  version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;web-app version=&quot;2.5&quot; xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;xmlns:xsi=&quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&quot;&amp;nbsp;xsi:schemaLocation=&quot;&lt;a href=&quot;http://java.sun.com/xml/ns/javaee&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://java.sun.com/xml/ns/javaee&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&lt;/a&gt;&quot;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;resource-env-ref&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;lt;resource-env-ref-name&amp;gt;jdbc/DsWebAppDB&amp;lt;/resource-env-ref-name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;resource-env-ref-name&amp;gt;&lt;a href=&quot;javax.sql.DataSource&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;javax.sql.DataSource&lt;/a&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;resource-env-ref-name&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/resource-env-ref&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/web-app&amp;gt;&lt;/p&gt;</description>
      <category>Middleware/JBoss EAP</category>
      <category>jboss</category>
      <category>jboss webserver</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/5</guid>
      <comments>https://paas.tistory.com/5#entry5comment</comments>
      <pubDate>Fri, 26 Jul 2019 20:36:47 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins Install on CentOS 7</title>
      <link>https://paas.tistory.com/4</link>
      <description>&lt;p&gt;&lt;span&gt;1. Jenkins repository setting&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;sudo wget -O /etc/yum.repos.d/jenkins.repo &lt;a href=&quot;https://pkg.jenkins.io/redhat-stable/jenkins.repo&quot;&gt;https://pkg.jenkins.io/redhat-stable/jenkins.repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;sudo rpm --import &lt;a href=&quot;https://pkg.jenkins.io/redhat-stable/jenkins.io.key&quot;&gt;https://pkg.jenkins.io/redhat-stable/jenkins.io.key&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Individual Package Downloads&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://pkg.jenkins.io/redhat-stable/jenkins-2.89.4-1.1.noarch.rpm&quot;&gt;https://pkg.jenkins.io/redhat-stable/jenkins-2.89.4-1.1.noarch.rpm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pkg.jenkins.io/redhat-stable/&quot;&gt;https://pkg.jenkins.io/redhat-stable/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. Java Install&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;yum list java*jdk-devel&lt;/p&gt;
&lt;p&gt;yum install java-1.8.0-openjdk-devel.x86_64&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -l /usr/bin/javac&lt;/p&gt;
&lt;p&gt;/usr/bin/javac -&amp;gt; /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;ls -l /etc/alternatives/javac&lt;/p&gt;
&lt;p&gt;/etc/alternatives/javac -&amp;gt; /usr/lib/jvm/java-1.8.0/bin/javac&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;alternatives --config java&lt;/p&gt;
&lt;p&gt;alternatives --config javac&lt;/p&gt;
&lt;p&gt;java -version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Set&amp;nbsp;JAVA_HOME&amp;nbsp;environment variable.&lt;/p&gt;
&lt;p&gt;echo &quot;export JAVA_HOME=/usr/lib/jvm/java-1.8.0&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;PATH=$PATH:$JAVA_HOME/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;p&gt;env | grep JAVA&lt;/p&gt;
&lt;p&gt;JAVA_HOME=/usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3. Jenkins Install&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;1) yum update&lt;/p&gt;
&lt;p&gt;#yum upgrade&lt;/p&gt;
&lt;p&gt;yum clean all;yum repolist&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) install jenkins&lt;/p&gt;
&lt;p&gt;yum install jenkins&lt;/p&gt;
&lt;p&gt;off line)&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://pkg.jenkins.io/redhat-stable/jenkins-2.89.4-1.1.noarch.rpm&quot;&gt;https://pkg.jenkins.io/redhat-stable/jenkins-2.89.4-1.1.noarch.rpm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;yum install jenkins-2.234-1.1.noarch.rpm&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) jenkins setting&lt;/p&gt;
&lt;p&gt;# vim /etc/sysconfig/jenkins&lt;/p&gt;
&lt;p&gt;JENKINS_PORT=&quot;8080&quot;&lt;/p&gt;
&lt;p&gt;JENKINS_ARGS=&quot;-Xmx2048m&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# vim /etc/rc.d/init.d/jenkins&lt;/p&gt;
&lt;p&gt;candidates=&quot;&lt;/p&gt;
&lt;p&gt;/usr/lib/jvm/java-1.8.0/bin/java&lt;/p&gt;
&lt;p&gt;&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) firewall setting&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --add-service=http&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --add-service=https&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=8080/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=80/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=443/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --permanent --zone=public --add-port=22/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;--------------------------------------&lt;/p&gt;
&lt;p&gt;YOURPORT=8080&lt;/p&gt;
&lt;p&gt;PERM=&quot;--permanent&quot;&lt;/p&gt;
&lt;p&gt;SERV=&quot;$PERM --service=jenkins&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;firewall-cmd $PERM --new-service=jenkins&lt;/p&gt;
&lt;p&gt;firewall-cmd $SERV --set-short=&quot;Jenkins ports&quot;&lt;/p&gt;
&lt;p&gt;firewall-cmd $SERV --set-description=&quot;Jenkins port exceptions&quot;&lt;/p&gt;
&lt;p&gt;firewall-cmd $SERV --add-port=$YOURPORT/tcp&lt;/p&gt;
&lt;p&gt;firewall-cmd $PERM --add-service=jenkins&lt;/p&gt;
&lt;p&gt;firewall-cmd --zone=public --add-service=http --permanent&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;firewall-cmd --list-all&lt;/p&gt;
&lt;p&gt;firewall-cmd --zone=public --list-all&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4. start jenkins&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;1) start jenkins&lt;/p&gt;
&lt;p&gt;systemctl enable jenkins&lt;/p&gt;
&lt;p&gt;systemctl start jenkins&lt;/p&gt;
&lt;p&gt;chkconfig jenkins on&lt;/p&gt;
&lt;p&gt;systemctl status jenkins&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) jenkins console&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://$ip:8080/&quot;&gt;http://$ip:8080/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cat /var/lib/jenkins/secrets/initialAdminPassword&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3) jenkins &lt;/span&gt;&lt;span&gt;설정 파일&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;/var/lib/jenkins&lt;/p&gt;
&lt;p&gt;/etc/default/jenkins&lt;/p&gt;
&lt;p&gt;/etc/init.d/jenkins&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt; administrator password&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;/var/lib/jenkins/home/secrets/initialAdminPassword&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;● To change attributes of the service&lt;/p&gt;
&lt;p&gt;svccfg -s svc:/network/http:jenkins editprop&lt;/p&gt;
&lt;p&gt;svcadm refresh svc:/network/http:jenkins&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;/lib/svc/manifest/network/jenkins-standalone.xml&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span&gt;jenkins log&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;tail -f /var/log/jenkins/jenkins.log&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;※&lt;/span&gt;&lt;span&gt; consult the log&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;/var/svc/log/network-http:jenkins.log&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5. git, maven install&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;1) git install&lt;/p&gt;
&lt;p&gt;yum install git&lt;/p&gt;
&lt;p&gt;git --version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) maven install&lt;/p&gt;
&lt;p&gt;# yum install maven&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;readlink -f /usr/bin/mvn /usr/share/maven/bin/mvn&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;http://apache.tt.co.kr/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz&quot;&gt;http://apache.tt.co.kr/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;tar -xvzf apache-maven-3.6.3-bin.tar.gz -C /opt&lt;/p&gt;
&lt;p&gt;ln -s /opt/apache-maven-3.6.3 /opt/maven&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# vim /etc/profile.d/maven.sh&lt;/p&gt;
&lt;p&gt;export JAVA_HOME=/usr/lib/jvm/java-1.8.0&lt;/p&gt;
&lt;p&gt;export M2_HOME=/opt/maven&lt;/p&gt;
&lt;p&gt;export MAVEN_HOME=/opt/maven&lt;/p&gt;
&lt;p&gt;export PATH=${M2_HOME}/bin:${PATH}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;chmod +x /etc/profile.d/maven.sh&lt;/p&gt;
&lt;p&gt;source /etc/profile.d/maven.sh&lt;/p&gt;
&lt;p&gt;mvn --version (mvn -v)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;yum -y install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct vim&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;gradle&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gradle.org/releases/&quot;&gt;https://gradle.org/releases/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;wget &lt;a href=&quot;https://services.gradle.org/distributions/gradle-6.5-bin.zip&quot;&gt;https://services.gradle.org/distributions/gradle-6.5-bin.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;unzip -d /opt gradle-6.5-bin.zip&lt;/p&gt;
&lt;p&gt;ln -s /opt/gradle-6.5 /opt/gradle&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# Set gradle PATH environment&lt;/p&gt;
&lt;p&gt;echo &quot;PATH=$PATH:/opt/gradle/bin:$HOME/bin&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;echo &quot;export PATH&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/p&gt;
&lt;p&gt;source ~/.bashrc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;gradle -v&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pkg.jenkins.io/redhat-stable/&quot;&gt;https://pkg.jenkins.io/redhat-stable/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mirrors.jenkins-ci.org/redhat/&quot;&gt;http://mirrors.jenkins-ci.org/redhat/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.jenkins.io/doc/book/installing/&quot;&gt;https://www.jenkins.io/doc/book/installing/&lt;/a&gt;&lt;/p&gt;</description>
      <category>DevOps CICD/Jenkins</category>
      <category>cicd</category>
      <category>Jenkins</category>
      <category>젠킨스</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/4</guid>
      <comments>https://paas.tistory.com/4#entry4comment</comments>
      <pubDate>Fri, 26 Jul 2019 20:27:10 +0900</pubDate>
    </item>
    <item>
      <title>GitLab 설치하기</title>
      <link>https://paas.tistory.com/3</link>
      <description>&lt;p&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;--&amp;nbsp;GitLab&amp;nbsp;install&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;Install&amp;nbsp;and&amp;nbsp;configure&amp;nbsp;the&amp;nbsp;necessary&amp;nbsp;dependencies&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;On&amp;nbsp;CentOS&amp;nbsp;7&amp;nbsp;(and&amp;nbsp;RedHat/Oracle/Scientific&amp;nbsp;Linux&amp;nbsp;7),&amp;nbsp;the&amp;nbsp;commands&amp;nbsp;below&amp;nbsp;will&amp;nbsp;also&amp;nbsp;open&amp;nbsp;HTTP&amp;nbsp;and&amp;nbsp;SSH&amp;nbsp;access&amp;nbsp;in&amp;nbsp;the&amp;nbsp;system&amp;nbsp;firewall.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;curl&amp;nbsp;policycoreutils-python&amp;nbsp;openssh-server&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;enable&amp;nbsp;sshd&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;start&amp;nbsp;sshd&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;firewall-cmd&amp;nbsp;--permanent&amp;nbsp;--add-service=http&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;reload&amp;nbsp;firewalld&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Next,&amp;nbsp;install&amp;nbsp;Postfix&amp;nbsp;to&amp;nbsp;send&amp;nbsp;notification&amp;nbsp;emails.&amp;nbsp;If&amp;nbsp;you&amp;nbsp;want&amp;nbsp;to&amp;nbsp;use&amp;nbsp;another&amp;nbsp;solution&amp;nbsp;to&amp;nbsp;send&amp;nbsp;emails&amp;nbsp;please&amp;nbsp;skip&amp;nbsp;this&amp;nbsp;step&amp;nbsp;and&amp;nbsp;configure&amp;nbsp;an&amp;nbsp;external&amp;nbsp;SMTP&amp;nbsp;server&amp;nbsp;after&amp;nbsp;GitLab&amp;nbsp;has&amp;nbsp;been&amp;nbsp;installed.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;postfix&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;enable&amp;nbsp;postfix&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;start&amp;nbsp;postfix&amp;nbsp; &lt;br /&gt;&lt;br /&gt;During&amp;nbsp;Postfix&amp;nbsp;installation&amp;nbsp;a&amp;nbsp;configuration&amp;nbsp;screen&amp;nbsp;may&amp;nbsp;appear.&amp;nbsp;Select&amp;nbsp;'Internet&amp;nbsp;Site'&amp;nbsp;and&amp;nbsp;press&amp;nbsp;enter.&amp;nbsp;Use&amp;nbsp;your&amp;nbsp;server's&amp;nbsp;external&amp;nbsp;DNS&amp;nbsp;for&amp;nbsp;'mail&amp;nbsp;name'&amp;nbsp;and&amp;nbsp;press&amp;nbsp;enter.&amp;nbsp;If&amp;nbsp;additional&amp;nbsp;screens&amp;nbsp;appear,&amp;nbsp;continue&amp;nbsp;to&amp;nbsp;press&amp;nbsp;enter&amp;nbsp;to&amp;nbsp;accept&amp;nbsp;the&amp;nbsp;defaults.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Add&amp;nbsp;the&amp;nbsp;GitLab&amp;nbsp;package&amp;nbsp;repository&amp;nbsp;and&amp;nbsp;install&amp;nbsp;the&amp;nbsp;package&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;Add&amp;nbsp;the&amp;nbsp;GitLab&amp;nbsp;package&amp;nbsp;repository.&amp;nbsp; &lt;br /&gt;#&amp;nbsp;gitlab-ee &lt;br /&gt;curl&amp;nbsp;&lt;a href=&quot;https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh&lt;/a&gt;&amp;nbsp;|&amp;nbsp;sudo&amp;nbsp;bash &lt;br /&gt;#&amp;nbsp;gitlab-ce &lt;br /&gt;curl&amp;nbsp;-s&amp;nbsp;&lt;a href=&quot;https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh&lt;/a&gt;&amp;nbsp;|&amp;nbsp;sudo&amp;nbsp;bash&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Next,&amp;nbsp;install&amp;nbsp;the&amp;nbsp;GitLab&amp;nbsp;package.&amp;nbsp;Change&amp;nbsp;`&lt;a href=&quot;http://gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com&lt;/a&gt;`&amp;nbsp;to&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;at&amp;nbsp;which&amp;nbsp;you&amp;nbsp;want&amp;nbsp;to&amp;nbsp;access&amp;nbsp;your&amp;nbsp;GitLab&amp;nbsp;instance.&amp;nbsp;Installation&amp;nbsp;will&amp;nbsp;automatically&amp;nbsp;configure&amp;nbsp;and&amp;nbsp;start&amp;nbsp;GitLab&amp;nbsp;at&amp;nbsp;that&amp;nbsp;URL.&amp;nbsp;HTTPS&amp;nbsp;requires&amp;nbsp;additional&amp;nbsp;configuration&amp;nbsp;after&amp;nbsp;installation.&amp;nbsp; &lt;br /&gt;#&amp;nbsp;gitlab-ee &lt;br /&gt;sudo&amp;nbsp;EXTERNAL_URL=&quot;&lt;a href=&quot;http://gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com&lt;/a&gt;&quot;&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;gitlab-ee &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;gitlab-ce &lt;br /&gt;sudo&amp;nbsp;EXTERNAL_URL=&quot;&lt;a href=&quot;http://gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com&lt;/a&gt;&quot;&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;gitlab-ce &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;Browse&amp;nbsp;to&amp;nbsp;the&amp;nbsp;hostname&amp;nbsp;and&amp;nbsp;login&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;On&amp;nbsp;your&amp;nbsp;first&amp;nbsp;visit,&amp;nbsp;you'll&amp;nbsp;be&amp;nbsp;redirected&amp;nbsp;to&amp;nbsp;a&amp;nbsp;password&amp;nbsp;reset&amp;nbsp;screen.&amp;nbsp;Provide&amp;nbsp;the&amp;nbsp;password&amp;nbsp;for&amp;nbsp;the&amp;nbsp;initial&amp;nbsp;administrator&amp;nbsp;account&amp;nbsp;and&amp;nbsp;you&amp;nbsp;will&amp;nbsp;be&amp;nbsp;redirected&amp;nbsp;back&amp;nbsp;to&amp;nbsp;the&amp;nbsp;login&amp;nbsp;screen.&amp;nbsp;Use&amp;nbsp;the&amp;nbsp;default&amp;nbsp;account's&amp;nbsp;username&amp;nbsp;root&amp;nbsp;to&amp;nbsp;login.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;See&amp;nbsp;our&amp;nbsp;documentation&amp;nbsp;for&amp;nbsp;detailed&amp;nbsp;instructions&amp;nbsp;on&amp;nbsp;installing&amp;nbsp;and&amp;nbsp;configuration.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;Set&amp;nbsp;up&amp;nbsp;your&amp;nbsp;communication&amp;nbsp;preferences&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;Visit&amp;nbsp;our&amp;nbsp;email&amp;nbsp;subscription&amp;nbsp;preference&amp;nbsp;center&amp;nbsp;to&amp;nbsp;let&amp;nbsp;us&amp;nbsp;know&amp;nbsp;when&amp;nbsp;to&amp;nbsp;communicate&amp;nbsp;with&amp;nbsp;you.&amp;nbsp;We&amp;nbsp;have&amp;nbsp;an&amp;nbsp;explicit&amp;nbsp;email&amp;nbsp;opt-in&amp;nbsp;policy&amp;nbsp;so&amp;nbsp;you&amp;nbsp;have&amp;nbsp;complete&amp;nbsp;control&amp;nbsp;over&amp;nbsp;what&amp;nbsp;and&amp;nbsp;how&amp;nbsp;often&amp;nbsp;we&amp;nbsp;send&amp;nbsp;you&amp;nbsp;emails.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Twice&amp;nbsp;a&amp;nbsp;month,&amp;nbsp;we&amp;nbsp;send&amp;nbsp;out&amp;nbsp;the&amp;nbsp;GitLab&amp;nbsp;news&amp;nbsp;you&amp;nbsp;need&amp;nbsp;to&amp;nbsp;know,&amp;nbsp;including&amp;nbsp;new&amp;nbsp;features,&amp;nbsp;integrations,&amp;nbsp;docs,&amp;nbsp;and&amp;nbsp;behind&amp;nbsp;the&amp;nbsp;scenes&amp;nbsp;stories&amp;nbsp;from&amp;nbsp;our&amp;nbsp;dev&amp;nbsp;teams.&amp;nbsp;For&amp;nbsp;critical&amp;nbsp;security&amp;nbsp;updates&amp;nbsp;related&amp;nbsp;to&amp;nbsp;bugs&amp;nbsp;and&amp;nbsp;system&amp;nbsp;performance,&amp;nbsp;sign&amp;nbsp;up&amp;nbsp;for&amp;nbsp;our&amp;nbsp;dedicated&amp;nbsp;security&amp;nbsp;newsletter.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;IMPORTANT&amp;nbsp;NOTE:&amp;nbsp;If&amp;nbsp;you&amp;nbsp;do&amp;nbsp;not&amp;nbsp;opt-in&amp;nbsp;to&amp;nbsp;the&amp;nbsp;security&amp;nbsp;newsletter,&amp;nbsp;you&amp;nbsp;will&amp;nbsp;not&amp;nbsp;receive&amp;nbsp;security&amp;nbsp;alerts.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;gitlab&amp;nbsp;restart&amp;nbsp; &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;systemctl&amp;nbsp;restart&amp;nbsp;gitlab-runsvdir&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;status&amp;nbsp;gitlab-runsvdir&amp;nbsp; &lt;br /&gt;&lt;br /&gt;systemctl&amp;nbsp;list-units&amp;nbsp;--type=service&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;list-units&amp;nbsp;--type=service&amp;nbsp;--state=running&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;list-unit-files&amp;nbsp;|grep&amp;nbsp;docker&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://about.gitlab.com/installation/#centos-7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://about.gitlab.com/installation/#centos-7&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;--&amp;nbsp;#&amp;nbsp;gitlab&amp;nbsp;offline&amp;nbsp;install&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;1.&amp;nbsp;gitlab&amp;nbsp;rpm&amp;nbsp;download &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;&lt;a href=&quot;https://packages.gitlab.com/gitlab/gitlab-ce&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://packages.gitlab.com/gitlab/gitlab-ce&lt;/a&gt;&amp;nbsp; &lt;br /&gt;#&amp;nbsp;latest&amp;nbsp;version&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.3.0-ce.0.el7.x86_64.rpm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.3.0-ce.0.el7.x86_64.rpm&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/7/gitlab-ee-11.3.0-ee.0.el7.x86_64.rpm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/7/gitlab-ee-11.3.0-ee.0.el7.x86_64.rpm&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;내려받은&amp;nbsp;rpm을&amp;nbsp;서버에&amp;nbsp;upload하고&amp;nbsp;설치합니다. &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;rpm&amp;nbsp;-ivh&amp;nbsp;&lt;a href=&quot;gitlab-ce-11.3.0-ce.0.el7.x86_64.rpm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab-ce-11.3.0-ce.0.el7.x86_64.rpm&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;gitlab&amp;nbsp;설치 &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;local&amp;nbsp;dns에&amp;nbsp;해당&amp;nbsp;domain을&amp;nbsp;등록합니다. &lt;br /&gt;(또는&amp;nbsp;/etc/host파일에&amp;nbsp;domain등록) &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;EXTERNAL_URL=&quot;&lt;a href=&quot;http://gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com&lt;/a&gt;&quot;&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;gitlab-ee&amp;nbsp; &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;console&amp;nbsp;login&amp;nbsp;&amp;amp;&amp;nbsp;사용자&amp;nbsp;등록&amp;nbsp; &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;&lt;a href=&quot;http://gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;gitlab&amp;nbsp;재기동 &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;systemctl&amp;nbsp;restart&amp;nbsp;gitlab-runsvdir&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;status&amp;nbsp;gitlab-runsvdir&amp;nbsp; &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;gitlab&amp;nbsp;external&amp;nbsp;web&amp;nbsp;port&amp;nbsp;change &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;sudo&amp;nbsp;-e&amp;nbsp;/etc/gitlab/&lt;a href=&quot;gitlab.rb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.rb&lt;/a&gt;&amp;nbsp; &lt;br /&gt;#&amp;nbsp;nginx:&amp;nbsp;90,&amp;nbsp;unicorn:&amp;nbsp;8090로&amp;nbsp;변경하는&amp;nbsp;경우 &lt;br /&gt;&lt;br /&gt;external_url&amp;nbsp;'&lt;a href=&quot;http://gitlab.example.com:90'&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com:90'&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;unicorn['worker_timeout']&amp;nbsp;=&amp;nbsp;60&amp;nbsp; &lt;br /&gt;unicorn['listen']&amp;nbsp;=&amp;nbsp;'127.0.0.1'&amp;nbsp; &lt;br /&gt;unicorn['port']&amp;nbsp;=&amp;nbsp;8090&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;8080&amp;nbsp;=&amp;gt;&amp;nbsp;8090&amp;nbsp; &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;gitlab-ctl&amp;nbsp;reconfigure&amp;nbsp; &lt;br /&gt;cat&amp;nbsp;/var/opt/gitlab/gitlab-rails/etc/&lt;a href=&quot;gitlab.yml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.yml&lt;/a&gt;&amp;nbsp; &lt;br /&gt;production:&amp;nbsp;&amp;amp;base&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;#&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;#&amp;nbsp;1.&amp;nbsp;GitLab&amp;nbsp;app&amp;nbsp;settings&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;#&amp;nbsp;==========================&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;##&amp;nbsp;GitLab&amp;nbsp;settings&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;gitlab:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;##&amp;nbsp;Web&amp;nbsp;server&amp;nbsp;settings&amp;nbsp;(note:&amp;nbsp;host&amp;nbsp;is&amp;nbsp;the&amp;nbsp;FQDN,&amp;nbsp;do&amp;nbsp;not&amp;nbsp;include&amp;nbsp;http://)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;host:&amp;nbsp;&lt;a href=&quot;gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.example.com&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;port:&amp;nbsp;90&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;https:&amp;nbsp;false&amp;nbsp; &lt;br /&gt;&lt;br /&gt;gitlab-ctl&amp;nbsp;stop&amp;nbsp; &lt;br /&gt;gitlab-ctl&amp;nbsp;start&amp;nbsp; &lt;br /&gt;&lt;br /&gt;netstat&amp;nbsp;-anp&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;:90&amp;nbsp; &lt;br /&gt;netstat&amp;nbsp;-anp&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;:8090 &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;console&amp;nbsp;로그인 &lt;br /&gt;&lt;a href=&quot;http://gitlab.example.com:90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://gitlab.example.com:90&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.gitlab.com/omnibus/settings/configuration.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.gitlab.com/omnibus/settings/configuration.html&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;https://docs.gitlab.com/omnibus/settings/nginx.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.gitlab.com/omnibus/settings/nginx.html&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;Manually&amp;nbsp;configuring&amp;nbsp;HTTPS&amp;nbsp; &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;/etc/gitlab/&lt;a href=&quot;gitlab.rb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.rb&lt;/a&gt;&amp;nbsp; &lt;br /&gt;external_url&amp;nbsp;&quot;&lt;a href=&quot;https://gitlab.example.com:3443&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gitlab.example.com:3443&lt;/a&gt;&quot;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;mkdir&amp;nbsp;-p&amp;nbsp;/etc/gitlab/ssl&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;chmod&amp;nbsp;700&amp;nbsp;/etc/gitlab/ssl&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;cp&amp;nbsp;&lt;a href=&quot;gitlab.example.com.key&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.example.com.key&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;gitlab.example.com.crt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.example.com.crt&lt;/a&gt;&amp;nbsp;/etc/gitlab/ssl/&amp;nbsp; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;SSL&amp;nbsp;firewall-cmd&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;firewall-cmd&amp;nbsp;--permanent&amp;nbsp;--add-service=https&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;reload&amp;nbsp;firewalld&amp;nbsp; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Redirect&amp;nbsp;HTTP&amp;nbsp;requests&amp;nbsp;to&amp;nbsp;HTTPS&amp;nbsp; &lt;br /&gt;external_url&amp;nbsp;&quot;&lt;a href=&quot;https://gitlab.example.com:3443&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gitlab.example.com:3443&lt;/a&gt;&quot;&amp;nbsp; &lt;br /&gt;nginx['redirect_http_to_https']&amp;nbsp;=&amp;nbsp;true&amp;nbsp; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;For&amp;nbsp;GitLab&amp;nbsp; &lt;br /&gt;nginx['ssl_certificate']&amp;nbsp;=&amp;nbsp;&quot;/etc/gitlab/ssl/&lt;a href=&quot;gitlab.example.com.crt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.example.com.crt&lt;/a&gt;&quot;&amp;nbsp; &lt;br /&gt;nginx['ssl_certificate_key']&amp;nbsp;=&amp;nbsp;&quot;/etc/gitlab/ssl/&lt;a href=&quot;gitlab.example.com.key&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.example.com.key&lt;/a&gt;&quot;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Setting&amp;nbsp;the&amp;nbsp;NGINX&amp;nbsp;listen&amp;nbsp;port&amp;nbsp; &lt;br /&gt;nginx['listen_port']&amp;nbsp;=&amp;nbsp;8081&amp;nbsp; &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;gitlab-ctl&amp;nbsp;reconfigure&amp;nbsp; &lt;br /&gt;&lt;br /&gt;systemctl&amp;nbsp;restart&amp;nbsp;gitlab-runsvdir&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;status&amp;nbsp;gitlab-runsvdir&amp;nbsp;sudo&amp;nbsp;gitlab-ctl&amp;nbsp;restart&amp;nbsp;&amp;nbsp; &lt;br /&gt;sudo&amp;nbsp;gitlab-ctl&amp;nbsp;stop&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;systemctl&amp;nbsp;restart&amp;nbsp;gitlab-runsvdir&amp;nbsp;&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;status&amp;nbsp;gitlab-runsvdir&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;systemctl&amp;nbsp;list-units&amp;nbsp;--type=service&amp;nbsp;&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;list-units&amp;nbsp;--type=service&amp;nbsp;--state=running&amp;nbsp;&amp;nbsp; &lt;br /&gt;systemctl&amp;nbsp;list-unit-files&amp;nbsp;|grep&amp;nbsp;docker &lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;Supporting&amp;nbsp;proxied&amp;nbsp;SSL&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;vi&amp;nbsp;/etc/gitlab/&lt;a href=&quot;gitlab.rb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab.rb&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;registry_external_url&amp;nbsp;'&lt;a href=&quot;https://registry.example.com'&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://registry.example.com'&lt;/a&gt;&amp;nbsp; &lt;br /&gt;registry_nginx['listen_port']&amp;nbsp;=&amp;nbsp;80&amp;nbsp; &lt;br /&gt;registry_nginx['listen_https']&amp;nbsp;=&amp;nbsp;false&amp;nbsp; &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;Setting&amp;nbsp;HTTP&amp;nbsp;Strict&amp;nbsp;Transport&amp;nbsp;Security &lt;br /&gt;nginx['hsts_max_age']&amp;nbsp;=&amp;nbsp;31536000&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;default:&amp;nbsp;1&amp;nbsp;year&amp;nbsp; &lt;br /&gt;nginx['hsts_include_subdomains']&amp;nbsp;=&amp;nbsp;false&amp;nbsp; &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&amp;nbsp; &lt;br /&gt;--&amp;nbsp;Gitlab&amp;nbsp;Install&amp;nbsp;(OpenShift)&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;1.&amp;nbsp;private&amp;nbsp;docker&amp;nbsp;registry&amp;nbsp;Image&amp;nbsp;Import &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;docker&amp;nbsp;pull&amp;nbsp;gitlab/gitlab-ce &lt;br /&gt;docker&amp;nbsp;tag&amp;nbsp;gitlab/gitlab-ce:latest&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/gitlab-ce:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/gitlab-ce:latest&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;push&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/gitlab-ce:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/gitlab-ce:latest&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;push&amp;nbsp;images&amp;nbsp;from&amp;nbsp;the&amp;nbsp;integrated&amp;nbsp;container&amp;nbsp;registry&amp;nbsp;directly &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;docker&amp;nbsp;login&amp;nbsp;-p&amp;nbsp;$(oc&amp;nbsp;whoami&amp;nbsp;-t)&amp;nbsp;-e&amp;nbsp;unused&amp;nbsp;-u&amp;nbsp;unused&amp;nbsp;&lt;a href=&quot;docker-registry-default.apps.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docker-registry-default.apps.example.com&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;tag&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/gitlab-ce:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/gitlab-ce:latest&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;docker-registry-default.apps.example.com/openshift/gitlab-ce:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docker-registry-default.apps.example.com/openshift/gitlab-ce:latest&lt;/a&gt; &lt;br /&gt;docker&amp;nbsp;push&amp;nbsp;&lt;a href=&quot;docker-registry-default.apps.example.com/openshift/gitlab-ce:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docker-registry-default.apps.example.com/openshift/gitlab-ce:latest&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;Updating&amp;nbsp;and&amp;nbsp;Tagging&amp;nbsp;Existing&amp;nbsp;Images &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;oc&amp;nbsp;import-image&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/gitlab-ce:latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/gitlab-ce:latest&lt;/a&gt;&amp;nbsp;--insecure=true&amp;nbsp;--confirm&amp;nbsp;-n&amp;nbsp;openshift &lt;br /&gt;oc&amp;nbsp;tag&amp;nbsp;gitlab-ce:latest&amp;nbsp;gitlab-ce:12.1&amp;nbsp;-n&amp;nbsp;openshift &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;Create&amp;nbsp;project &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;oc&amp;nbsp;new-project&amp;nbsp;gitlab &lt;br /&gt;oc&amp;nbsp;adm&amp;nbsp;policy&amp;nbsp;add-scc-to-user&amp;nbsp;anyuid&amp;nbsp;-z&amp;nbsp;default&amp;nbsp;-n&amp;nbsp;gitlab &lt;br /&gt;oc&amp;nbsp;adm&amp;nbsp;policy&amp;nbsp;add-scc-to-user&amp;nbsp;anyuid&amp;nbsp;system:serviceaccount:gitlab:gitlab-ce-user &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;Create&amp;nbsp;serviceaccount&amp;nbsp;and&amp;nbsp;secret &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;oc&amp;nbsp;create&amp;nbsp;serviceaccount&amp;nbsp;gitlab-sa&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;policy&amp;nbsp;add-role-to-user&amp;nbsp;view&amp;nbsp;system:serviceaccount:$(oc&amp;nbsp;project&amp;nbsp;-q):gitlab-sa&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;policy&amp;nbsp;add-role-to-user&amp;nbsp;view&amp;nbsp;system:serviceaccount:$(oc&amp;nbsp;project&amp;nbsp;-q):default&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;&lt;br /&gt;oc&amp;nbsp;create&amp;nbsp;secret&amp;nbsp;generic&amp;nbsp;gitlab-secret&amp;nbsp;--from-literal=username=user&amp;nbsp;--from-literal=password=1234&amp;nbsp;&lt;a href=&quot;--type=kubernetes.io/basic-auth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;--type=kubernetes.io/basic-auth&lt;/a&gt;&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;oc&amp;nbsp;secrets&amp;nbsp;link&amp;nbsp;&amp;nbsp;gitlab-sa&amp;nbsp;gitlab-secret&amp;nbsp;-n&amp;nbsp;$(oc&amp;nbsp;project&amp;nbsp;-q) &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;application &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;●&amp;nbsp;CLI &lt;br /&gt;oc&amp;nbsp;new-app&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/test-gitlab:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/test-gitlab:1.0&lt;/a&gt;&amp;nbsp;--name=gitlab-ce&amp;nbsp;-n&amp;nbsp;gitlab &lt;br /&gt;oc&amp;nbsp;expose&amp;nbsp;svc/gitlab-ce&amp;nbsp;&lt;a href=&quot;--hostname=gitlab.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;--hostname=gitlab.example.com&lt;/a&gt;&amp;nbsp;--port&amp;nbsp;80&amp;nbsp;-n&amp;nbsp;gitlab &lt;br /&gt;oc&amp;nbsp;get&amp;nbsp;route&amp;nbsp;gitlab-ce&amp;nbsp;-n&amp;nbsp;gitlab &lt;br /&gt;&lt;br /&gt;or &lt;br /&gt;oc&amp;nbsp;new-app&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/gitlab-ce:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/gitlab-ce:1.0&lt;/a&gt;&amp;nbsp;-o&amp;nbsp;yaml&amp;nbsp;-n&amp;nbsp;gitlab&amp;nbsp;&amp;gt;&amp;nbsp;&lt;a href=&quot;gitlab-ce.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab-ce.yaml&lt;/a&gt; &lt;br /&gt;vi&amp;nbsp;&lt;a href=&quot;gitlab-ce.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab-ce.yaml&lt;/a&gt; &lt;br /&gt;oc&amp;nbsp;create&amp;nbsp;-f&amp;nbsp;&lt;a href=&quot;gitlab-ce.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gitlab-ce.yaml&lt;/a&gt;&amp;nbsp;-n&amp;nbsp;gitlab &lt;br /&gt;&lt;br /&gt;●&amp;nbsp;console &lt;br /&gt;&amp;nbsp;-&amp;nbsp;console&amp;nbsp;&amp;gt;&amp;nbsp;gitlab&amp;nbsp;project&amp;nbsp;&amp;gt;&amp;nbsp;Add&amp;nbsp;to&amp;nbsp;Project&amp;nbsp;&amp;gt;&amp;nbsp;Deploy&amp;nbsp;Image &lt;br /&gt;&amp;nbsp;-&amp;nbsp;Namespace:&amp;nbsp;openshift &lt;br /&gt;&amp;nbsp;-&amp;nbsp;Image&amp;nbsp;Name:&amp;nbsp;&lt;a href=&quot;registry.example.com:5000/gitlab/test-gitlab:1.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;registry.example.com:5000/gitlab/test-gitlab:1.0&lt;/a&gt; &lt;br /&gt;deploy &lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;PV(Persistent&amp;nbsp;Volume),&amp;nbsp;PVC(Persistent&amp;nbsp;Volume&amp;nbsp;Claim)&lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;volume&amp;nbsp;name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Container&amp;nbsp;location&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Usage &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;gitlab-ce-volume-1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/gitlab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;storing&amp;nbsp;application&amp;nbsp;data &lt;br /&gt;gitlab-ce-volume-2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/var/log/gitlab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;storing&amp;nbsp;logs &lt;br /&gt;gitlab-ce-volume-3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/var/opt/gitlab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;storing&amp;nbsp;the&amp;nbsp;GitLab&amp;nbsp;configuration&amp;nbsp;files&lt;/p&gt;</description>
      <category>DevOps CICD/GitLab</category>
      <category>cicd</category>
      <category>GIT</category>
      <category>GitLab</category>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/3</guid>
      <comments>https://paas.tistory.com/3#entry3comment</comments>
      <pubDate>Fri, 26 Jul 2019 20:13:16 +0900</pubDate>
    </item>
    <item>
      <title>환영합니다!</title>
      <link>https://paas.tistory.com/1</link>
      <description>&lt;p&gt;&lt;b style=&quot;font-size: 14pt;&quot;&gt;PaaS(platform as a services), DevOps,&amp;nbsp;&lt;/b&gt;&lt;b style=&quot;font-size: 14pt;&quot;&gt;digital transformation,&amp;nbsp;&lt;/b&gt;&lt;b style=&quot;font-size: 14pt;&quot;&gt;Middleware, opensource에 대한 글을 게재하려 합니다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F39C455CE407F118&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F39C455CE407F118&quot; width=&quot;1200&quot; height=&quot;600&quot; filename=&quot;welcome1.jpeg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <author>freedream</author>
      <guid isPermaLink="true">https://paas.tistory.com/1</guid>
      <comments>https://paas.tistory.com/1#entry1comment</comments>
      <pubDate>Tue, 21 May 2019 23:15:13 +0900</pubDate>
    </item>
  </channel>
</rss>