<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Myo-Kyeong Tech Blog</title>
    <link>https://data04190.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 15 Aug 2026 10:43:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>myo-kyeong</managingEditor>
    <item>
      <title>[MLOps] MLOps 실험관리 : MLflow 설치 및 실행</title>
      <link>https://data04190.tistory.com/143</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNh60f/btsPUoRpm4A/Q3lNM6inM5YzjkliEFEa9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNh60f/btsPUoRpm4A/Q3lNM6inM5YzjkliEFEa9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNh60f/btsPUoRpm4A/Q3lNM6inM5YzjkliEFEa9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNh60f%2FbtsPUoRpm4A%2FQ3lNM6inM5YzjkliEFEa9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;194&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;실험과 실험 관리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;실험(Experiment)&lt;/b&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;예 : 특정 데이터셋으로 모델을 학습시킨 뒤 Accuracy를 확인하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실험 관리 (Experiment Management)&lt;/b&gt; :
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 실험의 결과와 설정을 기록&amp;middot;추적&amp;middot;비교&amp;middot;재현할 수 있도록 체계적으로 관리하는 것&lt;/li&gt;
&lt;li&gt;왜 필요할까?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;어제 돌린 코드가 제대로 학습 끝났나?&quot;&lt;/li&gt;
&lt;li&gt;&quot;가장 성능이 좋았던 모델은 어떤 파라미터를 썼더라?&quot;&lt;br /&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; 이런 질문에 바로 답할 수 있도록 만드는 게 목적&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관리해야 할 정보&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터(Data)&lt;/b&gt; : 어떤 데이터셋을 사용했는가 (예: data.csv)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드 (Code)&lt;/b&gt; : 어떤 알고리즘/프레임워크를 사용했는가 (예: scikit-learn)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파라미터(Parameters)&lt;/b&gt; : 모델 하이퍼파라미터 값들 (예 : n_estimators, max_depth)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과(Metrics)&lt;/b&gt; : 실험 성능 지표 (예: Accuracy, Loss, F1-score 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모든 실험 정보를 표(테이블) 형태로 정리하면, 한눈에 비교 가능&lt;/li&gt;
&lt;li&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;1280&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1f1sk/btsPUEl1FoZ/OpN9hYl875UveDrJqXvxZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1f1sk/btsPUEl1FoZ/OpN9hYl875UveDrJqXvxZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1f1sk/btsPUEl1FoZ/OpN9hYl875UveDrJqXvxZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1f1sk%2FbtsPUEl1FoZ%2FOpN9hYl875UveDrJqXvxZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;306&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;=&amp;gt; 실험 관리 = 데이터를 어떻게 학습했는지(데이터&amp;middot;코드&amp;middot;파라미터) + 그 결과가 어땠는지(메트릭)를 자동으로 기록&amp;middot;비교&amp;middot;재현 하는 과정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;MLflow 설치 및 실행 방법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 로컬(Host)에서 mlflow 설치&amp;middot;실행 하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[mlflow 설치]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install mlflow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[mlflow 서버 실행]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;mlflow server --host 0.0.0.0 --port 5000&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;--host 0.0.0.0&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;: 외부에서도 접속 가능하도록 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;--port 5000&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;: 기본 포트 (브라우저에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;http://localhost:5000 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;으로 접속 -&amp;gt; MLflow UI 확인 가능)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Docker로 실행&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[Dockerfile 작성]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755357450814&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FROM amd64/python:3.9-slim

RUN pip install --upgrade pip &amp;amp;&amp;amp; \
    pip install mlflow

CMD [&quot;mlflow&quot;, &quot;server&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[이미지 빌드 &amp;amp; 실행]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755357475738&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이미지 빌드
docker build -t mlflow-server .

# 컨테이너 실행 (로컬 5001 포트 &amp;harr; 컨테이너 5000 포트 연결)
docker run -p 5001:5000 mlflow-server&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;&lt;span style=&quot;color: #666666;&quot;&gt;5000 : 컨테이너 내부 포트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;5001 : 로컬(호스트)에서 접근할 포트&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. Docker Compose 실행 (여러 서비스 관리 시)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[docker-compose.yaml 작성]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755357536260&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3&quot;
services:
  mlflow-server:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - &quot;5001:5000&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[실행 명령어]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755357570358&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d --build   # 실행 (백그라운드)
docker compose logs            # 로그 확인
docker compose down            # 종료&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;</description>
      <category>MLOps</category>
      <category>docker</category>
      <category>Docker Compose</category>
      <category>install</category>
      <category>mlflow</category>
      <category>MLOps</category>
      <category>로컬 설치</category>
      <category>설치</category>
      <category>실험관리</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/143</guid>
      <comments>https://data04190.tistory.com/143#entry143comment</comments>
      <pubDate>Sat, 16 Aug 2025 23:51:32 +0900</pubDate>
    </item>
    <item>
      <title>[MLOps] MLOps에서 모델 재현성 보장 :  모델 환경 통제하기 (RandomSeed, Library Version 고정)</title>
      <link>https://data04190.tistory.com/142</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qKpGi/btsPhQ176DW/WJrJKLvZkAb5WKAE7CBfk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qKpGi/btsPhQ176DW/WJrJKLvZkAb5WKAE7CBfk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKpGi/btsPhQ176DW/WJrJKLvZkAb5WKAE7CBfk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqKpGi%2FbtsPhQ176DW%2FWJrJKLvZkAb5WKAE7CBfk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;194&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;같은 데이터를 넣었는데도 매번 다른 모델이 나온다?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; MLOps에서 가장 골치 아픈 문제 중 하나는 바로 모델 재현성이다.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;모델 재현성이 왜 중요한가?&lt;/b&gt;&lt;/span&gt;&lt;/h3&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 데이터를 사용하고, 같은 코드를 실행했을 때 언제나 같은 모델 결과가 만들어지는 것을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하지만 같은 데이터를 쓰더라도 &lt;b&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;실행 환경(Environment) 이 조금이라도 달라지면 모델 결과가 달라진다.&lt;/span&gt;&amp;nbsp;&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[모델을 만드는 소프트웨어 4가지 요소]&lt;/b&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;데이터 (Data)&lt;/li&gt;
&lt;li&gt;패키지 (Library / Package)&lt;/li&gt;
&lt;li&gt;코드 (Code)&lt;/li&gt;
&lt;li&gt;파라미터 (Parameter)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 네 가지가 모두 동일해야 같은 모델을 재현할 수 있다. &lt;br /&gt;그중에서도 특히 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;환경(Environment)&lt;/b&gt;&lt;/span&gt; 을 철저히 통제하지 않으면&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;=&amp;gt; 같은 데이터를 넣어도 서로 다른 모델이 만들어질 수 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;모델 환경 통제 ① - 랜덤 시드 고정&lt;/span&gt;&lt;/b&gt;&lt;/h3&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;데이터 train/test 로 나눌 때&lt;/li&gt;
&lt;li&gt;모델 초기 가중치를 설정할 떄&lt;/li&gt;
&lt;li&gt;샘플링 과정 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;랜덤 시드를 고정하지 않으면&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; 같은 코드, 같은 데이터여도 실행할 때마다 모델 결과가 달라진다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;br /&gt;[예시① - 랜덤 시드를 고정하지 않은 경우]&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;예를 들어 Scikit-learn 에서 데이터를 분할 할 때:&lt;/p&gt;
&lt;pre id=&quot;code_1752503748680&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)&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;실행 할 때마다 무작위로 데이터를 섞어 나누므로&lt;br /&gt;-&amp;gt; 매번 다른 train/test 데이터셋이 만들어진다.&lt;br /&gt;-&amp;gt; 모델 학습 결과도 매번 달라진다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;예시② -&lt;/span&gt;&lt;/b&gt;랜덤 시드를 고정한 경우]&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1752504010761&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=2025
)&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;random_state 또는 random_seed를 설정&lt;br /&gt;-&amp;gt; 언제 실행해도 같은 무작위 순서가 유지&lt;br /&gt;-&amp;gt; 이제 실행할 때마다 같은 train/test 데이터셋이 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; MLOps에서 재현성을 지키기 위해서는 난수(Randomness)가 반드시 통제되어야 한다!!&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8577196319186104&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;모델 환경 통제&amp;nbsp; &lt;b&gt;&lt;b&gt;② - 라이브러리 버전 고정&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;모델 개발할 때, 사용하는 라이브러리(Library/Package) 들은 계속 업데이트가 된다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt; 버전이 달라지면:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;함수 이름이나 사용법이 달라질 수 있고&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내부 알고리즘이 바뀔 수 있고&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;심지어 같은 코드가 동작하지 않거나 다른 결과를 낼 수 있다.&amp;nbsp;&lt;/span&gt;&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;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[예시 &lt;b&gt;① - 라이브러리 버전을 고정하지 않은 경우]&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&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;pre id=&quot;code_1752504509702&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import xgboost as xgb

