<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩 기록 저장소</title>
    <link>https://kne-coding.tistory.com/</link>
    <description>코딩 공부 기록하는 블로그</description>
    <language>ko</language>
    <pubDate>Thu, 21 May 2026 03:53:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>KimNang</managingEditor>
    <item>
      <title>[딥러닝] 대규모 언어 모델(LLM)</title>
      <link>https://kne-coding.tistory.com/422</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;1._RNN_(Recurrent_Neural_Network)&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 대규모 언어 모델 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;(Large Language Model, LLM)&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;01._RNN_개념&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. LLM 개념&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 방대한 데이터를 학습해 텍스트를 이해하고 생성할 수 있는 언어 모델&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 주로 트랜스포머 신경망과 딥러닝을 활용하며, 문자&amp;middot;단어&amp;middot;문장 간 관계를 학습함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 수천~수백만 GB의 텍스트 데이터를 학습하며, 데이터 품질이 모델 성능에 큰 영향을 줌&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 초기 학습 후 추가 학습(웹 크롤링 등)과 튜닝을 통해 특정 작업(질문 답변, 번역 등)에 맞게 성능을 향상시킴&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 사람의 개입 없이도 패턴과 의미를 인식할 수 있으며, 특정 목적에 맞게 미세 조정(fine-tuning)이 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;LLM이 중요한 이유&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 높은 유연성 : 질문 답변, 문서 요약, 번역, 문장 완성 등 다양한 작업 수행 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 생성형 AI 활용 : 입력 프롬프트만으로 자연스러운 텍스트를 생성할 수 있어 콘텐츠 제작과 검색, 가상 어시스턴트 등에 혁신적 영향&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 거대한 규모 : 수십억~수천억 개의 파라미터를 활용해 방대한 정보를 처리하고, 긴 문서나 책 단위까지 이해 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 다양한 모델과 기능 : GPT-3, ChatGPT, Claude 2, Jurassic-1, Cohere Command 등 다양한 모델이 존재하며, 각 모델은 여러 언어와 대화형 기능을 지원 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;LLM의 주요 특징&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;- 자연어 처리(NLP) 능력 : 텍스트 분석, 번역, 감정 분석 등 다양한 자연어 작업이 가능함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;- 사람과 비슷한 언어 생성 : 마치 사람이 대화하는 것처럼 자연스러운 텍스트를 만들어낼 수 있&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;02._RNN의_구조_및_형태&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. LLM의 구조 및 종류&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;LLM의 구조&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 기본적으로 딥러닝 기반 인공신경망 구조를 따르며, 대표적으로 Transformer 아키텍처 위에 구축됨&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 구조는 크게 입력&amp;rarr;처리&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt;출력 단계&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력 (Input)&lt;br /&gt;- 텍스트(문자열)를 토큰 단위로 분할 (Tokenization)&lt;br /&gt;- 각 토큰을 임베딩 벡터로 변환 (Word Embedding)&lt;br /&gt;- 순서 정보를 반영하기 위해 Positional Encoding 추가&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;처리 (Transformer 블록)&lt;br /&gt;- 인코더(Encoder) : 입력 문맥을 이해하는 층&lt;br /&gt;- 디코더(Decoder) : 다음 단어를 생성하는 층&lt;br /&gt;- 각 블록은 Multi-Head Self Attention&amp;nbsp;+ Feed-Forward Network(FFN) + 정규화(Normalization, Residual Connection) 으로 구성됨&lt;br /&gt;- Attention 메커니즘을 통해 단어 간 관계를 학습&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;출력 (Output)&lt;br /&gt;- 마지막 벡터를 Softmax를 통해 확률 분포로 변환&lt;br /&gt;- 가장 높은 확률의 토큰을 선택하거나, 샘플링을 통해 다음 단어를 생성&lt;br /&gt;- 순차적으로 반복하여 문장/텍스트 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;LLM의 종류&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각기 다른 목적과 방식으로 개발되었으며, 대표적인 모델로는 GPT 계열, BERT 계열, LLaMA, BLOOM 등이 있음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GPT 계열 (Generative Pretrained Transformer)&lt;br /&gt;- OpenAI에서 개발한 Autoregressive 모델&lt;br /&gt;- 주로 텍스트 생성 작업에 뛰어난 성능을 발휘함&lt;br /&gt;- GPT-3는 1750억 개의 파라미터를 가지고 있으며, 질의응답, 번역, 텍스트 요약 등 다양한 작업에서 사용됨&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;BERT 계열(Bidirectional Encoder Representations from Transformers)&lt;br /&gt;- Google에서 개발한 모델&lt;br /&gt;- 문맥을 양방향으로 이해하는 데 중점을 둔 모델&lt;br /&gt;- 질의응답(QA)과 같은 작업에 특히 강하며, 문장 분류나 문맥 이해 작업에서 높은 성능을 보여줌&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;LLaMA (Large Language Model Meta AI)&lt;br /&gt;- Meta에서 개발한 LLaMA는 상대적으로 적은 파라미터로도 높은 성능을 내는 것을 목표로 한 모델&lt;br /&gt;- 최신 버전인 LLaMA 3.2는 모바일 및 엣지 디바이스에서도 구동 가능한 모델&lt;br /&gt;- 온디바이스 AI 응용에 적합함&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;BLOOM&lt;br /&gt;- BigScience 프로젝트에서 개발한 대규모 오픈소스 언어 모델, 다양한 언어를 지원하는 것이 특징&lt;br /&gt;- 다국어 데이터에 특화된 NLP 작업에 적합&lt;br /&gt;- GPT-3와 유사한 성능&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;2._LSTM_(Long_Short_Term_Memory)&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. LLM의 활용과 발전 방향&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;01._LSTM_개념&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. LLM의 주요 활용 분야&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 콘텐츠 생성 : 기사, 블로그 게시물, 마케팅 문구, 시나리오 등 다양한 텍스트 콘텐츠를 생성하거나 초안을 작성하는 데 사용함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 번역 및 요약 : 여러 언어를 이해하고 번역하거나, 긴 문서의 핵심 내용을 빠르게 요약하는 데 좋은 성능을 보임&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 고객 서비스 및 챗봇 : 대화형 인터페이스를 제공하여 고객 문의에 응대하거나, 정보 제공 역할을 수행하는 챗봇으로 활용됨&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 코딩 및 개발 : 코드 생성, 디버깅, 주석 작성, 코드 개선 등 개발자 업무를 지원함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 교육 및 연구 : 맞춤형 학습 자료 제작, 질의응답 시스템, 논문 요약 등 교육과 연구 활동을 도움&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 개인 비서 : 일정 관리, 이메일 초안 작성, 회의록 요약 등 개인의 생산성 향상을 도움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;02._LSTM의_구조_및_형태&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. LLM의 주요 한계&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 정확성 문제 : 사실과 다른 허위 정보를 마치 사실인 것처럼 생성하는 환각(Hallucination) 현상. 이는 학습 데이터의 오류나 불완전성, 모델의 추론 과정 오류로 인해 발생함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 최신 정보 부족 : 학습에 사용된 데이터가 특정 시점까지의 정보로 한정되어 있어, 그 이후의 최신 정보를 반영하지 못하는 경우가 많음&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 편향성 문제 : 학습 데이터에 포함된 사회적, 문화적 편견이 모델에 반영되어 편향된 답변을 생성할 수 있음&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 윤리&amp;middot;보안&amp;nbsp;문제&amp;nbsp;:&amp;nbsp;개인정보&amp;nbsp;유출,&amp;nbsp;저작권&amp;nbsp;침해,&amp;nbsp;허위정보&amp;nbsp;생성&amp;nbsp;등으로&amp;nbsp;인한&amp;nbsp;사회적&amp;middot;법적&amp;nbsp;위험&lt;/p&gt;</description>
      <category>개인 공부/인공지능</category>
      <category>Artificial_Intelligence</category>
      <category>llm</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/422</guid>
      <comments>https://kne-coding.tistory.com/422#entry422comment</comments>
      <pubDate>Tue, 26 Aug 2025 10:17:10 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버플로우] 파이프라인 스터디</title>
      <link>https://kne-coding.tistory.com/421</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 파이프라인 개요&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 공식 문서를 참고함!&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 파이프라인 (Pipelines)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 쿠브플로우 파이프라인은 재사용 가능하고 확장성이 좋은 머신러닝 워크플로우를 정의하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 컨테이너 기반으로 작동하며, 전체 워크플로우를 구성하는 여러 단계(steps)와 입력 파라미터로 이루어져 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 파이프라인 컴포넌트&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-&lt;span&gt; 파이프라인 컴포넌트는 파이프라인의 한 단계를 수행하는 컨테이너화된 애플리케이션&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 각 컴포넌트는 다음의 내용이 정의된 컴포넌트 명세(specifications)를 가짐&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;인터페이스&lt;/b&gt; : 입력(input) 및 출력(outputs)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구현&lt;/b&gt; : 사용할 컨테이너 이미지와 실행할 명령어&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메타데이터&lt;/b&gt; : 컴포넌트의 이름 및 설명 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 컴포넌트는 직접 명세를 정의하거나, 쿠브플로우 파이프라인 SDK를 사용해 파이썬 함수 기반으로 생성하거나, 이미 만들어진 컴포넌트를 재사용할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. 파이프라인 그래프&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-&lt;span&gt;&lt;span&gt; 파이프라인의 각 단계는 컴포넌트의 인스턴스&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span&gt;- 각 단계의 입력은 파이프라인의 입력 인자, 상수, 또는 다른 단계의 출력으로부터 올 수 있음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span&gt;- 쿠브플로우는 이러한 데이터 의존성을 기반으로 파이프라인의 워크플로우를 그래프 형태로 구성함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- '통계 생성'과 '데이터 전처리' 모두 '데이터 수집'에만 의존하므로, 두 단계는 병렬로 실행될 수 있음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 수집&lt;/b&gt; : 외부 소스에서 데이터를 불러와 데이터셋을 출력함. 의존성이 없으므로 가장 먼저 실행될 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통계 생성&lt;/b&gt; : '데이터 수집' 단계의 출력인 데이터셋을 사용함. 따라서 이 단계는 '데이터 수집' 이후에 실행되어야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 전처리&lt;/b&gt; : 이 단계도 '데이터 수집' 단계의 출력을 모두 사용함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모델 학습&lt;/b&gt; : '통계 생성'과 '데이터 전처리' 단계의 출력을 모두 사용함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;04. 파이프라인 설계&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; 파이프라인을 설계할 때는 ML 워크플로우를 여러 컴포넌트로 어떻게 나눌지 고민해야 함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 이는 모놀리식 스크립트를 재사용 가능한 함수로 나누는 과정과 유사함&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일 책임 원칙 : 컴포턴트는 하나의 기능만 담당해야 재사용성과 테스트 용이성이 높아짐&lt;/li&gt;
&lt;li&gt;재사용 : 가능하다면 쿠브플로우에서 제공하는 기존 컴포넌트를 재사용하는 것이 좋음&lt;/li&gt;
&lt;li&gt;디버깅 및 추적 : 파이프라인은 각 단계의 입력과 출력을 저장함. 이를 통해 모델 품질의 변화 원인을 파악하거나 워크플로우의 버그를 추적하기 쉬워짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;05. 파이프라인 컴포넌트 구축&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;컨테이너 명세&lt;/b&gt; : 컨테이너화된 애플리케이션이 있다면, 컴포넌트 명세를 만들어 파이프라인 텀포넌트로 정의할 수 있음. 어떤 언어로 작성되었든 컨테이너 이미지로 만들 수 있다면 사용 가능함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파이썬 함수 기반 컴포넌트&lt;/b&gt; : 컴포넌트 코드가 파이썬 함수로 표현될 수 있다면, 쿠브플로우 파이프라인 SDK를 사용해 쉽게 컴포넌트를 생성할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사전 구축 컴포넌트 재사용&lt;/b&gt; : 직접 컴포넌트를 만드는 대신, 이미 제공되는 컴포넌트를 재사용하여 개발 노력을 줄일 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;06. 컴포넌트 간 데이터 전달&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 쿠브플로우 파이프라인은 컴포넌트를 실행할 때, 쿠버네티스 파드(Pod)에서 컨테이너 이미지를 시작하고, 입력값을 명령줄 인자로 전달함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 컴포넌트가 작업을 마치면, 출력값은 파일로 반환됨&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;작은 데이터&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 숫자나 짧은 문자열 등 작은 입력값은 값(by value)으로 직접 전달할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;큰 데이터&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 데이터셋과 같은 큰 입력값은 파일 경로(file paths)로 전달해야 함. 출력 역시 쿠브플로우가 제공하는 경로에 파일로 작성됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파이썬 함수 기반 컴포넌트는 이러한 입력 및 출력 전달 과정을 자동으로 처리해줘서 편리하게 컴포넌트를 만들 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 파이프라인 패키지&lt;/b&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. Python SDK (kfp)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kfp는 kubeflow pipelines을 개발할 수 있도록 해주는 Python SDK&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이를 통해 파이프라인 구성, 각 step 마다 실행되는 이미지 등을 설정 할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kfp 설치&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설치는 간단한 pip 커맨드로 설치가 가능함&lt;/p&gt;
&lt;pre id=&quot;code_1756428418471&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pip install kfp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kfp에는 총 4가지의 라이브러리 패키지가 있는데 그 중 세가지를 소개함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;kfp.Client&lt;/li&gt;
&lt;li&gt;kfp.compiler&lt;/li&gt;
&lt;li&gt;kfp.dsl&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kfp.Client&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; kubernetes에 설치된 kubeflow pipelines api와 통신하기 위한 클라이언트 라이브러리&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 파이프라인 업로드, 실험 생성, run 생성 등의 기능이 있음&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;kfp.Client() : kubeflow pipelines api와 통신하기 위한 클라이언트 선언&lt;/li&gt;
&lt;li&gt;.get_pipeline_id() : 파이프라인 이름으로 파이프라인 ID 검색&lt;/li&gt;
&lt;li&gt;.upload_pipeline() : 변환된 파이썬 DSL 코드를 파이프라인으로 업로드&lt;/li&gt;
&lt;li&gt;.upload_pipeline_version() : 위 .upload_pipeline()과 동일한 기능. 단 버전을 지정해서 업로드&lt;/li&gt;
&lt;li&gt;.create_experiment() : 실험 생성&lt;/li&gt;
&lt;li&gt;.run_pipeline() : 변환된 파이썬 DSL 코드를 해당 실험에서 RUN&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kfp.compiler&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 파이프라인을 빌드하는 라이브러리&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;kfp.compiler.Compiler().compile() : 파이썬 DSL 코드를 파이프라인 업로드를 위한 YAML 파일로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kfp.dsl&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt; 파이프라인의 각 step을 구성할때 사용되는 클래스, 모듈 등의 라이브러리&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.ContainerOp() : 컨테이너 이미지로 구성된 pipeline task&lt;/li&gt;
&lt;li&gt;.ResourceOp() : kubernetes resource를 생성하거나 다루는 pipeline task&lt;/li&gt;
&lt;li&gt;.VolumeOp() : kubernetes PVC를 생성하는 pipeline task&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. ContainerOp&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;ContainerOp 개념&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨테이너 이미지로 구성된 파이프라인 한 step을 의미함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 파라미터&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;name : str 값으로 컴포넌트의 이름&lt;/li&gt;
&lt;li&gt;image : 사용할 컨테이너 이미지 이름&lt;/li&gt;
&lt;li&gt;command : 컨테이너 이미지 실행 명령어&lt;/li&gt;
&lt;li&gt;arguments : 컨테이너 이미지 실행 인자값&lt;/li&gt;
&lt;li&gt;file_outputs : 컨테이너 결과를 외부로 노출시킬 때 사용&lt;/li&gt;
&lt;li&gt;pvolumes : volume을 컨테이너 경로에 마운트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;주요 메소드
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;.set_display_name() : 파이프라인 시각화 할 때 표시될 이름&lt;/li&gt;
&lt;li&gt;.after() : 특정 파이프라인 step이 완료된 후에 실행 함을 지정&lt;/li&gt;
&lt;li&gt;.add_volume() : 컨테이너에 volume을 생성&lt;/li&gt;
&lt;li&gt;.add_volume_mount() : 컨테이너에 volume을 마운트&lt;/li&gt;
&lt;li&gt;.add_env_variable() : 컨테이너 속 환경변수를 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;volume을 사용하는 세가지 방법&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; onprem 사용하여 volume을 mount 하는 경우 pvc가 미리 생성 되어야 함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ContainerOp의 전체 파라미터 및 사용법은 Docs에서 확인 가능함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kubeflow-pipelines.readthedocs.io/en/sdk-2.14.2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kubeflow-pipelines.readthedocs.io/en/sdk-2.14.2/&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756433773795&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from kfp import dsl
from kfp import onprem
from kubernetes import client as k8s_client

@dsl.pipeline(
    name=&quot;pipeline example&quot;,
    description=&quot;example for volume&quot;
)
def pipeline():
	&quot;&quot;&quot;..생략..&quot;&quot;&quot;
	
    # VolumeOp 사용 예제
	data_vop = dsl.VolumeOp(
		name=&quot;data-volume&quot;,
    	resource_name=&quot;data-pvc&quot;,
    	modes=dsl.VOLUME_MODE_RWO,
    	size=&quot;100Mi&quot;
    )
    
    data_op = dsl.ContainerOp(
    	name=&quot;data preprocess&quot;,
        image=&quot;byeongjokim/data-preprocess&quot;,
        pvolumes={&quot;/data&quot;: data_vop.volume}
    )
    
    
    # add_volume, add_volume_mount 사용
    data_op = dsl.ContainerOp(
    	name=&quot;data preprocess&quot;,
        image=&quot;byeongjokim/data-preprocess&quot;
    ).add_volume(
    	k8s_client.V1Volume(
        	name='data-pvc'
        )
    )\
    .add_volume_mount(
    	k8s_client.V1VolumeMount(
        	mount_path=&quot;/data&quot;,
            name=&quot;data-pvc&quot;
        )
    )
    
    # onperm 사용
    data_op = dsl.ContainerOp(
    	name=&quot;data preprocess&quot;,
        image=&quot;byeongjokim/data-preprocess&quot;
    ).apply(onprem.mount_pvc(&quot;data-pvc&quot;, volume_name=&quot;data&quot;, volume_mount_path=&quot;/data&quot;))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. kfp Example&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kfp Example&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 위 코드와 같이 여러 ContainerOp와 .after()을 이용해 step과 순서를 지정해줌&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;- 추가적으로 dsl.Condition()을 사용하여 특정 accuracy 이상일 경우에만 다음 step으로 이어지게 할 수 있음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;a href=&quot;https://github.com/byeongjokim/MLOps-Example&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/byeongjokim/MLOps-Example&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756448009000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - byeongjokim/MLOps-Example&quot; data-og-description=&quot;Contribute to byeongjokim/MLOps-Example development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/byeongjokim/MLOps-Example&quot; data-og-url=&quot;https://github.com/byeongjokim/MLOps-Example&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dHPtOa/hyZC94HAWe/AiK41PMERFAxGksakBzQF1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/c5JgyX/hyZGm2opQ6/46G0lDark2Z01c9jKxoiAk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/byeongjokim/MLOps-Example&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/byeongjokim/MLOps-Example&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dHPtOa/hyZC94HAWe/AiK41PMERFAxGksakBzQF1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/c5JgyX/hyZGm2opQ6/46G0lDark2Z01c9jKxoiAk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - byeongjokim/MLOps-Example&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to byeongjokim/MLOps-Example development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 공통 환경변수 정의&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 모든 단계에서 사용할 관리 URL을 환경변수로 설정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 각 컨테이너에서 REST API 호출 등 모니터링&amp;middot;로그&amp;nbsp;수집에&amp;nbsp;활용&lt;/p&gt;