model = xgb.XGBClassifier(use_label_encoder=False)&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;과거 버전(xgboost==0.90) 에서는 문제가 없지만&lt;/li&gt;
&lt;li&gt;최신 버전(xgboost&amp;gt;=1.3) 부터는 use_label_encoder 옵션이 추가되었고, 경고가 발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; 버전이 달라지면, 같은 코드가 오류를 내거나 다른 방식으로 동작할 수 있다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; 그래서 Docker로 버전을 명시해 환경을 통제하자&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>MLOps</category>
      <category>docker</category>
      <category>MLOps</category>
      <category>ml실험관리</category>
      <category>randomseed</category>
      <category>reproducibility</category>
      <category>난수고정</category>
      <category>라이브러리버전</category>
      <category>머신러닝</category>
      <category>모델재현성</category>
      <category>환경통제</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/142</guid>
      <comments>https://data04190.tistory.com/142#entry142comment</comments>
      <pubDate>Mon, 14 Jul 2025 23:55:58 +0900</pubDate>
    </item>
    <item>
      <title>[MLOps] MLOps란? MLOps가 필요한 이유</title>
      <link>https://data04190.tistory.com/141</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci8S3S/btsO9VCav6I/9VfgjrTKbbPlWQ3OJaaVqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci8S3S/btsO9VCav6I/9VfgjrTKbbPlWQ3OJaaVqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci8S3S/btsO9VCav6I/9VfgjrTKbbPlWQ3OJaaVqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci8S3S%2FbtsO9VCav6I%2F9VfgjrTKbbPlWQ3OJaaVqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;194&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;MLOps란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MLOps = Machine Learning + Operations&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;middot;보수, 실험 관리, 오류 대응이 필수적인데 이러한 모든 과정을 자동화&amp;middot;체계화 한것이 MLOps 입니다!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;머신러닝 모델의 특징과&amp;nbsp; MLOps가 필요한 이유&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;머신러닝 모델 특징 - 1. 같은 코드라도 데이터가 다르면 모델이 달라진다.&lt;/b&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;예를 들어 Object Detection 알고리즘을 쓰더라도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;의료 영상 데이터 =&amp;gt; 종양 탐지 AI&lt;/li&gt;
&lt;li&gt;도로 영상 데이터 =&amp;gt; 차량 탐지 AI&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;size18&quot;&gt;&lt;b&gt;&lt;b&gt;머신러닝 모델 특징 - &lt;/b&gt;2. 같은 문제여도 데이터 특성에 따라 성능이 달라진다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;똑같이 &quot;사과 vs 배&quot; 를 맞히려 해도&amp;nbsp;&lt;br /&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;/ul&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;size18&quot;&gt;&lt;b&gt;&lt;b&gt;머신러닝 모델 특징 - &lt;/b&gt;3. 같은 코드 + 같은 데이터라 하더라도 모델 종류가 다르면 성능이 달라진다.&amp;nbsp;&lt;/b&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;예를 들어 &quot;사과 vs 배&quot;를 맞히는 문제에서도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Decision&amp;nbsp;Tree&amp;nbsp;&amp;rarr;&amp;nbsp;간단하고&amp;nbsp;빠르지만,&amp;nbsp;복잡한&amp;nbsp;패턴은&amp;nbsp;잘&amp;nbsp;못&amp;nbsp;잡을&amp;nbsp;수&amp;nbsp;있음&lt;/li&gt;
&lt;li&gt;Random Forest &amp;rarr; 여러 트리를 결합해 더 정확한 예측 가능&lt;/li&gt;
&lt;li&gt;딥러닝(CNN) &amp;rarr; 이미지에서 복잡한 특징을 뽑아내 높은 성능을 낼 수 있지만 많은 데이터와 시간 필요&lt;/li&gt;
&lt;/ul&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;&lt;b&gt;정리하자면,&lt;/b&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;같은 데이터여도 어떤 모델을 쓰느냐에 따라 결과가 바뀐다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; 즉, 머신러닝 모델만 해도 복잡도가 매우 높다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; 그래서 이러한 머신러닝 특징들 때문에 MLOps가 반드시 필요하다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;MLOps 도입 시 장점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 모델 개발에 집중할 수 있다.&amp;nbsp;&lt;/b&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 실험을 정리하고 관리할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;머신러닝 개발을 하다보면,&amp;nbsp;
&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;li&gt;모델 성능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이런 걸 모두 기록해두어야 하는데 나중에 &quot;어떤 모델이 제일 좋았더라?&quot; 하고 찾아볼 때 쉽게 비교하고 재현할 수 있음&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;284&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elkLWx/btsPaiXQWMW/v8mBM4ZVLzP3H2Il3itjk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elkLWx/btsPaiXQWMW/v8mBM4ZVLzP3H2Il3itjk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elkLWx/btsPaiXQWMW/v8mBM4ZVLzP3H2Il3itjk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelkLWx%2FbtsPaiXQWMW%2Fv8mBM4ZVLzP3H2Il3itjk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;255&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;178&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 문제가 생기면 빠르게 재현할 수 있다.&lt;/b&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;AI 서비스 성능이 갑자기 떨어지는 경우 그대로 재현해 볼 수 있음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들면, 낮 사진만 학습했는데, 갑자기 밤 사진이 들어와서 모델이 헷갈리는 경우 MLOps가 잘 구축되어 있으면, 문제 당시의 코드, 데이터, 환경 설정을 그대로 재현하여 빠르게 문제 원인을 찾고 해결할 수 있음.&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;=&amp;gt; MLOps는 모델 개발에 집중하게 해주고, 실험과 문제 해결을 체계적이고 빠르게 할 수 있게 만들어준다!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>MLOps</category>
      <category>MLOps</category>
      <category>mlops 개념</category>
      <category>mlops가 필요한 이유</category>
      <category>mlops란?</category>
      <category>머신러닝 모델의 특징</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/141</guid>
      <comments>https://data04190.tistory.com/141#entry141comment</comments>
      <pubDate>Wed, 9 Jul 2025 00:21:49 +0900</pubDate>
    </item>
    <item>
      <title>[Kubernetes] Prometheus &amp;amp; Alertmanager 로 쿠버네티스 임계치 초과 시 Slack 알림 받기</title>
      <link>https://data04190.tistory.com/140</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS3Z7R/btsMMH0HttT/em28lbFXulyPhirHj3Tq5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS3Z7R/btsMMH0HttT/em28lbFXulyPhirHj3Tq5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS3Z7R/btsMMH0HttT/em28lbFXulyPhirHj3Tq5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS3Z7R%2FbtsMMH0HttT%2Fem28lbFXulyPhirHj3Tq5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;162&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&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;b&gt;Prometheus&lt;/b&gt;와 &lt;b&gt;Alertmanager&lt;/b&gt;를 활용하여 &lt;span&gt;쿠버네티스(Kubernetes) 시스템 리소스&lt;span&gt;(CPU, 메모리, 디스크)가&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;특정 임계치를 초과했을 때 Slack (또는 Email, MS Teams 등) 으로 알람을 전송하는 방법&lt;/span&gt;&lt;/b&gt;에 대해 정리한 글입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;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;b&gt;Prometheus + Alertmanager 알람 전송 흐름&amp;nbsp;&lt;/b&gt;&lt;/h3&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;1280&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLEHYr/btsMMz9ER4G/5bqdoGnn0iJhYXECM5jHdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLEHYr/btsMMz9ER4G/5bqdoGnn0iJhYXECM5jHdK/img.png&quot; data-alt=&quot;출처 : https://kschoi728.tistory.com/73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLEHYr/btsMMz9ER4G/5bqdoGnn0iJhYXECM5jHdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLEHYr%2FbtsMMz9ER4G%2F5bqdoGnn0iJhYXECM5jHdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;311&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://kschoi728.tistory.com/73&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;Prometheus&lt;/b&gt;&lt;/span&gt;가&amp;nbsp;메트릭을&amp;nbsp;수집&amp;nbsp;(CPU&amp;nbsp;사용률,&amp;nbsp;메모리&amp;nbsp;사용량,&amp;nbsp;디스크&amp;nbsp;사용량&amp;nbsp;등)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;PrometheusRule&lt;/b&gt;&lt;/span&gt;을&amp;nbsp;통해&amp;nbsp;특정&amp;nbsp;임계치를&amp;nbsp;초과하는&amp;nbsp;경우&amp;nbsp;알람을&amp;nbsp;발생&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;Alertmanager&lt;/b&gt;&lt;/span&gt;로&amp;nbsp;알람을&amp;nbsp;전송&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;Alertmanager&lt;/b&gt;&lt;/span&gt;는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;AlertmanagerConfig&lt;/b&gt;&lt;/span&gt;를 참고하여 알람을 Slack (또는&amp;nbsp; Email, MS Teams 등) 으로 전송&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;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;PrometheusRule&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 어떤 조건에서 알람을 발생시킬지 정의 (예: CPU 사용률이 80%를 넘으면 알람 발생)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;AlertmanagerConfig&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 알람을 어디로, 어떻게 보낼지 설정 (Slack, Email, MS Teams 등으로 알람 전송)&lt;/span&gt;&lt;/span&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: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;PrometheusRule 설정 (알람 트리거 조건)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;특정 임계치 초과했을 때 Prometheus가 알람 발생하도록 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;PrometheusRule&lt;/b&gt;&lt;/span&gt;을 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;예제 : CPU 사용률이 80% 초과 -&amp;gt; 알람 발생&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;prometheus-rule.yaml&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(CPU 임계치 알람 설정)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1742201854762&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: node-cpu-usage   # 알람 규칙 이름
  namespace: monitoring
spec:
  groups: 
    - name: node_cpu_alerts
      rules:
        - alert: HighCPUUsage  # 알람 이름 설정
          expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=&quot;idle&quot;}[5m])) * 100) &amp;gt; 80
          for: 5m
          labels:
            severity: critical
          annotations:
            summary: &quot;High CPU Usage on {{ $labels.instance }}&quot;
            description: &quot;CPU usage on {{ $labels.instance }} exceeded 80% for more than 5 minutes.&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;설명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;expr&lt;/b&gt; : CPU 사용률이 80%를 초과하는지 확인하는 PromQL 쿼리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;for: 5m&lt;/b&gt;: 5분 동안 유지되면 알람 발생 ( 예 : 5분 동안 CPU 사용률이 80%를 초과하면 알람 발생 )&amp;nbsp;&lt;/li&gt;
&lt;li data-end=&quot;1667&quot; data-start=&quot;1634&quot;&gt;&lt;b&gt;labels&lt;/b&gt;: 알람 심각도 (critical)&lt;/li&gt;
&lt;li data-end=&quot;1667&quot; data-start=&quot;1634&quot;&gt;&lt;b&gt;annotations&lt;/b&gt;: Slack 에서 보일 내용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;설정 적용&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1742201995246&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f prometheus-rule.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 설정을 적용하면 이제 CPU 사용률이 80% 넘기면 &lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;Alertmanager&lt;/b&gt;&lt;/span&gt;로&amp;nbsp;알람을&amp;nbsp;보냅니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;AlertmanagerConfig 설정 (Slack으로 알람 전송)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;Prometheus&lt;/b&gt;가 감지한 알람을 &lt;b&gt;Alertmanager&lt;/b&gt;가 Slack으로 보낼 수 있도록 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;예제 : Slack으로 알람 전송&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;alertmanager-config.yaml&amp;nbsp;&lt;/b&gt;&lt;/span&gt;(Slack&amp;nbsp;알람&amp;nbsp;설정)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1742202539263&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  name: slack-alerts  # 알람 이름 설정
  namespace: monitoring
spec:
  route:
    receiver: slack-notifications  
    group_by: ['alertname']  
    repeat_interval: 1h  # 같은 알람이 1시간에 한 번만 오도록 설정
  receivers:  
    - name: 'slack-notifications'
      slackConfigs:
        - send_resolved: true
          channel: '#alerts'  # Slack에서 알람을 받을 채널 이름 (#alerts)
          apiURL:
            name: slack-webhook
            key: webhook-url
          title: '{{ .CommonAnnotations.summary }}'
          text: '{{ .CommonAnnotations.description }}'&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;설명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;repeat_interval: 1h&lt;/b&gt;: 같은 알람이 다시 발생해도 1시간 동안 추가 알람을 보내지 않음 (알람이 너무 자주 울리지 않도록 설정 가능)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;slackConfigs: &lt;/b&gt;Slack Webhook URL을 이용해 알람 전송&lt;/li&gt;
&lt;li&gt;&lt;b&gt;send_resolved:&amp;nbsp;true&lt;/b&gt;:&amp;nbsp;알람이&amp;nbsp;해제되었을&amp;nbsp;때도&amp;nbsp;Slack에&amp;nbsp;메시지&amp;nbsp;전송&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;설정 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1742202665220&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f alertmanager-config.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;</description>
      <category>DevOps/Kubernetes</category>
      <category>Alertmanager</category>
      <category>alertmanagerconfig</category>
      <category>Kubernetes</category>
      <category>prometheus</category>
      <category>prometheusrule</category>
      <category>slack 알람</category>
      <category>임계치 알람</category>
      <category>쿠버네티스</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/140</guid>
      <comments>https://data04190.tistory.com/140#entry140comment</comments>
      <pubDate>Wed, 19 Mar 2025 00:55:26 +0900</pubDate>
    </item>
    <item>
      <title>[Kubernetes] 쿠버네티스 OLM(Operator Lifecycle Manager) 설치</title>
      <link>https://data04190.tistory.com/139</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ldjIL/btsLJLwFGNx/r0WPIkl3VxHTELVkwypJtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ldjIL/btsLJLwFGNx/r0WPIkl3VxHTELVkwypJtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ldjIL/btsLJLwFGNx/r0WPIkl3VxHTELVkwypJtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FldjIL%2FbtsLJLwFGNx%2Fr0WPIkl3VxHTELVkwypJtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;162&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1️⃣&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;OLM 설치를 위한 CRD(Custom Resource Definitions) 설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736617391337&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.19.1/crds.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2️⃣&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;쿠버네티스에 OLM 설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736617436963&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.19.1/olm.yaml&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;설치된 리소스 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1736617597993&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kmk@test:~$ kubectl get pods -n olm