&lt;pre id=&quot;code_1756452446473&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ENV_MANAGE_URL = V1EnvVar(name='MANAGE_URL', value='http://220.116.228.93:8088/send')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 데이터 수집 및 전처리&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 전처리 전용 컨테이너 이미지 실행&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- PVC(data-pvc)를 /data에 마운트하여 이후 단계와 공유&lt;/p&gt;
&lt;pre id=&quot;code_1756452690466&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data_0 = dsl.ContainerOp(
    name=&quot;load &amp;amp; preprocess data pipeline&quot;,
    image=&quot;byeongjokim/mnist-pre-data:latest&quot;,
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 데이터 검증&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; 전처리 완료 데이터를 검증&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- after(data_0)로 선행 의존성 보장&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756452930043&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;data_1 = dsl.ContainerOp(
    name=&quot;validate data pipeline&quot;,
    image=&quot;byeongjokim/mnist-val-data:latest&quot;,
).after(data_0)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(4) 임베딩 모델 학습&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 임베딩 모델 학습 수행&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 학습 결과는 train-model-pvc의 /model에 저장&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756453173817&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;train_model = dsl.ContainerOp(
    name=&quot;train embedding model&quot;,
    image=&quot;byeongjokim/mnist-train-model:latest&quot;,
).after(data_1)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(5) 임베딩 생성&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 학습된 임베딩 모델을 활용하여 벡터 표현 생성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756453377417&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;embedding = dsl.ContainerOp(
    name=&quot;embedding data using embedding model&quot;,
    image=&quot;byeongjokim/mnist-embedding:latest&quot;,
).after(train_model)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(6) FAISS 학습&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 생성된 임베딩을 기반으로 FAISS 인덱스 학습&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 이후 검색 및 분석 단계에서 사용&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756453987562&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;train_faiss = dsl.ContainerOp(
    name=&quot;train faiss&quot;,
    image=&quot;byeongjokim/mnist-train-faiss:latest&quot;,
).after(embedding)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(7) 분석 단계&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt; 모델 성능 분석 및 평가&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;산출물
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;혼동행렬 : /confusion_matrix.csv&lt;/li&gt;
&lt;li&gt;정확도 값 : /accuracy.json&lt;/li&gt;
&lt;li&gt;UI 메타데이터 : /mlpipeline-ui-metadata.json&lt;/li&gt;
&lt;li&gt;대시보드 메트릭 : /mlpipeline-metrics.json&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1756454941336&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;analysis = dsl.ContainerOp(
    name=&quot;analysis total&quot;,
    image=&quot;byeongjokim/mnist-analysis:latest&quot;,
    file_outputs={
        &quot;confusion_matrix&quot;: &quot;/confusion_matrix.csv&quot;,
        &quot;mlpipeline-ui-metadata&quot;: &quot;/mlpipeline-ui-metadata.json&quot;,
        &quot;accuracy&quot;: &quot;/accuracy.json&quot;,
        &quot;mlpipeline_metrics&quot;: &quot;/mlpipeline-metrics.json&quot;
    }
).after(train_faiss)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(8) 조건부 배포&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 정확도(accuracy) &amp;gt; 0.8일 경우에만 배포 수행&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;- 학습 모델을 deploy-model-pvc에 복사하여 서빙 환경에서 사용 가능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756455751847&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;baseline = 0.8
with dsl.Condition(analysis.outputs[&quot;accuracy&quot;] &amp;gt; baseline):
    deploy = dsl.ContainerOp(
        name=&quot;deploy mar&quot;,
        image=&quot;byeongjokim/mnist-deploy:latest&quot;,
    ).after(analysis)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Upload Pipelines&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 완성된 함수(mnist_pipeline)를 compile 한 후, 파이프라인에 올리고, run을&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;kfp.Clinet() :&amp;nbsp;kubeflow pipelines API 접근&lt;/li&gt;
&lt;li&gt;kfp.compiler.Compiler().compile() : 해당 파이프라인 함수 compile&lt;/li&gt;
&lt;li&gt;client.get_pipeline_id() :&amp;nbsp;현재 파이프라인 이름을 가진 파이프라인이 존재하는지 확인&lt;/li&gt;
&lt;li&gt;client.upload_pipeline_version(),&amp;nbsp;client.upload_pipeline() : 파이프라인 신규/버전 업로드&lt;/li&gt;
&lt;li&gt;client.create_experiment()&amp;nbsp;: experiment 생성 및 기존 experiment 접근&lt;/li&gt;
&lt;li&gt;client.run_pipeline()&amp;nbsp;: 파이프라인 run&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 파이프라인 구축&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 간단한 실습&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kfp SDK 설치 및 호출&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;kfp SDK를 설치함&lt;br /&gt;- 터미널에 다음과 같이 입력함&lt;br /&gt;
&lt;pre id=&quot;code_1755759959286&quot; class=&quot;cmake&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install kfp&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;모듈을 호출함&lt;br /&gt;- 설치된 kfp SDK에서 파이프라인 컴포넌트와 파이프라인을 정의하는 데 사용되는 dsl 모듈과 파이프라인을 컴파일하는 compiler 모듈을 불러옴&lt;br /&gt;
&lt;pre id=&quot;code_1755145384567&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from kfp import dsl
from kfp import compiler&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;파이프라인 구성요소 구축&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인사말을 출력하는 간단한 파이프라인을 구축함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;컴포넌트 정의&lt;br /&gt;- 컴포넌트가 실행될 컨테이너 이미지 지정&lt;br /&gt;
&lt;pre id=&quot;code_1755136666954&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;@dsl.component(base_image=&quot;python:3.9&quot;)
def say_hello(name: str) -&amp;gt; str:
    hello_text = f'Hello, {name}!'
    print(hello_text)
    return hello_text&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@dsl.component(base_image=&quot;python:3.9)&lt;br /&gt;- @dsl.comonent는 이 함수가 파이프라인의 컴포넌트임을 kubeflow에게 알려주는 데코레이터&lt;br /&gt;- base_image=&quot;python:3.9&quot;는 이 컴포넌트가 실행될 컨테이너 이미지를 지정함. 모든 파이프라인 컴포넌트는 격리된 환경에서 실행되어야 하므로, Python 3.9가 설치된 기본 이미지를 사용하도록 설정함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;파이프라인 정의&lt;br /&gt;-&amp;nbsp;컴포넌트들을&amp;nbsp;연결하여&amp;nbsp;전체&amp;nbsp;작업의&amp;nbsp;흐름을&amp;nbsp;설계하는&amp;nbsp;과정&lt;br /&gt;
&lt;pre id=&quot;code_1755147409842&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@dsl.pipeline
def hello_pipeline(recipient: str) -&amp;gt; str:
    hello_task = say_hello(name=recipient)
    return hello_task.output&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@dsl.pipeline&lt;br /&gt;- 이 함수가 파이프라인임을 나타내는 데코레이터&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;파이프라인 컴파일&lt;br /&gt;- 정의한 파이프라인을 YAML 파일로 컴파일하여 Kubeflow Pipelines에 업로드할 수 있는 형태로 저장 &lt;br /&gt;
&lt;pre id=&quot;code_1755147517211&quot; class=&quot;less&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;compiler.Compiler().compile(hello_pipeline, 'pipeline.yaml')&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;파이프라인 실행&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이 파이프라인을 'Kubeflow Pipelines' 서비스에 업로드함. 이때 두가지 방법이 있음&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #333333; text-align: left;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;pipeline을 yaml 파일로 만들어 Kubeflow UI에 업로드하는 방식&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;다른 하나는 Kubeflow Pipelines SDK 클라이언트를 사용해 직접 서버와 통신해 파이프라인을 실행하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 둘 중 1번 방법으로 진행함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 쿠버플로우 Pipelines의 'Upload pipeline' 클릭하여 진행함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;이름 및 파일 설정&lt;br /&gt;- 아래의 사진과 같이 이름과 파일을 설정하고 'Create' 버튼을 클릭하여 생성함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTuLsU/btsPUEeetzQ/CGYKomJikQpnRbiQf1kigk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTuLsU/btsPUEeetzQ/CGYKomJikQpnRbiQf1kigk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTuLsU/btsPUEeetzQ/CGYKomJikQpnRbiQf1kigk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTuLsU%2FbtsPUEeetzQ%2FCGYKomJikQpnRbiQf1kigk%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;400&quot; height=&quot;487&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;생성 확인&lt;br /&gt;- 이렇게 생성이 된걸 확인할 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1683&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z6bxK/btsPTl03Ztt/0N4d4tN9aqC6zKKyVrXqwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z6bxK/btsPTl03Ztt/0N4d4tN9aqC6zKKyVrXqwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z6bxK/btsPTl03Ztt/0N4d4tN9aqC6zKKyVrXqwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ6bxK%2FbtsPTl03Ztt%2F0N4d4tN9aqC6zKKyVrXqwK%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;600&quot; height=&quot;301&quot; data-origin-width=&quot;1683&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;run 생성&lt;br /&gt;- 오른쪽 상단의 'Create run' 버튼 클릭하여 생성함&lt;br /&gt;- Experiment가 없다면 그것부터 생성한 후에 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QSiro/btsPTlth3ry/7Xj1yxRp6EVXew63cOxxl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QSiro/btsPTlth3ry/7Xj1yxRp6EVXew63cOxxl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QSiro/btsPTlth3ry/7Xj1yxRp6EVXew63cOxxl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQSiro%2FbtsPTlth3ry%2F7Xj1yxRp6EVXew63cOxxl1%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;600&quot; height=&quot;193&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj4bSb/btsPTBCFJI8/5GnYd9K4QC6g3GPlPxvPUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj4bSb/btsPTBCFJI8/5GnYd9K4QC6g3GPlPxvPUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj4bSb/btsPTBCFJI8/5GnYd9K4QC6g3GPlPxvPUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj4bSb%2FbtsPTBCFJI8%2F5GnYd9K4QC6g3GPlPxvPUK%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;400&quot; height=&quot;673&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;'Run parameters' 에 아무거나 입력&lt;br /&gt;- Kubeflow Pipeline Test를 입력하여 테스트 해볼 예정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXmDFn/btsPTFrwrdx/2cdVk37sspKIjoqrz761z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXmDFn/btsPTFrwrdx/2cdVk37sspKIjoqrz761z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXmDFn/btsPTFrwrdx/2cdVk37sspKIjoqrz761z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXmDFn%2FbtsPTFrwrdx%2F2cdVk37sspKIjoqrz761z1%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;626&quot; height=&quot;135&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;'Start' 클릭 후 결과 확인!&lt;br /&gt;- 체크 표시를 확인한 후 클릭해보면 Output을 확인할 수 있음!&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1656&quot; data-origin-height=&quot;838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ZSOf/btsPSnSKK81/a0NQnKPNxss8Ls3lq2DAk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ZSOf/btsPSnSKK81/a0NQnKPNxss8Ls3lq2DAk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ZSOf/btsPSnSKK81/a0NQnKPNxss8Ls3lq2DAk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ZSOf%2FbtsPSnSKK81%2Fa0NQnKPNxss8Ls3lq2DAk1%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;600&quot; height=&quot;304&quot; data-origin-width=&quot;1656&quot; data-origin-height=&quot;838&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 학습 프로젝트 실행&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 케라스 데이터셋으로부터 로이터 뉴스 기사 데이터를 로드하고, 학습 및 평가를 수행하는 파이프라인을 구축함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;데이터 로드 및 전처리&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 데코레이터 : @dsl.component( . . . )&lt;/p&gt;
&lt;pre id=&quot;code_1761007407021&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@dsl.component(
    base_image=&quot;tensorflow/tensorflow:2.15.0&quot;,
    packages_to_install=[&quot;matplotlib&quot;,&quot;joblib&quot;]
)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;base_image&lt;br /&gt;- 해당 컴포넌트가 실행될 기본 도커 이미지&lt;/li&gt;
&lt;li&gt;packages_to_install&lt;br /&gt;- 추가로 설치할 Python 패키지 ( matplotlib, joblib )&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 함수 정의&lt;/p&gt;
&lt;pre id=&quot;code_1761007519843&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def preprocess_data(
    reuters_data_path : dsl.OutputPath(&quot;Dataset&quot;),
    num_words: int = 1000
) -&amp;gt; NamedTuple(&quot;Outputs&quot;,[(&quot;num_classes&quot;, int)]):&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reuters_data_path&lt;br /&gt;- 전처리된 데이터를 저장할 출력 파일 경로 (Output Artifact)&lt;br /&gt;- 파이프라인에서 다음 단계 컴포넌트가 이 파일을 입력으로 받을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 데이터 로드&lt;/p&gt;
&lt;pre id=&quot;code_1761009579101&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(x_train, y_train), (x_test, y_test) = keras.datasets.reuters.load_data(num_words=num_words)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Keras에서 제공하는 Reuters 뉴스 데이터셋을 불러옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 뉴스 기사(텍스트)는 숫자 인덱스로 변환되어 있으며, num_words보다 작은 단어 인덱스만 사용함&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;4. 시퀀스 벡터화&lt;/p&gt;
&lt;pre id=&quot;code_1761009778784&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def vectorize_sequences(sequences, dimension=num_words):
    results = np.zeros((len(sequences), dimension))
    for i, seq in enumerate(sequences):
        results[i, seq] = 1.0
    return results&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 문장을 단어 인덱스 리스트 &amp;rarr; 원-핫 인코딩 벡터로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dimension : num_words차원 벡터&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;5. 학습/테스트 데이터 변환&lt;/p&gt;
&lt;pre id=&quot;code_1761010123824&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;x_train = vectorize_sequences(x_train)
x_test = vectorize_sequences(x_test)

y_train = keras.utils.to_categorical(y_train)
y_test = keras.utils.to_categorical(y_test)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력 데이터(x) : 원-핫 벡터화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 출력 데이터(y) : 각 뉴스 카테고리를 원-핫 라벨로 변환&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;6. 결과 저장 및 반환&lt;/p&gt;
&lt;pre id=&quot;code_1761010364063&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reuters_data = {&quot;x_train&quot;: x_train, &quot;y_train&quot;: y_train, &quot;x_test&quot;: x_test, &quot;y_test&quot;: y_test }
joblib.dump(reuters_data, reuters_data_path)

return (num_classes,)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;joblib.dump()&lt;br /&gt;- 데이터를 파일로 저장함&lt;br /&gt;- 다음 단계에서 입력으로 사용됨&lt;/li&gt;
&lt;li&gt;return (num_classes,)&lt;br /&gt;- 뉴스 카테고리의 개수를 반환&lt;br /&gt;- 이 값은 MLMD(Metadata store)에 기록되어 파이프라인의 다른 컴포넌트에서 메타데이터로 참조할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;모델 학습&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 데코레이터 : @dsl.component( . . . )&lt;/p&gt;
&lt;pre id=&quot;code_1761019903796&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@dsl.component(
    base_image=&quot;tensorflow/tensorflow:2.15.0&quot;,
    packages_to_install=[&quot;joblib&quot;]
)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@dsl.component&lt;br /&gt;- Kubeflow Pipeline에서 사용할 &quot;단일 컴포넌트&quot;를 정의하는 데 사용됨&lt;/li&gt;
&lt;li&gt;base_image&lt;br /&gt;- 이 컴포넌트가 실행될 기본 Docker 이미지&lt;/li&gt;
&lt;li&gt;packages_to_install&lt;br /&gt;- 추가로 설치할 Python 패키지 목록&lt;br /&gt;- joblib를 설치해서 데이터를 로드할 수 있게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 함수 정의&lt;/p&gt;
&lt;pre id=&quot;code_1761020442023&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def train_model(
    reuters_data_path: dsl.InputPath(&quot;Dataset&quot;),
    num_words: int,
    num_classes: int,
    model_out: dsl.OutputPath(&quot;Model&quot;),
    history_out: dsl.OutputPath(&quot;Metrics&quot;),
    epochs: int = 10,
    batch_size: int = 512
) -&amp;gt; NamedTuple(&quot;Outputs&quot;, [(&quot;model_path&quot;, str)]):&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dsl.InputPath()&lt;br /&gt;- 파이프라인 상에서 이전 단계의 출력(Dataset)을 &quot;파일 경로&quot; 형태로 받음&lt;/li&gt;
&lt;li&gt;dsl.OutputPath(&quot;Model&quot;) / (&quot;Metrics&quot;)&lt;br /&gt;- 이 컴포넌트가 생성할 결과물을 저장할 경로&lt;br /&gt;- Kubeflow가 자동으로 이 파일들을 아티팩트로 관리함&lt;/li&gt;
&lt;li&gt;NamedTuple&lt;br /&gt;- 반환값 형식을 지정함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 데이터 로드&lt;/p&gt;
&lt;pre id=&quot;code_1761022247496&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reuters_data = joblib.load(reuters_data_path)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 전처리 과정에서 딕셔너리로 저장해뒀던 reuters_data를 로드함&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;4. 모델 정의&lt;/p&gt;
&lt;pre id=&quot;code_1761022391233&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = keras.Sequential([
    layers.Dense(64, activation=&quot;relu&quot;, input_shape=(num_words,)),
    layers.Dense(64, activation=&quot;relu&quot;),
    layers.Dense(num_classes, activation=&quot;softmax&quot;)
])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력 차원 : num_words&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 은닉층 2개 (64개의 노드, ReLU)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 출력층: 클래스 개수(num_classes), softmax로 다중 분류&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;5. 컴파일&lt;/p&gt;
&lt;pre id=&quot;code_1761022573058&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model.compile(
    optimizer=&quot;rmsprop&quot;,
    loss=&quot;categorical_crossentropy&quot;,
    metrics=[&quot;accuracy&quot;]
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 옵티마이저 : RMSProp&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 손실함수 : categorical_crossentropy&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 평가 지표 : accuracy&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 학습&lt;/p&gt;
&lt;pre id=&quot;code_1761022712777&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;history = model.fit(
    reuters_data[&quot;x_train&quot;], reuters_data[&quot;y_train&quot;],
    epochs=epochs,
    batch_size=batch_size,
    validation_split=0.2,
    verbose=2
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학습 데이터에서 20%를 검증용으로 사용함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학습 로그는 history 객체에 저장됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 결과 저장 및 반환&lt;/p&gt;
&lt;pre id=&quot;code_1761022729383&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model.save(model_out)

with open(history_out, &quot;w&quot;) as f:
    json.dump(history.history, f)

return (model_out,)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;model.save(model_out)&lt;br /&gt;- 학습된 모델을 Kubeflow의 아티팩트 경로(model_out)에 저장&lt;br /&gt;- 이 경로는 다음 컴포넌트가 dsl.InputPath(&quot;Model&quot;)로 받을 수 있음&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;with open(history_out, &quot;w&quot;) as f :&lt;br /&gt;- 학습 결과(손실, 정확도 등)를 JSON 파일로 저장&lt;br /&gt;- Kubeflow UI에서 Metrics로 시각화 가능&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;return (model_out,)&lt;br /&gt;- NamedTuple 형식으로 model_path 문자열을 반환&lt;br /&gt;- Kubeflow 파이프라인 상에서 &quot;이 컴포넌트의 출력&quot;으로 인식됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;모델 평가&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt; 컴포넌트 정의&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761024888724&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@dsl.component(
    base_image=&quot;tensorflow/tensorflow:2.15.0&quot;,
    packages_to_install=[&quot;joblib&quot;]
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@dsl.component&lt;br /&gt;- Kubeflow Pipeline에서 하나의 컴포넌트를 정의하는 부분&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;base_image&lt;br /&gt;- 실행 환경으로 사용할 Docker 이미지&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li data-end=&quot;651&quot; data-start=&quot;544&quot;&gt;packages_to_install&lt;br /&gt;- 추가로 필요한 패키지를 지정함&lt;br /&gt;- joblib을 설치하여 .joblib 파일로 저장된 데이터를 읽을 수 있게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 함수 정의&lt;/p&gt;
&lt;pre id=&quot;code_1761025246382&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def evaluate_model(
    model: dsl.InputPath(&quot;Model&quot;),
    reuters_data_path: dsl.InputPath(&quot;Dataset&quot;)
) -&amp;gt; float:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;916&quot; data-start=&quot;802&quot;&gt;model&lt;br /&gt;- train_model 단계에서 저장한 모델 파일 경로&lt;br /&gt;- dsl.InputPath(&quot;Model&quot;) &amp;rarr; Kubeflow가 모델 파일을 이 경로에 자동으로 복사&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li data-end=&quot;1018&quot; data-start=&quot;918&quot;&gt;reuters_data_path&lt;br /&gt;평가에 사용할 데이터셋 파일 경로 (joblib 형식)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li data-end=&quot;1116&quot; data-start=&quot;1020&quot;&gt;반환값(float)&lt;br /&gt;- 평가 정확도(accuracy)를 float 값으로 반환&lt;br /&gt;- Kubeflow의 ML Metadata(MLMD)에 자동 기록됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 데이터 및 모델 불러오기&lt;/p&gt;
&lt;pre id=&quot;code_1761026224828&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reuters_data = joblib.load(reuters_data_path)
model = keras.models.load_model(model)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 전처리 단계에서 저장했던 Reuters 데이터셋을 로드함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 모델은 학습 때 저장된 TensorFlow Keras 모델을 불러옴&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 모델 평가&lt;/p&gt;
&lt;pre id=&quot;code_1761026534820&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;loss, acc = model.evaluate(reuters_data[&quot;x_test&quot;], reuters_data[&quot;y_test&quot;], verbose=0)
print(f&quot;테스트 정확도: {acc:.4f}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1820&quot; data-start=&quot;1702&quot;&gt;model.evaluate()&lt;br /&gt;- 주어진 테스트셋으로 모델 성능을 평가함
&lt;ul style=&quot;list-style-type: circle;&quot; data-end=&quot;1820&quot; data-start=&quot;1758&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;1791&quot; data-start=&quot;1758&quot;&gt;loss : 손실값 (crossentropy 등)&lt;/li&gt;
&lt;li data-end=&quot;1820&quot; data-start=&quot;1794&quot;&gt;acc : 정확도 (accuracy)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1862&quot; data-start=&quot;1821&quot;&gt;verbose=0&lt;br /&gt;- 학습 로그를 생략하고 결과만 반환.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- print()를 통해 Kubeflow 로그창에 &quot;테스트 정확도: 0.XXXX&quot; 형태로 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 결과 반환&lt;/p&gt;
&lt;pre id=&quot;code_1761026770094&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return float(acc)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Kubeflow에서는 컴포넌트가 반환하는 단일 숫자(float, int, str 등)를 파이프라인 결과 파라미터로 저장함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;결과 시각화&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트 정의&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1761099571515&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@dsl.component(
    base_image=&quot;python:3.9&quot;,
    packages_to_install=[&quot;matplotlib&quot;]
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;391&quot; data-start=&quot;323&quot;&gt;@dsl.component()&lt;br /&gt;- Kubeflow Pipelines에서 하나의 컴포넌트를 정의함&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li data-end=&quot;444&quot; data-start=&quot;392&quot;&gt;base_image=&quot;python:3.9&quot;&lt;br /&gt;- Python 3.9 환경을 사용함&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li data-end=&quot;527&quot; data-start=&quot;445&quot;&gt;packages_to_install=[&quot;matplotlib&quot;]&lt;br /&gt;- matplotlib 패키지를 설치해 그래프를 그림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 함수 정의&lt;/p&gt;
&lt;pre id=&quot;code_1761099997787&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def plot_history(
    history_path: dsl.InputPath(&quot;Metrics&quot;),
    plot_out: dsl.OutputPath(&quot;Plot&quot;),
    metrics_out: dsl.OutputPath(&quot;Metrics&quot;)
):&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;888&quot; data-start=&quot;711&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;779&quot; data-start=&quot;711&quot;&gt;history_path&lt;br /&gt;- 이전 단계에서 전달된 history JSON 파일의 경로&lt;/li&gt;
&lt;li data-end=&quot;825&quot; data-start=&quot;780&quot;&gt;plot_out&lt;br /&gt;- 그래프를 저장할 출력 이미지 파일 경로&lt;/li&gt;
&lt;li data-end=&quot;888&quot; data-start=&quot;826&quot;&gt;metrics_out&lt;br /&gt;- 최종 성능 지표를 저장할 출력 JSON 경로&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;935&quot; data-start=&quot;890&quot; data-ke-size=&quot;size16&quot;&gt;이 세 인자는 Kubeflow에서 artifact(산출물) 로 관리됨&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;3. 학습 기록 불러오기&lt;/p&gt;
&lt;pre id=&quot;code_1761100075489&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with open(history_path, &quot;r&quot;) as f:
    history = json.load(f)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이전 단계(train_model 등)에서 저장한 history.json 파일을 불러옴&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;4. 그래프 시각화&lt;/p&gt;
&lt;pre id=&quot;code_1761111287787&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plt.figure(figsize=(12, 5))&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Loss 그래프&lt;br /&gt;- 훈련 손실(Loss)과 검증 손실(Val_loss)을 한 그래프에 표시함&lt;br /&gt;
&lt;pre id=&quot;code_1761111320596&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;plt.subplot(1, 2, 1)
plt.plot(epochs, loss, &quot;bo-&quot;, label=&quot;Training loss&quot;)
plt.plot(epochs, val_loss, &quot;ro-&quot;, label=&quot;Validation loss&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Accuracy 그래프&lt;br /&gt;- 훈련 정확도와 검증 정확도를 표시함&lt;br /&gt;
&lt;pre id=&quot;code_1761111548187&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;plt.subplot(1, 2, 2)
plt.plot(epochs, acc, &quot;bo-&quot;, label=&quot;Training acc&quot;)
plt.plot(epochs, val_acc, &quot;ro-&quot;, label=&quot;Validation acc&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://byeongjo-kim.tistory.com/28&quot;&gt;https://byeongjo-kim.tistory.com/28&lt;/a&gt;&lt;/p&gt;</description>
      <category>개인 공부/쿠버플로우</category>
      <category>kubeflow</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/421</guid>
      <comments>https://kne-coding.tistory.com/421#entry421comment</comments>
      <pubDate>Tue, 12 Aug 2025 10:47:43 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버플로우] 화면 커스터마이징</title>
      <link>https://kne-coding.tistory.com/420</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;br /&gt;1. Kubeflow 커스터마이징&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. MLflow 설치 및 대시보드 추가하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 두 가지 성격의 저장소가 필요함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB (metadata 저장)&lt;/li&gt;
&lt;li&gt;Storage (Artifact 저장)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- DB를 위해 일반적으로 PostgreSQL을 사용하고, 아티팩트를 저장하기 위해 S3를 사용함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Kubeflow는 기본적으로 저장소로 MinIO를 사용하기에 여기에 mlflow용 버킷을 만들고 사용할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;MLflow를 위한 Minio bucket 생성&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Kubeflow를 위해 이미 설치된 minio 서비스에 접속해 버킷을 생성함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743842&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;kubectl port-forward -n kubeflow svc/minio-service 9000:9000&lt;/code&gt;&lt;/pre&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-origin-width=&quot;757&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wjEry/btsOUVQF3by/qGCsYA72KVlFoKtL5uuFDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wjEry/btsOUVQF3by/qGCsYA72KVlFoKtL5uuFDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wjEry/btsOUVQF3by/qGCsYA72KVlFoKtL5uuFDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwjEry%2FbtsOUVQF3by%2FqGCsYA72KVlFoKtL5uuFDk%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;757&quot; height=&quot;131&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- http://localhost:9000/ 에 접속한 뒤 아래 계정으로 로그인함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Access Key: minio&lt;/li&gt;
&lt;li&gt;Secret Key: minio123&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1623&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxxwSN/btsOVE9vc47/h1rjHz8dTVLMKiw3m86bVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxxwSN/btsOVE9vc47/h1rjHz8dTVLMKiw3m86bVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxxwSN/btsOVE9vc47/h1rjHz8dTVLMKiw3m86bVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxxwSN%2FbtsOVE9vc47%2Fh1rjHz8dTVLMKiw3m86bVk%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;1623&quot; height=&quot;1034&quot; data-origin-width=&quot;1623&quot; data-origin-height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이후 mlflow라는 이름으로 버킷을 생성함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;1038&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFgGvd/btsOVt0Ja7F/JxM1wm8cHhVkTiRIc8QGN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFgGvd/btsOVt0Ja7F/JxM1wm8cHhVkTiRIc8QGN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFgGvd/btsOVt0Ja7F/JxM1wm8cHhVkTiRIc8QGN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFgGvd%2FbtsOVt0Ja7F%2FJxM1wm8cHhVkTiRIc8QGN0%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;1626&quot; height=&quot;1038&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;1038&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- mlflow를 위한 artifact 저장소가 준비됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- mlflow를 설치할 Helm 차트에서 설치를 제공해서 따로 설치를 하지 않음&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;MLflow 설치&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;아래 명령어로 설치를 함&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754963743843&quot; class=&quot;gams&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;kubectl create ns mlflow
 
kubectl create -n mlflow secret generic mlflow-secret \
    --from-literal=AWS_ACCESS_KEY_ID=minio \
    --from-literal=AWS_SECRET_ACCESS_KEY='minio123'
 
helm repo add bitnami https://charts.bitnami.com/bitnami
helm upgrade --install mlflow bitnami/mlflow -n mlflow --version 0.10.3 \
--set minio.enabled=false \
--set externalS3.host=minio-service.kubeflow \
--set externalS3.port=9000 \
--set externalS3.existingSecret=mlflow-secret \
--set externalS3.existingSecretAccessKeyIDKey=&quot;AWS_ACCESS_KEY_ID&quot; \
--set externalS3.existingSecretKeySecretKey=&quot;AWS_SECRET_ACCESS_KEY&quot; \
--set externalS3.bucket=&quot;mlflow&quot; \
--set externalS3.protocol=http&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&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-origin-width=&quot;742&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7SZiV/btsOYUoRVi7/M1ZaPHYekzPVSuAvmDonK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7SZiV/btsOYUoRVi7/M1ZaPHYekzPVSuAvmDonK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7SZiV/btsOYUoRVi7/M1ZaPHYekzPVSuAvmDonK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7SZiV%2FbtsOYUoRVi7%2FM1ZaPHYekzPVSuAvmDonK0%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;742&quot; height=&quot;392&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&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-origin-width=&quot;877&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XjOAA/btsOVuloUcY/kh9U1UUl71JNEMbZPMQlPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XjOAA/btsOVuloUcY/kh9U1UUl71JNEMbZPMQlPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XjOAA/btsOVuloUcY/kh9U1UUl71JNEMbZPMQlPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXjOAA%2FbtsOVuloUcY%2Fkh9U1UUl71JNEMbZPMQlPk%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;877&quot; height=&quot;111&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- http://localhost:32429에 접속하고 로그인하면 아래와 같은 화면이 나와야 함&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;username: user&lt;/li&gt;
&lt;li&gt;password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ff5544; text-align: left;&quot;&gt;kubectl get secret --namespace mlflow mlflow-tracking -o jsonpath=&quot;{.data.admin-password }&quot; | base64 -d&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;1038&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zdYmt/btsOY1uy1l0/VA3v6hyhVF7mjOLnSjDnYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zdYmt/btsOY1uy1l0/VA3v6hyhVF7mjOLnSjDnYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zdYmt/btsOY1uy1l0/VA3v6hyhVF7mjOLnSjDnYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzdYmt%2FbtsOY1uy1l0%2FVA3v6hyhVF7mjOLnSjDnYk%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;1626&quot; height=&quot;1038&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;1038&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;virtual service 생성&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Kubeflow의 Central Dashboard에서 하나의 탭을 클릭할 때 다양한 엔드포인트로 라우팅 하기 위해 VirtualService를 사용 (Jupyter, Katib, pipeline 등)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- MLflow 버튼을 클릭하면 mlflow tracker UI로 라우팅 해야 하므로 추가로 Virtual Service를 생성해야 함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743843&quot; class=&quot;less&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: mlflow
  namespace: kubeflow
spec:
  gateways:
  - kubeflow/kubeflow-gateway
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /mlflow/
    rewrite:
      uri: /
    route:
    - destination:
        host: mlflow-tracking.mlflow.svc.cluster.local
        port:
          number: 80&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1754963743843&quot; class=&quot;coq&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;kubectl apply -f mlflow_virtual_service.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmuOE7/btsOYF6Knvp/YRALYJ46kuPxAJYoCkzPTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmuOE7/btsOYF6Knvp/YRALYJ46kuPxAJYoCkzPTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmuOE7/btsOYF6Knvp/YRALYJ46kuPxAJYoCkzPTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmuOE7%2FbtsOYF6Knvp%2FYRALYJ46kuPxAJYoCkzPTK%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;685&quot; height=&quot;42&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- /mlflow/ 라는 라우터에 접근 시 mlflow-tracking.mlflow.svc.cluster.local:80로부터 요청을 받아옴&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Central Dashboard 수정&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Central Dashboard에 버튼을 추가하기 위해, configmap에 정의된 것을 수정함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743843&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl edit cm centraldashboard-config -n kubeflow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래와 같은 내용을 추가함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743844&quot; class=&quot;json&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;type&quot;: &quot;item&quot;,
  &quot;link&quot;: &quot;/mlflow/&quot;,
  &quot;text&quot;: &quot;mlflow&quot;,
  &quot;icon&quot;: &quot;device:access-alarm&quot;
}&lt;/code&gt;&lt;/pre&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-origin-width=&quot;501&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcz30F/btsOYReQ5qS/RfJ23QyUJK76IrvHFp09ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcz30F/btsOYReQ5qS/RfJ23QyUJK76IrvHFp09ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcz30F/btsOYReQ5qS/RfJ23QyUJK76IrvHFp09ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcz30F%2FbtsOYReQ5qS%2FRfJ23QyUJK76IrvHFp09ek%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;460&quot; height=&quot;487&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 그 후 Central Dashboard를 재시작함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743844&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl rollout restart deploy centraldashboard -n kubeflow&lt;/code&gt;&lt;/pre&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-origin-width=&quot;833&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wI0hF/btsOWK2eFbF/4R3cjts3vju2gXZDh16Iuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wI0hF/btsOWK2eFbF/4R3cjts3vju2gXZDh16Iuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wI0hF/btsOWK2eFbF/4R3cjts3vju2gXZDh16Iuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwI0hF%2FbtsOWK2eFbF%2F4R3cjts3vju2gXZDh16Iuk%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;833&quot; height=&quot;85&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다시 대시보드에 접근하여 확인함!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2256&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVhAuA/btsOWqbXDxZ/Ew08LMizMlWTYmGDCk1630/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVhAuA/btsOWqbXDxZ/Ew08LMizMlWTYmGDCk1630/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVhAuA/btsOWqbXDxZ/Ew08LMizMlWTYmGDCk1630/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVhAuA%2FbtsOWqbXDxZ%2FEw08LMizMlWTYmGDCk1630%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;2256&quot; height=&quot;1216&quot; data-origin-width=&quot;2256&quot; data-origin-height=&quot;1216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. Kubeflow 대시보드 탭 삭제하기&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;현재 탭 확인&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이중에서 'Endpoints'부터 'Executions'까지의 탭을 전부 삭제하고 확인해볼 예정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zCikq/btsOXgs27Tx/garW80MJ4WRG6NueHyumMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zCikq/btsOXgs27Tx/garW80MJ4WRG6NueHyumMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zCikq/btsOXgs27Tx/garW80MJ4WRG6NueHyumMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzCikq%2FbtsOXgs27Tx%2FgarW80MJ4WRG6NueHyumMk%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;186&quot; height=&quot;557&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;557&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;configmap 수정&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 'Volumes'부터 이전에 추가한 'mlflow' 사이의 탭을 전부 삭제함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743844&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl edit cm centraldashboard-config -n kubeflow&lt;/code&gt;&lt;/pre&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-origin-width=&quot;462&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clXwP0/btsOYwWppr8/ekeo3sYCJuvXhKZdhCZl1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clXwP0/btsOYwWppr8/ekeo3sYCJuvXhKZdhCZl1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clXwP0/btsOYwWppr8/ekeo3sYCJuvXhKZdhCZl1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclXwP0%2FbtsOYwWppr8%2Fekeo3sYCJuvXhKZdhCZl1K%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;360&quot; height=&quot;597&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 그 후 Central Dashboard를 재시작함&lt;/p&gt;
&lt;pre id=&quot;code_1754963743844&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl rollout restart deploy centraldashboard -n kubeflow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다시 대시보드에 접근하면 탭이 삭제된 것을 확인할 수 있음!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kB2KC/btsOXkvYStK/8xDn6MoMDHOv9ouZPBNP11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kB2KC/btsOXkvYStK/8xDn6MoMDHOv9ouZPBNP11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kB2KC/btsOXkvYStK/8xDn6MoMDHOv9ouZPBNP11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkB2KC%2FbtsOXkvYStK%2F8xDn6MoMDHOv9ouZPBNP11%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;184&quot; height=&quot;249&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 공부/쿠버플로우</category>
      <category>kubeflow</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/420</guid>
      <comments>https://kne-coding.tistory.com/420#entry420comment</comments>
      <pubDate>Mon, 11 Aug 2025 09:14:43 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버플로우] 개념 및 구성 요소 정리</title>
      <link>https://kne-coding.tistory.com/419</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. Kubeflow 개념&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: left;&quot;&gt;- 쿠버네티스(Kubernetes)를 기반으로 하는 AI 플랫폼 구축을 위한 핵심 도구&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨테이너 오케스트레이션을 활용하여 머신러닝 워크플로우를 간편게 생성하며 모델을 배포, 관리할 수 있게 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 프로젝트에 필요한 도구를 독립적으로 사용하거나, 전체 AI 워크플로우를 아우르는 통합 플랫폼을 구축할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. 쿠버플로우&amp;nbsp;AI&amp;nbsp;플랫폼&amp;nbsp;특징&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;구성 가능하고 모듈식&lt;/b&gt; : 필요한 기능만 선택해 조합할 수 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;이식성과 확장성&lt;/b&gt; : 쿠버네티스가 동작하는 어떤 환경(클라우드, 온프레미스)에서도 동일하게 사용할 수 있으며, 대규모 작업도 효율적으로 처리함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;AI 워크플로우 지원&lt;/b&gt; : AI 수명 주기의 모든 단계(데이터 준비, 학습, 배포 등)를 지원하는 쿠버네티스 기반 프로젝트들로 구성됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 쿠버플로우&amp;nbsp;프로젝트&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AI 라이프 사이클의 다양한 측면을 다루는 여러 오픈소스 프로젝트로 구성됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이 프로젝트들은 독립적으로 사용하거나 쿠버플로우 AI 참조 플랫폼의 일부로 사용할 수 있음&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;width: 40.9302%;&quot;&gt;프로젝트&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp; KServe&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;머신러닝 모델 서빙을 위함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp; Katib&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;하이퍼파라미터 튜닝 및 뉴럴 아키텍처 탐색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp;Model&amp;nbsp;Registry&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;모델 관리 및 버전 관리를 위한 도구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp;Notebooks&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;주피터&amp;nbsp;노트북을&amp;nbsp;쿠버네티스&amp;nbsp;환경에서&amp;nbsp;운영&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp;Pipelines&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;AI&amp;nbsp;워크플로우를&amp;nbsp;자동화하고&amp;nbsp;관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp;Spark&amp;nbsp;Operator&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;스파크(Spark)&amp;nbsp;워크로드를&amp;nbsp;쿠버네티스에서&amp;nbsp;운영&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 40.9302%;&quot;&gt;Kubeflow&amp;nbsp;Trainer&lt;/td&gt;
&lt;td style=&quot;width: 59.0698%;&quot;&gt;모델&amp;nbsp;학습을&amp;nbsp;위한&amp;nbsp;도구&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;blob&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnqP8k/btsPRvn1wA8/pNKUR9B6EZNqkE8oo9KTEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnqP8k/btsPRvn1wA8/pNKUR9B6EZNqkE8oo9KTEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnqP8k/btsPRvn1wA8/pNKUR9B6EZNqkE8oo9KTEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnqP8k%2FbtsPRvn1wA8%2FpNKUR9B6EZNqkE8oo9KTEK%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;500&quot; height=&quot;356&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. Kubeflow 구조&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;01. Central Dashboard&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;역할 및 기능&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 사용자가 Kubeflow 환경에 접근하는 시작점&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 다양한 머신러닝 워크플로우를 구성하는 각 컴포넌트(Jupyter, Pipelines, Katib 등)로 이동할 수 있는 네비게이터 역할을 수행&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;컴포넌트 접근&lt;br /&gt;- Central Dashboard는 Kubeflow의 모든 컴포넌트로 연결되는 중앙 허브&lt;br /&gt;- 사용자는 대시보드를 통해 필요한 컴포넌트의 전용 UI로 즉시 이동&lt;/li&gt;
&lt;li&gt;사용자 및 네임스페이스 관리&lt;br /&gt;- 로그인한 사용자의 정보를 보여줌&lt;br /&gt;- 사용자별 네임스페이스(Profile)를 선택하여 작업 환경을 분리하고 관리 가능&lt;/li&gt;
&lt;li&gt;빠른 시작&lt;br /&gt;- 처음 접속했을 때 Kubeflow에 대한 소개나 빠른 시작 가이드 등을 제공하여 사용자가 쉽게 시작할 수 있도록 도움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Header: 현재 로그인한 사용자의 이름, 로그아웃 버튼, 그리고 때로는 현재 선택된 네임스페이스 정보 등 표시&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Sidebar Navigation: Notebooks, Pipelines, Katib, Volumes 등 Kubeflow의 주요 컴포넌트들로 연결되는 메뉴 링크를 제공, 사용자는 이 메뉴를 통해 각 컴포넌트의 전용 웹 UI로 손쉽게 이동&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Main View: 대시보드에 처음 접속했을 때 보이는 초기 화면, 일반적으로 Kubeflow에 대한 소개, 빠른 시작 가이드, 최근 활동 내역 등이 표시됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2551&quot; data-origin-height=&quot;1262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uyqRY/btsPRfTthTQ/EpYWK2K01ztEazy6fEyZYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uyqRY/btsPRfTthTQ/EpYWK2K01ztEazy6fEyZYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uyqRY/btsPRfTthTQ/EpYWK2K01ztEazy6fEyZYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuyqRY%2FbtsPRfTthTQ%2FEpYWK2K01ztEazy6fEyZYK%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;800&quot; height=&quot;396&quot; data-origin-width=&quot;2551&quot; data-origin-height=&quot;1262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. Jupyter Notebooks&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할 및 기능&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Kubernetes 클러스터에 Jupyter Notebook Pod를 생성하고 관리하기 위한 사용자 인터페이스를 제공&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 주로&amp;nbsp;데이터&amp;nbsp;과학자나&amp;nbsp;모델&amp;nbsp;개발자가&amp;nbsp;직접&amp;nbsp;개발&amp;nbsp;환경을&amp;nbsp;구축할&amp;nbsp;때&amp;nbsp;사용됨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Notebook 서버 관리&lt;br /&gt;- 사용자는 UI를 통해 Jupyter Notebook 서버를 생성, 중지, 삭제&lt;/li&gt;
&lt;li&gt;리소스 및 환경 설정&lt;br /&gt;- Notebook 서버에 필요한 CPU, 메모리, GPU와 같은 하드웨어 자원과 사용할 Docker 이미지, 환경 변수, 그리고 PVC(Persistent Volume Claim)와 같은 스토리지 설정까지 모두 지정할 수 있음&lt;/li&gt;
&lt;li&gt;커스텀 이미지 활용&lt;br /&gt;- 원하는 개발 환경이 미리 구성된 커스텀 Docker 이미지를 사용해 Notebook 서버를 만들 수 있어, 개발 환경의 일관성과 재현성을 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Notebook List: 사용자가 생성한 Notebook 목록을 보여줌&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Create Notebook: Notebook 서버의 사양과 설정을 지정하는 UI&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Server&amp;nbsp;Status:&amp;nbsp;현재&amp;nbsp;실행&amp;nbsp;중인&amp;nbsp;Notebook&amp;nbsp;Pod의&amp;nbsp;상태(예:&amp;nbsp;Running,&amp;nbsp;Stopped)를&amp;nbsp;확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;1190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKFOfz/btsPQrzPX0l/KyCs2y7Gf2zHG2C4zyWBw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKFOfz/btsPQrzPX0l/KyCs2y7Gf2zHG2C4zyWBw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKFOfz/btsPQrzPX0l/KyCs2y7Gf2zHG2C4zyWBw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKFOfz%2FbtsPQrzPX0l%2FKyCs2y7Gf2zHG2C4zyWBw0%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;600&quot; height=&quot;443&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;1190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. Pipelines&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할 및 기능&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 머신러닝 파이프라인을 설계하고 실행할 수 있는 워크플로우 실행 및 관리 UI&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 주로 AutoML, 모델 학습/추론/평가 등의 과정을 순차적으로 자동화하는 데 사용&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;워크플로우 설계 및 실행&lt;br /&gt;- YAML 형식으로 정의된 파이프라인을 업로드하여 실행하고 관리&lt;/li&gt;
&lt;li&gt;시각화 및 모니터링&lt;br /&gt;- DAG (방향성 비순환 그래프) 형태로 파이프라인의 전체 구조와 각 단계의 실행 상태를 시각적으로 보여줌&lt;/li&gt;
&lt;li&gt;반복 실험&lt;br /&gt;- 다양한 파라미터를 설정하여 여러 번의 실험을 손쉽게 수행&lt;br /&gt;- 그 결과를 비교하며 최적의 모델을 찾을 수 있음&lt;/li&gt;
&lt;li&gt;결과 분석&lt;br /&gt;- 각 실행의 상세 로그, 출력 아티팩트, 그리고 모델 성능 지표를 시각화하여 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Experiments: 파이프라인 실행을 그룹화하여 관리하는 단위, &amp;nbsp;여러 번의 파이프라인 실행 결과를 한데 모아 실험 단위로 비교하고 분석할 수 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Runs: 개별 파이프라인 실행 인스턴스 목록, 각 실행에 대한 상세 정보(로그, 결과 등)를 확인할 수 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Artifacts/Output View: 실행 결과 아티팩트 시각화, 학습된 모델의 성능 지표나 시각화된 그래프 등을 확인할 수 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Upload Pipeline: YAML&amp;nbsp;형식으로&amp;nbsp;작성된&amp;nbsp;파이프라인&amp;nbsp;정의&amp;nbsp;파일을&amp;nbsp;업로드하여&amp;nbsp;실행할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;하는&amp;nbsp;기능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oaoOk/btsPRpaIeLL/19S7x3azFzDAZRVfSsHBCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oaoOk/btsPRpaIeLL/19S7x3azFzDAZRVfSsHBCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oaoOk/btsPRpaIeLL/19S7x3azFzDAZRVfSsHBCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoaoOk%2FbtsPRpaIeLL%2F19S7x3azFzDAZRVfSsHBCK%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;600&quot; height=&quot;423&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;755&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;04. Katib&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- AutoML의&amp;nbsp;핵심&amp;nbsp;기능인&amp;nbsp;하이퍼파라미터&amp;nbsp;최적화를&amp;nbsp;제공&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 하이퍼파라미터 튜닝 과정을 시각적으로 관리하고 모니터링&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 사용자는 UI를 통해 실험을 정의하고, 진행 상황을 확인하며, 최종 결과를 분석&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실험 정의&lt;b&gt;&lt;br /&gt;&lt;/b&gt;- UI에서 모델 이름, 파라미터 범위, 최적화 목표(maximize/minimize) 등을 설정하여 하이퍼파라미터 튜닝 실험을 정의&lt;/li&gt;
&lt;li&gt;다양한 검색 알고리즘&lt;br /&gt;- Random Search, Grid Search, Bayesian Optimization 등 다양한 최적화 알고리즘을 선택함&lt;br /&gt;- 효율적으로 최적의 파라미터 조합을 찾을 수 있음&lt;/li&gt;
&lt;li&gt;실험 모니터링 및 분석&lt;b&gt;&lt;br /&gt;&lt;/b&gt;- 각 파라미터 조합에 대한 성능 지표를 시각화하여 확인하고, 여러 실험의 결과를 쉽게 비교할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; Experiment&amp;nbsp;생성&amp;nbsp;UI:&amp;nbsp;모델&amp;nbsp;이름,&amp;nbsp;파라미터&amp;nbsp;범위,&amp;nbsp;메트릭&amp;nbsp;조건&amp;nbsp;등&amp;nbsp;입력&lt;br /&gt;- Experiment 목록 및 상태: 튜닝 결과와 Trial 상태 시각화&lt;br /&gt;- Trial 상세보기: 각 파라미터 조합에 대한 성능 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8xrf5/btsPNNRLDA7/v9Mg3nEy5ImVSECXkPF7W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8xrf5/btsPNNRLDA7/v9Mg3nEy5ImVSECXkPF7W0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8xrf5/btsPNNRLDA7/v9Mg3nEy5ImVSECXkPF7W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8xrf5%2FbtsPNNRLDA7%2Fv9Mg3nEy5ImVSECXkPF7W0%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;600&quot; height=&quot;441&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;05. Volumes (Persistent Volume 관리 UI)&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할 및 기능&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; Jupyter Notebook이나 Pipeline에서 사용할 수 있는 Persistent Volume Claim(PVC)을 생성하고 관리하는 UI&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 데이터 저장 공간인 Persistent Volume(PV)을 사용자들이 쉽게 할당받고 관리할 수 있도록 함&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;PVC 생성 및 관리&lt;b&gt;&lt;br /&gt;&lt;/b&gt;- 사용자는 UI를 통해 필요한 크기, 접근 모드(Access Mode) 등을 지정하여 새로운 PVC를 만들거나 기존 PVC의 상태를 확인&lt;/li&gt;
&lt;li&gt;Jupyter Notebook 및 파이프라인 연동&lt;b&gt;&lt;br /&gt;&lt;/b&gt;- 생성된 PVC는 데이터가 필요한 워크로드(Jupyter Notebook, 파이프라인 등)에 자동으로 마운트되어, 사용자가 데이터를 읽고 쓸 수 있는 영구적인 저장 공간을 제공&lt;/li&gt;
&lt;li&gt;삭제/변경 기능&lt;b&gt;&lt;br /&gt;&lt;/b&gt;- 생성된 PVC는 UI나 kubectl 명령어를 통해 삭제하거나 변경할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구성 요소 &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Volume 목록 : PVC 이름, 사이즈, 상태, 네임스페이스&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 생성 UI : 이름, 크기, Access Mode 설정&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2540&quot; data-origin-height=&quot;818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3KreQ/btsPNJV9oiY/oqKFGH00il3BUKov2JmWl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3KreQ/btsPNJV9oiY/oqKFGH00il3BUKov2JmWl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3KreQ/btsPNJV9oiY/oqKFGH00il3BUKov2JmWl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3KreQ%2FbtsPNJV9oiY%2FoqKFGH00il3BUKov2JmWl0%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;2540&quot; height=&quot;818&quot; data-origin-width=&quot;2540&quot; data-origin-height=&quot;818&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;06. Tensorboards&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할 및 기능&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; 모델 학습 중 생성된 TensorBoard 로그 파일을 시각화하는 도구&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 머신러닝 모델의 학습 과정을 실시간으로 시각화하고 분석하는 데 사용 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- PVC(Persistent Volume Claim)를 연결하여, 모델의 성능 지표, 손실 곡선, 그래프 구조 등을 웹 인터페이스에서 직관적으로 확인&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;로그 시각화&lt;br /&gt;- 모델 학습 중 생성되는 로그 데이터를 활용하여, 손실(loss) 및 정확도(accuracy)와 같은 메트릭을 시각화&lt;/li&gt;
&lt;li&gt;학습&amp;nbsp;상태&amp;nbsp;모니터링&lt;br /&gt;- 실시간으로&amp;nbsp;업데이트되는&amp;nbsp;그래프를&amp;nbsp;보면서&amp;nbsp;모델의&amp;nbsp;학습&amp;nbsp;진행&amp;nbsp;상황을&amp;nbsp;파악하고,&amp;nbsp;문제&amp;nbsp;발생&amp;nbsp;시&amp;nbsp;즉각적으로&amp;nbsp;대응&lt;/li&gt;
&lt;li&gt;PVC&amp;nbsp;연결&lt;br /&gt;- 사용자가&amp;nbsp;지정한&amp;nbsp;PVC에&amp;nbsp;저장된&amp;nbsp;로그&amp;nbsp;파일을&amp;nbsp;자동으로&amp;nbsp;마운트하여&amp;nbsp;TensorBoard&amp;nbsp;서버에&amp;nbsp;연결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구성 요소 &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt; Tensorboard 목록&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- Tensorboard 생성 UI&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- 로그 디렉토리 설정 입력창&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-origin-width=&quot;523&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCYyXh/btsPP28cYqn/LRnguXgUAXJMxZCzLhYbBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCYyXh/btsPP28cYqn/LRnguXgUAXJMxZCzLhYbBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCYyXh/btsPP28cYqn/LRnguXgUAXJMxZCzLhYbBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCYyXh%2FbtsPP28cYqn%2FLRnguXgUAXJMxZCzLhYbBk%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;523&quot; height=&quot;397&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;07. Profiles UI&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할 및 기능&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt; 하나의 Kubeflow 클러스터를 다수의 사용자 또는 팀이 함께 사용할 수 있도록 격리된 환경 제공&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;- 각 사용자에게 독립된 Kubernetes 네임스페이스 할당하여, 서로의 작업에 영향을 주지 않고 리소스를 관리&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자 및 팀 격리&lt;br /&gt;- 각 사용자는 자신만의 Profile을 할당받음&lt;br /&gt;- 다른 사용자의 작업과 충돌 없이 독립된 환경에서 머신러닝 워크플로우를 실행함&lt;/li&gt;
&lt;li&gt;리소스 관리&lt;br /&gt;- 사용자는&amp;nbsp;자신에게&amp;nbsp;할당된&amp;nbsp;네임스페이스에만&amp;nbsp;리소스(예:&amp;nbsp;Notebook,&amp;nbsp;Pipeline)를&amp;nbsp;생성하고&amp;nbsp;관리함&lt;/li&gt;
&lt;li&gt;접근 제어&lt;br /&gt;- Istio&amp;nbsp;Gateway와&amp;nbsp;연계하여&amp;nbsp;네임스페이스&amp;nbsp;기반의&amp;nbsp;접근&amp;nbsp;제한을&amp;nbsp;설정함으로써,&amp;nbsp;보안을&amp;nbsp;강화함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;08. Metadata 및 Artifacts UI&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;역할&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;모든&amp;nbsp;아티팩트의&amp;nbsp;계보(lineage)를&amp;nbsp;시각적으로&amp;nbsp;분석&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;아티팩트&amp;nbsp;트래킹&lt;br /&gt;- 파이프라인의&amp;nbsp;각&amp;nbsp;단계에서&amp;nbsp;생성된&amp;nbsp;데이터셋,&amp;nbsp;모델,&amp;nbsp;메트릭&amp;nbsp;등의&amp;nbsp;모든&amp;nbsp;아티팩트를&amp;nbsp;자동으로&amp;nbsp;기록하고&amp;nbsp;추적&lt;/li&gt;
&lt;li&gt;메타데이터&amp;nbsp;관리&lt;br /&gt;- 각 아티팩트와 관련된 모델 버전, 실험 일자, 하이퍼파라미터 등 핵심적인 정보를 관리&lt;/li&gt;
&lt;li&gt;시각적&amp;nbsp;계보&amp;nbsp;분석&lt;br /&gt;- 데이터가&amp;nbsp;전처리&amp;nbsp;과정을&amp;nbsp;거쳐&amp;nbsp;모델&amp;nbsp;학습에&amp;nbsp;사용되고,&amp;nbsp;최종적으로&amp;nbsp;모델이&amp;nbsp;생성되기까지의&amp;nbsp;모든&amp;nbsp;과정을&amp;nbsp;그래프&amp;nbsp;형태로&amp;nbsp;시각화하여&amp;nbsp;보여줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>개인 공부/쿠버플로우</category>
      <category>kubeflow</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/419</guid>
      <comments>https://kne-coding.tistory.com/419#entry419comment</comments>
      <pubDate>Wed, 2 Jul 2025 16:52:08 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스] 권한이 제한된 사용자 계정 발급</title>
      <link>https://kne-coding.tistory.com/418</link>
      <description>&lt;div&gt;
&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;&lt;/b&gt;&lt;b&gt;context&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. 쿠버네티스 context&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스 계정을 발급하고 권한을 제한하는 방법이 serviceaccount와 role&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pod 생성 등의 쿠버네티스 요청은 쿠버네티스 API 서버가 처리하고, API 서버는 사용자 요청을 처리하기 전 올바를 사용자가 맞는지 검사하고 사용할 수 있는지 확인함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;API 서버의 인증, 인가를 확인하는 기준이 쿠버네티스 context 정보!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- context 정보에는 쿠버네티스 클러스터 정보와 사용자 정보가 존재함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자가 요청할 때 별도로 인증, 인가 정보를 명시하지 않으면 context 정보가 자동으로 요청정보와 같이 전송됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;※ context는 사용자 홈 디렉터리 /.kube/config에 위치함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. context 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스 클러스터 정보와 사용자 정보로 구성됨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클러스터 정보 : API 서버의 인증서와 주소 필요.&lt;/li&gt;
&lt;li&gt;사용자 정보 : ssh키 쌍, 토큰, 사용자 이름과 비밀번호 등 여러가지 유형으로 유저를 설정함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스 설치시 default로 쿠버네티스 admin 유저와 localhost 또는 host ip로 쿠버네티스 클러스터 정보가 설정되어 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 자동 설정된 값이 있었기에 kubectl 명령어를 사용할 수 있었던 것&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;현재 사용중인 context 확인&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 아래 명령어 사용하면 현재 사용중인 context 정보가 출력됨&lt;/p&gt;
&lt;pre id=&quot;code_1750746955315&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl config current-context&lt;/code&gt;&lt;/pre&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-origin-width=&quot;455&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHXPeL/btsOMpXxYrG/hr0wcQw7sD3tLc8uoK1uh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHXPeL/btsOMpXxYrG/hr0wcQw7sD3tLc8uoK1uh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHXPeL/btsOMpXxYrG/hr0wcQw7sD3tLc8uoK1uh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHXPeL%2FbtsOMpXxYrG%2Fhr0wcQw7sD3tLc8uoK1uh1%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;455&quot; height=&quot;40&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;40&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;context에 대한 자세한 정보 출력&lt;br /&gt;- context는 cluster와 user(authinfo)로 구성됨&lt;br /&gt;- 현재 사용중인 kubernetes-admin context는 cluster.local클러스터와 kubernetes-admin user를 사용하고 있음&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl config get-contexts&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTFGBF/btsOLwJTr9R/hphbfsrZeiH0kwOQSdZork/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTFGBF/btsOLwJTr9R/hphbfsrZeiH0kwOQSdZork/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTFGBF/btsOLwJTr9R/hphbfsrZeiH0kwOQSdZork/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTFGBF%2FbtsOLwJTr9R%2FhphbfsrZeiH0kwOQSdZork%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;815&quot; height=&quot;62&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 쿠버네티스 context에 등록&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. serviceaccount 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 계정 이름과 namespace를 지정해주면 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- default namespace에 developer라는 serviceaccount을 생성함&lt;/p&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl create sa developer -n test&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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-origin-width=&quot;504&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IipmA/btsOMUiGUy1/pGCmPAp4DfRQuzCC5ckcEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IipmA/btsOMUiGUy1/pGCmPAp4DfRQuzCC5ckcEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IipmA/btsOMUiGUy1/pGCmPAp4DfRQuzCC5ckcEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIipmA%2FbtsOMUiGUy1%2FpGCmPAp4DfRQuzCC5ckcEK%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;504&quot; height=&quot;39&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;serviceaccount가 생성되었는지 확인하는 방법&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get sa -n test&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yN1El/btsOLhTT91r/YKEK9N5DiRXZ5iK9KAxQW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yN1El/btsOLhTT91r/YKEK9N5DiRXZ5iK9KAxQW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yN1El/btsOLhTT91r/YKEK9N5DiRXZ5iK9KAxQW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyN1El%2FbtsOLhTT91r%2FYKEK9N5DiRXZ5iK9KAxQW1%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;374&quot; height=&quot;87&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;serviceaccount의 토큰을 발급함&lt;br /&gt;- Kubernetes v1.24 이상부터는 Secret 기반 토큰이 사라지고, TokenRequest API를 통해 토큰을 발급함&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;gauss&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl create token developer -n test&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. context 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- serviceaccount를 이용해 쿠버네티스 인증을 하려면 context 등록이 필요함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;serviceaccount 토큰을 환경변수로 저장&lt;br /&gt;- context를 생성할 때 serviceaccount 토큰을 이용함&lt;br /&gt;- 토큰 길이가 길어서 환경변수로 저장하여 사용함&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export DEV_TOKEN=$(kubectl create token developer -n test)&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;유저 등록&lt;br /&gt;- kubectl config set-credentials 명령어로 context 유저를 쉽게 등록할 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl config set-credentials dev --token=$DEV_TOKEN&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v0Dxp/btsOPKgaChW/78lSKLq3Iec5ox8cZkKSak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v0Dxp/btsOPKgaChW/78lSKLq3Iec5ox8cZkKSak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v0Dxp/btsOPKgaChW/78lSKLq3Iec5ox8cZkKSak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv0Dxp%2FbtsOPKgaChW%2F78lSKLq3Iec5ox8cZkKSak%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;915&quot; height=&quot;44&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;클러스터 이름 확인&lt;br /&gt;- context를 생성하기 위해 쿠버네티스 클러스터가 필요함&lt;br /&gt;- 기존에 등록되어 있는 로컬 쿠버네티스 클러스터를 사용함&lt;br /&gt;- 로컬 클러스터란 127.0.0.1 주소로 시작하는 클러스터 주소&lt;br /&gt;- 클러스터가 설치되어 있는 서버에만 접근이 가능함&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl config get-clusters&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CSQLe/btsOOKusNvu/NbCYC3bSuPPaFRdw4ZvQj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CSQLe/btsOOKusNvu/NbCYC3bSuPPaFRdw4ZvQj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CSQLe/btsOOKusNvu/NbCYC3bSuPPaFRdw4ZvQj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCSQLe%2FbtsOOKusNvu%2FNbCYC3bSuPPaFRdw4ZvQj1%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;655&quot; height=&quot;65&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;context 등록&lt;br /&gt;- devloper으로 등록한 유저와 로컬 클러스터를 이용해 context를 등록함&lt;br /&gt;
&lt;pre id=&quot;code_1750746955316&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl config set-context dev \
  --cluster=kubernetes \
  --user=dev \
  --namespace=test&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIQEeV/btsOPmfMAkH/s6k6a1yneC8Ykgb6TDQji0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIQEeV/btsOPmfMAkH/s6k6a1yneC8Ykgb6TDQji0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIQEeV/btsOPmfMAkH/s6k6a1yneC8Ykgb6TDQji0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIQEeV%2FbtsOPmfMAkH%2Fs6k6a1yneC8Ykgb6TDQji0%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;701&quot; height=&quot;107&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;context 확인&lt;br /&gt;- 생성한 context는 다음 명령어로 확인 가능함&lt;br /&gt;- 현재 사용중인 context는 CURRENT필드에 별표로 표시됨&lt;br /&gt;
&lt;pre id=&quot;code_1750749935686&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl config get-contexts&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yN6XD/btsOOxPE9ch/GDKTVJSHIy3BUYN4UFtrTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yN6XD/btsOOxPE9ch/GDKTVJSHIy3BUYN4UFtrTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yN6XD/btsOOxPE9ch/GDKTVJSHIy3BUYN4UFtrTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyN6XD%2FbtsOOxPE9ch%2FGDKTVJSHIy3BUYN4UFtrTk%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;816&quot; height=&quot;88&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3. context 사용 및 권한 제한&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;01. context 전환&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- context 이름은 current-context로 확인해야 함&lt;/p&gt;
&lt;pre id=&quot;code_1750746955317&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl config use-context dev&lt;/code&gt;&lt;/pre&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-origin-width=&quot;685&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lIbgu/btsOOeQims8/GmsotB1TZf407kvIXFJPC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lIbgu/btsOOeQims8/GmsotB1TZf407kvIXFJPC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lIbgu/btsOOeQims8/GmsotB1TZf407kvIXFJPC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlIbgu%2FbtsOOeQims8%2FGmsotB1TZf407kvIXFJPC0%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;685&quot; height=&quot;43&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;43&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;pod 생성 시도&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;context를 전환하면 context에 해당하는 계정 권한을 가짐&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- developer 계정은 어떠한 권한도 설정하지 않았으므로 모든 요청이 쿠버네티스 API서버에서 거부함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- pod를 test namespace에서 생성을 시도하면 permission denied 오류 메시지가 뜸&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kQmjb/btsOQIaN2z9/LNyAkoKbzZXLYGCJrh4stK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kQmjb/btsOQIaN2z9/LNyAkoKbzZXLYGCJrh4stK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kQmjb/btsOQIaN2z9/LNyAkoKbzZXLYGCJrh4stK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkQmjb%2FbtsOQIaN2z9%2FLNyAkoKbzZXLYGCJrh4stK%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;1635&quot; height=&quot;48&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. 권한 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;RBAC 방법으로 계정에 권한을 설정하는 방법이 있음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;- role이라는 쿠버네티스 리소스로 관리됨&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubeflow 일부 권한을 developer 계정에 설정함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;apigroup: 쿠버네티스 리소스가 속해 있는 api group이름&lt;/li&gt;
&lt;li&gt;resources: 권한 설정할 쿠버네티스 리소스&lt;/li&gt;
&lt;li&gt;verbs: 권한&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750746955317&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: test
  name: pods-role
rules:
- apiGroups: [&quot;&quot;] # &quot;&quot; indicates the core API group
  resources: [&quot;pods&quot;]
  verbs: [&quot;create&quot;, &quot;delete&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- role 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxuK6/btsON74KZHJ/5TbycA5tcUzz8uddEAiZk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxuK6/btsON74KZHJ/5TbycA5tcUzz8uddEAiZk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxuK6/btsON74KZHJ/5TbycA5tcUzz8uddEAiZk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxuK6%2FbtsON74KZHJ%2F5TbycA5tcUzz8uddEAiZk1%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;690&quot; height=&quot;43&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;03. 권한 부여&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성한 role을 serviceaccount에 설정을 수동으로 해줘야 함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;- rolebinding을 사용해 권한을 부여함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubectl --dry-run을 이용해서 rolebinding yaml파일을 생성한 후, yaml 파일을 쿠버네티스에 적용함&lt;/p&gt;
&lt;pre id=&quot;code_1750746955318&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl create rolebinding pod-rolebinding \
  --serviceaccount=test:developer \
  --role=pods-role \
  --namespace=test \
  --dry-run=client -o yaml &amp;gt; pod-rolebinding.yaml

kubectl apply -f pod-rolebinding.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubectl create 명령어로 방금 생성한 rolebinding을 실행함&lt;/p&gt;
&lt;pre id=&quot;code_1750746955318&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl create -f pod-rolebinding.yaml&lt;/code&gt;&lt;/pre&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-origin-width=&quot;752&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRNzMS/btsOQwuJtPg/hNCs3ymTtci9keiWPaSo81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRNzMS/btsOQwuJtPg/hNCs3ymTtci9keiWPaSo81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRNzMS/btsOQwuJtPg/hNCs3ymTtci9keiWPaSo81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRNzMS%2FbtsOQwuJtPg%2FhNCs3ymTtci9keiWPaSo81%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;752&quot; height=&quot;42&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;04. pod 생성 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래 명령어를 이용해 실행이 되는지 확인해봄&lt;/p&gt;
&lt;pre id=&quot;code_1750750654837&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl auth can-i create pods --as=system:serviceaccount:test:developer -n test&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rscXf/btsOQltriBv/D5oFOWjfXS3CcUYswUyHfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rscXf/btsOQltriBv/D5oFOWjfXS3CcUYswUyHfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rscXf/btsOQltriBv/D5oFOWjfXS3CcUYswUyHfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrscXf%2FbtsOQltriBv%2FD5oFOWjfXS3CcUYswUyHfK%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;1184&quot; height=&quot;42&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- serviceaccount에 rolebinding이 적용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아까 실패했던 pod 생성이 성공하는 모습을 볼 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CqqlR/btsON4tGrbf/nLULKVnol04963ipr0gwhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CqqlR/btsON4tGrbf/nLULKVnol04963ipr0gwhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CqqlR/btsON4tGrbf/nLULKVnol04963ipr0gwhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCqqlR%2FbtsON4tGrbf%2FnLULKVnol04963ipr0gwhk%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;746&quot; height=&quot;86&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://malwareanalysis.tistory.com/133&quot;&gt;https://malwareanalysis.tistory.com/133&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750750738651&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;쿠버네티스에서 권한이 제한된 개발자 계정 발급 1편&quot; data-og-description=&quot;1편: https://malwareanalysis.tistory.com/133 2편: https://malwareanalysis.tistory.com/135 이 챕터는 권한이 제한된 쿠버네티스 계정(serviceaccount)을 생성하는 방법을 다룹니다. https://youtu.be/qt4fMcvG564 1. 1편에서 다루&quot; data-og-host=&quot;malwareanalysis.tistory.com&quot; data-og-source-url=&quot;https://malwareanalysis.tistory.com/133&quot; data-og-url=&quot;https://malwareanalysis.tistory.com/133&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kDMAu/hyZchnpqOg/22I5ivJdVff1BOGoKON4y0/img.png?width=800&amp;amp;height=272&amp;amp;face=0_0_800_272,https://scrap.kakaocdn.net/dn/o64RZ/hyZcdZEcpE/4ztM3B1qw9CVENES36a1ZK/img.png?width=800&amp;amp;height=272&amp;amp;face=0_0_800_272,https://scrap.kakaocdn.net/dn/wvd6R/hyZcmoJ08F/au3oDR7VymTEXwRxpVsfwK/img.jpg?width=2304&amp;amp;height=1792&amp;amp;face=0_0_2304_1792&quot;&gt;&lt;a href=&quot;https://malwareanalysis.tistory.com/133&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malwareanalysis.tistory.com/133&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kDMAu/hyZchnpqOg/22I5ivJdVff1BOGoKON4y0/img.png?width=800&amp;amp;height=272&amp;amp;face=0_0_800_272,https://scrap.kakaocdn.net/dn/o64RZ/hyZcdZEcpE/4ztM3B1qw9CVENES36a1ZK/img.png?width=800&amp;amp;height=272&amp;amp;face=0_0_800_272,https://scrap.kakaocdn.net/dn/wvd6R/hyZcmoJ08F/au3oDR7VymTEXwRxpVsfwK/img.jpg?width=2304&amp;amp;height=1792&amp;amp;face=0_0_2304_1792');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스에서 권한이 제한된 개발자 계정 발급 1편&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1편: https://malwareanalysis.tistory.com/133 2편: https://malwareanalysis.tistory.com/135 이 챕터는 권한이 제한된 쿠버네티스 계정(serviceaccount)을 생성하는 방법을 다룹니다. https://youtu.be/qt4fMcvG564 1. 1편에서 다루&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malwareanalysis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 공부/쿠버네티스</category>
      <category>Kubernetes</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/418</guid>
      <comments>https://kne-coding.tistory.com/418#entry418comment</comments>
      <pubDate>Tue, 24 Jun 2025 16:39:28 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스] VMware를 이용한 쿠버네티스 구축&amp;amp;배포 프로젝트 - ③</title>
      <link>https://kne-coding.tistory.com/417</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;※ 컴퓨터의 메모리 부족으로 인해 서버컴퓨터에서 학습을 진행하게 됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 게시판 프로젝트 구성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. React 설치&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Node.js 를 설치함&lt;br /&gt;- React.js를 사용하기 위해서는 먼저 Node.js를 설치해야함&lt;br /&gt;- Node.js는 자바스크립트 런타임으로 서버 측 자바스크립트를 실행할 수 있도록 해줌&lt;br /&gt;&lt;a href=&quot;https://nodejs.org/ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://nodejs.org/ko&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;React 프로젝트 생성&lt;br /&gt;- Visual Studio Code에서 원하는 경로에 접근한 후 터미널을 엶(Ctrl + J)&amp;nbsp;&lt;br /&gt;- 설치가 완료되면 해당 이름으로 프로젝트가 생성됨&lt;br /&gt;
&lt;pre id=&quot;code_1749101963899&quot; class=&quot;dsconfig&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;npx create-react-app &amp;lt;프로젝트 이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lgnfo/btsOr2gLmZo/ZT07Y8fViGoWlqddf2xKHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lgnfo/btsOr2gLmZo/ZT07Y8fViGoWlqddf2xKHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lgnfo/btsOr2gLmZo/ZT07Y8fViGoWlqddf2xKHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flgnfo%2FbtsOr2gLmZo%2FZT07Y8fViGoWlqddf2xKHK%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;460&quot; height=&quot;250&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;프로젝트 실행하기&lt;br /&gt;- 프로젝트 경로로 이동후 명령어를 입력함&lt;br /&gt;
&lt;pre id=&quot;code_1749105810398&quot; class=&quot;dos&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd &amp;lt;프로젝트 이름&amp;gt;
npm start&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1239&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xu83p/btsOqa1VE9E/52n2pVcdUtyJVKFp6wkrv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xu83p/btsOqa1VE9E/52n2pVcdUtyJVKFp6wkrv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xu83p/btsOqa1VE9E/52n2pVcdUtyJVKFp6wkrv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXu83p%2FbtsOqa1VE9E%2F52n2pVcdUtyJVKFp6wkrv0%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;640&quot; height=&quot;184&quot; data-origin-width=&quot;1239&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1s1Q4/btsOpOECoRC/yxcLDkRSXDvtIZgBOrKMa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1s1Q4/btsOpOECoRC/yxcLDkRSXDvtIZgBOrKMa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1s1Q4/btsOpOECoRC/yxcLDkRSXDvtIZgBOrKMa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1s1Q4%2FbtsOpOECoRC%2FyxcLDkRSXDvtIZgBOrKMa0%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;460&quot; height=&quot;324&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. React 앱 Dockerize(도커라이즈) 하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;디플로이먼트 정의 파일에 태그 작성함&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 도커 새로 푸시할 때 ArgoCD에서 자동으로 배포를 돕기위해 태그를 수정함!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEMttp/btsOEbZPMtT/lcwskUQ4K0OK2mV60ntKv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEMttp/btsOEbZPMtT/lcwskUQ4K0OK2mV60ntKv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEMttp/btsOEbZPMtT/lcwskUQ4K0OK2mV60ntKv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEMttp%2FbtsOEbZPMtT%2FlcwskUQ4K0OK2mV60ntKv1%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;368&quot; height=&quot;92&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;docker에 로그인하고 build&amp;amp;push 과정을 거침&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1750138915624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker login

docker build -t &amp;lt;Docker ID&amp;gt;/&amp;lt;Image Name&amp;gt;:&amp;lt;Tag&amp;gt; .
docker tag &amp;lt;Docker ID&amp;gt;/&amp;lt;Image Name&amp;gt;:&amp;lt;Tag&amp;gt; &amp;lt;Docker ID&amp;gt;/&amp;lt;Image Name&amp;gt;:&amp;lt;New Tag&amp;gt; .

docker push &amp;lt;Docker ID&amp;gt;/&amp;lt;Image Name&amp;gt;:&amp;lt;New Tag&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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-origin-width=&quot;1033&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq8YvL/btsOFnZyryp/KLCWiNEDuNevU8koYXnkF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq8YvL/btsOFnZyryp/KLCWiNEDuNevU8koYXnkF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq8YvL/btsOFnZyryp/KLCWiNEDuNevU8koYXnkF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq8YvL%2FbtsOFnZyryp%2FKLCWiNEDuNevU8koYXnkF1%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;1033&quot; height=&quot;829&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3. React 앱 배포 확인&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;ArgoCD로 확인해보기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- SYNC 버튼을 통해 적용이 됐는지 확인함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2255&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RBIj0/btsOFqBRWZH/dHeSZKOtKne7Xw1kxi8PaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RBIj0/btsOFqBRWZH/dHeSZKOtKne7Xw1kxi8PaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RBIj0/btsOFqBRWZH/dHeSZKOtKne7Xw1kxi8PaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRBIj0%2FbtsOFqBRWZH%2FdHeSZKOtKne7Xw1kxi8PaK%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;2255&quot; height=&quot;894&quot; data-origin-width=&quot;2255&quot; data-origin-height=&quot;894&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 무사히 적용된것을 확인했음!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2253&quot; data-origin-height=&quot;1056&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKrLmV/btsOEPWzsIJ/EKmhrbMy2L8jHqtqO7OLjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKrLmV/btsOEPWzsIJ/EKmhrbMy2L8jHqtqO7OLjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKrLmV/btsOEPWzsIJ/EKmhrbMy2L8jHqtqO7OLjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKrLmV%2FbtsOEPWzsIJ%2FEKmhrbMy2L8jHqtqO7OLjK%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;2253&quot; height=&quot;1056&quot; data-origin-width=&quot;2253&quot; data-origin-height=&quot;1056&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개인 공부/쿠버네티스</category>
      <category>Kubernetes</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/417</guid>
      <comments>https://kne-coding.tistory.com/417#entry417comment</comments>
      <pubDate>Thu, 5 Jun 2025 11:19:26 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버플로우] 설치 및 세팅하기</title>
      <link>https://kne-coding.tistory.com/412</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Master노드 버전 정리&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- kubernetes : v1.28.15&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- kustomize : v5.6.0&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- kubeflow : v1.8.0&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. Kubeflow 설치 및 접속&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. Kubeflow 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kustomize를 설치함&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1747116040888&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -s &quot;https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh&quot;  | bash
install kustomize /usr/bin/kustomize&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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-origin-width=&quot;1085&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I21if/btsNWr83T1J/ZPB14MPyEU8Yg3spcBqz30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I21if/btsNWr83T1J/ZPB14MPyEU8Yg3spcBqz30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I21if/btsNWr83T1J/ZPB14MPyEU8Yg3spcBqz30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI21if%2FbtsNWr83T1J%2FZPB14MPyEU8Yg3spcBqz30%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;1085&quot; height=&quot;77&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;manifest git을 clone 함&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1747119054088&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/kubeflow/manifests.git
cd manifests
git checkout v1.8.0&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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-origin-width=&quot;801&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/whYcY/btsOpAE1JUM/NsKp2IE4MIVjMwi9nw83yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/whYcY/btsOpAE1JUM/NsKp2IE4MIVjMwi9nw83yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/whYcY/btsOpAE1JUM/NsKp2IE4MIVjMwi9nw83yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwhYcY%2FbtsOpAE1JUM%2FNsKp2IE4MIVjMwi9nw83yk%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;640&quot; height=&quot;489&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;http로 접속할 수 있도록 설정함&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래 3개 파일의 secure_cookies를 false로 설정함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;apps/jupyter/jupyter-web-app/upstream/base/params.env&lt;/li&gt;
&lt;li&gt;apps/tensorboard/tensorboards-web-app/upstream/base/params.env&lt;/li&gt;
&lt;li&gt;apps/volumes-web-app/upstream/base/params.env&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;deployment.yaml 수정&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;common/oidc-client/oauth2-proxy/base/deployment.yaml&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;ndots를 4로 설정&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747120998576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: oauth2-proxy
  labels:
    app: oauth2-proxy
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: oauth2-proxy
  template:
    metadata:
      labels:
        app.kubernetes.io/name: oauth2-proxy
    spec:
      dnsConfig:
        options:
          - name: ndots
            value: &quot;4&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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-origin-width=&quot;470&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tInt9/btsNU9hEFGB/I8WKzLjiRukikxQzWrKba0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tInt9/btsNU9hEFGB/I8WKzLjiRukikxQzWrKba0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tInt9/btsNU9hEFGB/I8WKzLjiRukikxQzWrKba0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtInt9%2FbtsNU9hEFGB%2FI8WKzLjiRukikxQzWrKba0%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;470&quot; height=&quot;605&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kustomize를 사용해 kubeflow 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;5분에서 10분 정도 소요됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;- 모든 pod가 running이 될 때까지 기다림&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747123418063&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while ! kustomize build example | kubectl apply -f -; do echo &quot;Retrying to apply resources&quot;; sleep 20; done&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&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-origin-width=&quot;1277&quot; data-origin-height=&quot;789&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsrIyo/btsN8HY9lfz/Oz6uZdF08H2hWtpVxioJIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsrIyo/btsN8HY9lfz/Oz6uZdF08H2hWtpVxioJIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsrIyo/btsN8HY9lfz/Oz6uZdF08H2hWtpVxioJIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsrIyo%2FbtsN8HY9lfz%2FOz6uZdF08H2hWtpVxioJIK%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;1277&quot; height=&quot;789&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;789&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. Kubeflow 접속하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;istio-ingressgateway 수정&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 기본적으로 ClusterIP 타입으로 생성되기 때문에, 호스트 환경에서 접속하기 위해 NodePort로 변경&lt;/p&gt;
&lt;pre id=&quot;code_1747185394420&quot; class=&quot;gauss&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl edit -n istio-system svc istio-ingressgateway&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBf8WX/btsNVDbWC61/ZZrxQvTkrEQRwevoYIlgzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBf8WX/btsNVDbWC61/ZZrxQvTkrEQRwevoYIlgzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBf8WX/btsNVDbWC61/ZZrxQvTkrEQRwevoYIlgzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBf8WX%2FbtsNVDbWC61%2FZZrxQvTkrEQRwevoYIlgzk%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;272&quot; height=&quot;509&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Kubeflow 접속 해결&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- http://{Node IP + 포트번호}로 접속&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이때 Access to {IP주소} was denied You don't hava authorization to view this page. HTTP ERROR 403 이런 오류가 뜸&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;PVC 정보 확인함&lt;br /&gt;- authservice-pvc가 Pending 상태로 뜸&lt;br /&gt;- 요청한 PersistentVolumeClaim(PVC)에 연결할 수 있는 PersistentVolume(PV)이 없음&lt;br /&gt;- 이로 인해 oidc-authservice Pod도 실행되지 않고, 결국 403 인증 오류가 생김&lt;br /&gt;
&lt;pre id=&quot;code_1749023152793&quot; class=&quot;livecodeserver&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get pvc -n istio-system&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgCA8N/btsOorCGjvz/hdCw2psCuTN3vknXf696H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgCA8N/btsOorCGjvz/hdCw2psCuTN3vknXf696H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgCA8N/btsOorCGjvz/hdCw2psCuTN3vknXf696H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgCA8N%2FbtsOorCGjvz%2FhdCw2psCuTN3vknXf696H0%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;830&quot; height=&quot;64&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;local-path-provisioner 설치함&lt;br /&gt;- 로컬 테스트 환경이라 local-path StorageClass를 사용함&lt;br /&gt;
&lt;pre id=&quot;code_1749023190989&quot; class=&quot;pgsql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- 설치 후 StorageClass 목록에 local-path가 나타나야 함&lt;br /&gt;
&lt;pre id=&quot;code_1749023382834&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get storageclass&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;PVC에 local-path 지정&lt;br /&gt;- oidc-authservice에서 사용하는 PVC 리소스를 수정함&lt;br /&gt;
&lt;pre id=&quot;code_1749024109630&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nano authservice-pvc.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre id=&quot;code_1749024446473&quot; class=&quot;dts&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: authservice-pvc
  namespace: istio-system
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: local-path&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- PVC yaml 파일 수정 후 적용함&lt;br /&gt;
&lt;pre id=&quot;code_1749024605197&quot; class=&quot;maxima&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl delete pvc authservice-pvc -n auth
kubectl apply -f authservice-pvc.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;PVC 바인딩 상태 확인&lt;br /&gt;
&lt;pre id=&quot;code_1749026268334&quot; class=&quot;livecodeserver&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get pvc -n istio-system&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Kubeflow 접속&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- http://{Node IP + 포트번호}로 접속&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 아래 사진과 같은 사이트가 뜨는데 기본 계정으로 로그인&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;기본 계정 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;user@example.com&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;패스워드 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;12341234&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RBfIt/btsOpzG5RRf/C9qXw0EhlcdPPzuKlqA74k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RBfIt/btsOpzG5RRf/C9qXw0EhlcdPPzuKlqA74k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RBfIt/btsOpzG5RRf/C9qXw0EhlcdPPzuKlqA74k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRBfIt%2FbtsOpzG5RRf%2FC9qXw0EhlcdPPzuKlqA74k%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;605&quot; height=&quot;369&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이렇게 뜨면 접속 성공!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2254&quot; data-origin-height=&quot;1129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckRQGf/btsQmx1P2ur/l5ixXrWZ91So8BRY7kKEdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckRQGf/btsQmx1P2ur/l5ixXrWZ91So8BRY7kKEdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckRQGf/btsQmx1P2ur/l5ixXrWZ91So8BRY7kKEdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckRQGf%2FbtsQmx1P2ur%2Fl5ixXrWZ91So8BRY7kKEdk%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;2254&quot; height=&quot;1129&quot; data-origin-width=&quot;2254&quot; data-origin-height=&quot;1129&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;too many open files 문제 해결&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; 네임스페이스 관련하여 자꾸 error가 뜨길래 로그 파악을 했더니 too many open files라는 로그가 출력됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 이를 해결하기 위해 마스터 노드, 워커 노드 각각에 설정 파일을 적용함&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;설정 파일 열기&lt;br /&gt;- 설정은 /etc/sysctl.conf 파일을 수정함&lt;br /&gt;
&lt;pre id=&quot;code_1758764667541&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo nano /etc/sysctl.conf&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;- 파일에 아래 두 줄을 추가함&lt;br /&gt;
&lt;pre id=&quot;code_1758764692029&quot; class=&quot;ini&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;fs.inotify.max_user_instances=2280
fs.inotify.max_user_watches=1255360&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfsMt7/btsQN78rF9P/wLKCeupQifDCcbhyxFDFLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfsMt7/btsQN78rF9P/wLKCeupQifDCcbhyxFDFLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfsMt7/btsQN78rF9P/wLKCeupQifDCcbhyxFDFLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfsMt7%2FbtsQN78rF9P%2FwLKCeupQifDCcbhyxFDFLk%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;549&quot; height=&quot;152&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;저장 후 적용하기&lt;br /&gt;
&lt;pre id=&quot;code_1758764845964&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo sysctl -p&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmA9Ea/btsQMjI3wUM/CnEOToCrO1IBX0ixdOklI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmA9Ea/btsQMjI3wUM/CnEOToCrO1IBX0ixdOklI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmA9Ea/btsQMjI3wUM/CnEOToCrO1IBX0ixdOklI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmA9Ea%2FbtsQMjI3wUM%2FCnEOToCrO1IBX0ixdOklI1%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;315&quot; height=&quot;49&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;49&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;적용 확인하기&lt;br /&gt;
&lt;pre id=&quot;code_1758765037401&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sysctl fs.inotify.max_user_instances
sysctl fs.inotify.max_user_watches&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf6D2H/btsQPJeCG70/DpBmUPeAFs2gFH6b7hYgyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf6D2H/btsQPJeCG70/DpBmUPeAFs2gFH6b7hYgyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf6D2H/btsQPJeCG70/DpBmUPeAFs2gFH6b7hYgyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf6D2H%2FbtsQPJeCG70%2FDpBmUPeAFs2gFH6b7hYgyk%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;427&quot; height=&quot;63&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;03. Kubeflow 삭제&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단일 명령어로 Kubeflow 삭제가 가능함&lt;/p&gt;
&lt;pre id=&quot;code_1752709348112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /home/$USER/manifests
kustomize build example | kubectl delete -f -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. kubeflow 사용자 세팅&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. 유저 프로필 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;profile.yaml을 활용해 유저 프로필 생성하기&lt;br /&gt;- kubeflow &amp;gt; manifests &amp;gt; common &amp;gt; dex &amp;gt; base 경로에 yaml 파일 생성&lt;br /&gt;- nang-profile.yaml로 생성함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lD2e0/btsOG82Jkfc/TcY8KIteYPCQUuhjgh8RKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lD2e0/btsOG82Jkfc/TcY8KIteYPCQUuhjgh8RKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lD2e0/btsOG82Jkfc/TcY8KIteYPCQUuhjgh8RKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlD2e0%2FbtsOG82Jkfc%2FTcY8KIteYPCQUuhjgh8RKK%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;276&quot; height=&quot;182&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;pre id=&quot;code_1750039784334&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: kubeflow.org/v1
kind: Profile
metadata:
    name: nang # 생성하고 싶은 프로필의 이름(네임스페이스로 지정할 이름)
spec:
    owner:
        kind: User
        name: nang@example.com # 생성하고 싶은 프로필의 이메일(Kubeflow로그인ID)&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- apply 명령어를 이용해 profile을 적용함&lt;br /&gt;
&lt;pre id=&quot;code_1750039928740&quot; class=&quot;coq&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f nang-profile.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;※ 프로필 생성 시 spec 하위에 resourceQuotaSpec 추가할 수 있음&lt;br /&gt;- 유저를 추가할 때 프로필 별 사용할 수 있는 리소스 양 지정 가능&lt;br /&gt;
&lt;pre id=&quot;code_1750040398861&quot; class=&quot;less&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: kubeflow.org/v1beta1
kind: Profile
metadata:
    name: nang
spec:
    owner:
        kind: User
        name: nang@example.com
 	resourceQuotaSpec:
        hard:
            cpu: &quot;2&quot;
            memory: 1Gi
            persistentvolumeclaims: &quot;1&quot;
            requests.storage: &quot;10Gi&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;config-map.yaml을 활용해 유저 등록&lt;br /&gt;- kubeflow &amp;gt; manifests &amp;gt; common &amp;gt; dex &amp;gt; base &amp;gt;config-map.yaml 파일을 수정하면 위에서 생성한 유저의 네임스페이스와 Kubeflow의 정보를 매핑함&lt;br /&gt;- username: 네임스페이스명 / email: Kubeflow 로그인 ID / hash: 암호화된 비밀번호&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by2YkA/btsOBrhEgUO/63dRKkGyBe5UYNeVrzpNI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by2YkA/btsOBrhEgUO/63dRKkGyBe5UYNeVrzpNI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by2YkA/btsOBrhEgUO/63dRKkGyBe5UYNeVrzpNI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby2YkA%2FbtsOBrhEgUO%2F63dRKkGyBe5UYNeVrzpNI1%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;711&quot; height=&quot;241&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;- config-map.yaml 적용함&lt;br /&gt;
&lt;pre id=&quot;code_1750041165674&quot; class=&quot;arduino&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f config-map.yaml -n auth&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;적용 후 확인하기&lt;br /&gt;- 네임스페이스 및 config 설정을 적용하기 위해서는 dex를 재실행해야 함&lt;br /&gt;
&lt;pre id=&quot;code_1750046950638&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl rollout restart deployment dex -n auth&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yLuhj/btsOFL14zMt/BEN7TGww9him2i6JSTkDck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yLuhj/btsOFL14zMt/BEN7TGww9him2i6JSTkDck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yLuhj/btsOFL14zMt/BEN7TGww9him2i6JSTkDck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyLuhj%2FbtsOFL14zMt%2FBEN7TGww9him2i6JSTkDck%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;455&quot; height=&quot;269&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfz11G/btsOF4fVmNr/O23EJ6YGsAsowyfm1bW7z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfz11G/btsOF4fVmNr/O23EJ6YGsAsowyfm1bW7z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfz11G/btsOF4fVmNr/O23EJ6YGsAsowyfm1bW7z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfz11G%2FbtsOF4fVmNr%2FO23EJ6YGsAsowyfm1bW7z1%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;332&quot; height=&quot;241&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
- 적용이 잘 되었음!!&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02.&lt;span&gt;&amp;nbsp;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;kubeflow 권한 제한하기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;kim 프로필 생성&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; 이 Profile을 만들면 kim 네임스페이스와 kim@example.com 사용자에게 edit 권한이 부여됨&lt;/span&gt;&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-origin-width=&quot;1083&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRlKhH/btsOYx9oSjH/6Umsgk99IdSrkj1zD5rP61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRlKhH/btsOYx9oSjH/6Umsgk99IdSrkj1zD5rP61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRlKhH/btsOYx9oSjH/6Umsgk99IdSrkj1zD5rP61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRlKhH%2FbtsOYx9oSjH%2F6Umsgk99IdSrkj1zD5rP61%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;1083&quot; height=&quot;63&quot; data-origin-width=&quot;1083&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Role 생성&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; kim 사용자가 nang 네임스페이스에 접속했을 때 오직 Notebook만 생성/조회/삭제할 수 있도록 Role을 정의함&lt;/span&gt;&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-origin-width=&quot;787&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yxifO/btsOYPaRVCk/TKOO8zRKAjEKV5lI5LI4d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yxifO/btsOYPaRVCk/TKOO8zRKAjEKV5lI5LI4d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yxifO/btsOYPaRVCk/TKOO8zRKAjEKV5lI5LI4d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyxifO%2FbtsOYPaRVCk%2FTKOO8zRKAjEKV5lI5LI4d0%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;787&quot; height=&quot;63&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Rolebinding 부여&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6EUPK/btsOX9ODLNM/kWouDo4KIcRumw8ngrKn51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6EUPK/btsOX9ODLNM/kWouDo4KIcRumw8ngrKn51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6EUPK/btsOX9ODLNM/kWouDo4KIcRumw8ngrKn51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6EUPK%2FbtsOX9ODLNM%2FkWouDo4KIcRumw8ngrKn51%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;763&quot; height=&quot;41&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;참고한 링크&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Kubeflow 설치 및 접속&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&quot;&gt;https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1749085604752&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;kubeflow 1.9.0 설치하기&quot; data-og-description=&quot;kubernetes versionv1.29.8kubeflow version1.9.0kustomize versionv5.4.31. kustomize를 설치한다.curl -s &amp;quot;https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh&amp;quot; | bash install kustomize /usr/bin/kustomize&amp;nbsp;2. manifes&quot; data-og-host=&quot;kyeongseo.tistory.com&quot; data-og-source-url=&quot;https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NGUDw/hyY37E16h1/SDLzzgjNHROLSusGoMN6h1/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/dVxP1E/hyY0xk0l5P/lI7ca1HxXhdHJWKsk2tkyk/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/ynw4M/hyY1fLeLFc/rkRG9VoBOUh4Hbc8kx3bV1/img.png?width=1899&amp;amp;height=687&amp;amp;face=0_0_1899_687&quot;&gt;&lt;a href=&quot;https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kyeongseo.tistory.com/entry/kubeflow-190-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NGUDw/hyY37E16h1/SDLzzgjNHROLSusGoMN6h1/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/dVxP1E/hyY0xk0l5P/lI7ca1HxXhdHJWKsk2tkyk/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/ynw4M/hyY1fLeLFc/rkRG9VoBOUh4Hbc8kx3bV1/img.png?width=1899&amp;amp;height=687&amp;amp;face=0_0_1899_687');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;kubeflow 1.9.0 설치하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes versionv1.29.8kubeflow version1.9.0kustomize versionv5.4.31. kustomize를 설치한다.curl -s &quot;https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh&quot; | bash install kustomize /usr/bin/kustomize&amp;nbsp;2. manifes&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kyeongseo.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dolphincoding.tistory.com/entry/Kubeflow-18%EC%9D%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Kubernetes-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot;&gt;https://dolphincoding.tistory.com/entry/Kubeflow-18%EC%9D%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Kubernetes-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1749085606711&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Minikube (k8s 1.28.2) + Kubeflow 1.8 설치하기&quot; data-og-description=&quot;[1단계] Minikube 로 K8S 세팅하기이번 글에서는 Minikube로 Kubernetes 버전 1.28.2버전을 설치하고, 현재 기준 최신 버전인 kubeflow 1.8을 설치할 거에요먼저 k3s, kubespray, kubeadm등 다양한 방식으로 설치해볼 &quot; data-og-host=&quot;dolphincoding.tistory.com&quot; data-og-source-url=&quot;https://dolphincoding.tistory.com/entry/Kubeflow-18%EC%9D%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Kubernetes-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://dolphincoding.tistory.com/entry/Kubeflow-18%EC%9D%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Kubernetes-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cPLtsk/hyY42XM8NE/34u3IzM920mx3OKL8CqAkk/img.png?width=800&amp;amp;height=428&amp;amp;face=0_0_800_428,https://scrap.kakaocdn.net/dn/Pn6BB/hyY1j7Yl1Z/pzGA2g1DRohZFJrpowvaEk/img.png?width=800&amp;amp;height=428&amp;amp;face=0_0_800_428,https://scrap.kakaocdn.net/dn/cD7GG6/hyY36e2Ru0/kKmbFQgYyKkoQMNf90i2r0/img.png?width=3438&amp;amp;height=1842&amp;amp;face=0_0_3438_1842&quot;&gt;&lt;a href=&quot;https://dolphincoding.tistory.com/entry/Kubeflow-18%EC%9D%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Kubernetes-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dolphincoding.tistory.com/entry/Kubeflow-18%EC%9D%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-Kubernetes-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cPLtsk/hyY42XM8NE/34u3IzM920mx3OKL8CqAkk/img.png?width=800&amp;amp;height=428&amp;amp;face=0_0_800_428,https://scrap.kakaocdn.net/dn/Pn6BB/hyY1j7Yl1Z/pzGA2g1DRohZFJrpowvaEk/img.png?width=800&amp;amp;height=428&amp;amp;face=0_0_800_428,https://scrap.kakaocdn.net/dn/cD7GG6/hyY36e2Ru0/kKmbFQgYyKkoQMNf90i2r0/img.png?width=3438&amp;amp;height=1842&amp;amp;face=0_0_3438_1842');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Minikube (k8s 1.28.2) + Kubeflow 1.8 설치하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[1단계] Minikube 로 K8S 세팅하기이번 글에서는 Minikube로 Kubernetes 버전 1.28.2버전을 설치하고, 현재 기준 최신 버전인 kubeflow 1.8을 설치할 거에요먼저 k3s, kubespray, kubeadm등 다양한 방식으로 설치해볼&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dolphincoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Kubeflow 세팅&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://semizero.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://semizero.tistory.com/47&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750039197257&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Kubeflow] Kubeflow 유저 추가하기(유저 분기처리하기)&quot; data-og-description=&quot;Kubeflow를 활용하다보면 user@example.com/12341234 라는 샘플 계정을 활용하여, 테스트하는 경우가 많다. 그러나 서비스 관점에서는 사용자별 Kubeflow 기능을 분기하여 관리해야할 필요가 있다. 그렇기에&quot; data-og-host=&quot;semizero.tistory.com&quot; data-og-source-url=&quot;https://semizero.tistory.com/47&quot; data-og-url=&quot;https://semizero.tistory.com/47&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBfiU6/hyY8VEPqmr/fMQ1SGx8uk88xePuPd20e1/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/TTgKO/hyY8XWYJYK/9tibIDcyKZqBgejiA4LSK1/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/cXWiyZ/hyY8RCq8KA/7uWNftZcw8eckel6Dnikyk/img.png?width=1326&amp;amp;height=480&amp;amp;face=0_0_1326_480&quot;&gt;&lt;a href=&quot;https://semizero.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://semizero.tistory.com/47&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBfiU6/hyY8VEPqmr/fMQ1SGx8uk88xePuPd20e1/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/TTgKO/hyY8XWYJYK/9tibIDcyKZqBgejiA4LSK1/img.png?width=800&amp;amp;height=289&amp;amp;face=0_0_800_289,https://scrap.kakaocdn.net/dn/cXWiyZ/hyY8RCq8KA/7uWNftZcw8eckel6Dnikyk/img.png?width=1326&amp;amp;height=480&amp;amp;face=0_0_1326_480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Kubeflow] Kubeflow 유저 추가하기(유저 분기처리하기)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Kubeflow를 활용하다보면 user@example.com/12341234 라는 샘플 계정을 활용하여, 테스트하는 경우가 많다. 그러나 서비스 관점에서는 사용자별 Kubeflow 기능을 분기하여 관리해야할 필요가 있다. 그렇기에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;semizero.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 공부/쿠버플로우</category>
      <category>kubeflow</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/412</guid>
      <comments>https://kne-coding.tistory.com/412#entry412comment</comments>
      <pubDate>Thu, 5 Jun 2025 10:13:09 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스] VMware를 이용한 쿠버네티스 구축&amp;amp;배포 프로젝트 - ②</title>
      <link>https://kne-coding.tistory.com/415</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;※ 컴퓨터의 메모리 부족으로 인해 서버컴퓨터에서 학습을 진행하게 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 젠킨스 설치 및 구성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. 젠킨스 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;리눅스 패키지를 최신 상태로 업데이트함&lt;br /&gt;- 최신 상태로 업데이트하면 설치할 패키지(소프트웨어)를 최신 버전으로 가져올 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1747966907376&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;JDK를 설치함&lt;br /&gt;- openjdk 17버전으로 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1747966907376&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install -y openjdk-17-jre-headless&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tq7Rg/btsN9Lz63wZ/PojFmLVVABkv949VRne5xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tq7Rg/btsN9Lz63wZ/PojFmLVVABkv949VRne5xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tq7Rg/btsN9Lz63wZ/PojFmLVVABkv949VRne5xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftq7Rg%2FbtsN9Lz63wZ%2FPojFmLVVABkv949VRne5xK%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;1126&quot; height=&quot;588&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;- 설치가 잘 된것을 확인할 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1747966907376&quot; class=&quot;applescript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java -version&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmWo5d/btsOargzEYH/EN7HI24OwpWKeoAHTQTXhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmWo5d/btsOargzEYH/EN7HI24OwpWKeoAHTQTXhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmWo5d/btsOargzEYH/EN7HI24OwpWKeoAHTQTXhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmWo5d%2FbtsOargzEYH%2FEN7HI24OwpWKeoAHTQTXhK%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;673&quot; height=&quot;65&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스를 설치하기 위해 필요한 패키지에 접근하기 위해 GPG 키를 추가함&lt;br /&gt;
&lt;pre id=&quot;code_1747967221919&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;wget -q -O - https://pkg.jenkins.io/debian/jenkins.io-2023.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스 패키지 저장소 주소를 sources.list에 추가함&lt;br /&gt;
&lt;pre id=&quot;code_1747973395078&quot; class=&quot;tcl&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ &amp;gt; /etc/apt/sources.list.d/jenkins.list'
sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스를 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1747973650008&quot; class=&quot;cmake&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt install jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oSMGV/btsOacdimBm/8DSwtDes5pYjwyKriK6TQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oSMGV/btsOacdimBm/8DSwtDes5pYjwyKriK6TQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oSMGV/btsOacdimBm/8DSwtDes5pYjwyKriK6TQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoSMGV%2FbtsOacdimBm%2F8DSwtDes5pYjwyKriK6TQ0%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;915&quot; height=&quot;290&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스의 상태를 확인함&lt;br /&gt;- Inactive 상태라면 sudo systemctl start jenkins.service 명령어로 젠킨스를 시작할 수 있음&lt;br /&gt;- 상태값이 active 혹은 8080 포트가 활성화되었다면 실행이 성공적으로 이루어진것 &lt;br /&gt;
&lt;pre id=&quot;code_1748226869820&quot; class=&quot;properties&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl status jenkins

netstat -tnlp&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch9sUY/btsOaWWbQDV/4pWj5fXXBMUc9njLE2qD9K/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;655&quot; data-origin-width=&quot;1276&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. 젠킨스 구성하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;젠킨스 실행 및 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 젠킨스 설치를 완료했고 이제 젠킨스를 구성해야 함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)&lt;br /&gt;- Hyper-V 관리자에서 master에 접속해 브라우저에서 localhost:8080에 접근&lt;br /&gt;- Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:8080으로 접근&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;administrator password 묻는 화면이 나오면 패스워드를 입력한 후 Continue를 클릭함 &lt;br /&gt;- 패스워드는 다음 명령어로 확인할 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1748233800600&quot; class=&quot;crystal&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ndETm/btsObEBKrlM/HSGPSPbiA9hwMUAIapybIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ndETm/btsObEBKrlM/HSGPSPbiA9hwMUAIapybIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ndETm/btsObEBKrlM/HSGPSPbiA9hwMUAIapybIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FndETm%2FbtsObEBKrlM%2FHSGPSPbiA9hwMUAIapybIk%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;560&quot; height=&quot;222&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;기본 플러그인 설치를 진행함&lt;br /&gt;- Administrator password를 입력하면 플러그인 설치와 관련된 옵션들이 나타남&lt;br /&gt;- Install suggested plugins를 클릭해 설치 진행&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AS6xt/btsOcmUSxVF/xNHxv3ndxAgHLFO0cTgpJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AS6xt/btsOcmUSxVF/xNHxv3ndxAgHLFO0cTgpJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AS6xt/btsOcmUSxVF/xNHxv3ndxAgHLFO0cTgpJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAS6xt%2FbtsOcmUSxVF%2FxNHxv3ndxAgHLFO0cTgpJk%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;560&quot; height=&quot;247&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;설치 진행&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJr2J/btsObpZdlQZ/QDba0O6rWCq3k17yad2Ga0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJr2J/btsObpZdlQZ/QDba0O6rWCq3k17yad2Ga0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJr2J/btsObpZdlQZ/QDba0O6rWCq3k17yad2Ga0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJr2J%2FbtsObpZdlQZ%2FQDba0O6rWCq3k17yad2Ga0%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;560&quot; height=&quot;343&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;사용자와 패스워드를 설정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5xSW5/btsObxpq6FZ/clK9c1uwraQDS9xYyGG2p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5xSW5/btsObxpq6FZ/clK9c1uwraQDS9xYyGG2p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5xSW5/btsObxpq6FZ/clK9c1uwraQDS9xYyGG2p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5xSW5%2FbtsObxpq6FZ%2FclK9c1uwraQDS9xYyGG2p0%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;430&quot; height=&quot;262&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;접속할 수 있는 URL을 보여줌&lt;br /&gt;- Save and Finish를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ek2kXp/btsOcXf5rRF/9CS5mpgXah4onigu9G3n3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ek2kXp/btsOcXf5rRF/9CS5mpgXah4onigu9G3n3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ek2kXp/btsOcXf5rRF/9CS5mpgXah4onigu9G3n3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fek2kXp%2FbtsOcXf5rRF%2F9CS5mpgXah4onigu9G3n3K%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;560&quot; height=&quot;179&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스 사용 준비가 완료되었다는 화면을 보여줌&lt;br /&gt;- Start using Jenkins를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tkHck/btsObQopw8R/CCbkUxOBtrH0rHACv8cnX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tkHck/btsObQopw8R/CCbkUxOBtrH0rHACv8cnX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tkHck/btsObQopw8R/CCbkUxOBtrH0rHACv8cnX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtkHck%2FbtsObQopw8R%2FCCbkUxOBtrH0rHACv8cnX0%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;430&quot; height=&quot;194&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스 접속 화면&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR5yfi/btsOcRtnsS9/W5qyGyls4mfobyzsyKZjeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR5yfi/btsOcRtnsS9/W5qyGyls4mfobyzsyKZjeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR5yfi/btsOcRtnsS9/W5qyGyls4mfobyzsyKZjeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR5yfi%2FbtsOcRtnsS9%2FW5qyGyls4mfobyzsyKZjeK%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;2548&quot; height=&quot;664&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;젠킨스 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;깃허브와 연동하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 젠킨스는 빌드를 자동화하는 툴이므로 소스 코드가 저장된 저장소와 연계해야 함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 깃허브를 저장소로 사용함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;깃허브에 연동하기 위해 먼저 깃허브에 접속해 로그인함&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스에서 깃허브에 접속할 수 있는 토큰을 생성해야 함&lt;br /&gt;- 오른쪽 상단의 프로필 &amp;rarr; Settings&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yn0Dd/btsOcUjvRza/KR5iEe6xbioBxn3K5lITL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yn0Dd/btsOcUjvRza/KR5iEe6xbioBxn3K5lITL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yn0Dd/btsOcUjvRza/KR5iEe6xbioBxn3K5lITL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyn0Dd%2FbtsOcUjvRza%2FKR5iEe6xbioBxn3K5lITL1%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;308&quot; height=&quot;703&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;왼쪽 메뉴 하단의 Developer settings를 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cch9Kw/btsObWCmMVY/155VzQeKtTXNeklYBkGzGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cch9Kw/btsObWCmMVY/155VzQeKtTXNeklYBkGzGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cch9Kw/btsObWCmMVY/155VzQeKtTXNeklYBkGzGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcch9Kw%2FbtsObWCmMVY%2F155VzQeKtTXNeklYBkGzGK%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;318&quot; height=&quot;158&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Personal access tokens에서 Tokens을 클릭 후 Generate new token(classic) 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgctNq/btsOdDBBsJW/UqUYTIjBBrm1GkH3c7kbE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgctNq/btsOdDBBsJW/UqUYTIjBBrm1GkH3c7kbE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgctNq/btsOdDBBsJW/UqUYTIjBBrm1GkH3c7kbE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgctNq%2FbtsOdDBBsJW%2FUqUYTIjBBrm1GkH3c7kbE0%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;560&quot; height=&quot;267&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Note에 토큰 이름을 지정하고 Expiration 부분은 No expiration을 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2HPdw/btsObxXqKs6/yvy6LOUGkka8y7keUQFyU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2HPdw/btsObxXqKs6/yvy6LOUGkka8y7keUQFyU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2HPdw/btsObxXqKs6/yvy6LOUGkka8y7keUQFyU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2HPdw%2FbtsObxXqKs6%2Fyvy6LOUGkka8y7keUQFyU0%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;560&quot; height=&quot;219&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;scopes에서는 다음과 같은 항목을 선택한 후 Generate token을 클릭함&lt;br /&gt;- scopes는 젠킨스에서 깃허브에 접속해 사용할 수 있는 권한에 관한 것, 리포지터리와 자동 빌드를 위한 권한만 체크&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBJoxa/btsOdHqr7H4/Tevs1O5C8MeC4a9PVQWDE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBJoxa/btsOdHqr7H4/Tevs1O5C8MeC4a9PVQWDE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBJoxa/btsOdHqr7H4/Tevs1O5C8MeC4a9PVQWDE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBJoxa%2FbtsOdHqr7H4%2FTevs1O5C8MeC4a9PVQWDE1%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;560&quot; height=&quot;466&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;생성된 토큰을 저장해둠&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbHyCU/btsOcE82qrx/LZeCL9Et3PuvoBIz4lo3ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbHyCU/btsOcE82qrx/LZeCL9Et3PuvoBIz4lo3ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbHyCU/btsOcE82qrx/LZeCL9Et3PuvoBIz4lo3ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHyCU%2FbtsOcE82qrx%2FLZeCL9Et3PuvoBIz4lo3ok%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;560&quot; height=&quot;229&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스로 이동해 깃허브와 연결함&lt;br /&gt;- 젠킨스 화면의 왼쪽 메뉴에서 Manage Jenkins를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAlt4F/btsObrbUWum/HOscxr3B43iGDDRIcaJsS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAlt4F/btsObrbUWum/HOscxr3B43iGDDRIcaJsS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAlt4F/btsObrbUWum/HOscxr3B43iGDDRIcaJsS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAlt4F%2FbtsObrbUWum%2FHOscxr3B43iGDDRIcaJsS0%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;180&quot; height=&quot;160&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;System Configuration 에서 System을 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqgciP/btsOd2VtvRZ/8p9R2KhQ2Sp2KKau8dVRzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqgciP/btsOd2VtvRZ/8p9R2KhQ2Sp2KKau8dVRzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqgciP/btsOd2VtvRZ/8p9R2KhQ2Sp2KKau8dVRzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqgciP%2FbtsOd2VtvRZ%2F8p9R2KhQ2Sp2KKau8dVRzk%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;640&quot; height=&quot;133&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;화면을 하단으로 이동하면 GitHub라는 메뉴가 있음 Add GitHub Server &amp;gt; GitHub Server를 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl7Vhs/btsOcBYOvOO/8hbdbKv7pK1HCyLcmfwIT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl7Vhs/btsOcBYOvOO/8hbdbKv7pK1HCyLcmfwIT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl7Vhs/btsOcBYOvOO/8hbdbKv7pK1HCyLcmfwIT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl7Vhs%2FbtsOcBYOvOO%2F8hbdbKv7pK1HCyLcmfwIT0%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;281&quot; height=&quot;227&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;깃허브 접속을 위한 Credential 설정&lt;br /&gt;- Name : access_github&lt;br /&gt;- API URL : &lt;a href=&quot;https://api.github.com&quot;&gt;https://api.github.com&lt;/a&gt;&lt;br /&gt;- Credentials : Add &amp;gt; Jenkins를 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2FoRW/btsOb743ALm/kZEHu4KitVUQGF1IG2m2P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2FoRW/btsOb743ALm/kZEHu4KitVUQGF1IG2m2P1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2FoRW/btsOb743ALm/kZEHu4KitVUQGF1IG2m2P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2FoRW%2FbtsOb743ALm%2FkZEHu4KitVUQGF1IG2m2P1%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;1342&quot; height=&quot;653&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;깃허브에 연결하기 위한 권한을 설정할 수 있는 화면이 나타남. 다음과 같이 설정함&lt;br /&gt;- Domain은 그대로 두고, Kind는 Secret text를 선택함&lt;br /&gt;- Secret에서는 앞에서 저장했던 토큰을 입력하고, ID는 토큰 이름을 지정함&lt;br /&gt;- 이후 Add를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbyS8g/btsOb9n68BQ/RgY31Be9lqylQP9iYMY67k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbyS8g/btsOb9n68BQ/RgY31Be9lqylQP9iYMY67k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbyS8g/btsOb9n68BQ/RgY31Be9lqylQP9iYMY67k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbyS8g%2FbtsOb9n68BQ%2FRgY31Be9lqylQP9iYMY67k%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;430&quot; height=&quot;600&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;679&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이후 Credentials 아래 리스트 박스를 클릭하면 생성했던 jenkins_token1이 보임. 이것을 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNt4v/btsOb3uQkwa/4JuFd0eOVHeFDBGXCibFx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNt4v/btsOb3uQkwa/4JuFd0eOVHeFDBGXCibFx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNt4v/btsOb3uQkwa/4JuFd0eOVHeFDBGXCibFx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNt4v%2FbtsOb3uQkwa%2F4JuFd0eOVHeFDBGXCibFx1%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;1345&quot; height=&quot;664&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Test connection 버튼을 클릭해 정상적으로 연결되는 것을 확인한 후 Save 버튼을 클릭함&lt;br /&gt;- 테스트 결과 'Credentials verified for user [user ID], rate limit: 4999'가 나타나면 연결에 성공한 것&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로젝트 생성하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이제 젠킨스에서 소스 코드를 자동 빌드하는 프로젝트 생성함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;젠킨스 메인 화면의 왼쪽 메뉴에서 New Item을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;158&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9kUjX/btsOeeazyvb/A30VZceE3Mpwfa2cYoKIMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9kUjX/btsOeeazyvb/A30VZceE3Mpwfa2cYoKIMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9kUjX/btsOeeazyvb/A30VZceE3Mpwfa2cYoKIMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9kUjX%2FbtsOeeazyvb%2FA30VZceE3Mpwfa2cYoKIMk%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;158&quot; height=&quot;152&quot; data-origin-width=&quot;158&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다음 메뉴에서 item name을 입력한 후 Freestyle project를 선택하고 OK 버튼을 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgNj6n/btsOd9tzAfM/trsAxk858Kne0EL2KWw7JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgNj6n/btsOd9tzAfM/trsAxk858Kne0EL2KWw7JK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgNj6n/btsOd9tzAfM/trsAxk858Kne0EL2KWw7JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgNj6n%2FbtsOd9tzAfM%2FtrsAxk858Kne0EL2KWw7JK%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;640&quot; height=&quot;590&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;빌드 방법을 지정하기 위해 Triggers를 선택함&lt;br /&gt;- 'Github hook trigger for GITScm polling'을 체크하면 왼쪽 하단에 save와 apply가 나타나는데, save를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/THJEf/btsOdixRjpx/jC57Av1lkkFtiLfnhXLAGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/THJEf/btsOdixRjpx/jC57Av1lkkFtiLfnhXLAGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/THJEf/btsOdixRjpx/jC57Av1lkkFtiLfnhXLAGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTHJEf%2FbtsOdixRjpx%2FjC57Av1lkkFtiLfnhXLAGK%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;724&quot; height=&quot;246&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;그러면 다음과 같은 메뉴가 나타나는데 Configure를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RhjEE/btsOebLHNWe/VmhLFuWM3x7uBeSW7526W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RhjEE/btsOebLHNWe/VmhLFuWM3x7uBeSW7526W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RhjEE/btsOebLHNWe/VmhLFuWM3x7uBeSW7526W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRhjEE%2FbtsOebLHNWe%2FVmhLFuWM3x7uBeSW7526W1%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;336&quot; height=&quot;321&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;깃허브에 접속할 수 있는 권한을 생성함&lt;br /&gt;- '소스 코드 관리'로 이동해 Credentials에서 Add &amp;gt; Jenkins를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uRg0J/btsOc7C6oui/d4xMhkL4zMIWbN6BehSjg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uRg0J/btsOc7C6oui/d4xMhkL4zMIWbN6BehSjg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uRg0J/btsOc7C6oui/d4xMhkL4zMIWbN6BehSjg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuRg0J%2FbtsOc7C6oui%2Fd4xMhkL4zMIWbN6BehSjg0%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;1093&quot; height=&quot;539&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;그러면 다음과 같은 창이 뜨는데 Kind에 Username with password를 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EIfBo/btsOc9HE41c/dgg3NRnT8oAz3KNa2HtHTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EIfBo/btsOc9HE41c/dgg3NRnT8oAz3KNa2HtHTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EIfBo/btsOc9HE41c/dgg3NRnT8oAz3KNa2HtHTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEIfBo%2FbtsOc9HE41c%2Fdgg3NRnT8oAz3KNa2HtHTk%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;472&quot; height=&quot;205&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다음과 같은 항목만 채운 상태에서 Add를 클릭함&lt;br /&gt;- 이때 Username에는 깃허브 계정을 입력하고 Password에는 계정의 비밀번호를 입력함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;840&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyATQr/btsOeiqj2Ze/GxreUSgGTgHg2pncvDYqBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyATQr/btsOeiqj2Ze/GxreUSgGTgHg2pncvDYqBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyATQr/btsOeiqj2Ze/GxreUSgGTgHg2pncvDYqBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyATQr%2FbtsOeiqj2Ze%2FGxreUSgGTgHg2pncvDYqBK%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;640&quot; height=&quot;463&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;840&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이제 다음과 같이 -none-이 위치한 리스트 박스를 클릭하면 생성했던 credential이 나타나는데 본인의 깃허브 계정을 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/skqzq/btsOcR8deEe/yG1Q5nUvjKHuk6eGsEYLv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/skqzq/btsOcR8deEe/yG1Q5nUvjKHuk6eGsEYLv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/skqzq/btsOcR8deEe/yG1Q5nUvjKHuk6eGsEYLv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fskqzq%2FbtsOcR8deEe%2FyG1Q5nUvjKHuk6eGsEYLv1%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;560&quot; height=&quot;91&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;권한 설정이 완료되었으므로 이제 깃허브 주소가 필요함&lt;br /&gt;- URL을 확인하기 위해 깃허브에 다시 접속해 깃허브 아이콘을 클릭한 후 New를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lka5L/btsOegMLc9l/Nju2dmBwS1taMK4G5Cg4R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lka5L/btsOegMLc9l/Nju2dmBwS1taMK4G5Cg4R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lka5L/btsOegMLc9l/Nju2dmBwS1taMK4G5Cg4R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flka5L%2FbtsOegMLc9l%2FNju2dmBwS1taMK4G5Cg4R1%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;321&quot; height=&quot;217&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Repository name을 입력한 후 하단의 Create repository를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5B2yA/btsObVRcRnd/2Bg55w1ziFDTsigR8ZZeb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5B2yA/btsObVRcRnd/2Bg55w1ziFDTsigR8ZZeb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5B2yA/btsObVRcRnd/2Bg55w1ziFDTsigR8ZZeb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5B2yA%2FbtsObVRcRnd%2F2Bg55w1ziFDTsigR8ZZeb1%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;640&quot; height=&quot;653&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이후 다음과 같은 주소를 보여줌. 이 주소를 복사함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQh04m/btsObGs4Nd8/tc95CTkADfXXMM1Ayoekw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQh04m/btsObGs4Nd8/tc95CTkADfXXMM1Ayoekw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQh04m/btsObGs4Nd8/tc95CTkADfXXMM1Ayoekw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQh04m%2FbtsObGs4Nd8%2Ftc95CTkADfXXMM1Ayoekw0%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;640&quot; height=&quot;421&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;815&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다시 젠킨스로 이동해 Source Code Management로 이동하고 Repository URL 항목에 앞에서 복사해 둔 주소를 입력함&lt;br /&gt;- 입력후 Advanced...를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/skB45/btsObWbmpvP/JcdAIPwaHuckZtx2jtnwy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/skB45/btsObWbmpvP/JcdAIPwaHuckZtx2jtnwy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/skB45/btsObWbmpvP/JcdAIPwaHuckZtx2jtnwy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FskB45%2FbtsObWbmpvP%2FJcdAIPwaHuckZtx2jtnwy1%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;891&quot; height=&quot;396&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Branches to build에는 */main을 입력한 후 Save를 클릭함&lt;br /&gt;- 기본은 master이지만 깃허브의 branch 이름을 입력함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKEw4/btsOcygNkZL/DpAusZTIYImj1Mbh8GX97k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKEw4/btsOcygNkZL/DpAusZTIYImj1Mbh8GX97k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKEw4/btsOcygNkZL/DpAusZTIYImj1Mbh8GX97k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKEw4%2FbtsOcygNkZL%2FDpAusZTIYImj1Mbh8GX97k%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;850&quot; height=&quot;157&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;빌드 도구 설정하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 젠킨스는 지속적 통합, 프로젝트 빌드, 테스트 실행, 배포 등의 작업을 자동화함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이것이 가능하도록 메이븐(Maven), 앤트(Ant), 그래들(Gradle) 같은 빌드 도구를 이용하고, 깃허브, SVN(SubVersion) 같은 형상 관리 툴을 지원함&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 젠킨스에서 실행될 빌드 도구를 설정해야함&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #333333; text-align: start; 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;color: #333333;&quot;&gt;앤트 빌드 도구의 특징&lt;/td&gt;
&lt;td style=&quot;color: #333333;&quot;&gt;메이븐 빌드 도구의 특징&lt;/td&gt;
&lt;td style=&quot;color: #333333;&quot;&gt;그래들 빌드 도구의 특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #333333;&quot;&gt;- XML 기반으로 빌드 스크립트를 작성함&lt;br /&gt;- 간단하고 사용이 쉬움&lt;br /&gt;- 프로젝트 규모가 클 경우 스크립트 관리나 빌드 과정이 복잡함&lt;/td&gt;
&lt;td style=&quot;color: #333333;&quot;&gt;- XML 기반으로 작성함&lt;br /&gt;- 생명 주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됨&lt;br /&gt;- 상대적으로 학습 장벽이 높음&lt;br /&gt;- 라이브러리가 서로 의존적이면 사용이 복잡함&lt;/td&gt;
&lt;td style=&quot;color: #333333;&quot;&gt;- 라이브러리 의존성 관리를 위한 다양한 방법을 제공함&lt;br /&gt;- 빌드 스크립트를 XML이 아닌 JVM에서 동작하는 스크립트 언어 '그루비' 기반의 DSL을 사용함&lt;br /&gt;- 사용이 쉽고 빌드 과정이 간단함&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;wget 명령어를 이용해 /tmp 디렉터리에 그래들 설치 파일(zip 파일)을 내려받음&lt;br /&gt;- 이때 -P는 파일을 저장할 디렉터리를 지정할 때 사용하는 옵션&lt;br /&gt;
&lt;pre id=&quot;code_1748241672887&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://services.gradle.org/distributions/gradle-7.4.2-bin.zip -P /tmp&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;모두 내려받았으면 /opt/gradle 디렉터리에 압축을 해제함&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo unzip -d /opt/gradle /tmp/gradle-*.zip&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;/opt/gradle/gradle-7.4.2 디렉터리에 그래들 파일이 있는지 확인함&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;angelscript&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls /opt/gradle/gradle-7.4.2&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVlr3z/btsOd7iketg/geHFjDQT3QXN5K6fSvM3X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVlr3z/btsOd7iketg/geHFjDQT3QXN5K6fSvM3X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVlr3z/btsOd7iketg/geHFjDQT3QXN5K6fSvM3X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVlr3z%2FbtsOd7iketg%2FgeHFjDQT3QXN5K6fSvM3X1%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;460&quot; height=&quot;35&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;26&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;그래들에 대한 환경 변수를 설정함&lt;br /&gt;- gradle.sh 파일에 GRADLE_HOME 경로를 설정함&lt;br /&gt;- 그다음에는 ctrl+x 입력 후 y를 누르고 enter를 누름&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano /etc/profile.d/gradle.sh&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export GRADLE_HOME=/opt/gradle/gradle-7.4.2
export PATH=${GRADLE_HOME}/bin:${PATH}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;chmod + x 명령어를 실행해 스크립트를 실행할 수 있도록 권한을 부여함&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chmod +x /etc/profile.d/gradle.sh&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;source 명령어를 사용해 환경 변수를 가져옴&lt;br /&gt;- source 명령어는 스크립트 파일을 수정한 뒤 바로 수정된 값을 적용할 때 사용&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; source /etc/profile.d/gradle.sh&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;그래들이 제대로 설치되었는지 그래들 버전을 표시하는 명령어로 확인함&lt;br /&gt;
&lt;pre id=&quot;code_1748241672888&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gradle -v&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgwtfM/btsOef8hxTS/wqp0k78EDHkkbMBklNBoqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgwtfM/btsOef8hxTS/wqp0k78EDHkkbMBklNBoqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgwtfM/btsOef8hxTS/wqp0k78EDHkkbMBklNBoqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgwtfM%2FbtsOef8hxTS%2Fwqp0k78EDHkkbMBklNBoqk%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;559&quot; height=&quot;382&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이제 그래들을 사용하기 위해 젠킨스로 이동해 Jenkins 관리 - Tools를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1599&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA3hpj/btsOcVwdonn/13b9i98f30ORYCJYD7mMFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA3hpj/btsOcVwdonn/13b9i98f30ORYCJYD7mMFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA3hpj/btsOcVwdonn/13b9i98f30ORYCJYD7mMFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA3hpj%2FbtsOcVwdonn%2F13b9i98f30ORYCJYD7mMFK%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;1599&quot; height=&quot;781&quot; data-origin-width=&quot;1599&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;화면을 아래로 내려 Gradle을 찾은 후 Add Gradle을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccNSMM/btsOb3PcW5E/Tr070znwDbRJgIs5mFwY5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccNSMM/btsOb3PcW5E/Tr070znwDbRJgIs5mFwY5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccNSMM/btsOb3PcW5E/Tr070znwDbRJgIs5mFwY5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccNSMM%2FbtsOb3PcW5E%2FTr070znwDbRJgIs5mFwY5K%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;169&quot; height=&quot;115&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다음과 같이 입력한 후 맨 밑에 있는 Save를 클릭함&lt;br /&gt;- Install automatically : 선택 해제&lt;br /&gt;- name : 젠킨스 내에서 사용할 이름 설정&lt;br /&gt;- GRADLE_HOME : 앞에서 PATH로 등록한 경로&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU8LyU/btsOcF8bpmM/Jkhsrqt2TBrULxFoJc0nL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU8LyU/btsOcF8bpmM/Jkhsrqt2TBrULxFoJc0nL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU8LyU/btsOcF8bpmM/Jkhsrqt2TBrULxFoJc0nL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU8LyU%2FbtsOcF8bpmM%2FJkhsrqt2TBrULxFoJc0nL1%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;560&quot; height=&quot;335&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;초기 화면으로 돌아오면 다시 New Item을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9EZ1e/btsOdGefzHu/hdpkMhTBwtf4n9rKieFhKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9EZ1e/btsOdGefzHu/hdpkMhTBwtf4n9rKieFhKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9EZ1e/btsOdGefzHu/hdpkMhTBwtf4n9rKieFhKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9EZ1e%2FbtsOdGefzHu%2FhdpkMhTBwtf4n9rKieFhKk%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;340&quot; height=&quot;238&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;All이라는 메뉴가 생기는데 All 메뉴 옆의 화살표를 클릭하고 앞에서 생성해둔 Jenkins_test를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bno4nr/btsOd9UJfxT/05YJP60SitK0mcDCkG7E91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bno4nr/btsOd9UJfxT/05YJP60SitK0mcDCkG7E91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bno4nr/btsOd9UJfxT/05YJP60SitK0mcDCkG7E91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbno4nr%2FbtsOd9UJfxT%2F05YJP60SitK0mcDCkG7E91%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;340&quot; height=&quot;85&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;구성 - Build Steps으로 이동해 Add build step에서 Invoke Gradle script를 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lp41w/btsObFA5fEY/8nh43oGqcQM1vKFY0zvLYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lp41w/btsObFA5fEY/8nh43oGqcQM1vKFY0zvLYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lp41w/btsObFA5fEY/8nh43oGqcQM1vKFY0zvLYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flp41w%2FbtsObFA5fEY%2F8nh43oGqcQM1vKFY0zvLYK%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;560&quot; height=&quot;295&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이제 그래들에 대해 다음과 같이 설정함&lt;br /&gt;- Gradle Version : 앞에서 설정한 이름을 선택함&lt;br /&gt;- Task : clean을 입력함(clean은 디스크 초기화 명령어)&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tIeFA/btsOc7Xunmr/z1xqkUKXk5vyRb3QckCXdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tIeFA/btsOc7Xunmr/z1xqkUKXk5vyRb3QckCXdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tIeFA/btsOc7Xunmr/z1xqkUKXk5vyRb3QckCXdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtIeFA%2FbtsOc7Xunmr%2Fz1xqkUKXk5vyRb3QckCXdK%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;1084&quot; height=&quot;449&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;웹훅(webhook)을 설정하기 위해 다시 깃허브로 이동해서 Settings를 클릭함&lt;br /&gt;- 웹훅 : 특정 이벤트가 발생하고 나서 특정 스크립트를 실행시킬 때 사용. 따라서 다른 서비스와의 통합이나 특정 API를 호출할 때 사용함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S1Nkc/btsOd5Lz8BN/9xqH7FQ26e9aicdsDdVFO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S1Nkc/btsOd5Lz8BN/9xqH7FQ26e9aicdsDdVFO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S1Nkc/btsOd5Lz8BN/9xqH7FQ26e9aicdsDdVFO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS1Nkc%2FbtsOd5Lz8BN%2F9xqH7FQ26e9aicdsDdVFO0%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;560&quot; height=&quot;71&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Webhooks 메뉴로 이동한 후 Add webhook 버튼을 클릭함&lt;br /&gt;- URL(젠킨스가 실행되고 있는 노드의 IP와 포트)과 Content Type(application/json)을 선택&lt;br /&gt;- Add webhook 버튼 클릭&lt;br /&gt;- 입력한 IP가 공인 IP가 아니라면 생성 후 오류가 발생할 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X2g0t/btsOcl9YKtT/KKD3lwmkQV0TCvNQyX5uSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X2g0t/btsOcl9YKtT/KKD3lwmkQV0TCvNQyX5uSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X2g0t/btsOcl9YKtT/KKD3lwmkQV0TCvNQyX5uSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX2g0t%2FbtsOcl9YKtT%2FKKD3lwmkQV0TCvNQyX5uSK%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;560&quot; height=&quot;155&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zsyoq/btsOcolinEK/ltHDgFy6hfKm9oSHdTdk81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zsyoq/btsOcolinEK/ltHDgFy6hfKm9oSHdTdk81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zsyoq/btsOcolinEK/ltHDgFy6hfKm9oSHdTdk81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzsyoq%2FbtsOcolinEK%2FltHDgFy6hfKm9oSHdTdk81%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;560&quot; height=&quot;577&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이후 젠킨스로 돌아와서 다음과 같이 'Build Now'를 클릭함&lt;br /&gt;- 자동으로 빌드가 진행됨&lt;br /&gt;- 깃허브에 소스 코드를 저장한 후 수정하면 자동으로 빌드가 됨&lt;br /&gt;- 혹은 ' &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;Build Now&lt;/span&gt;'를 클릭해 강제로 빌드를 할 수도 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;341&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2vKcO/btsOc8hOR84/qohrFHiXEfWoatwvsfDUJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2vKcO/btsOc8hOR84/qohrFHiXEfWoatwvsfDUJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2vKcO/btsOc8hOR84/qohrFHiXEfWoatwvsfDUJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2vKcO%2FbtsOc8hOR84%2FqohrFHiXEfWoatwvsfDUJ0%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;340&quot; height=&quot;384&quot; data-origin-width=&quot;341&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. ArgoCD 설치 및 구성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. ArgoCD 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;ArgoCD 설치를 위해 argocd라는 네임스페이스를 먼저 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1748243967510&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl create namespace argocd&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci9zXv/btsOcl93bGE/q4Am3iouIh1OhSlTVMvVK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci9zXv/btsOcl93bGE/q4Am3iouIh1OhSlTVMvVK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci9zXv/btsOcl93bGE/q4Am3iouIh1OhSlTVMvVK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci9zXv%2FbtsOcl93bGE%2Fq4Am3iouIh1OhSlTVMvVK1%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;460&quot; height=&quot;36&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;클러스터에 ArgoCD를 설치함&lt;br /&gt;- 설치를 위해 다음 명령어를 이용하며, -f 옵션은 yaml 파일과 함께 사용할 때 사용&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;731&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPPbij/btsOd9Au1TX/BlGwJP3ew38wPdZKF5VwTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPPbij/btsOd9Au1TX/BlGwJP3ew38wPdZKF5VwTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPPbij/btsOd9Au1TX/BlGwJP3ew38wPdZKF5VwTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPPbij%2FbtsOd9Au1TX%2FBlGwJP3ew38wPdZKF5VwTk%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;990&quot; height=&quot;731&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;731&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;ArgoCD를 외부에서 접속할 수 있도록 서비스의 타입을 로드밸런서(LoadBalancer)로 설정함&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;scilab&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl patch svc argocd-server -n argocd -p '{&quot;spec&quot;: {&quot;type&quot; : &quot;LoadBalancer&quot;}}'&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccApeC/btsOeae5Qii/GbkHlrCHNVkUhY4Je9fW21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccApeC/btsOeae5Qii/GbkHlrCHNVkUhY4Je9fW21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccApeC/btsOeae5Qii/GbkHlrCHNVkUhY4Je9fW21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccApeC%2FbtsOeae5Qii%2FGbkHlrCHNVkUhY4Je9fW21%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;778&quot; height=&quot;29&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;API 서버와의 상호작용을 위해 ArgoCD CLI를 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;VERSION=$(curl --silent &quot;https://api.github.com/repos/argoproj/argo-cd/releases/latest&quot; \
  | grep '&quot;tag_name&quot;' \
  | sed -E 's/.*&quot;([^&quot;]+)&quot;.*/\1/')

sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64

sudo chmod +x /usr/local/bin/argocd&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;설치가 끝나면 ArgoCD 접속을 위해 필요한 admin 사용자의 패스워드를 확인함&lt;br /&gt;- admin으로 비밀번호를 변경하는 과정을 거침&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;perl&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;htpasswd -bnBC 12 &quot;&quot; admin | tr -d ':\n'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- 위 명령어로 나온 결과의 값을 복사 후 아래의 코드에 붙여넣음&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl -n argocd patch secret argocd-secret \
  -p '{&quot;stringData&quot;: {
    &quot;admin.password&quot;: &quot;(위의 해시 비밀번호)&quot;,
    &quot;admin.passwordMtime&quot;: &quot;'$(date +%FT%T%Z)'&quot;}}'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- ArgoCD 서버 Pod 재시작&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl -n argocd delete pod -l app.kubernetes.io/name=argocd-server # Argo CD 서버 Pod 재시작&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;ArgoCD에 접속할 포트 번호 확인&lt;br /&gt;- http는 30456를 사용하고, https는 32490을 사용함&lt;br /&gt;
&lt;pre id=&quot;code_1748243967511&quot; class=&quot;armasm&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get svc -n argocd argocd-server&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lAveU/btsOcbmeR7i/TN7Tw88CE2NT2ovmnAm4VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lAveU/btsOcbmeR7i/TN7Tw88CE2NT2ovmnAm4VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lAveU/btsOcbmeR7i/TN7Tw88CE2NT2ovmnAm4VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlAveU%2FbtsOcbmeR7i%2FTN7Tw88CE2NT2ovmnAm4VK%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;750&quot; height=&quot;48&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)&lt;br /&gt;- Hyper-V 관리자에서 master에 접속해 브라우저에서 localhost:32490에 접근&lt;br /&gt;- Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:32490으로 접근&lt;br /&gt;- URL : https://localhost:32490&lt;br /&gt;- 사용자 : admin / 패스워드 : (앞에서 설정한 패스워드)&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oR3t6/btsOcnGNgPF/Okq9Fhmp21GFcJkoB4OCgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oR3t6/btsOcnGNgPF/Okq9Fhmp21GFcJkoB4OCgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oR3t6/btsOcnGNgPF/Okq9Fhmp21GFcJkoB4OCgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoR3t6%2FbtsOcnGNgPF%2FOkq9Fhmp21GFcJkoB4OCgK%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;560&quot; height=&quot;339&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kTwzE/btsOb7REVVV/7uVHnzGWeFKf1otFwnKsfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kTwzE/btsOb7REVVV/7uVHnzGWeFKf1otFwnKsfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kTwzE/btsOb7REVVV/7uVHnzGWeFKf1otFwnKsfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkTwzE%2FbtsOb7REVVV%2F7uVHnzGWeFKf1otFwnKsfk%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;560&quot; height=&quot;349&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. ArgoCD 구성하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 리포지터리 연결 및 애플리케이션 배포 설정 확인&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;설정을 클릭 후 Repositories를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J0Arq/btsOcEaqN6P/r8uWJskjMYlir4zan5JJH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J0Arq/btsOcEaqN6P/r8uWJskjMYlir4zan5JJH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J0Arq/btsOcEaqN6P/r8uWJskjMYlir4zan5JJH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ0Arq%2FbtsOcEaqN6P%2Fr8uWJskjMYlir4zan5JJH0%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;2063&quot; height=&quot;967&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;리포지터리에 연결할 수 있는 방법들을 보여주는데, +CONNECT REPO를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zDT15/btsOcnfIinv/NWYTg00GReKtRxMSk6VKSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zDT15/btsOcnfIinv/NWYTg00GReKtRxMSk6VKSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zDT15/btsOcnfIinv/NWYTg00GReKtRxMSk6VKSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzDT15%2FbtsOcnfIinv%2FNWYTg00GReKtRxMSk6VKSk%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;294&quot; height=&quot;108&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;연결 방법은 HTTP/HTTPS, Repository URL에는 젠킨스에서 사용했던 깃허브 주소, username에는 깃허브에서 사용하는 사용자, password에는 깃허브 토큰을 입력한 후 상단의 connect를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;833&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AqOBr/btsObTTslUK/jdd5g6BvKXxothxOVUM7fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AqOBr/btsObTTslUK/jdd5g6BvKXxothxOVUM7fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AqOBr/btsObTTslUK/jdd5g6BvKXxothxOVUM7fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAqOBr%2FbtsObTTslUK%2Fjdd5g6BvKXxothxOVUM7fK%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;560&quot; height=&quot;418&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;833&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다음와 같이 정상적으로 연결된 화면이 나옴&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ1QMJ/btsOdFfn3Dj/Mdy0x9jO4l01yL2YfMOzBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ1QMJ/btsOdFfn3Dj/Mdy0x9jO4l01yL2YfMOzBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ1QMJ/btsOdFfn3Dj/Mdy0x9jO4l01yL2YfMOzBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ1QMJ%2FbtsOdFfn3Dj%2FMdy0x9jO4l01yL2YfMOzBK%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;600&quot; height=&quot;55&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;애플리케이션을 배포하기 위해 왼쪽 메뉴의 두 번째 아이콘을 클릭한 후 New App을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GgDx5/btsOcQ2MPOz/k0392ZLSA6tgnPPdCsAvAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GgDx5/btsOcQ2MPOz/k0392ZLSA6tgnPPdCsAvAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GgDx5/btsOcQ2MPOz/k0392ZLSA6tgnPPdCsAvAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGgDx5%2FbtsOcQ2MPOz%2Fk0392ZLSA6tgnPPdCsAvAk%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;606&quot; height=&quot;269&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;General 항목은 다음과 같이 설정&lt;br /&gt;- Application Name은 임의로 지정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtopDq/btsOdyHhypq/DgdFMWn2XCIscozb21Wtl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtopDq/btsOdyHhypq/DgdFMWn2XCIscozb21Wtl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtopDq/btsOdyHhypq/DgdFMWn2XCIscozb21Wtl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtopDq%2FbtsOdyHhypq%2FDgdFMWn2XCIscozb21Wtl1%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;253&quot; height=&quot;333&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Source 지정을 위해 먼저 깃허브에 접속해 Creating a new file을 클릭함&lt;br /&gt;- 입력 후에는 반드시 /를 추가해야 함&lt;br /&gt;- 입력할 이름 역시 임의로 지정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lBUsp/btsOcoTbphD/tQvOvYXkpL0GYGKdcOoUN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lBUsp/btsOcoTbphD/tQvOvYXkpL0GYGKdcOoUN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lBUsp/btsOcoTbphD/tQvOvYXkpL0GYGKdcOoUN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlBUsp%2FbtsOcoTbphD%2FtQvOvYXkpL0GYGKdcOoUN0%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;1415&quot; height=&quot;375&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;이후 다시 argoCD로 돌아와서 Source 부분의 Path에 앞에서 지정한 Resources/App를 지정함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HoRKQ/btsOejixQeY/Yz28SkEhHGg6lvu0DM3GPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HoRKQ/btsOejixQeY/Yz28SkEhHGg6lvu0DM3GPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HoRKQ/btsOejixQeY/Yz28SkEhHGg6lvu0DM3GPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHoRKQ%2FbtsOejixQeY%2FYz28SkEhHGg6lvu0DM3GPk%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;1050&quot; height=&quot;344&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Destination은 다음과 같이 설정한 후 상단의 Create를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LzDEP/btsOdHYBmsF/XlkvXqEkbxkCktUht74Qyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LzDEP/btsOdHYBmsF/XlkvXqEkbxkCktUht74Qyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LzDEP/btsOdHYBmsF/XlkvXqEkbxkCktUht74Qyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLzDEP%2FbtsOdHYBmsF%2FXlkvXqEkbxkCktUht74Qyk%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;248&quot; height=&quot;220&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;다음과 같이 정상적으로 설정된 것을 확인할 수 있음&lt;br /&gt;- argocd-test를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs0wwp/btsOb5sOgqK/1RuaUPiEHTmaLt5kUKsFjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs0wwp/btsOb5sOgqK/1RuaUPiEHTmaLt5kUKsFjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs0wwp/btsOb5sOgqK/1RuaUPiEHTmaLt5kUKsFjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs0wwp%2FbtsOb5sOgqK%2F1RuaUPiEHTmaLt5kUKsFjk%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;1432&quot; height=&quot;769&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal;&quot;&gt;Resources/App에 위치한 Readme.md 파일이 자동으로 동기화되어 다음 그림과 같이 현재 동기화 상태임을 확인&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLUFMB/btsOdg7ZtuB/vIUsvtGr4baSNMvICdBw9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLUFMB/btsOdg7ZtuB/vIUsvtGr4baSNMvICdBw9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLUFMB/btsOdg7ZtuB/vIUsvtGr4baSNMvICdBw9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLUFMB%2FbtsOdg7ZtuB%2FvIUsvtGr4baSNMvICdBw9k%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;825&quot; height=&quot;329&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 공부/쿠버네티스</category>
      <category>Kubernetes</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/415</guid>
      <comments>https://kne-coding.tistory.com/415#entry415comment</comments>
      <pubDate>Wed, 21 May 2025 13:47:10 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스] VMware를 이용한 쿠버네티스 구축&amp;amp;배포 프로젝트 - ①</title>
      <link>https://kne-coding.tistory.com/414</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;※ 컴퓨터의 메모리 부족으로 인해 서버컴퓨터에서 학습을 진행하게 됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. Ubuntu 환경에 VMware 설치&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;서버컴퓨터 환경&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 우분투 : 24.04.2 LTS&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 커널 : 6.11.0-21-generic&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. VMware 파일 설치&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;broadcom 사이트에 접속한 후 오른쪽 위 'Support Portal - Go To Portal'을 통해 로그인을 함&lt;br /&gt;&lt;a href=&quot;https://www.broadcom.com/&quot;&gt;https://www.broadcom.com/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Software&amp;nbsp;-&amp;nbsp;VMware&amp;nbsp;Cloud&amp;nbsp;Foundation&amp;nbsp;-&amp;nbsp;My&amp;nbsp;Downloads를&amp;nbsp;통해&amp;nbsp;이동함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2532&quot; data-origin-height=&quot;1258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/divt0k/btsN4EgqSda/VKK3L4muYX2DH8xkMmkxq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/divt0k/btsN4EgqSda/VKK3L4muYX2DH8xkMmkxq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/divt0k/btsN4EgqSda/VKK3L4muYX2DH8xkMmkxq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdivt0k%2FbtsN4EgqSda%2FVKK3L4muYX2DH8xkMmkxq0%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;2532&quot; height=&quot;1258&quot; data-origin-width=&quot;2532&quot; data-origin-height=&quot;1258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다운로드 하는 링크로 이동하여 환경에 맞는 버전을 설치함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1937&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zoddC/btsN2YtNGPG/pbaIZrH8WFWiHnicdwUtPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zoddC/btsN2YtNGPG/pbaIZrH8WFWiHnicdwUtPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zoddC/btsN2YtNGPG/pbaIZrH8WFWiHnicdwUtPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzoddC%2FbtsN2YtNGPG%2FpbaIZrH8WFWiHnicdwUtPk%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;1937&quot; height=&quot;817&quot; data-origin-width=&quot;1937&quot; data-origin-height=&quot;817&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이 파일을 서버컴퓨터의 디렉터리에 이동한 후 다음 코드를 통해 설치를 진행함&lt;br /&gt;- 관리자 권한으로 쉘을 이용해 VMware 설치 파일을 실행함 &lt;br /&gt;