NAME                                READY   STATUS    RESTARTS   AGE
catalog-operator-6d497d56d8-shvvv   1/1     Running   0          4m40s
olm-operator-7665dcf6dc-swnzh       1/1     Running   0          4m40s
operatorhubio-catalog-mh599         1/1     Running   0          4m4s
packageserver-657c98d7c9-6mbdb      1/1     Running   0          4m3s
packageserver-657c98d7c9-ndp75      1/1     Running   0          4m3s&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps/Kubernetes</category>
      <category>Kubernetes</category>
      <category>OLM</category>
      <category>olm 설치</category>
      <category>operator lifecycle manager</category>
      <category>쿠버네티스</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/139</guid>
      <comments>https://data04190.tistory.com/139#entry139comment</comments>
      <pubDate>Sun, 12 Jan 2025 02:47:54 +0900</pubDate>
    </item>
    <item>
      <title>[Kubernetes] 쿠버네티스에서 Secret을 다른 namespace로 복사하기</title>
      <link>https://data04190.tistory.com/138</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvLYPR/btsK5CsXBOv/KX4f7KQHieqLgFBl7xcnVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvLYPR/btsK5CsXBOv/KX4f7KQHieqLgFBl7xcnVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvLYPR/btsK5CsXBOv/KX4f7KQHieqLgFBl7xcnVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvLYPR%2FbtsK5CsXBOv%2FKX4f7KQHieqLgFBl7xcnVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;162&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스(Kubernetes)를 사용하다 보면 특정 네임스페이스에 있는 시크릿(Secret)을 다른 네임스페이스로 복사해야 하는 상황이 생기곤 합니다. 예를 들어, 개발 환경에서 사용 중인 시크릿을 테스트 환경이나 프로덕션 환경으로 옮기거나, 동일한 시크릿을 여러 네임스페이스에서 재사용해야 할 때가 그렇습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;이 글에서는 &lt;b&gt;네임스페이스만 바꾸는 간단한 한 줄 명령어&lt;/b&gt;와, &lt;b&gt;YAML 파일을 활용해 시크릿을 수정하고 복사하여 네임스페이스를 변경하는 방법&lt;/b&gt;에 대해 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;방법 1️⃣ : 네임스페이스만 변경하는 간단한 명령어&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시크릿을 수정할 필요 없이, 네임스페이스만 변경하려는 경우 다음과 같은 한 줄 명령어를 사용하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1733210229970&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get secret &amp;lt;SECRET_NAME&amp;gt; -n &amp;lt;SOURCE_NAMESPACE&amp;gt; -o yaml | \
grep -v &quot;namespace:&quot; | \
kubectl apply -n &amp;lt;TARGET_NAMESPACE&amp;gt; -f-&lt;/code&gt;&lt;/pre&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: #000000;&quot;&gt;&lt;b&gt;방법 2️⃣ : YAML 파일 수정하여 복사하기&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시크릿 데이터를 수정하거나, 라벨 및 어노테이션 등 메타데이터를 변경해야 한다면, YAML 파일을 활용하는 것이 적합합니다.&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 시크릿 YAML로 추출&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1733210435520&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get secret &amp;lt;SECRET_NAME&amp;gt; -n &amp;lt;SOURCE_NAMESPACE&amp;gt; -o yaml &amp;gt; secret.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;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. YAML 파일 수정&lt;/b&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;namespace&lt;/b&gt; &lt;b&gt;변경&lt;/b&gt;&amp;nbsp; : metadata.namespace 값을 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;복사하려는 대상 네임스페이스로 변경&lt;/b&gt;&lt;/span&gt;합니다.&lt;/li&gt;
&lt;li&gt;라벨 또는 어노테이션 수정&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;[secret.yaml 파일 수정 후 예시]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1733210716995&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
data:
  username: dXNlcm5hbWU=  # Base64로 인코딩된 username
  password: cGFzc3dvcmQ=  # Base64로 인코딩된 password
kind: Secret
metadata:
  name: app-secret   # 시크릿 이름
  namespace: &amp;lt;TARGET_NAMESPACE&amp;gt;  # 복사하려는 대상 namespace
  labels:
    environment: production
    app: my-application
  annotations:
    description: &quot;This secret contains credentials for the production database.&quot;
type: Opaque&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;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3. 대상 네임스페이스로 시크릿 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1733210851091&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f secret.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;마지막으로, 복사된 시크릿이 대상 네임스페이스에 존재하는지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1733211160048&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get secret -n &amp;lt;TARGET_NAMESPACE&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DevOps/Kubernetes</category>
      <category>DevOps</category>
      <category>Kubernetes</category>
      <category>namespace</category>
      <category>Secret</category>
      <category>TIP</category>
      <category>네임스페이스 변경</category>
      <category>복사</category>
      <category>시크릿</category>
      <category>시크릿 복사</category>
      <category>쿠버네티스</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/138</guid>
      <comments>https://data04190.tistory.com/138#entry138comment</comments>
      <pubDate>Tue, 3 Dec 2024 16:33:04 +0900</pubDate>
    </item>
    <item>
      <title>[Python] print 대신 logging을 사용하는 이유 및 사용법</title>
      <link>https://data04190.tistory.com/137</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8YLF/btsKyTA6YSS/HZnf2gkKvZeEQXjSa0EHF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8YLF/btsKyTA6YSS/HZnf2gkKvZeEQXjSa0EHF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8YLF/btsKyTA6YSS/HZnf2gkKvZeEQXjSa0EHF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8YLF%2FbtsKyTA6YSS%2FHZnf2gkKvZeEQXjSa0EHF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;225&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python 개발을 하다보면 코드의 흐름을 확인하거나 오류를 추적하기 위해 &lt;code&gt;print&lt;/code&gt;를 많이 사용하게 됩니다. 하지만 더 조금 더 복잡한 애플리케이션을 개발하거나, 운영 환경에서 문제를 모니터링하려면&amp;nbsp; &lt;code&gt;print&lt;/code&gt; 대신 &lt;code&gt;logging&lt;/code&gt; 모듈을 사용하는 것을 더 권장합니다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;왜 print 대신 logging을 사용해야 할까?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;print&lt;/code&gt; 는 단순한 디버깅에는 유용할 수 있지만, 큰 애플리케이션이나 운영 환경에서는 logging이 더 유리한 점이 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 로그 레벨을 통한 중요도 구분&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logging 모듈은 메시지의 중요도에 따라 로그 레벨을 제공하여, 상황에 맞게 로그를 분류할 수 있게 해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 81.3953%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DEBUG&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%; height: 21px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;개발&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&amp;nbsp;시&amp;nbsp;디버깅&lt;/b&gt;을&amp;nbsp;위해&amp;nbsp;사용하는&amp;nbsp;가장&amp;nbsp;낮은&amp;nbsp;수준의&amp;nbsp;로그&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;INFO&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;일반적인&amp;nbsp;정보&amp;nbsp;메시지로,&amp;nbsp;&lt;b&gt;정상적인&amp;nbsp;실행&amp;nbsp;과정을&amp;nbsp;기록&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;WARNING&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;경고&amp;nbsp;메시지&lt;/b&gt;로,&amp;nbsp;애플리케이션이&amp;nbsp;계속&amp;nbsp;실행되지만&amp;nbsp;&lt;b&gt;주의가&amp;nbsp;필요&lt;/b&gt;한&amp;nbsp;상황을&amp;nbsp;기록&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ERROR&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;오류&amp;nbsp;메시지&lt;/b&gt;로,&amp;nbsp;실행&amp;nbsp;중&amp;nbsp;&lt;b&gt;문제가&amp;nbsp;발생&lt;/b&gt;했을&amp;nbsp;때&amp;nbsp;기록&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CRITICAL&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;치명적인&amp;nbsp;오류&lt;/b&gt;로,&amp;nbsp;&lt;b&gt;즉시&amp;nbsp;조치가&amp;nbsp;필요&lt;/b&gt;한&amp;nbsp;상황을&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;nbsp;기록&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이처럼&amp;nbsp;로그&amp;nbsp;레벨을&amp;nbsp;사용하면&amp;nbsp;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;b&gt;DEBUG&lt;/b&gt;&lt;/span&gt;와&amp;nbsp;같은&amp;nbsp;상세&amp;nbsp;로그는&amp;nbsp;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;b&gt;개발&amp;nbsp;환경&lt;/b&gt;&lt;/span&gt;에서만&amp;nbsp;출력하고,&amp;nbsp;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;운영&amp;nbsp;환경&lt;/b&gt;&lt;/span&gt;에서는&amp;nbsp;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;ERROR&lt;/b&gt;&lt;/span&gt;&amp;nbsp;이상만&amp;nbsp;출력하도록&amp;nbsp;설정할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 출력 위치와 포멧 유연하게 설정 가능&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logging을 사용하면 로그를 &lt;b&gt;콘솔뿐 아니라 파일, 네트워크, 원격 서버 등 다양한&lt;/b&gt; 곳으로 보낼 수 있습니다.&amp;nbsp; 또한 로그 메시지의 형식을 자유롭게 설정할 수 있어, 시간, 로그 레벨, 파일명 등을 포함한 상세한 정보를 남길 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 다음과 같이 시간과 로그 레벨을 포함한 로그를 파일에 저장할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730820930118&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import logging

logging.basicConfig(filename='app.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('This is an informational message.')&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 로그 파일 관리와 자동 회전&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p 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;&lt;b&gt;로그&amp;nbsp;파일을&amp;nbsp;관리&lt;/b&gt;하는&amp;nbsp;기능이&amp;nbsp;필요합니다.&amp;nbsp;logging&amp;nbsp;모듈은&amp;nbsp;파일&amp;nbsp;크기나&amp;nbsp;시간에&amp;nbsp;따라&amp;nbsp;&lt;b&gt;자동으로&amp;nbsp;로그&amp;nbsp;파일을&amp;nbsp;교체하거나&amp;nbsp;백업&lt;/b&gt;하는&amp;nbsp;기능을&amp;nbsp;제공합니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;&lt;b&gt;RotatingFileHandler&lt;/b&gt;와&amp;nbsp;&lt;b&gt;TimedRotatingFileHandler&lt;/b&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;/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: #006dd7;&quot;&gt;&lt;b&gt;Python logging 모듈 사용법&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기본 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;logging.basicConfig&lt;/b&gt;를 사용해 기본적인 로그 설정을 할 수 있습니다. 아래는 로그 레벨을 INFO 이상으로 설정하고, 메시지에 시간과 로그 레벨을 포함하는 예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730821529131&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

logging.info('Application started')
logging.warning('This is a warning message')
logging.error('This is an error message')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 코드에서는 INFO 이상의 메시지가 다음과 같은 형식으로 출력됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1730821672352&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2024-11-05 12:34:56 - INFO - Application started
2024-11-05 12:34:56 - WARNING - This is a warning message
2024-11-05 12:34:56 - ERROR - This is an error message&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;로그를 파일로 저장하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;filename&lt;/b&gt; 매개변수를 지정하면 로그를 파일에 저장할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730822128041&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;logging.basicConfig(filename='app.log', level=logging.DEBUG,
                    format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('Logging to a file')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모든 로그가 app.log 파일에 저장되며 애플리케이션의 실행 이력을 저장하는 데 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;여러 핸들러 사용하기&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;logging&lt;/b&gt; 모듈의 장점 중 하나는 여러 핸들러를 사용해 로그를 다양한 곳으로 보낼 수 있다는 것입니다. 예를 들어, &lt;b&gt;콘솔과 파일에 동시에 로그&lt;/b&gt;를 남기려면 다음과 같이 설정할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1730822319135&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import logging

# 로거 생성
logger = logging.getLogger('my_logger')

# 파일 핸들러
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)

# 콘솔 핸들러
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 로거에 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

# 테스트 메시지
logger.debug('Debug message')
logger.error('Error message')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;DEBUG&amp;nbsp;메시지는&amp;nbsp;콘솔에만&amp;nbsp;출력되고,&amp;nbsp;ERROR&amp;nbsp;메시지는&amp;nbsp;파일과&amp;nbsp;콘솔&amp;nbsp;모두에&amp;nbsp;출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;REFERENCE&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/ko/3/howto/logging.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.python.org/ko/3/howto/logging.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming/Python</category>
      <category>Debugging</category>
      <category>DevOps</category>
      <category>logging</category>
      <category>print</category>
      <category>Python</category>
      <category>Tips</category>
      <category>Tutorial</category>
      <category>디버깅</category>
      <category>로그</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <category>파이썬</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/137</guid>
      <comments>https://data04190.tistory.com/137#entry137comment</comments>
      <pubDate>Thu, 14 Nov 2024 01:07:55 +0900</pubDate>
    </item>
    <item>
      <title>[리눅스] MacOS(Apple Silicon) 에서 UTM으로 Ubuntu 24.04 LTS 설치하기</title>
      <link>https://data04190.tistory.com/134</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Ubuntu ISO 파일 다운로드&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;&lt;a href=&quot;https://ubuntu.com/download/server/arm&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ubuntu.com/download/server/arm/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1726487386324&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;https://ubuntu.com/download/server/arm&quot; data-og-description=&quot;&quot; data-og-host=&quot;ubuntu.com&quot; data-og-source-url=&quot;https://ubuntu.com/download/server/arm&quot; data-og-url=&quot;https://ubuntu.com/download/server/arm&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/server/arm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ubuntu.com/download/server/arm&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;https://ubuntu.com/download/server/arm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ubuntu.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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ubuntu 공식 웹사이트에 접속 -&amp;gt; &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;[Download 24.04.1 LTS]&lt;/b&gt;&lt;/span&gt; 클릭하여 ISO 파일 다운로드 받기&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2972&quot; data-origin-height=&quot;1426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxhF5f/btsJDYxmeO5/9gk6slZCLC9Xj9TLTpKFzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxhF5f/btsJDYxmeO5/9gk6slZCLC9Xj9TLTpKFzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxhF5f/btsJDYxmeO5/9gk6slZCLC9Xj9TLTpKFzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxhF5f%2FbtsJDYxmeO5%2F9gk6slZCLC9Xj9TLTpKFzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;754&quot; height=&quot;1426&quot; data-origin-width=&quot;2972&quot; data-origin-height=&quot;1426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;UTM 에 Ubuntu 설치하기&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: #000000;&quot;&gt;1. UTM 다운로드 및 설치&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://mac.getutm.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mac.getutm.app/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1726472041847&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;UTM&quot; data-og-description=&quot;Securely run operating systems on your Mac&quot; data-og-host=&quot;mac.getutm.app&quot; data-og-source-url=&quot;https://mac.getutm.app/&quot; data-og-url=&quot;https://mac.getutm.app/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rawNV/hyW20PsRSN/5HogBB37AFSqqBEis4i3lk/img.png?width=800&amp;amp;height=670&amp;amp;face=0_0_800_670,https://scrap.kakaocdn.net/dn/vKqhQ/hyW2SKEsMi/g8D8ntxlb4s1tToD1lSJtK/img.png?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/kDwKy/hyW2TW9ivs/9Fcx5Ui4b4oyioC2j7sIUK/img.png?width=800&amp;amp;height=646&amp;amp;face=0_0_800_646&quot;&gt;&lt;a href=&quot;https://mac.getutm.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mac.getutm.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rawNV/hyW20PsRSN/5HogBB37AFSqqBEis4i3lk/img.png?width=800&amp;amp;height=670&amp;amp;face=0_0_800_670,https://scrap.kakaocdn.net/dn/vKqhQ/hyW2SKEsMi/g8D8ntxlb4s1tToD1lSJtK/img.png?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/kDwKy/hyW2TW9ivs/9Fcx5Ui4b4oyioC2j7sIUK/img.png?width=800&amp;amp;height=646&amp;amp;face=0_0_800_646');&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;UTM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Securely run operating systems on your Mac&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mac.getutm.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 새로운 가상 머신 생성하기&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;설치한 UTM을 열고&lt;b&gt; [새 가상머신 만들기]&lt;/b&gt; 클릭 -&amp;gt; &lt;b&gt;[Virtualize]&lt;/b&gt; 클릭 -&amp;gt; &lt;b&gt;[Linux]&lt;/b&gt; 클릭&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1586&quot; data-origin-height=&quot;1282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkkVks/btsJDVt2hIk/LYwZmely6EvZQmzbQkuc40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkkVks/btsJDVt2hIk/LYwZmely6EvZQmzbQkuc40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkkVks/btsJDVt2hIk/LYwZmely6EvZQmzbQkuc40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkkVks%2FbtsJDVt2hIk%2FLYwZmely6EvZQmzbQkuc40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;268&quot; data-origin-width=&quot;1586&quot; data-origin-height=&quot;1282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;1004&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd9gOy/btsJEOAXu9O/IfktOJU4KpLCPsrQRWU7lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd9gOy/btsJEOAXu9O/IfktOJU4KpLCPsrQRWU7lK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd9gOy/btsJEOAXu9O/IfktOJU4KpLCPsrQRWU7lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd9gOy%2FbtsJEOAXu9O%2FIfktOJU4KpLCPsrQRWU7lK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;381&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;1004&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3.&amp;nbsp; 다운로드 받은 ISO 파일 추가하기&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;1008&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5TzlM/btsJFb3AONk/1aJWeNKtz5BPJGrypxzYrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5TzlM/btsJFb3AONk/1aJWeNKtz5BPJGrypxzYrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5TzlM/btsJFb3AONk/1aJWeNKtz5BPJGrypxzYrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5TzlM%2FbtsJFb3AONk%2F1aJWeNKtz5BPJGrypxzYrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;397&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;1008&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;1004&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brdXw8/btsJEjuvvrs/EKVQ9FL9HM7rIgKFC7ct40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brdXw8/btsJEjuvvrs/EKVQ9FL9HM7rIgKFC7ct40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brdXw8/btsJEjuvvrs/EKVQ9FL9HM7rIgKFC7ct40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrdXw8%2FbtsJEjuvvrs%2FEKVQ9FL9HM7rIgKFC7ct40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;349&quot; height=&quot;396&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;1004&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4.&amp;nbsp; 시스템 및 저장소 설정 (필요한 만큼 설정하기)&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;Master Node&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이름 : &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;k8s-master&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;CPU : 2코어&lt;/li&gt;
&lt;li&gt;메모리(RAM) : 4GB (4096MiB)&lt;/li&gt;
&lt;li&gt;스토리지 : 40GB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Worker Node&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이름 : &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;k8s-worker1&lt;/b&gt;&lt;/span&gt;, &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;k8s-worker2&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;CPU : 1코어&lt;/li&gt;
&lt;li&gt;메모리(RAM) : 2048MiB)&lt;/li&gt;
&lt;li&gt;스토리지 : 20GB&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;5. Ubuntu 설치&lt;br /&gt;&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;'▶' 화살표 버튼 클릭하여 실행시키기&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2174&quot; data-origin-height=&quot;1666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqnW49/btsJDYRIJwT/KTvaOD7zX05oVugEKQEHa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqnW49/btsJDYRIJwT/KTvaOD7zX05oVugEKQEHa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqnW49/btsJDYRIJwT/KTvaOD7zX05oVugEKQEHa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqnW49%2FbtsJDYRIJwT%2FKTvaOD7zX05oVugEKQEHa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;590&quot; height=&quot;452&quot; data-origin-width=&quot;2174&quot; data-origin-height=&quot;1666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;USERNAME&lt;/b&gt;, &lt;b&gt;PASSWORD&lt;/b&gt;, &lt;b&gt;SERVER_NAME&lt;/b&gt;&lt;/span&gt; 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2546&quot; data-origin-height=&quot;1502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EIpXM/btsJDU3lTCu/yNqcVwgXvtfJK1Og0WXmp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EIpXM/btsJDU3lTCu/yNqcVwgXvtfJK1Og0WXmp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EIpXM/btsJDU3lTCu/yNqcVwgXvtfJK1Og0WXmp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEIpXM%2FbtsJDU3lTCu%2FyNqcVwgXvtfJK1Og0WXmp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;594&quot; height=&quot;1502&quot; data-origin-width=&quot;2546&quot; data-origin-height=&quot;1502&quot;/&gt;&lt;/span&gt;&lt;/figure&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;OpenSSH&lt;/b&gt; 서버 설치하기&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;1652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdeEkI/btsJFql7kF8/iXAZKlYV1vjvLfktw67Ee1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdeEkI/btsJFql7kF8/iXAZKlYV1vjvLfktw67Ee1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdeEkI/btsJFql7kF8/iXAZKlYV1vjvLfktw67Ee1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdeEkI%2FbtsJFql7kF8%2FiXAZKlYV1vjvLfktw67Ee1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;593&quot; height=&quot;384&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;1652&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;시스템이 설치된 후&amp;nbsp;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt; [Reboot Now]&lt;/b&gt;&lt;/span&gt; 버튼이 생성되면 &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;[Reboot Now]&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;버튼 클릭&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2542&quot; data-origin-height=&quot;1592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bndoY1/btsJDYErBnz/rfmgpSwx0FSWA91gNDkCqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bndoY1/btsJDYErBnz/rfmgpSwx0FSWA91gNDkCqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bndoY1/btsJDYErBnz/rfmgpSwx0FSWA91gNDkCqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbndoY1%2FbtsJDYErBnz%2FrfmgpSwx0FSWA91gNDkCqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;380&quot; data-origin-width=&quot;2542&quot; data-origin-height=&quot;1592&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2526&quot; data-origin-height=&quot;1592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdpMA7/btsJFLjAenW/wgp5RkXYZvvYmbNxqxr4Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdpMA7/btsJFLjAenW/wgp5RkXYZvvYmbNxqxr4Wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdpMA7/btsJFLjAenW/wgp5RkXYZvvYmbNxqxr4Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdpMA7%2FbtsJFLjAenW%2Fwgp5RkXYZvvYmbNxqxr4Wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;612&quot; height=&quot;386&quot; data-origin-width=&quot;2526&quot; data-origin-height=&quot;1592&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;재부팅 후 검은 화면이 계속 나오면, UTM에 있는 가상머신 목록에서&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; [stop]&lt;/b&gt;&lt;/span&gt; 버튼을 클릭하여 중지시키기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2550&quot; data-origin-height=&quot;1182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZO6aF/btsJFtQZQDb/SpPxYRpaY4YdJLAbKIO3X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZO6aF/btsJFtQZQDb/SpPxYRpaY4YdJLAbKIO3X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZO6aF/btsJFtQZQDb/SpPxYRpaY4YdJLAbKIO3X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZO6aF%2FbtsJFtQZQDb%2FSpPxYRpaY4YdJLAbKIO3X1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;292&quot; data-origin-width=&quot;2550&quot; data-origin-height=&quot;1182&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2296&quot; data-origin-height=&quot;2020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qucpq/btsJE02z4Oy/t3S68ClNM2WrTPY5X0EZY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qucpq/btsJE02z4Oy/t3S68ClNM2WrTPY5X0EZY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qucpq/btsJE02z4Oy/t3S68ClNM2WrTPY5X0EZY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqucpq%2FbtsJE02z4Oy%2Ft3S68ClNM2WrTPY5X0EZY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;550&quot; data-origin-width=&quot;2296&quot; data-origin-height=&quot;2020&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;&lt;b&gt;[CD/DVD]&lt;/b&gt; 항목에 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[초기화]&lt;/b&gt;&lt;/span&gt; 버튼 클릭 -&amp;gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;.iso 파일 제거&lt;/b&gt;&lt;/span&gt;하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgRrpv/btsJDwoa2D1/m8K8rYT3vHpSfJwc2cXHU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgRrpv/btsJDwoa2D1/m8K8rYT3vHpSfJwc2cXHU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgRrpv/btsJDwoa2D1/m8K8rYT3vHpSfJwc2cXHU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgRrpv%2FbtsJDwoa2D1%2Fm8K8rYT3vHpSfJwc2cXHU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;1906&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2308&quot; data-origin-height=&quot;1872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RKMdX/btsJFFjmGSQ/9YCxbxUaxL90vB9OEuVkH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RKMdX/btsJFFjmGSQ/9YCxbxUaxL90vB9OEuVkH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RKMdX/btsJFFjmGSQ/9YCxbxUaxL90vB9OEuVkH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRKMdX%2FbtsJFFjmGSQ%2F9YCxbxUaxL90vB9OEuVkH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;508&quot; data-origin-width=&quot;2308&quot; data-origin-height=&quot;1872&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;b&gt;가상 머신을 다시 실행&lt;/b&gt;시킨 후, 앞에서 설정한 &lt;b&gt;USER_NAME&lt;/b&gt;, &lt;b&gt;PASSWORD&lt;/b&gt; 입력하면 됩니다 : )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz1r3H/btsJDszwmBh/rcZS8tzYD5kQEYDs7dmKNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz1r3H/btsJDszwmBh/rcZS8tzYD5kQEYDs7dmKNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz1r3H/btsJDszwmBh/rcZS8tzYD5kQEYDs7dmKNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz1r3H%2FbtsJDszwmBh%2FrcZS8tzYD5kQEYDs7dmKNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;632&quot; height=&quot;169&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;682&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;</description>
      <category>리눅스</category>
      <category>Kubernetes</category>
      <category>Mac</category>
      <category>MacOS</category>
      <category>ubuntu</category>
      <category>ubuntu24.04</category>
      <category>UTM</category>
      <category>가상머신</category>
      <category>맥북</category>
      <category>우분투</category>
      <category>쿠버네티스</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/134</guid>
      <comments>https://data04190.tistory.com/134#entry134comment</comments>
      <pubDate>Mon, 16 Sep 2024 16:31:33 +0900</pubDate>
    </item>
    <item>
      <title>[Kubernetes] Metric API 오류 해결 방법 : Docker Desktop에 Metrics Server 설치 및 TLS 인증 문제 해결</title>
      <link>https://data04190.tistory.com/133</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wMQAN/btsI0SLu4jv/pe9KEukwcK5aAO5YxsNlnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wMQAN/btsI0SLu4jv/pe9KEukwcK5aAO5YxsNlnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wMQAN/btsI0SLu4jv/pe9KEukwcK5aAO5YxsNlnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwMQAN%2FbtsI0SLu4jv%2Fpe9KEukwcK5aAO5YxsNlnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;162&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;162&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFLYo/btsI03FZ3rG/Bwipg33IjAlKSSivbZu9oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFLYo/btsI03FZ3rG/Bwipg33IjAlKSSivbZu9oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFLYo/btsI03FZ3rG/Bwipg33IjAlKSSivbZu9oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFLYo%2FbtsI03FZ3rG%2FBwipg33IjAlKSSivbZu9oK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;421&quot; height=&quot;42&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 Docker Desktop Kubernetes 클러스터에서 실시간 리소스 사용량을 확인하기 위해 &lt;code&gt;kubectl top&lt;/code&gt; 명령어를 실행하다가 발생한 &lt;code&gt;Metrics API&lt;/code&gt; 오류 해결 과정을 정리한 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Metrics Server 설치 및 확인&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;1165&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVKw0t/btsI24Efn0V/2TXRTpFew16Kh5nv7a0ytk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVKw0t/btsI24Efn0V/2TXRTpFew16Kh5nv7a0ytk/img.png&quot; data-alt=&quot;https://cloud.tencent.com/developer/article/2139351&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVKw0t/btsI24Efn0V/2TXRTpFew16Kh5nv7a0ytk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVKw0t%2FbtsI24Efn0V%2F2TXRTpFew16Kh5nv7a0ytk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;514&quot; height=&quot;313&quot; data-origin-width=&quot;1165&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://cloud.tencent.com/developer/article/2139351&lt;/figcaption&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;size18&quot;&gt;&lt;b&gt;Metrics Server 최신 버전 설치&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Metrics Server는 각 노드의 Kubelet에서 메트릭 데이터를 수집해 클러스터 전체의 리소스 사용량을 집계함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Metrics Server 파드 상태 확인&lt;/b&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;kube-system&lt;/b&gt; 네임스페이스 내의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Metrics Server&lt;/b&gt;&lt;/span&gt; 파드 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Running 상태인지 확인&lt;/b&gt;&lt;/span&gt;하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1723473491308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ kubectl get pods -n kube-system&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;NAME                                     READY   STATUS    RESTARTS      AGE