&lt;pre id=&quot;code_1747723982049&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sh VMware-Workstation-Full-17.6.3-24583834.x86_64.bundle&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O771z/btsN48Id41p/xEWAnyIYiSpLS7w1943Vrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O771z/btsN48Id41p/xEWAnyIYiSpLS7w1943Vrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O771z/btsN48Id41p/xEWAnyIYiSpLS7w1943Vrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO771z%2FbtsN48Id41p%2FxEWAnyIYiSpLS7w1943Vrk%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;701&quot; height=&quot;91&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;설치되면 아래의 명령어를 통해 vmware를 실행함&lt;br /&gt;- 이때 -E 옵션을 이용해 환경 변수를 유지해서 실행을 함&lt;br /&gt;- 입력하지 않으면 GUI가 실행될 때 X11 디스플레이를 열 수 없는 문제가 발생했음&lt;br /&gt;
&lt;pre id=&quot;code_1747724029280&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo -E vmware&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyMrpM/btsN2QJBjLs/DG9QoBl7db8dU8pOA3kXO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyMrpM/btsN2QJBjLs/DG9QoBl7db8dU8pOA3kXO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyMrpM/btsN2QJBjLs/DG9QoBl7db8dU8pOA3kXO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyMrpM%2FbtsN2QJBjLs%2FDG9QoBl7db8dU8pOA3kXO0%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;670&quot; height=&quot;104&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;동의해야하는 것들은 선택 후 Next를 누르고, CEIP와 관련된 것은 No를 선택한 후 Finish를 누름&lt;br /&gt;- 완료되면 이런 창이 뜨게됨!&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk0fvO/btsN27D3ft8/8p5zBCCFsOz27f730CE9Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk0fvO/btsN27D3ft8/8p5zBCCFsOz27f730CE9Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk0fvO/btsN27D3ft8/8p5zBCCFsOz27f730CE9Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk0fvO%2FbtsN27D3ft8%2F8p5zBCCFsOz27f730CE9Xk%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;560&quot; height=&quot;435&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. VM 생성 및 노드 구성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;01. VM 생성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;VM 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;우측에서 new virtual machine클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;791&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QF5up/btsN4qCA83m/Bc7jcMgoMe7ABkqV5XkHEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QF5up/btsN4qCA83m/Bc7jcMgoMe7ABkqV5XkHEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QF5up/btsN4qCA83m/Bc7jcMgoMe7ABkqV5XkHEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQF5up%2FbtsN4qCA83m%2FBc7jcMgoMe7ABkqV5XkHEK%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;560&quot; height=&quot;437&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;791&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;os 이미지를 선택함&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;우분투 사이트(&lt;/span&gt;&lt;a href=&quot;https://releases.ubuntu.com/focal/&quot;&gt;https://releases.ubuntu.com/focal/&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;)에 접속해 설치 파일을 내려받으면 됨&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfGCes/btsN4bZ484a/IfLyIH7ZWMQo2LUj3DUML1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfGCes/btsN4bZ484a/IfLyIH7ZWMQo2LUj3DUML1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfGCes/btsN4bZ484a/IfLyIH7ZWMQo2LUj3DUML1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfGCes%2FbtsN4bZ484a%2FIfLyIH7ZWMQo2LUj3DUML1%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;560&quot; height=&quot;476&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;VM을 설정함&lt;br /&gt;- 이름은 기본 이름인 'Ubuntu 64-bit'로 설정&lt;br /&gt;&lt;/span&gt;- 'Customize Hardware...' 버튼을 클릭하고 아래처럼 설정함&lt;br /&gt;- 네트워크 어댑터는&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;VMnet8번 NAT으로 설정함&lt;br /&gt;- USB컨트롤러랑 Sound Card는 필요없으니 삭제 후 'Close' 버튼을 클릭함 &lt;/span&gt; &lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Disk Size : 20GB&lt;/li&gt;
&lt;li&gt;Processors : 2개, 2개 총 4개&lt;/li&gt;
&lt;li style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Memory : 4GB (4096MB)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;555&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AOlPi/btsN4OiWfeq/JrTlRany03koYuaeocdrk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AOlPi/btsN4OiWfeq/JrTlRany03koYuaeocdrk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AOlPi/btsN4OiWfeq/JrTlRany03koYuaeocdrk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAOlPi%2FbtsN4OiWfeq%2FJrTlRany03koYuaeocdrk0%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;560&quot; height=&quot;392&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;555&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Ubuntu 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;이제 vm은 만들어졌고 다운받은 ubuntu iso 파일로 서버를 설치함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;- 언어는 영어를 선택하고 그 다음 나오는 창도 쭉쭉 넘기면 됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv7tD4/btsN5hkLYVi/1RZsQFNPVXkd8f4FTgkJ5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv7tD4/btsN5hkLYVi/1RZsQFNPVXkd8f4FTgkJ5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv7tD4/btsN5hkLYVi/1RZsQFNPVXkd8f4FTgkJ5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv7tD4%2FbtsN5hkLYVi%2F1RZsQFNPVXkd8f4FTgkJ5k%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;560&quot; height=&quot;282&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;514&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ens32에서 엔터 누르고 IPv4설정으로 넘어감&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1PLZU/btsN2Qpgli8/sNcMeDoRs7J7wLNOUUUgp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1PLZU/btsN2Qpgli8/sNcMeDoRs7J7wLNOUUUgp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1PLZU/btsN2Qpgli8/sNcMeDoRs7J7wLNOUUUgp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1PLZU%2FbtsN2Qpgli8%2FsNcMeDoRs7J7wLNOUUUgp0%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;560&quot; height=&quot;138&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Manual 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpwFsx/btsN4beF0P9/oLiBHPLilUg3D72XsASkI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpwFsx/btsN4beF0P9/oLiBHPLilUg3D72XsASkI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpwFsx/btsN4beF0P9/oLiBHPLilUg3D72XsASkI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpwFsx%2FbtsN4beF0P9%2FoLiBHPLilUg3D72XsASkI1%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;560&quot; height=&quot;151&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;주소를 맞게 입력함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMDgwf/btsN5U4aknJ/5VzQ0lqlRKm9O9dYLDdSY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMDgwf/btsN5U4aknJ/5VzQ0lqlRKm9O9dYLDdSY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMDgwf/btsN5U4aknJ/5VzQ0lqlRKm9O9dYLDdSY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMDgwf%2FbtsN5U4aknJ%2F5VzQ0lqlRKm9O9dYLDdSY0%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;560&quot; height=&quot;367&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이후 다 기본 설정되어있는대로 진행함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; SSH 설정에서 'Install OpenSSH server' 체크하고 진행함&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q3eCg/btsN4AyGRJS/MyHlmQZQd1jjqAhFKmWUKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q3eCg/btsN4AyGRJS/MyHlmQZQd1jjqAhFKmWUKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q3eCg/btsN4AyGRJS/MyHlmQZQd1jjqAhFKmWUKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq3eCg%2FbtsN4AyGRJS%2FMyHlmQZQd1jjqAhFKmWUKk%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;560&quot; height=&quot;418&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;설치가 다 되면 reboot now가 뜸&lt;br /&gt;- 클릭하여 재부팅 하면 됨&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;02. 노드 구성&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;가상환경 clone 후 노드 구성하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;우클릭 후 'Manage - Clone'을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXG35l/btsN5wo061i/iJn5owxd6b6jSpmFYVkUu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXG35l/btsN5wo061i/iJn5owxd6b6jSpmFYVkUu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXG35l/btsN5wo061i/iJn5owxd6b6jSpmFYVkUu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXG35l%2FbtsN5wo061i%2FiJn5owxd6b6jSpmFYVkUu0%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;460&quot; height=&quot;558&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이름과 Type을 아래와 같이 설정 후 완료함&lt;br /&gt;- Clone Type은 full로 설정&lt;br /&gt;- 마스터 노드 1대와 워커 노드 2대로 구성할 예정이라 3개를 클론 후 각각 이름을 설정함!&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnlfjO/btsN4tG0zOH/aNbj0PTMBp6wcBJ1yei3Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnlfjO/btsN4tG0zOH/aNbj0PTMBp6wcBJ1yei3Ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnlfjO/btsN4tG0zOH/aNbj0PTMBp6wcBJ1yei3Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnlfjO%2FbtsN4tG0zOH%2FaNbj0PTMBp6wcBJ1yei3Ak%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;189&quot; height=&quot;119&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;각각 VM에 접속해 호스트 이름과 고정 IP를 변경함&lt;br /&gt;- 마스터노드 : master&lt;br /&gt;- 워커노드 : worker1, worker2&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;호스트 이름 수정&lt;br /&gt;- /etc/hostname 파일과 /etc/hosts 파일 수정&lt;br /&gt;
&lt;pre id=&quot;code_1747722265751&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo nano /etc/hostname&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre id=&quot;code_1747722289128&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo nano /etc/hosts&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;노드들의 고정 IP를 변경함&lt;br /&gt;- 설정 파일 /etc/netplan/ 디렉토리에 있는, 설정 파일에 접근하여 고정 IP를 다른 VM과 겹치지 않게 다 바꿔줌&lt;br /&gt;- 마스터 노드 : 11 / 워커 노드 1 : 12 / 워커 노드 2 : 13 으로 설정함&lt;br /&gt;
&lt;pre id=&quot;code_1747722760354&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;cd /etc/netplan/
ls -l&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;237&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZGrSs/btsN4PQqaVs/hMYaw5IVVu9Iy6Z6yJSAlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZGrSs/btsN4PQqaVs/hMYaw5IVVu9Iy6Z6yJSAlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZGrSs/btsN4PQqaVs/hMYaw5IVVu9Iy6Z6yJSAlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZGrSs%2FbtsN4PQqaVs%2FhMYaw5IVVu9Iy6Z6yJSAlK%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;237&quot; height=&quot;210&quot; data-origin-width=&quot;237&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3. 쿠버네티스 설치 및 연결&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. 쿠버네티스 설치&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1747725135460&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo su - # root 사용자로 변경
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade # 리눅스를 최신 상태로 업데이트
sudo apt install apt-transport-https curl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;br_netfilter 모듈 활성화하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1747725379320&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# br_netfilter 모듈 로드
sudo modprobe br_netfilter

# 부팅 시 br_netfilter 모듈 자동 로드 설정
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# iptables 필터링 활성화 설정
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# sysctl 설정 적용
sudo sysctl --system&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;스왑 메모리 비활성화 하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;- kubelet이 제대로 작동하려면 스왑 메모리를 비활성화 해야함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;- 두 번째로 실행한 명령어는 시스템이 재부팅되어도 스왑 메모리가 비활성화되도록 유지시킴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #006dd7; text-align: left;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;스왑 메모리 : 물리 메모리가 부족할 경우를 대비해서 만들어 놓은 공간&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747726000382&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;도커(엔진 및 런타임) 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1747726251687&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker # 재부팅 후에도 서비스가 자동으로 시작되도록 설정
sudo systemctl status docker # 도커 서비스 상태 확인&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;- 일반 사용자 계정의 경우 권한 문제로 작업에 제약이 있을 수 있으므로 권한을 설정함&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747726391702&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo usermod -aG docker $USER&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 도커가 정상적으로 설치되었는지 hello-world를 이용해 확인함&lt;/p&gt;
&lt;pre id=&quot;code_1747726725735&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run hello-world&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cgroup 드라이버 설정&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;- 쿠버네티스에서는 도커의 cgroup 관리를 위해 systemd를 사용하도록 변경해야 함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;- 변경하지 않으면 클러스터 설치 과정에서 오류가 발생할 수 있음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;1. docker info 명령어로 도커 설치 정보를 확인함&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;2. 다음 명령어는 cgroup driver가 systemd가 아닌 경우에만 실행&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;- 코드를 입력한 후에는 차례대로 esc, :wq!, enter를 입력하고 빠져나옴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;vi /etc/docker/daemon.json&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747726801216&quot; class=&quot;json&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
	&quot;exec-opts&quot; : [&quot;native.cgroupdriver=systemd&quot;],
    &quot;log-driver&quot; : &quot;json-file&quot;,
    &quot;log-opts&quot; : {
    	&quot;max-size&quot; : &quot;100m&quot;
    },
    &quot;storage-driver&quot; : &quot;overlay2&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;3. 도커 서비스를 다시 실행함&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747726801217&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload # .service 파일을 변경하면 데몬을 다시 로드해야 함
sudo systemctl restart docker # 도커 서비스 재시작&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;쿠버네티스 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1747726896857&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

# 쿠버네티스 apt 리포지터리를 추가한다.
echo &quot;deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /&quot; | sudo tee /etc/apt/sources.list.d/kubernetes.list

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 저장소 추가되었기 때문에 apt 업데이트
sudo apt-get update

# 쿠버네티스 패키지 설치
sudo apt-get install -y kubelet kubeadm kubectl

# 쿠버네티스 패키지 버전 고정
sudo apt-mark hold kubelet kubeadm kubectl

# 쿠버네티스 설치 버전 조회
kubelet --version
kubeadm version
kubectl version

# kubelet service 확인
sudo systemctl status kubelet.service&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. 쿠버네티스 연결&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;마스터 노드 설정하기&lt;/b&gt;&lt;br /&gt;- 마스터 노드는 클러스터를 생성하는 것이 중요함&lt;br /&gt;- 클러스터는 마스터와 워커 노드를 하나의 관리 단위로 묶는 역할을 함&lt;br /&gt;- kubeadm init : 쿠버네티스 클러스터 생성&lt;br /&gt;- pod-network-cidr : 파드 네트워크의 IP 주소 범위&lt;br /&gt;- apiserver-advertise-address : 수신 대기 중임을 알릴 IP 주소 (API 서버의 IP 주소)로 마스터 노드의 IP를 설정&lt;br /&gt;
&lt;pre id=&quot;code_1747726896859&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Kubernetes 클러스터 초기화 (특정 Pod 네트워크 CIDR 및 API 서버 광고 주소 지정)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.2

# 이후 kubeadm join과 관련된 내용이 나온다면 따로 메모해두기!

# kubectl이 Kubernetes 클러스터와 상호작용할 수 있도록 .kube 디렉토리 생성
mkdir -p $HOME/.kube

# 관리자 인증 파일을 kubectl에 필요한 config 파일로 복사
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 사용자 권한으로 config 파일의 소유자 변경 (현재 사용자에게 읽기/쓰기 권한 부여)
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 설치 확인
kubectl get nodes&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAH6fO/btsN4LUUhvj/FmHjeO7TiN5WRTHE339kuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAH6fO/btsN4LUUhvj/FmHjeO7TiN5WRTHE339kuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAH6fO/btsN4LUUhvj/FmHjeO7TiN5WRTHE339kuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAH6fO%2FbtsN4LUUhvj%2FFmHjeO7TiN5WRTHE339kuk%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;391&quot; height=&quot;47&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;b&gt;네트워크 설정하기&lt;/b&gt;&lt;br /&gt;- 서로 다른 노드에 떠 있는 파드 간의 통신 혹은 외부와의 통신을 위해서는 CNI 플러그인이 필요함&lt;br /&gt;- 여기서는 플라넬 CNI 플러그인을 사용함&lt;br /&gt;
&lt;pre id=&quot;code_1747726896859&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- 플라넬 CNI 플러그인이 정상적으로 설치되면 다음 명령어를 입력해 CoreDNS 파드가 실행 중(running)인지 확인함. CoreDNS 파드가 실행 중이어야 파드들의 네트워크 통신이 가능함&lt;br /&gt;
&lt;pre id=&quot;code_1747726896859&quot; class=&quot;applescript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get pods --all-namespaces&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJyPYJ/btsN6l8ux9N/qNfwFQ6trKGkKWKy7idqkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJyPYJ/btsN6l8ux9N/qNfwFQ6trKGkKWKy7idqkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJyPYJ/btsN6l8ux9N/qNfwFQ6trKGkKWKy7idqkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJyPYJ%2FbtsN6l8ux9N%2FqNfwFQ6trKGkKWKy7idqkK%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;650&quot; height=&quot;206&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 마스터 노드 NotReady 상태 해결했던 방법&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 나의 문제 : 노드 확인 명령어 치면 아래와 같은 오류 뜨면서 안되는 문제 발생&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The&amp;nbsp;connection&amp;nbsp;to&amp;nbsp;the&amp;nbsp;server&amp;nbsp;&amp;lt;host&amp;gt;:6443&amp;nbsp;was&amp;nbsp;refused&amp;nbsp;-&amp;nbsp;did&amp;nbsp;you&amp;nbsp;specify&amp;nbsp;the&amp;nbsp;right&amp;nbsp;host&amp;nbsp;or&amp;nbsp;port?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 해결 방법 : ens32를 사용중이라 Flannel에서 인터페이스를 지정함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Flannel 설치 파일 다운로드&lt;br /&gt;
&lt;pre id=&quot;code_1747986993958&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;파일 수정&lt;br /&gt;
&lt;pre id=&quot;code_1747987098128&quot; class=&quot;clean&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;        containers:
        - name: kube-flannel
          image: quay.io/coreos/flannel:v0.22.0-amd64
          command:
            - /opt/bin/flanneld
            - --ip-masq
            - --kube-subnet-mgr
          # # # 여기 사이에 추가했음! # # #
          env:
            - name: FLANNEL_NETWORK
              value: &quot;10.244.0.0/16&quot;
            - name: FLANNEL_IFACE
              value: &quot;ens32&quot;
          # # # # # # # # # # # # # # # # #
          resources:
            {}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Flannel 네트워크 플러그인 적용&lt;br /&gt;
&lt;pre id=&quot;code_1747987128547&quot; class=&quot;coq&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f kube-flannel.yml&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;coredns 재생성함&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;워커 노드 설정하기&lt;/b&gt;&lt;br /&gt;- 워커 노드는 마스터 노드에 생성된 클러스터에 조인하기 위해 kubeadm join 명령어를 실행함&lt;br /&gt;- 마스터 노드에서 클러스터 설치 결과로 보여 준 명령어를 수정없이 그대로 사용하면 됨&lt;br /&gt;- 실행 결과 마지막에 'Run kubectl get nodes' on the control-plane to see this node join the cluster' 라는 문구가 나타나면 정상적으로 설치된 것&lt;br /&gt;
&lt;pre id=&quot;code_1747726896859&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubeadm join 192.168.0.3:6443 --token i1zobz.lvw2yxvxjyv3tk7y \
        --discovery-token-ca-cert-hash sha256:8da5a66297c72b90e6e809ca76a5bcfedbad121821496b2d6357bbf6f319764a&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRkG9N/btsN5vRS7BR/Mj70JfEf0JwHF0KZy3c3hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRkG9N/btsN5vRS7BR/Mj70JfEf0JwHF0KZy3c3hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRkG9N/btsN5vRS7BR/Mj70JfEf0JwHF0KZy3c3hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRkG9N%2FbtsN5vRS7BR%2FMj70JfEf0JwHF0KZy3c3hK%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;1278&quot; height=&quot;246&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;+ 마스터 노드에서 쿠버네티 클러스터에 등록된 노드들의 상태를 보여주는 명령으로 확인해봄&lt;br /&gt;
&lt;pre id=&quot;code_1747801407120&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get nodes&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q5laH/btsN5IjEWKn/oMBUz86ePlUepDGDtNNtCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q5laH/btsN5IjEWKn/oMBUz86ePlUepDGDtNNtCK/img.png&quot; data-alt=&quot;잘 연결된 것을 확인할 수 있음!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q5laH/btsN5IjEWKn/oMBUz86ePlUepDGDtNNtCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq5laH%2FbtsN5IjEWKn%2FoMBUz86ePlUepDGDtNNtCK%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;419&quot; height=&quot;91&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 연결된 것을 확인할 수 있음!!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 공부/쿠버네티스</category>
      <category>Kubernetes</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/414</guid>
      <comments>https://kne-coding.tistory.com/414#entry414comment</comments>
      <pubDate>Tue, 20 May 2025 11:02:26 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스] PART3. 한 걸음 더 나아가기</title>
      <link>https://kne-coding.tistory.com/411</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 쿠버네티스의 CI/CD&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. CI/CD란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- CI/CD가 등장하기 전, 개발할 때는 개발자들이 소스 코드가 저장된 저장소에 접근해서 커밋을 통해 사용 권한을 얻고, 이후 수정한 내용을 빌드하고 테스트하는 과정을 거침&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 개발 중에는 별도의 품질 관리를 수행하지 않기 때문에 테스트 과정 중에 오류가 발생하는 경우가 많았음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 그래서 CI/CD가 등장하게 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;CI/CD 개념&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CI&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Continuous Integration의 약자로 지속적 통합을 의미함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 오류 수정 혹은 새로운 기능을 테스트하고 깃허브 같은 저장소에 배포하는 과정을 의미함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Travis CI, Bamboo, 젠킨스(Jenkins) 등 같은 도구를 사용하는데, 그중 젠킨스를 가장 많이 사용함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CI의 핵심
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;빠른 개발과 배포&lt;br /&gt;- 애플리케이션을 운영하다 보면 새로운 기능을 추가하거나 기존의 기능을 수정하고 배포해야 하는 상황이 많이 발생함&lt;br /&gt;- 빈번한 수정과 테스트를 빠르면서도 효율적으로 진행하도록 도와줌&lt;/li&gt;
&lt;li&gt;자동화&lt;br /&gt;- 소스 코드를 수정한 후 빌드하고 테스트하는 과정을 자동화 시켜줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CI의 목적&lt;br /&gt;- 소스 코드 파일, 라이브러리, 구성 파일 및 스크립트를 포함해 전체 코드를 포함하는 프로그램 또는 버전 관리&lt;br /&gt;- 프로그램 빌드의 자동화&lt;br /&gt;- 자동화된 테스트&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CD&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Continuous Delivery 또는 Continuous Deployment의 약자로 지속적 배포를 의미함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 테스트까지 완료된 소스 코드를 개발 환경과 운영 환경에 배포하는 것을 의미함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 개발 환경과 운영 환경을 분리하는 이유는 안정성 때문&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 개발 환경에 배포해 오류가 발생하는지 확인하고 문제가 없다면 운영 환경에 배포하게 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Continuous Delivery는 사람의 손이 필요한 수동 배포, Continuous Deployment 모든 과정이 자동화로 처리됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 빠르고 정확하게 배포를 도와주는 자동화 도구를 사용하는데, 대표적으로 ArgoCD를 많이 사용함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;깃허브, 깃옵스 및 깃옵스 리포지터리 역할&lt;br /&gt;- 깃허브(GitHub) : 소프트웨어를 개발할때 소스 코드 버전을 관리하기 위한 원격 저장소&lt;br /&gt;- 깃옵스(GitOps) : 깃허브에 있는 소스 코드를 쿠버네티스 클러스터에 그대로 반영함&lt;br /&gt;- 깃옵스 리포지터리(GitOps Repository) : 매니페스트 파일들이 모여 있는 저장소. 깃옵스는 매니페스틀를 이용해 쿠버네티스 클러스터에 자동으로 배포(반영)하므로 이를 저장하기 위한 저장소&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. 지속적 통합 자동화 도구, 젠킨스&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;젠킨스&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 CI 툴&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 다수의 개발자가 개발한 소스 코드를 커밋/빌드하고 개발 환경에 배포하는 일 등을 자동화함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점&lt;br /&gt;- 프로젝트 환경에서 컴파일 오류 검출&lt;br /&gt;- 테스트를 자동으로 수행&lt;br /&gt;- 코딩 규약 준수 여부 체크(문법 체크)&lt;br /&gt;- 소스 변경에 따른 성능 변화 감시&lt;br /&gt;- 개발자의 소스 통합 및 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;젠킨스 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;리눅스 패키지를 최신 상태로 업데이트함&lt;br /&gt;- 최신 상태로 업데이트하면 설치할 패키지(소프트웨어)를 최신 버전으로 가져올 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1746662639014&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;JDK를 설치함&lt;br /&gt;- openjdk 17버전으로 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1746662759017&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt install -y openjdk-17-jre-headless&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coD6ZX/btsNMAtiXSx/zT9KJglPjiI4nKxl1SyaKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coD6ZX/btsNMAtiXSx/zT9KJglPjiI4nKxl1SyaKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coD6ZX/btsNMAtiXSx/zT9KJglPjiI4nKxl1SyaKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoD6ZX%2FbtsNMAtiXSx%2FzT9KJglPjiI4nKxl1SyaKk%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;1126&quot; height=&quot;588&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;- 설치가 잘 된것을 확인할 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1746663117047&quot; class=&quot;applescript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;java -version&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzSg08/btsNOlH8fMK/sby6IzgEt1PKfmi0atsBiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzSg08/btsNOlH8fMK/sby6IzgEt1PKfmi0atsBiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzSg08/btsNOlH8fMK/sby6IzgEt1PKfmi0atsBiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzSg08%2FbtsNOlH8fMK%2Fsby6IzgEt1PKfmi0atsBiK%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;673&quot; height=&quot;65&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;젠킨스를 설치하기 위해 필요한 패키지에 접근하기 위해 GPG 키를 추가함&lt;br /&gt;- 리눅스에서 설치하려는 패키지가 기본 리포지터리에 포함되지 않을 수 있음&lt;br /&gt;- 이때 add-apt-repository 명령어를 사용하면 설치하려는 소프트웨어에 대한 접근 권한을 부여함&lt;br /&gt;- 이와 유사한 역할을 하는 것이 GPG(GNU Privacy Guard, GnuPG)&lt;br /&gt;- GPG는 디지털 암호화 및 서명 서비스를 제공하는 OpenPGP&lt;br /&gt;
&lt;pre id=&quot;code_1746664708294&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;wget -q -O - https://pkg.jenkins.io/debian/jenkins.io-2023.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어의 옵션
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;wget : Web Get의 약어로 웹에서 파일을 내려받을 때 사용하는 명령어&lt;/li&gt;
&lt;li&gt;-q : quit의 약어로 명령어 실행이 완료되면 별다른 출력 없이 종료함&lt;/li&gt;
&lt;li&gt;-o : wget을 통해 내려받을 때 저장되는 파일명은 URL의 마지막 / 뒤에 오는 단어로 함. 따라서 jenkins.io.key라는 이름으로 저장됨&lt;/li&gt;
&lt;li&gt;| : 앞의 명령어의 실행 결과를 뒤의 명령어의 입력으로 넘김&lt;/li&gt;
&lt;li&gt;gpg - dearmor : gpg 키를 apt가 인식할 수 있는 형식으로 변환함&lt;/li&gt;
&lt;li&gt;/usr/share/keyrings/jenkins.gpg : jenkins.gpg 키를 추가함&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;젠킨스 패키지 저장소 주소를 sources.list에 추가해야 함&lt;br /&gt;
&lt;pre id=&quot;code_1746666128893&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ &amp;gt; /etc/apt/sources.list.d/jenkins.list'&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qTSxC/btsNN6dpkOS/JhOkkG665h1CekSoDbVtAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qTSxC/btsNN6dpkOS/JhOkkG665h1CekSoDbVtAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qTSxC/btsNN6dpkOS/JhOkkG665h1CekSoDbVtAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqTSxC%2FbtsNN6dpkOS%2FJhOkkG665h1CekSoDbVtAk%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;1307&quot; height=&quot;256&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어의 옵션
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;sudo sh : 셸 스크립트로 작성된 파일을 실행하는 명령어&lt;/li&gt;
&lt;li&gt;-c : 파일이 존재하면 덮어쓰기를 하지 않는 옵션&lt;/li&gt;
&lt;li&gt;echo : 문자열을 컴퓨터 터미널에 출력하는 명령어&lt;/li&gt;
&lt;li&gt;deb : deb은 모든 Debian 기반 배포에서 사용하는 설치 패키지 형식. 우분투 리포지터리에는 우분투 소프트웨어 센터, apt 및 app-get 유틸리티를 사용해 설치할 수 있는 수천 개의 deb 패키지가 포함되어 있음&lt;/li&gt;
&lt;li&gt;[signed-by=/usr/share/keyrings/jenkins.gpg] : GPG 키를 사용해 apt가 내려받은 저장소의 파일을 확인(접근할 수 있는지, 안전한지 등)함&lt;/li&gt;
&lt;li&gt;http://pkg.jenkins.io/debian-stable binary/ &amp;gt; /etc/apt/sources.list.d/jenkins.list : /etc/apt/sources.list.d 파일에 젠킨스 저장소 주소(http://pkg.jenkins.io/debian-stable binary/)를 추가함&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;젠킨스를 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1746667983762&quot; class=&quot;cmake&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt install jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rNO6u/btsNMR9tiay/OBfv0WyKlSUf3YtKkY4B60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rNO6u/btsNMR9tiay/OBfv0WyKlSUf3YtKkY4B60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rNO6u/btsNMR9tiay/OBfv0WyKlSUf3YtKkY4B60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrNO6u%2FbtsNMR9tiay%2FOBfv0WyKlSUf3YtKkY4B60%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;915&quot; height=&quot;290&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;젠킨스의 상태를 확인함&lt;br /&gt;- Active로 Running 상태를 보여줌&lt;br /&gt;- Inactive 상태라면 sudo systemctl start jenkins.service 명령어로 젠킨스를 시작할 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1746668769897&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo systemctl status jenkins&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqEOyx/btsNMdrBGff/AopCk4CVUNjkkbTHoMbnJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqEOyx/btsNMdrBGff/AopCk4CVUNjkkbTHoMbnJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqEOyx/btsNMdrBGff/AopCk4CVUNjkkbTHoMbnJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqEOyx%2FbtsNMdrBGff%2FAopCk4CVUNjkkbTHoMbnJk%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;1146&quot; height=&quot;148&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;젠킨스 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 젠킨스 설치를 완료했고 이제 젠킨스를 구성해야 함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)&lt;br /&gt;- Hyper-V 관리자에서 master에 접속해 파이어폭스(Firefox) 브라우저에서 localhost:8080에 접근&lt;br /&gt;- Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:8080으로 접근&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;아래 화면같이 administrator password 묻는 화면이 나오면 패스워드를 입력한 후 Continue를 클릭함&lt;br /&gt;- 패스워드는 다음 명령어로 확인할 수 있음&lt;br /&gt;
&lt;pre id=&quot;code_1746669665250&quot; class=&quot;crystal&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo cat /var/lib/jenkins/secrets/initialAdminPassword&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xrlRj/btsNNbthMzC/betNdGg6fYLasSdJzTFkQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xrlRj/btsNNbthMzC/betNdGg6fYLasSdJzTFkQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xrlRj/btsNNbthMzC/betNdGg6fYLasSdJzTFkQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxrlRj%2FbtsNNbthMzC%2FbetNdGg6fYLasSdJzTFkQK%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;560&quot; height=&quot;222&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;기본 플러그인 설치를 진행함&lt;br /&gt;- Administrator password를 입력하면 플러그인 설치와 관련된 옵션들이 나타남&lt;br /&gt;- Install suggested plugins를 클릭해 설치 진행&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csX6Tp/btsNN5yP68X/IC8PgqOeEVhNhQwbfSRMr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csX6Tp/btsNN5yP68X/IC8PgqOeEVhNhQwbfSRMr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csX6Tp/btsNN5yP68X/IC8PgqOeEVhNhQwbfSRMr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsX6Tp%2FbtsNN5yP68X%2FIC8PgqOeEVhNhQwbfSRMr1%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;560&quot; height=&quot;247&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;설치 진행&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dE7PiF/btsNNxJF32S/K5RfmOIduxuWz3dJkyfR00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dE7PiF/btsNNxJF32S/K5RfmOIduxuWz3dJkyfR00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dE7PiF/btsNNxJF32S/K5RfmOIduxuWz3dJkyfR00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdE7PiF%2FbtsNNxJF32S%2FK5RfmOIduxuWz3dJkyfR00%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;560&quot; height=&quot;343&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;사용자와 패스워드를 설정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tC6DP/btsNMSgdYuN/XB0sFKt0Q6Ckc6F0lKNc1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tC6DP/btsNMSgdYuN/XB0sFKt0Q6Ckc6F0lKNc1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tC6DP/btsNMSgdYuN/XB0sFKt0Q6Ckc6F0lKNc1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtC6DP%2FbtsNMSgdYuN%2FXB0sFKt0Q6Ckc6F0lKNc1k%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;430&quot; height=&quot;262&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;접속할 수 있는 URL을 보여줌&lt;br /&gt;- Save and Finish를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S2QaZ/btsNNjxRXU3/p3jNuKdnWGvM5vX5Yyuh31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S2QaZ/btsNNjxRXU3/p3jNuKdnWGvM5vX5Yyuh31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S2QaZ/btsNNjxRXU3/p3jNuKdnWGvM5vX5Yyuh31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS2QaZ%2FbtsNNjxRXU3%2Fp3jNuKdnWGvM5vX5Yyuh31%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;560&quot; height=&quot;179&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;젠킨스 사용 준비가 완료되었다는 화면을 보여줌&lt;br /&gt;- Start using Jenkins를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AxmqD/btsNNIKXDRu/jW3f8AdvCilytfui6FFq5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AxmqD/btsNNIKXDRu/jW3f8AdvCilytfui6FFq5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AxmqD/btsNNIKXDRu/jW3f8AdvCilytfui6FFq5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAxmqD%2FbtsNNIKXDRu%2FjW3f8AdvCilytfui6FFq5K%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;430&quot; height=&quot;194&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;젠킨스 접속 화면&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/03uuC/btsNMeqqaMU/ek2NlowAk9EyNdEddP5jqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/03uuC/btsNMeqqaMU/ek2NlowAk9EyNdEddP5jqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/03uuC/btsNMeqqaMU/ek2NlowAk9EyNdEddP5jqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F03uuC%2FbtsNMeqqaMU%2Fek2NlowAk9EyNdEddP5jqk%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;2548&quot; height=&quot;664&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;젠킨스 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;깃허브와 연동하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 젠킨스는 빌드를 자동화하는 툴이므로 소스 코드가 저장된 저장소와 연계해야 함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 깃허브를 저장소로 사용함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;깃허브에 연동하기 위해 먼저 깃허브에 접속해 로그인함&lt;/li&gt;
&lt;li&gt;젠킨스에서 깃허브에 접속할 수 있는 토큰을 생성해야 함&lt;br /&gt;- 오른쪽 상단의 프로필 &amp;rarr; Settings&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdykpm/btsNOWnQiIO/Kc5dnqrmZ7vJGkSbgyBeWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdykpm/btsNOWnQiIO/Kc5dnqrmZ7vJGkSbgyBeWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdykpm/btsNOWnQiIO/Kc5dnqrmZ7vJGkSbgyBeWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdykpm%2FbtsNOWnQiIO%2FKc5dnqrmZ7vJGkSbgyBeWK%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;308&quot; height=&quot;703&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;왼쪽 메뉴 하단의 Developer settings를 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVJXOi/btsNNWJcjvK/IsBel5gTdgx3j1WRFHBgA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVJXOi/btsNNWJcjvK/IsBel5gTdgx3j1WRFHBgA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVJXOi/btsNNWJcjvK/IsBel5gTdgx3j1WRFHBgA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVJXOi%2FbtsNNWJcjvK%2FIsBel5gTdgx3j1WRFHBgA1%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;318&quot; height=&quot;158&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Personal access tokens에서 Tokens을 클릭 후 Generate new token(classic) 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/waUWv/btsNN6xZxmL/yy5pjHFB9kWLBkU6mSnkyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/waUWv/btsNN6xZxmL/yy5pjHFB9kWLBkU6mSnkyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/waUWv/btsNN6xZxmL/yy5pjHFB9kWLBkU6mSnkyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwaUWv%2FbtsNN6xZxmL%2Fyy5pjHFB9kWLBkU6mSnkyk%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;560&quot; height=&quot;267&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Note에 토큰 이름을 지정하고 Expiration 부분은 No expiration을 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co3ffR/btsNN6x25CH/kDhAzuRs1dEFyUq2cDOLVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co3ffR/btsNN6x25CH/kDhAzuRs1dEFyUq2cDOLVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co3ffR/btsNN6x25CH/kDhAzuRs1dEFyUq2cDOLVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco3ffR%2FbtsNN6x25CH%2FkDhAzuRs1dEFyUq2cDOLVK%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;560&quot; height=&quot;219&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;scopes에서는 다음과 같은 항목을 선택한 후 Generate token을 클릭함&lt;br /&gt;- scopes는 젠킨스에서 깃허브에 접속해 사용할 수 있는 권한에 관한 것, 리포지터리와 자동 빌드를 위한 권한만 체크&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S9WCH/btsNPCpbMzl/vifddALSWYK4ow8hk3N0Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S9WCH/btsNPCpbMzl/vifddALSWYK4ow8hk3N0Z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S9WCH/btsNPCpbMzl/vifddALSWYK4ow8hk3N0Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS9WCH%2FbtsNPCpbMzl%2FvifddALSWYK4ow8hk3N0Z1%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;560&quot; height=&quot;466&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;생성된 토큰을 저장해둠&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sa2hO/btsNOKBrJpv/16kfiaAz5SNwr00mQ8Wwhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sa2hO/btsNOKBrJpv/16kfiaAz5SNwr00mQ8Wwhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sa2hO/btsNOKBrJpv/16kfiaAz5SNwr00mQ8Wwhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSa2hO%2FbtsNOKBrJpv%2F16kfiaAz5SNwr00mQ8Wwhk%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;560&quot; height=&quot;229&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;젠킨스로 이동해 깃허브와 연결함&lt;br /&gt;- 젠킨스 화면의 왼쪽 메뉴에서 Manage Jenkins를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doY0sd/btsNPxaAA9R/e3hQBqfcTgLhbIs4FNZ3y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doY0sd/btsNPxaAA9R/e3hQBqfcTgLhbIs4FNZ3y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doY0sd/btsNPxaAA9R/e3hQBqfcTgLhbIs4FNZ3y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoY0sd%2FbtsNPxaAA9R%2Fe3hQBqfcTgLhbIs4FNZ3y0%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;340&quot; height=&quot;238&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;System Configuration 에서 System을 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPbOWY/btsNMSnqy8G/uY8TNACPSbZDBvLAfYn15K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPbOWY/btsNMSnqy8G/uY8TNACPSbZDBvLAfYn15K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPbOWY/btsNMSnqy8G/uY8TNACPSbZDBvLAfYn15K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPbOWY%2FbtsNMSnqy8G%2FuY8TNACPSbZDBvLAfYn15K%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;560&quot; height=&quot;159&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;화면을 하단으로 이동하면 GitHub라는 메뉴가 있음 Add GitHub Server &amp;gt; GitHub Server를 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eHEJ86/btsNMTs7MKf/uupJ2cavUjv9pIT2WMW66K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eHEJ86/btsNMTs7MKf/uupJ2cavUjv9pIT2WMW66K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eHEJ86/btsNMTs7MKf/uupJ2cavUjv9pIT2WMW66K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeHEJ86%2FbtsNMTs7MKf%2FuupJ2cavUjv9pIT2WMW66K%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;281&quot; height=&quot;227&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;깃허브 접속을 위한 Credential 설정&lt;br /&gt;- Name : access_github&lt;br /&gt;- API URL : https://api.github.com&lt;br /&gt;- Credentials : Add &amp;gt; Jenkins를 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kbbws/btsNPY0f97D/kFSOQYsPIGBcnYfPBuZn2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kbbws/btsNPY0f97D/kFSOQYsPIGBcnYfPBuZn2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kbbws/btsNPY0f97D/kFSOQYsPIGBcnYfPBuZn2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKbbws%2FbtsNPY0f97D%2FkFSOQYsPIGBcnYfPBuZn2K%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;560&quot; height=&quot;579&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;깃허브에 연결하기 위한 권한을 설정할 수 있는 화면이 나타남. 다음과 같이 설정함&lt;br /&gt;- Domain은 그대로 두고, Kind는 Secret text를 선택함&lt;br /&gt;- Secret에서는 앞에서 저장했던 토큰을 입력하고, ID는 토큰 이름을 지정함&lt;br /&gt;- 이후 Add를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2eBMl/btsNNgVZFpt/zTiNzVZHkvr2jXeJEK86M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2eBMl/btsNNgVZFpt/zTiNzVZHkvr2jXeJEK86M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2eBMl/btsNNgVZFpt/zTiNzVZHkvr2jXeJEK86M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2eBMl%2FbtsNNgVZFpt%2FzTiNzVZHkvr2jXeJEK86M0%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;430&quot; height=&quot;600&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;679&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이후 Credentials 아래 리스트 박스를 클릭하면 생성했던 jenkins_token1이 보임. 이것을 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GBLjk/btsNNkqCMXD/MMORZPLdPceKGWSqZcXbDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GBLjk/btsNNkqCMXD/MMORZPLdPceKGWSqZcXbDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GBLjk/btsNNkqCMXD/MMORZPLdPceKGWSqZcXbDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGBLjk%2FbtsNNkqCMXD%2FMMORZPLdPceKGWSqZcXbDK%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;560&quot; height=&quot;537&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Test connection 버튼을 클릭해 정상적으로 연결되는 것을 확인한 후 Save 버튼을 클릭함&lt;br /&gt;- 테스트 결과 'Credentials verified for user [user ID], rate limit: 4999'가 나타나면 연결에 성공한 것&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로젝트 생성하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이제 젠킨스에서 소스 코드를 자동 빌드하는 프로젝트 생성함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;젠킨스 메인 화면의 왼쪽 메뉴에서 New Item을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz5OwL/btsNNF9aWF3/CtOL7iIXlsVFPy3GBhW3P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz5OwL/btsNNF9aWF3/CtOL7iIXlsVFPy3GBhW3P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz5OwL/btsNNF9aWF3/CtOL7iIXlsVFPy3GBhW3P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz5OwL%2FbtsNNF9aWF3%2FCtOL7iIXlsVFPy3GBhW3P0%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;340&quot; height=&quot;238&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다음 메뉴에서 item name을 입력한 후 Freestyle project를 선택하고 OK 버튼을 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D83PT/btsNNclO9V7/kSKIdSCnRni6TyPRhjchf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D83PT/btsNNclO9V7/kSKIdSCnRni6TyPRhjchf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D83PT/btsNNclO9V7/kSKIdSCnRni6TyPRhjchf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD83PT%2FbtsNNclO9V7%2FkSKIdSCnRni6TyPRhjchf1%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;560&quot; height=&quot;501&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;빌드 방법을 지정하기 위해 Triggers를 선택함&lt;br /&gt;- 'Github hook trigger for GITScm polling'을 체크하면 왼쪽 하단에 save와 apply가 나타나는데, save를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sAcqj/btsNNRhiNKv/2Xk4qD1yioT4TIoInO3Ky0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sAcqj/btsNNRhiNKv/2Xk4qD1yioT4TIoInO3Ky0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sAcqj/btsNNRhiNKv/2Xk4qD1yioT4TIoInO3Ky0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsAcqj%2FbtsNNRhiNKv%2F2Xk4qD1yioT4TIoInO3Ky0%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;560&quot; height=&quot;192&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;그러면 다음과 같은 메뉴가 나타나는데 Configure를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mc0eP/btsNNSAADOn/TOKQfp1A7XGqipgNizH0b1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mc0eP/btsNNSAADOn/TOKQfp1A7XGqipgNizH0b1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mc0eP/btsNNSAADOn/TOKQfp1A7XGqipgNizH0b1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmc0eP%2FbtsNNSAADOn%2FTOKQfp1A7XGqipgNizH0b1%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;340&quot; height=&quot;376&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;깃허브에 접속할 수 있는 권한을 생성함&lt;br /&gt;- '소스 코드 관리'로 이동해 Credentials에서 Add &amp;gt; Jenkins를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1030&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HhXeA/btsNN4UYxVK/ItesCaiJwC5X8RjH1tKmz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HhXeA/btsNN4UYxVK/ItesCaiJwC5X8RjH1tKmz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HhXeA/btsNN4UYxVK/ItesCaiJwC5X8RjH1tKmz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHhXeA%2FbtsNN4UYxVK%2FItesCaiJwC5X8RjH1tKmz1%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;560&quot; height=&quot;355&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1030&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;그러면 다음과 같은 창이 뜨는데 Kind에 Username with password를 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yAlKF/btsNNVYCu1C/g5fTBvi7YPatwzGKA7Sl9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yAlKF/btsNNVYCu1C/g5fTBvi7YPatwzGKA7Sl9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yAlKF/btsNNVYCu1C/g5fTBvi7YPatwzGKA7Sl9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyAlKF%2FbtsNNVYCu1C%2Fg5fTBvi7YPatwzGKA7Sl9k%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;472&quot; height=&quot;205&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다음과 같은 항목만 채운 상태에서 Add를 클릭함&lt;br /&gt;- 이때 Username에는 깃허브 계정을 입력하고 Password에는 토큰을 입력함&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이제 다음과 같이 -none-이 위치한 리스트 박스를 클릭하면 생성했던 credential이 나타나는데 본인의 깃허브 계정을 선택&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXSs5/btsNN7j8y2b/DCj0vdRH21zxJS10Mf2WqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXSs5/btsNN7j8y2b/DCj0vdRH21zxJS10Mf2WqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXSs5/btsNN7j8y2b/DCj0vdRH21zxJS10Mf2WqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXSs5%2FbtsNN7j8y2b%2FDCj0vdRH21zxJS10Mf2WqK%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;560&quot; height=&quot;91&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;권한 설정이 완료되었으므로 이제 깃허브 주소가 필요함&lt;br /&gt;- URL을 확인하기 위해 깃허브에 다시 접속해 깃허브 아이콘을 클릭한 후 New를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J58gE/btsNP8aJFPG/hKVufWYF6ai9HZrY9m1Kh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J58gE/btsNP8aJFPG/hKVufWYF6ai9HZrY9m1Kh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J58gE/btsNP8aJFPG/hKVufWYF6ai9HZrY9m1Kh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ58gE%2FbtsNP8aJFPG%2FhKVufWYF6ai9HZrY9m1Kh1%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;321&quot; height=&quot;217&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Repository name을 입력한 후 하단의 Create repository를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brU78q/btsNQdCV5vT/k6EXF77IzDGcLx047qDBwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brU78q/btsNQdCV5vT/k6EXF77IzDGcLx047qDBwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brU78q/btsNQdCV5vT/k6EXF77IzDGcLx047qDBwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrU78q%2FbtsNQdCV5vT%2Fk6EXF77IzDGcLx047qDBwk%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;560&quot; height=&quot;162&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이후 다음과 같은 주소를 보여줌. 이 주소를 복사함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yHVcx/btsNNXhK6Rz/W3CbXc0NQzuVhaTQ6psBZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yHVcx/btsNNXhK6Rz/W3CbXc0NQzuVhaTQ6psBZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yHVcx/btsNNXhK6Rz/W3CbXc0NQzuVhaTQ6psBZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyHVcx%2FbtsNNXhK6Rz%2FW3CbXc0NQzuVhaTQ6psBZ1%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;640&quot; height=&quot;421&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;815&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다시 젠킨스로 이동해 Source Code Management로 이동하고 Repository URL 항목에 앞에서 복사해 둔 주소를 입력함&lt;br /&gt;- 입력후 Advanced...를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tAyaD/btsNPGr4f8A/CPR38EPqk7rDerJU2vKEd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tAyaD/btsNPGr4f8A/CPR38EPqk7rDerJU2vKEd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tAyaD/btsNPGr4f8A/CPR38EPqk7rDerJU2vKEd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtAyaD%2FbtsNPGr4f8A%2FCPR38EPqk7rDerJU2vKEd1%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;891&quot; height=&quot;396&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Branches to build에는 */main을 입력한 후 Save를 클릭함&lt;br /&gt;- 기본은 master이지만 깃허브의 branch 이름을 입력함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXi5F/btsNQcdeoP2/SuFfNBI0QlPvXIeDLJf9p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXi5F/btsNQcdeoP2/SuFfNBI0QlPvXIeDLJf9p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXi5F/btsNQcdeoP2/SuFfNBI0QlPvXIeDLJf9p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXi5F%2FbtsNQcdeoP2%2FSuFfNBI0QlPvXIeDLJf9p0%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;850&quot; height=&quot;157&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;빌드 도구 설정하기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 젠킨스는 지속적 통합, 프로젝트 빌드, 테스트 실행, 배포 등의 작업을 자동화함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이것이 가능하도록 메이븐(Maven), 앤트(Ant), 그래들(Gradle) 같은 빌드 도구를 이용하고, 깃허브, SVN(SubVersion) 같은 형상 관리 툴을 지원함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;width: 33.3333%;&quot;&gt;앤트 빌드 도구의 특징&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;메이븐 빌드 도구의 특징&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;그래들 빌드 도구의 특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;- XML 기반으로 빌드 스크립트를 작성함&lt;br /&gt;- 간단하고 사용이 쉬움&lt;br /&gt;- 프로젝트 규모가 클 경우 스크립트 관리나 빌드 과정이 복잡함&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;- XML 기반으로 작성함&lt;br /&gt;- 생명 주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됨&lt;br /&gt;- 상대적으로 학습 장벽이 높음&lt;br /&gt;- 라이브러리가 서로 의존적이면 사용이 복잡함&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;- 라이브러리 의존성 관리를 위한 다양한 방법을 제공함&lt;br /&gt;- 빌드 스크립트를 XML이 아닌 JVM에서 동작하는 스크립트 언어 '그루비' 기반의 DSL을 사용함&lt;br /&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;wget 명령어를 이용해 /tmp 디렉터리에 그래들 설치 파일(zip 파일)을 내려받음&lt;br /&gt;- 이때 -P는 파일을 저장할 디렉터리를 지정할 때 사용하는 옵션&lt;br /&gt;
&lt;pre id=&quot;code_1746686903648&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;wget https://services.gradle.org/distributions/gradle-7.4.2-bin.zip -P /tmp&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;모두 내려받았으면 /opt/gradle 디렉터리에 압축을 해제함&lt;br /&gt;
&lt;pre id=&quot;code_1746687163674&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo unzip -d /opt/gradle /tmp/gradle-*.zip&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;/opt/gradle/gradle-7.4.2 디렉터리에 그래들 파일이 있는지 확인함&lt;br /&gt;
&lt;pre id=&quot;code_1746687202505&quot; class=&quot;angelscript&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;ls /opt/gradle/gradle-7.4.2&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DC6Mo/btsNQo5yAr8/XTJ6TR8kb8xgGMAVyrKpm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DC6Mo/btsNQo5yAr8/XTJ6TR8kb8xgGMAVyrKpm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DC6Mo/btsNQo5yAr8/XTJ6TR8kb8xgGMAVyrKpm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDC6Mo%2FbtsNQo5yAr8%2FXTJ6TR8kb8xgGMAVyrKpm1%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;460&quot; height=&quot;35&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;26&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;그래들에 대한 환경 변수를 설정함&lt;br /&gt;- gradle.sh 파일에 GRADLE_HOME 경로를 설정함&lt;br /&gt;- 그다음에는 ctrl+x 입력 후 y를 누르고 enter를 누름&lt;br /&gt;
&lt;pre id=&quot;code_1746687325485&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo nano /etc/profile.d/gradle.sh&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre id=&quot;code_1746687405511&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;export GRADLE_HOME=/opt/gradle/gradle-7.4.2
export PATH=${GRADLE_HOME}/bin:${PATH}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;chmod + x 명령어를 실행해 스크립트를 실행할 수 있도록 권한을 부여함&lt;br /&gt;
&lt;pre id=&quot;code_1746687904796&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo chmod +x /etc/profile.d/gradle.sh&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;source 명령어를 사용해 환경 변수를 가져옴&lt;br /&gt;- source 명령어는 스크립트 파일을 수정한 뒤 바로 수정된 값을 적용할 때 사용&lt;br /&gt;
&lt;pre id=&quot;code_1746687979296&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt; source /etc/profile.d/gradle.sh&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;그래들이 제대로 설치되었는지 그래들 버전을 표시하는 명령어로 확인함&lt;br /&gt;
&lt;pre id=&quot;code_1746688115501&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;gradle -v&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhtcXG/btsNNCLByVQ/JWcDrFNQPmw7z0Qtckh1Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhtcXG/btsNNCLByVQ/JWcDrFNQPmw7z0Qtckh1Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhtcXG/btsNNCLByVQ/JWcDrFNQPmw7z0Qtckh1Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhtcXG%2FbtsNNCLByVQ%2FJWcDrFNQPmw7z0Qtckh1Pk%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;559&quot; height=&quot;382&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이제 그래들을 사용하기 위해 젠킨스로 이동해 Jenkins 관리 - Tools를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIbJTe/btsNPZL6gmn/aK55WGtVXuI6W0mHRzyxU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIbJTe/btsNPZL6gmn/aK55WGtVXuI6W0mHRzyxU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIbJTe/btsNPZL6gmn/aK55WGtVXuI6W0mHRzyxU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIbJTe%2FbtsNPZL6gmn%2FaK55WGtVXuI6W0mHRzyxU0%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;560&quot; height=&quot;386&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;894&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;화면을 아래로 내려 Gradle을 찾은 후 Add Gradle을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dttYr5/btsNNCkzjWd/IwoKMJXyoSDfMHeHrcfCFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dttYr5/btsNNCkzjWd/IwoKMJXyoSDfMHeHrcfCFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dttYr5/btsNNCkzjWd/IwoKMJXyoSDfMHeHrcfCFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdttYr5%2FbtsNNCkzjWd%2FIwoKMJXyoSDfMHeHrcfCFK%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;169&quot; height=&quot;115&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다음과 같이 입력한 후 맨 밑에 있는 Save를 클릭함&lt;br /&gt;- Install automatically : 선택 해제&lt;br /&gt;- name : 젠킨스 내에서 사용할 이름 설정&lt;br /&gt;- GRADLE_HOME : 앞에서 PATH로 등록한 경로&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB5q5A/btsNOaBkdJI/wafpCKD4TkxF3DA4berO90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB5q5A/btsNOaBkdJI/wafpCKD4TkxF3DA4berO90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB5q5A/btsNOaBkdJI/wafpCKD4TkxF3DA4berO90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB5q5A%2FbtsNOaBkdJI%2FwafpCKD4TkxF3DA4berO90%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;560&quot; height=&quot;335&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;초기 화면으로 돌아오면 다시 New Item을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz5OwL/btsNNF9aWF3/CtOL7iIXlsVFPy3GBhW3P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz5OwL/btsNNF9aWF3/CtOL7iIXlsVFPy3GBhW3P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz5OwL/btsNNF9aWF3/CtOL7iIXlsVFPy3GBhW3P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz5OwL%2FbtsNNF9aWF3%2FCtOL7iIXlsVFPy3GBhW3P0%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;340&quot; height=&quot;238&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;All이라는 메뉴가 생기는데 All 메뉴 옆의 화살표를 클릭하고 앞에서 생성해둔 Jenkins_test를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIHaTS/btsNNQbKO88/ajbdTGXxyDgTkIP72Gmq7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIHaTS/btsNNQbKO88/ajbdTGXxyDgTkIP72Gmq7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIHaTS/btsNNQbKO88/ajbdTGXxyDgTkIP72Gmq7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIHaTS%2FbtsNNQbKO88%2FajbdTGXxyDgTkIP72Gmq7K%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;340&quot; height=&quot;85&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;구성 - Build Steps으로 이동해 Add build step에서 Invoke Gradle script를 선택함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y2B6c/btsNP65czuC/sXt3n0lEiQHRFF4BrEkUm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y2B6c/btsNP65czuC/sXt3n0lEiQHRFF4BrEkUm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y2B6c/btsNP65czuC/sXt3n0lEiQHRFF4BrEkUm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy2B6c%2FbtsNP65czuC%2FsXt3n0lEiQHRFF4BrEkUm0%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;560&quot; height=&quot;295&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이제 그래들에 대해 다음과 같이 설정함&lt;br /&gt;- Gradle Version : 앞에서 설정한 이름을 선택함&lt;br /&gt;- Task : clean을 입력함(clean은 디스크 초기화 명령어)&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1GsZ0/btsNPAztZ4w/HqbTlCssMWaTIkIDXPv8Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1GsZ0/btsNPAztZ4w/HqbTlCssMWaTIkIDXPv8Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1GsZ0/btsNPAztZ4w/HqbTlCssMWaTIkIDXPv8Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1GsZ0%2FbtsNPAztZ4w%2FHqbTlCssMWaTIkIDXPv8Xk%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;560&quot; height=&quot;382&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;웹훅(webhook)을 설정하기 위해 다시 깃허브로 이동해서 Settings를 클릭함&lt;br /&gt;- 웹훅 : 특정 이벤트가 발생하고 나서 특정 스크립트를 실행시킬 때 사용. 따라서 다른 서비스와의 통합이나 특정 API를 호출할 때 사용함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2yIIP/btsNP8W1Sdp/DnvRyEhNNqysVTIRrDAqP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2yIIP/btsNP8W1Sdp/DnvRyEhNNqysVTIRrDAqP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2yIIP/btsNP8W1Sdp/DnvRyEhNNqysVTIRrDAqP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2yIIP%2FbtsNP8W1Sdp%2FDnvRyEhNNqysVTIRrDAqP1%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;560&quot; height=&quot;71&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Webhooks 메뉴로 이동한 후 Add webhook 버튼을 클릭함&lt;br /&gt;- URL(젠킨스가 실행되고 있는 노드의 IP와 포트)과 Content Type(application/json)을 선택&lt;br /&gt;- Add webhook 버튼 클릭&lt;br /&gt;- 입력한 IP가 공인 IP가 아니라면 생성 후 오류가 발생할 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgCsgB/btsNQnl6v4U/1Przw6K6VnqObv07oDMUS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgCsgB/btsNQnl6v4U/1Przw6K6VnqObv07oDMUS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgCsgB/btsNQnl6v4U/1Przw6K6VnqObv07oDMUS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgCsgB%2FbtsNQnl6v4U%2F1Przw6K6VnqObv07oDMUS1%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;560&quot; height=&quot;155&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rQ0D8/btsNReaQ6AR/J7PphCO4LQt3tyBV3kTA9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rQ0D8/btsNReaQ6AR/J7PphCO4LQt3tyBV3kTA9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rQ0D8/btsNReaQ6AR/J7PphCO4LQt3tyBV3kTA9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrQ0D8%2FbtsNReaQ6AR%2FJ7PphCO4LQt3tyBV3kTA9k%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;560&quot; height=&quot;577&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이후 젠킨스로 돌아와서 다음과 같이 '지금 빌드'를 클릭함&lt;br /&gt;- 자동으로 빌드가 진행됨&lt;br /&gt;- 깃허브에 소스 코드를 저장한 후 수정하면 자동으로 빌드가 됨&lt;br /&gt;- 혹은 '지금 빌드'를 클릭해 강제로 빌드를 할 수도 있음&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MbbzS/btsNQbl8HGY/xh6YaAhhY5DMjMVocbtvv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MbbzS/btsNQbl8HGY/xh6YaAhhY5DMjMVocbtvv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MbbzS/btsNQbl8HGY/xh6YaAhhY5DMjMVocbtvv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMbbzS%2FbtsNQbl8HGY%2Fxh6YaAhhY5DMjMVocbtvv0%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;339&quot; height=&quot;393&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xiPBz/btsNQVCCdFV/LOKl5m8A45ItE9KTGrz6C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xiPBz/btsNQVCCdFV/LOKl5m8A45ItE9KTGrz6C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xiPBz/btsNQVCCdFV/LOKl5m8A45ItE9KTGrz6C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxiPBz%2FbtsNQVCCdFV%2FLOKl5m8A45ItE9KTGrz6C0%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;560&quot; height=&quot;267&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;03. 지속적 배포 자동화 도구, ArgoCD&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;ArgoCD&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 깃옵스 기반의 자동화 배포 도구&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 깃옵스 리포지터리에 저장된 매니페스트가 쿠버네티스 운영 환경에도 똑같이 반영되도록 하는것&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이미지를 배포할 때 툴(ArgoCD, Flux CD 등)이 자동으로 변경된 부분을 인식해서 쿠버네티스에 배포함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ArgoCD의 특징&lt;br /&gt;- 지정된 환경에 애플리케이션을 자동으로 배포하고 관리&lt;br /&gt;- 다수의 클러스터를 단일의 환경에서 관리&lt;br /&gt;- RBAC기반의 권한 부여&lt;br /&gt;- 깃옵스 리포지터리를 사용하므로 백업 및 롤백 가능&lt;br /&gt;- 애플리케이션 리소스의 상태 분석&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;ArgoCD 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ArgoCD 설치를 위해 argocd라는 네임스페이스를 먼저 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1746749543810&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl create namespace argocd&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HKxi0/btsNQZ55OUi/jmkbKLhFsiWq0TUfkfQiLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HKxi0/btsNQZ55OUi/jmkbKLhFsiWq0TUfkfQiLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HKxi0/btsNQZ55OUi/jmkbKLhFsiWq0TUfkfQiLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHKxi0%2FbtsNQZ55OUi%2FjmkbKLhFsiWq0TUfkfQiLK%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;460&quot; height=&quot;36&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;클러스터에 ArgoCD를 설치함&lt;br /&gt;- 설치를 위해 다음 명령어를 이용하며, -f 옵션은 yaml 파일과 함께 사용할 때 사용&lt;br /&gt;
&lt;pre id=&quot;code_1746749520252&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;731&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zRhuJ/btsNOhAJGph/OIJ28VZPu7SIvxg8XpZQW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zRhuJ/btsNOhAJGph/OIJ28VZPu7SIvxg8XpZQW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zRhuJ/btsNOhAJGph/OIJ28VZPu7SIvxg8XpZQW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzRhuJ%2FbtsNOhAJGph%2FOIJ28VZPu7SIvxg8XpZQW0%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;990&quot; height=&quot;731&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;731&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;ArgoCD를 외부에서 접속할 수 있도록 서비스의 타입을 로드밸런서(LoadBalancer)로 설정함&lt;br /&gt;
&lt;pre id=&quot;code_1746749756754&quot; class=&quot;scilab&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl patch svc argocd-server -n argocd -p '{&quot;spec&quot;: {&quot;type&quot; : &quot;LoadBalancer&quot;}}'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BO2Uu/btsNQGeDczI/lX7FnXTxja0wFqmYlxC5j1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;29&quot; data-origin-width=&quot;778&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;API 서버와의 상호작용을 위해 ArgoCD CLI를 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1746750171417&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;VERSION=$(curl --silent &quot;https://api.github.com/repos/argoproj/argo-cd/releases/latest&quot; \
  | grep '&quot;tag_name&quot;' \
  | sed -E 's/.*&quot;([^&quot;]+)&quot;.*/\1/')

sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64

sudo chmod +x /usr/local/bin/argocd&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;설치가 끝나면 ArgoCD 접속을 위해 필요한 admin 사용자의 패스워드를 확인함&lt;br /&gt;- admin으로 비밀번호를 변경하는 과정을 거침&lt;br /&gt;
&lt;pre id=&quot;code_1746758021752&quot; class=&quot;perl&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;htpasswd -bnBC 12 &quot;&quot; admin | tr -d ':\n'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- 위 명령어로 나온 결과의 값을 복사 후 아래의 코드에 붙여넣음&lt;br /&gt;
&lt;pre id=&quot;code_1746758078641&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl -n argocd patch secret argocd-secret \
  -p '{&quot;stringData&quot;: {
    &quot;admin.password&quot;: &quot;(위의 해시 비밀번호)&quot;,
    &quot;admin.passwordMtime&quot;: &quot;'$(date +%FT%T%Z)'&quot;}}'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;- ArgoCD 서버 Pod 재시작&lt;br /&gt;
&lt;pre id=&quot;code_1746758107368&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl -n argocd delete pod -l app.kubernetes.io/name=argocd-server # Argo CD 서버 Pod 재시작&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;ArgoCD에 접속할 포트 번호 확인&lt;br /&gt;- http는 30456를 사용하고, https는 32490을 사용함&lt;br /&gt;
&lt;pre id=&quot;code_1746750386144&quot; class=&quot;armasm&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get svc -n argocd argocd-server&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rW8hz/btsNOjyxoVT/79AK3NcSHq8Yfrm6tCKWeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rW8hz/btsNOjyxoVT/79AK3NcSHq8Yfrm6tCKWeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rW8hz/btsNOjyxoVT/79AK3NcSHq8Yfrm6tCKWeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrW8hz%2FbtsNOjyxoVT%2F79AK3NcSHq8Yfrm6tCKWeK%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;750&quot; height=&quot;48&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;브라우저에서 마스터 노드의 IP에 접근함 (2가지 방법중 하나로 하면 됨)&lt;br /&gt;- Hyper-V 관리자에서 master에 접속해 파이어폭스(Firefox) 브라우저에서 localhost:32490에 접근&lt;br /&gt;- Hyper-V가 설치된 컴퓨터의 브라우저에서 마스터노드의 IP:32490으로 접근&lt;br /&gt;- URL : https://localhost:32490&lt;br /&gt;- 사용자 : admin / 패스워드 : (앞에서 설정한 패스워드)&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2IXqP/btsNPejGf60/YPlWrbnqb3fE9u0fzZCwk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2IXqP/btsNPejGf60/YPlWrbnqb3fE9u0fzZCwk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2IXqP/btsNPejGf60/YPlWrbnqb3fE9u0fzZCwk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2IXqP%2FbtsNPejGf60%2FYPlWrbnqb3fE9u0fzZCwk1%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;560&quot; height=&quot;339&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3bCVl/btsNQQhjvov/Yad3Lu0kf4GKMj5WmoVSA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3bCVl/btsNQQhjvov/Yad3Lu0kf4GKMj5WmoVSA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3bCVl/btsNQQhjvov/Yad3Lu0kf4GKMj5WmoVSA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3bCVl%2FbtsNQQhjvov%2FYad3Lu0kf4GKMj5WmoVSA0%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;560&quot; height=&quot;349&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;ArgoCD 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 리포지터리 연결 및 애플리케이션 배포 설정 확인&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;설정을 클릭 후 Repositories를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2063&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPrFl5/btsNPXaR7PK/VnbXv9pUOjWQpL4bpCwfsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPrFl5/btsNPXaR7PK/VnbXv9pUOjWQpL4bpCwfsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPrFl5/btsNPXaR7PK/VnbXv9pUOjWQpL4bpCwfsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPrFl5%2FbtsNPXaR7PK%2FVnbXv9pUOjWQpL4bpCwfsK%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;2063&quot; height=&quot;967&quot; data-origin-width=&quot;2063&quot; data-origin-height=&quot;967&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;리포지터리에 연결할 수 있는 방법들을 보여주는데, +CONNECT REPO를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnuyS/btsNPFufEVZ/AySoQdnRU3hI6c4YaPKKAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnuyS/btsNPFufEVZ/AySoQdnRU3hI6c4YaPKKAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnuyS/btsNPFufEVZ/AySoQdnRU3hI6c4YaPKKAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnuyS%2FbtsNPFufEVZ%2FAySoQdnRU3hI6c4YaPKKAk%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;294&quot; height=&quot;108&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;연결 방법은 HTTP/HTTPS, Repository URL에는 젠킨스에서 사용했던 깃허브 주소, username에는 깃허브에서 사용하는 사용자, password에는 깃허브 토큰을 입력한 후 상단의 connect를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;833&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ng4mI/btsNR2Iri20/8t9ufVd9h385wBXyt8Kcn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ng4mI/btsNR2Iri20/8t9ufVd9h385wBXyt8Kcn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ng4mI/btsNR2Iri20/8t9ufVd9h385wBXyt8Kcn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fng4mI%2FbtsNR2Iri20%2F8t9ufVd9h385wBXyt8Kcn0%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;560&quot; height=&quot;418&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;833&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다음와 같이 정상적으로 연결된 화면이 나옴&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn53fM/btsNRTZmjhu/0LOkO9hZK7skEwMdVZhMK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn53fM/btsNRTZmjhu/0LOkO9hZK7skEwMdVZhMK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn53fM/btsNRTZmjhu/0LOkO9hZK7skEwMdVZhMK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn53fM%2FbtsNRTZmjhu%2F0LOkO9hZK7skEwMdVZhMK0%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;600&quot; height=&quot;55&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;애플리케이션을 배포하기 위해 왼쪽 메뉴의 두 번째 아이콘을 클릭한 후 New App을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qa0Ry/btsNR56dtdX/0e8R129JxJQc7H2QjkFt3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qa0Ry/btsNR56dtdX/0e8R129JxJQc7H2QjkFt3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qa0Ry/btsNR56dtdX/0e8R129JxJQc7H2QjkFt3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqa0Ry%2FbtsNR56dtdX%2F0e8R129JxJQc7H2QjkFt3K%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;606&quot; height=&quot;269&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;General 항목은 다음과 같이 설정&lt;br /&gt;- Application Name은 임의로 지정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0V1bf/btsNQmIa3Ot/MaQiOUZ5tMWlSscgIFJ4kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0V1bf/btsNQmIa3Ot/MaQiOUZ5tMWlSscgIFJ4kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0V1bf/btsNQmIa3Ot/MaQiOUZ5tMWlSscgIFJ4kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0V1bf%2FbtsNQmIa3Ot%2FMaQiOUZ5tMWlSscgIFJ4kK%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;253&quot; height=&quot;333&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Source 지정을 위해 먼저 깃허브에 접속해 Creating a new file을 클릭함&lt;br /&gt;- 입력 후에는 반드시 /를 추가해야 함&lt;br /&gt;- 입력할 이름 역시 임의로 지정&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XK1Rf/btsNRMToV0x/iQ32zCyoHwhsNV2Zn8HWsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XK1Rf/btsNRMToV0x/iQ32zCyoHwhsNV2Zn8HWsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XK1Rf/btsNRMToV0x/iQ32zCyoHwhsNV2Zn8HWsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXK1Rf%2FbtsNRMToV0x%2FiQ32zCyoHwhsNV2Zn8HWsK%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;1415&quot; height=&quot;375&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이후 다시 argoCD로 돌아와서 Source 부분의 Path에 앞에서 지정한 Resources/App를 지정함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CFk8p/btsNQZsgbWl/ZhJNOJDKCI6n6nNz5wSe51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CFk8p/btsNQZsgbWl/ZhJNOJDKCI6n6nNz5wSe51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CFk8p/btsNQZsgbWl/ZhJNOJDKCI6n6nNz5wSe51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCFk8p%2FbtsNQZsgbWl%2FZhJNOJDKCI6n6nNz5wSe51%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;1050&quot; height=&quot;344&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Destination은 다음과 같이 설정한 후 상단의 Create를 클릭&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWTz2Q/btsNR6EbsNE/1s0sS7xBqwX2GKY5TUkwZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWTz2Q/btsNR6EbsNE/1s0sS7xBqwX2GKY5TUkwZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWTz2Q/btsNR6EbsNE/1s0sS7xBqwX2GKY5TUkwZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWTz2Q%2FbtsNR6EbsNE%2F1s0sS7xBqwX2GKY5TUkwZ0%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;248&quot; height=&quot;220&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다음과 같이 정상적으로 설정된 것을 확인할 수 있음&lt;br /&gt;- argocd-test를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGMdb/btsNQ1cJHWP/wnu9dVytsXe1KPLNTEBwAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGMdb/btsNQ1cJHWP/wnu9dVytsXe1KPLNTEBwAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGMdb/btsNQ1cJHWP/wnu9dVytsXe1KPLNTEBwAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGMdb%2FbtsNQ1cJHWP%2Fwnu9dVytsXe1KPLNTEBwAk%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;1432&quot; height=&quot;769&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Resources/App에 위치한 Readme.md 파일이 자동으로 동기화되어 다음 그림과 같이 현재 동기화 상태임을 확인&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgAtxA/btsNP6eD8ia/bJ7qSUejbhxeDzzy0B3X10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgAtxA/btsNP6eD8ia/bJ7qSUejbhxeDzzy0B3X10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgAtxA/btsNP6eD8ia/bJ7qSUejbhxeDzzy0B3X10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgAtxA%2FbtsNP6eD8ia%2FbJ7qSUejbhxeDzzy0B3X10%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;825&quot; height=&quot;329&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. 쿠버네티스 리소스 관리&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;01. 쿠버네티스 모니터링&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;쿠버네티스 모니터링&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스 환경을 안정적으로 관리하고 운영하기 위한 모니터링 방법을 살펴봄&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스를 모니터링할 때 사용하는 도구는 데이터독(Datadog)과 프로메테우스(Prometheus)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 어떤 것을 사용하느냐는 사용하려는 환경이나 사용자마다 다를 수 있음&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 44.7286%;&quot;&gt;데이터독&lt;/td&gt;
&lt;td style=&quot;width: 39.845%;&quot;&gt;프로메테우스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;구축 형태&lt;/td&gt;
&lt;td style=&quot;width: 44.7286%;&quot;&gt;SaaS (클라우드 형태로 구축)&lt;/td&gt;
&lt;td style=&quot;width: 39.845%;&quot;&gt;직접 구축&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;설치&lt;/td&gt;
&lt;td style=&quot;width: 44.7286%;&quot;&gt;간편함&lt;/td&gt;
&lt;td style=&quot;width: 39.845%;&quot;&gt;그라파나까지 연계할 경우 상대적으로 복잡함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;그래프&lt;/td&gt;
&lt;td style=&quot;width: 44.7286%;&quot;&gt;상대적으로 강력한 그래프 기능 제공&lt;/td&gt;
&lt;td style=&quot;width: 39.845%;&quot;&gt;그래프(시각화) 취약, 그라파나와 연계해야 데이터독 수준의 그래프 기능 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;쿠버네티스 이벤트&lt;/td&gt;
&lt;td style=&quot;width: 44.7286%;&quot;&gt;쿠버네티스 클러스터에서 발생하는 이벤트를 수집함&lt;/td&gt;
&lt;td style=&quot;width: 39.845%;&quot;&gt;쿠버네티스 클러스터에서 발생하는 이벤트를 수집하기 위해 또 다른 솔루션이 필요함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.4263%;&quot;&gt;알람&lt;/td&gt;
&lt;td style=&quot;width: 44.7286%;&quot;&gt;유형별 알람 설정에 제한적(프로메티우스의 알람 매니저가 제공하는 기능보다 제한적)&lt;/td&gt;
&lt;td style=&quot;width: 39.845%;&quot;&gt;알람 매니저(alertmanager)를 설치해야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;데이터독&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 실시간 데이터 통합 플랫폼을 지향&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 클라우드 모니터링 서비스로 시작해 시스템 모니터링, 로그 관리 등의 기능을 추가하면서 종합 모니터링 플랫폼으로 성장함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 쿠버네티스 환경뿐만 아니라 기업의 시스템에 대한 전반적인 모니터링을 제공함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 데이터독을 쿠버네티스에 사용한다면 파드와 컨테이너 같은 쿠버네티스 클러스터의 구성 요소와 워크로드, 네트워크 트래픽 등을 모니터링할 수 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 모니터링에 사용되는 메트릭 정보는 각 노드에 설치된 에이전트를 통해 수집됨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터독의 기능&lt;br /&gt;- 대시보드 : 임계치를 설정해 성능에 관한 지표를 수집하고 수집된 내용을 한눈에 파악할 수 있도록 대시보드에 시각적으로 보여줌&lt;br /&gt;- 시스템 : 데이터독에 등록된 노드를 포함해 기업에서 관리하는 시스템과 네트워크(트래픽 흐름)에 대한 전반적인 내용을 확인할 수 있음&lt;br /&gt;- 로그 수집 : 시스템 및 애플리케이션에서 발생하는 로그를 수집함&lt;/li&gt;
&lt;li&gt;모니터링에 필요한 에이전트&lt;br /&gt;- 클러스터 에이전트 : 쿠버네티스 API 서버와 데이터독 에이전트(모든 워커 노드에 배포) 간의 프록시 역할을 하는 에이전트&lt;br /&gt;- 데몬셋 에이전트 : 모든 워커 노드에 배포되는 데몬셋 에이전트&lt;/li&gt;
&lt;li&gt;데이터독 설치하기
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.datadoghq.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.datadoghq.com/&lt;/a&gt; 에 접속한 후 FREE TRIAL을 클릭함&lt;br /&gt;- 유료 서비스이지만 테스트 용도로 사용할 수 있는 트라이얼 버전을 제공하고 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blteNF/btsNQqDY6zL/357N3rD95YufkDVbPAYti1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blteNF/btsNQqDY6zL/357N3rD95YufkDVbPAYti1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blteNF/btsNQqDY6zL/357N3rD95YufkDVbPAYti1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblteNF%2FbtsNQqDY6zL%2F357N3rD95YufkDVbPAYti1%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;560&quot; height=&quot;165&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;필요한 정보를 입력한 후 Sign up을 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w3iM0/btsNRgADNfM/W8QbuImd7PLKiIqFubdjQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w3iM0/btsNRgADNfM/W8QbuImd7PLKiIqFubdjQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w3iM0/btsNRgADNfM/W8QbuImd7PLKiIqFubdjQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw3iM0%2FbtsNRgADNfM%2FW8QbuImd7PLKiIqFubdjQ0%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;484&quot; height=&quot;734&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;어떤 환경을 사용할지를 묻는 화면, Kubernetes를 선택하고 Next를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djc2ub/btsNQoTNTkW/OMmxMfbCQF6rqCdj3SP791/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djc2ub/btsNQoTNTkW/OMmxMfbCQF6rqCdj3SP791/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djc2ub/btsNQoTNTkW/OMmxMfbCQF6rqCdj3SP791/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdjc2ub%2FbtsNQoTNTkW%2FOMmxMfbCQF6rqCdj3SP791%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;560&quot; height=&quot;151&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;설치를 진행할 OS에 맞게 선택함&lt;br /&gt;- 오른쪽 화면에서 다음과 같이 'Install the Datadog Agent on Linux'에 나타난 명령어를 복사함&lt;br /&gt;- 복사한 명령어를 마스터노드와 워커 노드에서 실행함 &lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4Z8nR/btsNQGmmXaL/Zud5sEOQZ526A6JHMG3nJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4Z8nR/btsNQGmmXaL/Zud5sEOQZ526A6JHMG3nJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4Z8nR/btsNQGmmXaL/Zud5sEOQZ526A6JHMG3nJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4Z8nR%2FbtsNQGmmXaL%2FZud5sEOQZ526A6JHMG3nJK%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;560&quot; height=&quot;351&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;설치가 끝나면 데이터독 에이전트를 시작함&lt;br /&gt;
&lt;pre id=&quot;code_1746777315668&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;systemctl start datadog-agent&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다시 URL에 접속해 메인 페이지로 이동하면 노드들이 추가된 것을 확인할 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v1nyk/btsNSBw8G1f/zc1VbJeoiMhyET7kqdjCv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v1nyk/btsNSBw8G1f/zc1VbJeoiMhyET7kqdjCv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v1nyk/btsNSBw8G1f/zc1VbJeoiMhyET7kqdjCv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv1nyk%2FbtsNSBw8G1f%2Fzc1VbJeoiMhyET7kqdjCv1%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;560&quot; height=&quot;259&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;노드에 대한 모니터링 항목들이 수집되고, 수집된 내용을 대시보드에서 확인할 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxYCY/btsNSn6YQ7E/8Pxkoz51ikMRwH2KQseAn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxYCY/btsNSn6YQ7E/8Pxkoz51ikMRwH2KQseAn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxYCY/btsNSn6YQ7E/8Pxkoz51ikMRwH2KQseAn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkxYCY%2FbtsNSn6YQ7E%2F8Pxkoz51ikMRwH2KQseAn0%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;945&quot; height=&quot;311&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;프로메테우스&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 사운드클라우드(SoundCloud)에서 최초로 개발했고 현재는 CNCF(오픈소스)에 속한 모니터링 솔루션&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 기본적인 데이터 수집은 풀(가져오는 방식) 구조로 되어 있어서 프로메테우스 서버가 수집하려는 대상에서 데이터를 가져옴&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 수집된 메트릭 값을 저장하기 위한 볼륨이 필요하며, 관리자에게 알림을 발송해야 하는 상황에서는 알람 매니저(alert-manager)를 이용함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로메테우스 특징&lt;br /&gt;- 그라파나를 통한 시각화 지원&lt;br /&gt;- 많은 시스템을 모니터링할 수 있는 다양한 플러그인 지원함&lt;br /&gt;- 쿠버네티스의 모니터링 시스템으로 많이 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;프로메테우스와 관련해 네임스페이스를 생성하는 것&lt;br /&gt;- monitoring이라는 이름으로 네임스페이스를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747012284832&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl create ns monitoring&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLikzy/btsNTArMTG4/XHxXzz2JbTyFkbHyg6VZkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLikzy/btsNTArMTG4/XHxXzz2JbTyFkbHyg6VZkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLikzy/btsNTArMTG4/XHxXzz2JbTyFkbHyg6VZkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLikzy%2FbtsNTArMTG4%2FXHxXzz2JbTyFkbHyg6VZkK%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;460&quot; height=&quot;37&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;prometheus-cluster-role.yaml을 작성함&lt;br /&gt;- 쿠버네티스의 리소스는 API를 통해 접근할 수 있지만 API를 외부에서 접근하는 것은 보안에 의해 강력히 통제됨&lt;br /&gt;- 쿠버네티스 API에 접근할 수 있는 권한을 부여하기 위해 클러스터 역할을 설정하고 클러스터 역할 바인딩을 함&lt;br /&gt;
&lt;pre id=&quot;code_1747012292094&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: rbac.authorization.k8s.io/v1    
kind: ClusterRole
metadata:
  name: prometheus
  namespace: monitoring