coredns-76f75df574-8nhvk                 1/1     Running   1 (20h ago)   162d
etcd-docker-desktop                      1/1     Running   1 (20h ago)   162d
kube-apiserver-docker-desktop            1/1     Running   1 (20h ago)   162d
kube-controller-manager-docker-desktop   1/1     Running   1 (20h ago)   162d
kube-proxy-89xj2                         1/1     Running   1 (20h ago)   162d
kube-scheduler-docker-desktop            1/1     Running   2 (14h ago)   162d
metrics-server-b677dfd6f-fv4sz           1/1     Running   0             116m&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: #006dd7;&quot;&gt;&lt;b&gt;Metrics Server TLS 검증 비활성화 설정&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;Docker Desktop 과 같은 로컬환경에서는 기본적으로 제공되는 인증서 때문에 Metrics Server가 Kubelet과의 통신에서 문제가 발생할 수 있기 때문에 Metrics Server 매니페스트 파일에서 TLS 검증을 비활성화로 수정해주어야 합니다.&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;size18&quot;&gt;&lt;b&gt;'metrics-server' 디플로이먼트 수정&lt;/b&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;'spec.template.spec.containers.args'&lt;/b&gt;&lt;/span&gt; 섹션에 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;'--kubelet-insecure-tls' &lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;플래그 추가&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1723474180949&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ kubectl edit deployment metrics-server -n kube-system&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1723475788341&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;args:
- --kubelet-insecure-tls&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;size18&quot;&gt;&lt;b&gt;Metrics Server가 Kubernetes API 연결 상태 확인&lt;/b&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;metrics.k8s.io AP&lt;/b&gt;&lt;b&gt;I&amp;nbsp;&lt;/b&gt;&lt;/span&gt;서비스 &amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;AVAILABLE&lt;/b&gt;&lt;/span&gt;&amp;nbsp;이&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;True&lt;/span&gt;&lt;/b&gt; 인지 확인하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1723475739049&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ kubectl get apiservice v1beta1.metrics.k8s.io&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;NAME                     SERVICE                      AVAILABLE   AGE
v1beta1.metrics.k8s.io   kube-system/metrics-server   True        18h&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;다음과 같이 metrics server 설치해주고 TLS 검증 비활성화 해준 후, kubectl top 명령어가 잘 실행되었습니다 :)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MCFVf/btsI0MdoNWX/D6EDIvAjdvq2EgsaYXj6X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MCFVf/btsI0MdoNWX/D6EDIvAjdvq2EgsaYXj6X0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MCFVf/btsI0MdoNWX/D6EDIvAjdvq2EgsaYXj6X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMCFVf%2FbtsI0MdoNWX%2FD6EDIvAjdvq2EgsaYXj6X0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;63&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;79&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;</description>
      <category>DevOps/Kubernetes</category>
      <category>docker</category>
      <category>docker  desktop</category>
      <category>kubectl top</category>
      <category>kubernets</category>
      <category>metrics api</category>
      <category>metrics server</category>
      <category>tls 인증</category>
      <category>Top</category>
      <category>TroubleShooting</category>
      <category>쿠버네티스</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/133</guid>
      <comments>https://data04190.tistory.com/133#entry133comment</comments>
      <pubDate>Sun, 11 Aug 2024 21:50:58 +0900</pubDate>
    </item>
    <item>
      <title>[리눅스] Mac (M1|M2|M3) 에 VirtualBox 설치하는 방법</title>
      <link>https://data04190.tistory.com/128</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://data04190.tistory.com/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://data04190.tistory.com/23&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1721571593652&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;[리눅스] Ubuntu 22.04 설치 및 PuTTY로 원격 접속하는 방법&quot; data-og-description=&quot;Ubuntu 22.04 LTS를 설치하고 PuTTY를 이용해 원격으로 접속하는 방법에 대해 정리한 글입니다. VirtualBox에서 Ubuntu 22.04 LTS 가상머신 설치하기 1. Ubuntu 22.04 LTS ISO 파일 다운로드 https://ubuntu.com/download/serve&quot; data-og-host=&quot;data04190.tistory.com&quot; data-og-source-url=&quot;https://data04190.tistory.com/23&quot; data-og-url=&quot;https://data04190.tistory.com/23&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b8E6JS/hyWCLrjKvu/MqL9h7KP3VXd2aoarP92r1/img.png?width=800&amp;amp;height=369&amp;amp;face=0_0_800_369,https://scrap.kakaocdn.net/dn/cd2LS9/hyWCCOCSaJ/nIaXTZ9VfxtXGWdZtkd5I1/img.png?width=800&amp;amp;height=369&amp;amp;face=0_0_800_369,https://scrap.kakaocdn.net/dn/bbbs68/hyWCCnzXQU/Bbi79vn8gKF79gAUUCvdOk/img.png?width=943&amp;amp;height=436&amp;amp;face=0_0_943_436&quot;&gt;&lt;a href=&quot;https://data04190.tistory.com/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://data04190.tistory.com/23&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b8E6JS/hyWCLrjKvu/MqL9h7KP3VXd2aoarP92r1/img.png?width=800&amp;amp;height=369&amp;amp;face=0_0_800_369,https://scrap.kakaocdn.net/dn/cd2LS9/hyWCCOCSaJ/nIaXTZ9VfxtXGWdZtkd5I1/img.png?width=800&amp;amp;height=369&amp;amp;face=0_0_800_369,https://scrap.kakaocdn.net/dn/bbbs68/hyWCCnzXQU/Bbi79vn8gKF79gAUUCvdOk/img.png?width=943&amp;amp;height=436&amp;amp;face=0_0_943_436');&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;[리눅스] Ubuntu 22.04 설치 및 PuTTY로 원격 접속하는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu 22.04 LTS를 설치하고 PuTTY를 이용해 원격으로 접속하는 방법에 대해 정리한 글입니다. VirtualBox에서 Ubuntu 22.04 LTS 가상머신 설치하기 1. Ubuntu 22.04 LTS ISO 파일 다운로드 https://ubuntu.com/download/serve&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;data04190.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows 환경과 동일하게 Mac에서도 단순하게 Virtualbox를 다운로드하면 실행 될 거라고 생각했지만...&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;2798&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NADb5/btsIGFGrT59/BfkRWcKjqLA68bKzKkyGeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NADb5/btsIGFGrT59/BfkRWcKjqLA68bKzKkyGeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NADb5/btsIGFGrT59/BfkRWcKjqLA68bKzKkyGeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNADb5%2FbtsIGFGrT59%2FBfkRWcKjqLA68bKzKkyGeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;759&quot; height=&quot;248&quot; data-origin-width=&quot;2798&quot; data-origin-height=&quot;916&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;b&gt;macOS / Intel hosts&lt;/b&gt; 버전은 x86_64 아키텍처용이여서 ARM 아키텍쳐를 사용하는 Apple Silicon(M1, M2, M3)와 호환하지 않는다ㅠㅠ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4lKgl/btsIInqJgIh/XRK5CmcZOFl4vPbc6jDqNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4lKgl/btsIInqJgIh/XRK5CmcZOFl4vPbc6jDqNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4lKgl/btsIInqJgIh/XRK5CmcZOFl4vPbc6jDqNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4lKgl%2FbtsIInqJgIh%2FXRK5CmcZOFl4vPbc6jDqNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;870&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;870&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;VirtualBox m1, m2 칩셋에 대한 베타 릴리즈 버전이 있어 Mac(M1, M2, M3)에 VirtualBox 설치 방법 정리하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.virtualbox.org/wiki/Download_Old_Builds_7_0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.virtualbox.org/wiki/Download_Old_Builds_7_0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721573090080&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download_Old_Builds_7_0     &amp;ndash; Oracle VM VirtualBox&quot; data-og-description=&quot;Download VirtualBox (Old Builds): VirtualBox 7.0 The Extension Packs in this section are released under the VirtualBox Personal Use and Evaluation License. All other binaries are released under the terms of the GPL version 3. By downloading, you agree to t&quot; data-og-host=&quot;www.virtualbox.org&quot; data-og-source-url=&quot;https://www.virtualbox.org/wiki/Download_Old_Builds_7_0&quot; data-og-url=&quot;https://www.virtualbox.org/wiki/Download_Old_Builds_7_0&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.virtualbox.org/wiki/Download_Old_Builds_7_0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.virtualbox.org/wiki/Download_Old_Builds_7_0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Download_Old_Builds_7_0 &amp;ndash; Oracle VM VirtualBox&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download VirtualBox (Old Builds): VirtualBox 7.0 The Extension Packs in this section are released under the VirtualBox Personal Use and Evaluation License. All other binaries are released under the terms of the GPL version 3. By downloading, you agree to t&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.virtualbox.org&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/43p2r/btsIHyTQ4k9/yxkpTKGkDNb9TBMdIwyrU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/43p2r/btsIHyTQ4k9/yxkpTKGkDNb9TBMdIwyrU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/43p2r/btsIHyTQ4k9/yxkpTKGkDNb9TBMdIwyrU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F43p2r%2FbtsIHyTQ4k9%2FyxkpTKGkDNb9TBMdIwyrU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;421&quot; height=&quot;868&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;868&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;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;.dmg 파일이 다운로드가 완료되면, 해당 아이콘을 더블 클릭하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zfVZy/btsIGsm2Cko/DanC7nzbBNGY374oxqiwc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zfVZy/btsIGsm2Cko/DanC7nzbBNGY374oxqiwc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zfVZy/btsIGsm2Cko/DanC7nzbBNGY374oxqiwc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzfVZy%2FbtsIGsm2Cko%2FDanC7nzbBNGY374oxqiwc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;684&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;684&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJQ28S/btsIHZRaoFs/9xc1yHu63ukPn26NmIkk01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJQ28S/btsIHZRaoFs/9xc1yHu63ukPn26NmIkk01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJQ28S/btsIHZRaoFs/9xc1yHu63ukPn26NmIkk01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJQ28S%2FbtsIHZRaoFs%2F9xc1yHu63ukPn26NmIkk01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;341&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;872&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEhSbZ/btsIGIbUoPY/InZJVNrxzY8Kf318MyGkoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEhSbZ/btsIGIbUoPY/InZJVNrxzY8Kf318MyGkoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEhSbZ/btsIGIbUoPY/InZJVNrxzY8Kf318MyGkoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEhSbZ%2FbtsIGIbUoPY%2FInZJVNrxzY8Kf318MyGkoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;342&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;872&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1820&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0tYOq/btsIIgrFCZH/4QKKf3iPCstnmPFABYgFXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0tYOq/btsIIgrFCZH/4QKKf3iPCstnmPFABYgFXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0tYOq/btsIIgrFCZH/4QKKf3iPCstnmPFABYgFXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0tYOq%2FbtsIIgrFCZH%2F4QKKf3iPCstnmPFABYgFXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;483&quot; height=&quot;281&quot; data-origin-width=&quot;1820&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>리눅스</category>
      <category>M1</category>
      <category>M2</category>
      <category>M3</category>
      <category>Mac</category>
      <category>MacOS</category>
      <category>virtualbox</category>
      <category>virtualbox 설치</category>
      <category>맥북</category>
      <author>myo-kyeong</author>
      <guid isPermaLink="true">https://data04190.tistory.com/128</guid>
      <comments>https://data04190.tistory.com/128#entry128comment</comments>
      <pubDate>Mon, 22 Jul 2024 00:01:15 +0900</pubDate>
    </item>
  </channel>
</rss>