rules:
- apiGroups: [&quot;&quot;]
  resources:    
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
- nonResourceURLs: [&quot;/metrics&quot;]
  verbs: [&quot;get&quot;]
---
apiVersion: rbac.authorization.k8s.io/v1    
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: default
  namespace: monitoring&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;kubectl apply 명령어로 클러스터 역할 바인딩을 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747012386423&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f prometheus-cluster-role.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnWUrX/btsNUtTbVLv/tkGIKSDJvBsv1R7dTs0YKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnWUrX/btsNUtTbVLv/tkGIKSDJvBsv1R7dTs0YKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnWUrX/btsNUtTbVLv/tkGIKSDJvBsv1R7dTs0YKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnWUrX%2FbtsNUtTbVLv%2FtkGIKSDJvBsv1R7dTs0YKk%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;460&quot; height=&quot;42&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;prometheus-config-map.yaml 파일 작성&lt;br /&gt;- 프로메테우스에서 수집할 지표를 정의해야 함&lt;br /&gt;- 환경 설정과 관련된 것으로 컨피그맵을 이용함&lt;br /&gt;- 어떤 지표를 어느 주기로 수집할 것인지, 알람은 어떨 때 받을지에 대한 환경 설정 내용&lt;br /&gt;
&lt;pre id=&quot;code_1747012474295&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-server-conf
  labels:
    name: prometheus-server-conf
  namespace: monitoring
data:
  prometheus.rules: |-    
    groups:
    - name: container memory alert
      rules:
      - alert: container memory usage rate is very high( &amp;gt; 55%)
        expr: sum(container_memory_working_set_bytes{pod!=&quot;&quot;, name=&quot;&quot;})/ sum (kube_node_status_allocatable_memory_bytes) * 100 &amp;gt; 55
        for: 1m
        labels:
          severity: fatal
        annotations:
          summary: High Memory Usage on
          identifier: &quot;&quot;
          description: &quot; Memory Usage: &quot;
    - name: container CPU alert
      rules:
      - alert: container CPU usage rate is very high( &amp;gt; 10%)
        expr: sum (rate (container_cpu_usage_seconds_total{pod!=&quot;&quot;}[1m])) / sum (machine_cpu_cores) * 100 &amp;gt; 10
        for: 1m
        labels:
          severity: fatal
        annotations:
          summary: High Cpu Usage
  prometheus.yml: |-    
    global:
      scrape_interval: 5s
      evaluation_interval: 5s
    rule_files:
      - /etc/prometheus/prometheus.rules
    alerting:
      alertmanagers:
      - scheme: http
        static_configs:
        - targets:
          - &quot;alertmanager.monitoring.svc:9093&quot;
    scrape_configs:
      - job_name: 'kubernetes-apiservers'
        kubernetes_sd_configs:
        - role: endpoints
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel_configs:
        - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: default;kubernetes;https
      - job_name: 'kubernetes-nodes'
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
        - role: node
        relabel_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - target_label: __address__
          replacement: kubernetes.default.svc:443
        - source_labels: [__meta_kubernetes_node_name]
          regex: (.+)
          target_label: __metrics_path__
          replacement: /api/v1/nodes/${1}/proxy/metrics
      - job_name: 'kubernetes-pods'
        kubernetes_sd_configs:
        - role: pod
        relabel_configs:
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
          target_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_pod_name]
          action: replace
          target_label: kubernetes_pod_name
      - job_name: 'kube-state-metrics'
        static_configs:
          - targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080']
      - job_name: 'kubernetes-cadvisor'
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
        - role: node
        relabel_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - target_label: __address__
          replacement: kubernetes.default.svc:443
        - source_labels: [__meta_kubernetes_node_name]
          regex: (.+)
          target_label: __metrics_path__
          replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
      - job_name: 'kubernetes-service-endpoints'
        kubernetes_sd_configs:
        - role: endpoints
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
          action: replace
          target_label: __scheme__
          regex: (https?)
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
          action: replace
          target_label: __address__
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
        - action: labelmap
          regex: __meta_kubernetes_service_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_service_name]
          action: replace
          target_label: kubernetes_name&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;생성한 컨피그맵 파일을 kubectl apply 명령으로 실행함&lt;br /&gt;
&lt;pre id=&quot;code_1747012584073&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f prometheus-config-map.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGz6eO/btsNTAL5XTV/gLnLkk6JoyEbv8cEEmMjJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGz6eO/btsNTAL5XTV/gLnLkk6JoyEbv8cEEmMjJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGz6eO/btsNTAL5XTV/gLnLkk6JoyEbv8cEEmMjJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGz6eO%2FbtsNTAL5XTV%2FgLnLkk6JoyEbv8cEEmMjJk%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;460&quot; height=&quot;29&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;prometheus-deployment.yaml 파일을 작성함&lt;br /&gt;- 프로메테우스를 통해 수집한 데이터를 저장할 볼륨이 필요함&lt;br /&gt;- 따라서 파드에는 메트릭 정보가 저장될 저장소를 설정해야 함&lt;br /&gt;- 해당 파일에 디플로이먼트를 생성하고 해당 파드에 저장소를 연결하는 내용을 입력함&lt;br /&gt;
&lt;pre id=&quot;code_1747012630235&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus-server
  template:
    metadata:
      labels:
        app: prometheus-server
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus:latest   
          args:
            - &quot;--config.file=/etc/prometheus/prometheus.yml&quot;
            - &quot;--storage.tsdb.path=/prometheus/&quot;
          ports:
            - containerPort: 9090
          volumeMounts:    
            - name: prometheus-config-volume
              mountPath: /etc/prometheus/
            - name: prometheus-storage-volume
              mountPath: /prometheus/
      volumes:
        - name: prometheus-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-server-conf
        - name: prometheus-storage-volume
          emptyDir: {}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;kubectl apply를 통한 디플로이먼트(파드)를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747012695896&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f prometheus-deployment.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wi2pp/btsNRJX3nRx/8eF2krVXdIKHLObgyPfWTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wi2pp/btsNRJX3nRx/8eF2krVXdIKHLObgyPfWTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wi2pp/btsNRJX3nRx/8eF2krVXdIKHLObgyPfWTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwi2pp%2FbtsNRJX3nRx%2F8eF2krVXdIKHLObgyPfWTk%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;460&quot; height=&quot;30&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;prometheus-node-exporter.yaml 파일을 생성하여 노드 내보내기에 대해 정의함&lt;br /&gt;- 노드 내보내기(node exporter) : 쿠버네티스 노드에 대한 정보를 수집하는 역할을 함&lt;br /&gt;- 각 노드에 하나씩 파드 형태로 존재해야 하므로 데몬셋으로 만들어야 함&lt;br /&gt;- 데몬셋으로 '노드 내보내기'를 생성하고, 이것을 외부에 노출시키기 위한 서비스를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747012910685&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: DaemonSet    
metadata:
  name: node-exporter
  namespace: monitoring
  labels:
    k8s-app: node-exporter
spec:
  selector:
    matchLabels:
      k8s-app: node-exporter
  template:
    metadata:
      labels:
        k8s-app: node-exporter
    spec:
      containers:
      - image: prom/node-exporter
        name: node-exporter
        ports:
        - containerPort: 9100
          protocol: TCP
          name: http
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: node-exporter
  name: node-exporter
  namespace: kube-system
spec:
  ports:
  - name: http
    port: 9100
    nodePort: 31672
    protocol: TCP
  type: NodePort
  selector:
    k8s-app: node-exporter&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;kubectl apply 명령어로 데몬셋과 서비스를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747013009897&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f prometheus-node-exporter.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7R7sI/btsNTy8zdQZ/KLLd7WxPwifyZa6GulZakK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7R7sI/btsNTy8zdQZ/KLLd7WxPwifyZa6GulZakK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7R7sI/btsNTy8zdQZ/KLLd7WxPwifyZa6GulZakK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7R7sI%2FbtsNTy8zdQZ%2FKLLd7WxPwifyZa6GulZakK%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;460&quot; height=&quot;42&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;prometheus-svc.yaml 파일을 작성해 외부에서 프로메테우스 서비스에 접속할 수 있도록 노드포트를 사용함&lt;br /&gt;- 외부에서 프로메테우스 파드에 접근하기 위한 노드포트를 정의함&lt;br /&gt;- 노드포트는 30001을 사용하도록 지정함&lt;br /&gt;
&lt;pre id=&quot;code_1747013082116&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
  name: prometheus-service
  namespace: monitoring
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/port:   '9090'
spec:
  selector:
    app: prometheus-server
  type: NodePort    
  ports:
    - port: 8080
      targetPort: 9090
      nodePort: 30001&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;프로메테우스 파드에 접속하기 위한 서비스를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747013290899&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f prometheus-svc.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg55PE/btsNRNTEPLO/8FjTXcEz54CSrNkzmN1Tk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg55PE/btsNRNTEPLO/8FjTXcEz54CSrNkzmN1Tk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg55PE/btsNRNTEPLO/8FjTXcEz54CSrNkzmN1Tk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg55PE%2FbtsNRNTEPLO%2F8FjTXcEz54CSrNkzmN1Tk0%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;640&quot; height=&quot;47&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;외부에서 접속할 때에는 노드IP:300001을 이용해 접속함&lt;br /&gt;- 현재 마스터 노드 1대, 워커 노드 1대로 구성되어 있음.&lt;br /&gt;- 따라서 워커 노드 1대에 데몬셋 파드(node-exporter)가 배포되었으며, 프로메테우스 용도의 파드가 1개 실행 중&lt;br /&gt;
&lt;pre id=&quot;code_1747015084930&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get pod -n monitoring&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k1Q0e/btsNSeQMxzA/xO2rpiG5zB9KKDBrlkXxZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k1Q0e/btsNSeQMxzA/xO2rpiG5zB9KKDBrlkXxZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k1Q0e/btsNSeQMxzA/xO2rpiG5zB9KKDBrlkXxZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk1Q0e%2FbtsNSeQMxzA%2FxO2rpiG5zB9KKDBrlkXxZ0%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;640&quot; height=&quot;67&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;마스터 노드IP :30001로 접속함&lt;br /&gt;- 접속한 화면이 아래와 같으면 프로메테우스가 정상적으로 설치된 것&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4Uoaw/btsNRSAEXti/xc4ZLTLpW6IGRbbzyFRpp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4Uoaw/btsNRSAEXti/xc4ZLTLpW6IGRbbzyFRpp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4Uoaw/btsNRSAEXti/xc4ZLTLpW6IGRbbzyFRpp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4Uoaw%2FbtsNRSAEXti%2Fxc4ZLTLpW6IGRbbzyFRpp0%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;640&quot; height=&quot;262&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 프로메테우스는 단독으로 운영하는 것보다는 그라파나와 함께 연동해야 완벽한 모니터링을 구축할 수 있어서 보통 함께 사용함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;그라파나&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 수집된 메트릭을 이용해 조회, 시각화, 경고 등의 기능을 지원함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 프로메테우스, 엘라스틱서치(Elasticsearch), OpenTSDB 및 인플럭스 DB(InfluxDB) 같은 시계열 데이터베이스를 지원함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 구글 스택드라이버(Google Stackdriver), 아마존 클라우드와치(Amazon Cloudwatch), 마이크로소프트 애저 같은 퍼블릭 클라우드는 물론 MySQL, Postgres 같은 SQL 데이터베이스도 지원함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 프로메테우스에서 수집한 메트릭을 이용해 해당 데이터를 대시보드에서 시각적으로 보여주는 툴&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그라파나 설치하기&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;grafana.yaml 파일을 먼저 작성함&lt;br /&gt;- 데이터 시각화를 표현할 대시보드 생성&lt;br /&gt;- yaml 파일에서는 그라파나 이미지를 가져와서 디프로링먼트를 생성하고 이를 외부로 노출하기 위한 서비스도 함께 생성&lt;br /&gt;
&lt;pre id=&quot;code_1747015701768&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      name: grafana
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:latest    
        ports:
        - name: grafana
          containerPort: 3000
        env:    
        - name: GF_SERVER_HTTP_PORT
          value: &quot;3000&quot;
        - name: GF_AUTH_BASIC_ENABLED
          value: &quot;false&quot;
        - name: GF_AUTH_ANONYMOUS_ENABLED   
          value: &quot;true&quot;
        - name: GF_AUTH_ANONYMOUS_ORG_ROLE  
          value: Admin
        - name: GF_SERVER_ROOT_URL
          value: /
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/port:   '3000'
spec:
  selector:
    app: grafana
  type: NodePort
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 30004&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;디플로이먼트(파드)와 서비스를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747016634742&quot; class=&quot;coq&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f grafana.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yoau9/btsNSwwUrwh/KNwY6Ov5UtdZVSbNEf52t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yoau9/btsNSwwUrwh/KNwY6Ov5UtdZVSbNEf52t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yoau9/btsNSwwUrwh/KNwY6Ov5UtdZVSbNEf52t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyoau9%2FbtsNSwwUrwh%2FKNwY6Ov5UtdZVSbNEf52t0%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;460&quot; height=&quot;58&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로메테우스와 연동하기&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;브라우저에서 IP:30004로 접속하면 그라파나 화면이 보임&lt;br /&gt;- 화면에서 add your first data source를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1657&quot; data-origin-height=&quot;1128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UcjOF/btsNSK2Ib79/dxEIUlXGTVIvKKCscNLd8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UcjOF/btsNSK2Ib79/dxEIUlXGTVIvKKCscNLd8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UcjOF/btsNSK2Ib79/dxEIUlXGTVIvKKCscNLd8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUcjOF%2FbtsNSK2Ib79%2FdxEIUlXGTVIvKKCscNLd8k%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;1657&quot; height=&quot;1128&quot; data-origin-width=&quot;1657&quot; data-origin-height=&quot;1128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Prometheus를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1646&quot; data-origin-height=&quot;677&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bou9Iy/btsNR41WUHM/Znl8DaG3jNNkHM951kidFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bou9Iy/btsNR41WUHM/Znl8DaG3jNNkHM951kidFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bou9Iy/btsNR41WUHM/Znl8DaG3jNNkHM951kidFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbou9Iy%2FbtsNR41WUHM%2FZnl8DaG3jNNkHM951kidFK%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;1646&quot; height=&quot;677&quot; data-origin-width=&quot;1646&quot; data-origin-height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;HTTP URL에 Prometheus-service의 IP를 입력하고 포트는 8080을 사용&lt;br /&gt;- Prometheus-service의 IP는 kubectl get svc -n monitoring을 통해 확인함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mF6zD/btsNRRu0haP/5rgqsxbzX9LSShI0GU2n6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mF6zD/btsNRRu0haP/5rgqsxbzX9LSShI0GU2n6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mF6zD/btsNRRu0haP/5rgqsxbzX9LSShI0GU2n6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmF6zD%2FbtsNRRu0haP%2F5rgqsxbzX9LSShI0GU2n6K%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;1642&quot; height=&quot;706&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;마지막으로 맨아래의 Save &amp;amp; test를 클릭함&lt;br /&gt;- 다음과 같은 화면을 볼 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxpiMc/btsNScMeOcK/zq5P3TSe6nSMyuqx0YdOvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxpiMc/btsNScMeOcK/zq5P3TSe6nSMyuqx0YdOvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxpiMc/btsNScMeOcK/zq5P3TSe6nSMyuqx0YdOvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxpiMc%2FbtsNScMeOcK%2Fzq5P3TSe6nSMyuqx0YdOvk%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;1300&quot; height=&quot;104&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대시보드 생성하기&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://grafana.com/grafana/dashboards/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://grafana.com/grafana/dashboards/&lt;/a&gt;로 이동함&lt;br /&gt;- 다양한 유형의 모니터링 템플릿들이 있음&lt;br /&gt;- 검색 부분에 Kubernetes Cluster (Prometheus)를 입력하고 결과중 첫 번째 검색 결과를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uwcR5/btsNUccVq0h/ESywEWyQV792IQGHUB0Db1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uwcR5/btsNUccVq0h/ESywEWyQV792IQGHUB0Db1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uwcR5/btsNUccVq0h/ESywEWyQV792IQGHUB0Db1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuwcR5%2FbtsNUccVq0h%2FESywEWyQV792IQGHUB0Db1%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;1191&quot; height=&quot;717&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;717&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이동한 화면에서 Copy ID to Clipboard를 클릭해 ID를 복사해 둠&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;1126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlcVE/btsNTz0J3Na/JrkK3YycETNa453PeGts2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlcVE/btsNTz0J3Na/JrkK3YycETNa453PeGts2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlcVE/btsNTz0J3Na/JrkK3YycETNa453PeGts2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlcVE%2FbtsNTz0J3Na%2FJrkK3YycETNa453PeGts2K%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;1235&quot; height=&quot;1126&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;1126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;그라파나 화면으로 돌아와서 왼쪽 메뉴 중 대시보드 아이콘 &amp;rarr; New &amp;rarr; Import 버튼을&amp;nbsp;클릭함&lt;br /&gt;- 그라파나 웹페이지에서 제공하는 대시보드를 가져올 수 있음&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1659&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmxvTP/btsNSvSkiGB/gSJe7WFTgamKsHyjU9KDyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmxvTP/btsNSvSkiGB/gSJe7WFTgamKsHyjU9KDyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmxvTP/btsNSvSkiGB/gSJe7WFTgamKsHyjU9KDyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmxvTP%2FbtsNSvSkiGB%2FgSJe7WFTgamKsHyjU9KDyk%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;1659&quot; height=&quot;597&quot; data-origin-width=&quot;1659&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;앞에서 복사해 둔 ID를 붙여넣기하고 Load를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WPOfG/btsNS8CiKpw/vNfjoSZBNA91BcA1Krw8Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WPOfG/btsNS8CiKpw/vNfjoSZBNA91BcA1Krw8Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WPOfG/btsNS8CiKpw/vNfjoSZBNA91BcA1Krw8Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWPOfG%2FbtsNS8CiKpw%2FvNfjoSZBNA91BcA1Krw8Ik%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;627&quot; height=&quot;703&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Prometheus에 Prometheus를 선택한 후 Import를 클릭함&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;701&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3ZqIr/btsNTm1zXnF/jsH3NcoPu2rN7zcNiC6MJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3ZqIr/btsNTm1zXnF/jsH3NcoPu2rN7zcNiC6MJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3ZqIr/btsNTm1zXnF/jsH3NcoPu2rN7zcNiC6MJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3ZqIr%2FbtsNTm1zXnF%2FjsH3NcoPu2rN7zcNiC6MJk%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;640&quot; height=&quot;624&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;701&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;다음과 같이 모니터링 대시보드가 구성됨&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oL0vm/btsNUsmth3M/vBiEMvUsKpSY5LNhe6HvY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oL0vm/btsNUsmth3M/vBiEMvUsKpSY5LNhe6HvY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oL0vm/btsNUsmth3M/vBiEMvUsKpSY5LNhe6HvY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoL0vm%2FbtsNUsmth3M%2FvBiEMvUsKpSY5LNhe6HvY1%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;640&quot; height=&quot;248&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;02. 컨테이너 리소스 관리하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 하나의 노드에는 수십 개에서 수백 개의 파드가 떠 있을 수 있음&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 만약 하나의 파드에서 과도하게 자원(CPU, 메모리 등)을 사용한다면 다른 파드에 영향을 줄 수 있으므로 노드와 파드의 사용량을 지속적으로 모니터링 해야함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 파드 자원의 사용률이 낮다면 회수하고, 사용률이 높다면 추가적인 자원을 할당하거나 파드를 늘려야함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 가장 효율적으로 자원을 관리할 수 있는 LimitRange와 오토스케일링 방법에 대해 배움&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;LimitRange 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 파드(컨테이너)에서 사용할 수 있는 리소스(자원)의 사용률을 제한하는 것을 의미함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- CPU가 어느 한계(ex: 80%)에 다다르면 더 이상 사용률이 증가하지 못하도록 설정함&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;set-limit-range.yaml라는 파일을 작성함&lt;br /&gt;- 생성한 파일에 CPU에 대한 최소값과 최대값을 지정하는 내용을 입력함&lt;br /&gt;
&lt;pre id=&quot;code_1747025161098&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: LimitRange
metadata:
  name: set-limit-range
spec:
  limits:
  - max:
      cpu: &quot;800m&quot;
    min:
      cpu: &quot;200m&quot;
    type: Container&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;limitrange를 생성하고, 상태를 확인함&lt;br /&gt;- CPU의 min과 max가 각각 0.2CPU, 0.8CPU로 설정되어 있음&lt;br /&gt;- 1밀리코어(milicore)는 CPU의 1/1000을 의미하므로 800밀리코어는 0.8 코어(core)를 의미함&lt;br /&gt;
&lt;pre id=&quot;code_1747025201429&quot; class=&quot;maxima&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f set-limit-range.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;31&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp2vFa/btsNS6lgHuY/nfcEEARqQ6VK1B21KybhDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp2vFa/btsNS6lgHuY/nfcEEARqQ6VK1B21KybhDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp2vFa/btsNS6lgHuY/nfcEEARqQ6VK1B21KybhDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp2vFa%2FbtsNS6lgHuY%2FnfcEEARqQ6VK1B21KybhDK%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;420&quot; height=&quot;31&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;31&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1747025251812&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get limitrange

kubectl describe limitrange set-limit-range&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mbEWx/btsNTDpl4SL/EQhvcq2XkHfBoY0DGQktOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mbEWx/btsNTDpl4SL/EQhvcq2XkHfBoY0DGQktOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mbEWx/btsNTDpl4SL/EQhvcq2XkHfBoY0DGQktOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmbEWx%2FbtsNTDpl4SL%2FEQhvcq2XkHfBoY0DGQktOK%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;718&quot; height=&quot;159&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;pod-with-cpu-range.yaml 파일을 작성함&lt;br /&gt;- CPU 요청량(노드에 요청하는 CPU 사이즈)과 최대 사이즈를 지정하기 위함&lt;br /&gt;- CPU 요청량은 500밀리코어, 최대 사이즈는 800밀리코어를 사용하도록 설정함&lt;br /&gt;
&lt;pre id=&quot;code_1747025749073&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-range
spec:
  containers:
  - name: pod-with-cpu-range
    image: nginx
    resources:
      limits:
        cpu: &quot;800m&quot;
      requests:
        cpu: &quot;500m&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;CPU 사용이 제한된 파드를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747025833873&quot; class=&quot;pgsql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl create -f pod-with-cpu-range.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pBp8p/btsNTGF43hD/kFZyKkWGfqtJUWJ56WBgX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pBp8p/btsNTGF43hD/kFZyKkWGfqtJUWJ56WBgX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pBp8p/btsNTGF43hD/kFZyKkWGfqtJUWJ56WBgX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpBp8p%2FbtsNTGF43hD%2FkFZyKkWGfqtJUWJ56WBgX0%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;450&quot; height=&quot;29&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;파드의 상태를 확인함&lt;br /&gt;- CPU 요청량은 500 밀리코어, 최대 사이즈는 800밀리코어로 설정된 것을 확인할 수 있음&lt;br /&gt;- 하지만 이렇게 자원 사용량에 제한을 두면 서비스 속도에 문제가 발생할 수 있음&lt;br /&gt;- 서비스에 어떠한 영향도 주지 않으면서 빠른 속도를 보장하기 위해 사용하는 것이 오토스케일링&lt;br /&gt;
&lt;pre id=&quot;code_1747034884051&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get pods

kubectl describe pod pod-with-cpu-range&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;555&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdD0dY/btsNTyVVUNC/ao2Aa8yVhtCHkGR4Q7qLx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdD0dY/btsNTyVVUNC/ao2Aa8yVhtCHkGR4Q7qLx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdD0dY/btsNTyVVUNC/ao2Aa8yVhtCHkGR4Q7qLx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdD0dY%2FbtsNTyVVUNC%2Fao2Aa8yVhtCHkGR4Q7qLx0%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;927&quot; height=&quot;555&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;555&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;requests : 적어도 지정된 만큼의 자원은 컨테이너에서 사용할 수 있도록 보장함&lt;/li&gt;
&lt;li&gt;limits : 유휴 자원이 있다면 최대 지정된 만큼의 자원까지 컨테이너가 사용할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;오토스케일링&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; 할당된 파드의 자원 사용률이 너무 낮거나 높을 때 리소스의 크기를 조정하는 것을 의미함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 시스템 스스로 자원 사용률을 감지해 자동으로 파드를 늘려주거나 줄여줄 필요가 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-&amp;nbsp; 최대 몇 대까지 늘려줄 수 있는지 지정할 수 있는데, 이것을 최대 사이즈라고 함&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 최소 사이즈와 최대 사이즈를 지정해 늘리고 줄이는 파드의 개수를 조정할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오토스케일링의 동작 방식
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;메트릭스 서버에 각 파드에서 사용 중인 자원(ex: CPU, 메모리)이 어느 정도인지 질의함&lt;/li&gt;
&lt;li&gt;반환값에 따라 몇 개의 파드를 늘려야 하는지 수평적 파드 오토스케일링(horizontal pod autoscaler)에서 계산함&lt;/li&gt;
&lt;li&gt;계산된 파드의 개수만큼 애플리케이션 파드를 늘림&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;메트릭 서버는 자동으로 설치되지 않아서 수동으로 설치함&lt;br /&gt;
&lt;pre id=&quot;code_1747029490640&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgx0R1/btsNUNxDuAx/eImkgIgCykDxMBqVGtuLMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgx0R1/btsNUNxDuAx/eImkgIgCykDxMBqVGtuLMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgx0R1/btsNUNxDuAx/eImkgIgCykDxMBqVGtuLMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgx0R1%2FbtsNUNxDuAx%2FeImkgIgCykDxMBqVGtuLMK%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;977&quot; height=&quot;160&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;설치가 완료되었다면 메트릭 디플로이먼트 설정을 변경함&lt;br /&gt;- 변경하지 않으면 메트릭 서버가 작동하지 않음&lt;br /&gt;
&lt;pre id=&quot;code_1747029613021&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl edit deployments.apps -n kube-system metrics-server&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwFGqo/btsNUzsVOeH/a2VATUfIWlF9L4LcO2EsM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwFGqo/btsNUzsVOeH/a2VATUfIWlF9L4LcO2EsM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwFGqo/btsNUzsVOeH/a2VATUfIWlF9L4LcO2EsM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwFGqo%2FbtsNUzsVOeH%2Fa2VATUfIWlF9L4LcO2EsM1%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;460&quot; height=&quot;124&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;API 서버(kube-apiserver)의 설정을 변경함&lt;br /&gt;- 이 설정도 변경하지 않으면 메트릭 서버가 작동하지 않음&lt;br /&gt;
&lt;pre id=&quot;code_1747029702056&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vi /etc/kubernetes/manifests/kube-apiserver.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct64Ym/btsNUebvPDD/UC33exuX5tCaMLcMvLxtA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct64Ym/btsNUebvPDD/UC33exuX5tCaMLcMvLxtA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct64Ym/btsNUebvPDD/UC33exuX5tCaMLcMvLxtA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct64Ym%2FbtsNUebvPDD%2FUC33exuX5tCaMLcMvLxtA0%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;460&quot; height=&quot;188&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;php-apache.yaml라는 파일을 작성함&lt;br /&gt;- 오토스케일링 테스트를 위한 디플로이먼트와 서비스 생성을 위함&lt;br /&gt;- php-apache라는 이름의 디플로이먼트를 생성할 때 사용할 수 있는 CPU 범위(최대 500m)를 지정&lt;br /&gt;
&lt;pre id=&quot;code_1747029813595&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;kubectl apply 명령어로 디플로이먼트와 서비스를 생성함&lt;br /&gt;
&lt;pre id=&quot;code_1747029852081&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl apply -f php-apache.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;377&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CToJA/btsNSOkxtZc/BKo2TOOK7zEuasHYFfe0Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CToJA/btsNSOkxtZc/BKo2TOOK7zEuasHYFfe0Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CToJA/btsNSOkxtZc/BKo2TOOK7zEuasHYFfe0Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCToJA%2FbtsNSOkxtZc%2FBKo2TOOK7zEuasHYFfe0Hk%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;460&quot; height=&quot;56&quot; data-origin-width=&quot;377&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;오토스케일링을 설정함&lt;br /&gt;- 파드의 개수를 늘리거나 줄이도록 설정함&lt;br /&gt;- CPU 사용률이 50%를 넘긴다면 파드의 개수를 최대 10개까지 늘릴 수 있음&lt;br /&gt;- CPU 사용률이 50% 이하라면 파드의 개수를 줄일 수 있지만 최소 1개는 유지하도록 설정함&lt;br /&gt;
&lt;pre id=&quot;code_1747030054935&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blHXqC/btsNUSeFQii/AJwKMWnjzVPMOTkvKBY4Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blHXqC/btsNUSeFQii/AJwKMWnjzVPMOTkvKBY4Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blHXqC/btsNUSeFQii/AJwKMWnjzVPMOTkvKBY4Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblHXqC%2FbtsNUSeFQii%2FAJwKMWnjzVPMOTkvKBY4Dk%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;705&quot; height=&quot;30&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;어떤 변화도 주지 않았을 때의 CPU 사용률은 0%임&lt;br /&gt;- 현재의 사용률이 &amp;lt;unknown&amp;gt;으로 표시된다면 2~3분 후에 다시 실행하면 됨&lt;br /&gt;
&lt;pre id=&quot;code_1747030269579&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get hpa&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VCf8S/btsNUN5vGZU/ZCGFbZu0fr472HkjldaBE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VCf8S/btsNUN5vGZU/ZCGFbZu0fr472HkjldaBE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VCf8S/btsNUN5vGZU/ZCGFbZu0fr472HkjldaBE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVCf8S%2FbtsNUN5vGZU%2FZCGFbZu0fr472HkjldaBE1%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;654&quot; height=&quot;47&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;각 파드에 대한 자원 사용률과 현재 몇 개의 파드가 실행 중인지도 확인함&lt;br /&gt;- 현재 한 개의 파드만 실행 중임&lt;br /&gt;
&lt;pre id=&quot;code_1747030385101&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl top pods

kubectl get deployment php-apache&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3dLfD/btsNTHE5dQK/xhkbXwECIffb0VsKlkFKT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3dLfD/btsNTHE5dQK/xhkbXwECIffb0VsKlkFKT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3dLfD/btsNTHE5dQK/xhkbXwECIffb0VsKlkFKT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3dLfD%2FbtsNTHE5dQK%2FxhkbXwECIffb0VsKlkFKT1%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;449&quot; height=&quot;127&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;실제로 부하에 따라 파드의 개수가 변하는지 확인하기 위해 강제로 부하를 높임&lt;br /&gt;- 3~5분 정도 후에 실행하면 결과를 눈으로 확인할 수 있음&lt;br /&gt;- 이후 ctrl + c를 눌러 빠져나옴&lt;br /&gt;
&lt;pre id=&quot;code_1747030584560&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c &quot;while sleep 0.01; do wget -q -O- http://php-apache; done&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zsa3s/btsNS7xu1Az/CV4X3DQUCBcSJnLh0mVR6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zsa3s/btsNS7xu1Az/CV4X3DQUCBcSJnLh0mVR6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zsa3s/btsNS7xu1Az/CV4X3DQUCBcSJnLh0mVR6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzsa3s%2FbtsNS7xu1Az%2FCV4X3DQUCBcSJnLh0mVR6k%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;1197&quot; height=&quot;157&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;실제로 CPU에 변화가 있는지 확인하고 파드의 개수를 확인함&lt;br /&gt;- CPU 부하는 153%까지 증가함&lt;br /&gt;- 파드는 7개로 증가함&lt;br /&gt;
&lt;pre id=&quot;code_1747030759235&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl get hpa

kubectl get deployment php-apache&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKaggt/btsNUTrcUhc/qWdAUYM0YD7kWHzP2XLp9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKaggt/btsNUTrcUhc/qWdAUYM0YD7kWHzP2XLp9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKaggt/btsNUTrcUhc/qWdAUYM0YD7kWHzP2XLp9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKaggt%2FbtsNUTrcUhc%2FqWdAUYM0YD7kWHzP2XLp9k%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;662&quot; height=&quot;106&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 공부/쿠버네티스</category>
      <category>Kubernetes</category>
      <category>Personal_Study</category>
      <category>study</category>
      <author>KimNang</author>
      <guid isPermaLink="true">https://kne-coding.tistory.com/411</guid>
      <comments>https://kne-coding.tistory.com/411#entry411comment</comments>
      <pubDate>Wed, 7 May 2025 17:16:21 +0900</pubDate>
    </item>
  </channel>
</rss>