<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>num_of_tech.log</title>
        <link>https://velog.io/</link>
        <description>이것저것 공부하는</description>
        <lastBuildDate>Thu, 21 Mar 2024 00:21:43 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. num_of_tech.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/num_of_techbytes" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[GCP ]]></title>
            <link>https://velog.io/@num_of_techbytes/GCP</link>
            <guid>https://velog.io/@num_of_techbytes/GCP</guid>
            <pubDate>Thu, 21 Mar 2024 00:21:43 GMT</pubDate>
            <description><![CDATA[<p>cloud.google.com/training</p>
<ol>
<li>Google cloud 제품 및 서비스의 목적과 가치 파악</li>
<li>인프라 구성 제어 방법 정의</li>
<li></li>
</ol>
<p>실무형 실습 - Handson-lab</p>
<h2 id="gcp-소개">GCP 소개</h2>
<ol>
<li>클라우드 컴퓨팅 개요<ul>
<li>클라우드 컴퓨팅 소개:<ul>
<li>고객은 주문형 및 셀프 서비스형 컴퓨팅 리소스를 확보함<ul>
<li>어디서나 인터넷을 통해 리소스 액세스 가능</li>
</ul>
</li>
<li>해당 풀의 리소스를 사용자에게 할당</li>
<li>리소스는 탄력적, 고객 역시 유연함의 해택을 누림</li>
<li>고객은 사용 및 예약한 만큼의 비용만 지불함</li>
</ul>
</li>
<li>역사:<ul>
<li>1세대: 코로케이션<ul>
<li>2세대: 가상 데이터 센터<ul>
<li>여전히 인프라를 유지하는 기업<ul>
<li>사용자 제어 환경</li>
<li>사용자 구성 환경</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>3세대: 컨테이너 기반 아키텍쳐</li>
</ul>
</li>
</ul>
</li>
<li>IaaS Paas <ul>
<li>IaaS: Infra as a Service<ul>
<li>원시 컴퓨팅, 스토리지, 네트워크 기능 제공. </li>
</ul>
</li>
<li>PaaS: Platform as a service<ul>
<li>모든 HW와 SW 제공 및 관리. ex) 라이브러리 까지 제공</li>
</ul>
</li>
<li>결제 모델: IaaS는 할당 리소스에 대한 비용 지불, Paas는 사용 리소스에 대한 비용 지불</li>
<li></li>
</ul>
</li>
<li>Google Cloud 네트워크<ul>
<li>인프라 위치: 북미, 유럽, 아시아, 남미, 오스트레일리아</li>
<li>리전 및 영역: 위치, 리전, 영역<ul>
<li>각 위치는 다양한 리전과 영역으로 나뉨</li>
<li>리전은 독립적인 지리적 구역을 나타내며 영역으로 구성됨. </li>
<li>영역은 클라우드 리소스가 배포되는 곳</li>
<li>리소스는 여러 리전에서 실행 가능</li>
<li>일부 서비스는 멀티 리전 지원</li>
</ul>
</li>
<li>39개 리전, 118 영역 지원</li>
</ul>
</li>
<li>친환경적<ul>
<li>핀란드 해수 사용 냉각 시스템</li>
</ul>
</li>
<li>보안 <ul>
<li>서비스 배포: RPC(리포트 프로시져 콜)을 사용해 통신.</li>
<li>스토리지: 저장 데이터 암호화</li>
<li>인터넷 통신 수준: GFE, DoS</li>
</ul>
</li>
<li>개방형 API 및 오픈 소스<ul>
<li>호환 오픈소스: TensorFlow, k8s</li>
</ul>
</li>
<li>가격 책정 및 결제<ul>
<li>초당 청구</li>
<li>지속 사용할인 제공: 월 25% 이상 실행시 증분 시간에 대해 자동 할인 제공</li>
<li>커스텀 가상 머신 유형: 워크로드에 맞게 가격 조정 가능<ul>
<li>예산 책정 및 모니터링: 예산, 알림, 보고서, 할당량 제공<ul>
<li>할당량: 비율 할당량, 배정 할당량</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<h2 id="gcp의-리소스-및-액세스">GCP의 리소스 및 액세스</h2>
<p>계층적인 구조 리소스</p>
<ul>
<li>4가지 수준으로 구성: 리소스, 프로젝트, 폴더, 조직 노드 (오른쪽 방향으로 상위 계층)<ul>
<li>리소스</li>
<li>프로젝트</li>
<li>폴더</li>
<li>조직 노드</li>
</ul>
</li>
<li>개별 리소스에 정책 적용 가능</li>
<li><h2 id="고유성과-변경-가능성-측면에서-상이한-프로젝트-속성">고유성과 변경 가능성 측면에서 상이한 프로젝트 속성</h2>
</li>
<li>프로젝트: API 관리, 결제 사용 설정, 공동 작업자 추가 제거 등 서비스 사용 및 설정하기 위한 기반<ul>
<li>조작 노드 아래에 있는 개별 항목</li>
<li>프로젝트에는 리소스가 있으며, 각 리소스는 하나의 프로젝트에만 존재</li>
<li>프로젝트의 소유자와 사용자가 다를 수 있음</li>
<li>프로젝트는 별도로 청구</li>
</ul>
</li>
</ul>
<h2 id="iam">IAM</h2>
<p>Identity and Access Management 정책 적용</p>
<hr>
<h1 id="실습">실습</h1>
<p>개요</p>
<hr>
<h1 id="오후-강의">오후 강의</h1>
<h2 id="vpc">VPC</h2>
<p>다른 네트워크에 연결할 수 있는 Google VPC 네트워크</p>
<ul>
<li>cloud VPN, 다이렉트 피어링, 이동통신사 피어링, Dedicated Interconnect, Partner Interconnect, Cross-Cloud Interconnect</li>
<li>Cloud VPC: VPN 터널 연결을 생성. Cloud Router를 사용해 연결을 동적으로 만듦</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DNS 내용 정리]]></title>
            <link>https://velog.io/@num_of_techbytes/DNS-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@num_of_techbytes/DNS-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 05 Feb 2024 01:33:23 GMT</pubDate>
            <description><![CDATA[<h1 id="dns란">DNS란?</h1>
<p>DNS는 Domain Name System으로, 도메인 주소(예: <a href="http://www.google.com)%EB%A5%BC">www.google.com)를</a> IP 주소(예: 127.0.0.1)로 변환하는 역할을 한다. 비유하자면 일종의 전화번호부로, 사람이 복잡한 IP 주소를 일일이 외우고 다니지 않아도 해당 웹 서비스의 도메인 이름만 입력해도 올바른 서버에 연결할 수 있도록 도와준다. 
DNS는 &#39;시스템&#39;로써 도메인을 IP로 변환하는 과정 전체를 의미하기 때문에 여러 계층과 구성 요소로 이루어져 있으며, 전 세계적으로 분산된 서버 네트워크를 포함한다.</p>
<p>또한 서버 IP 변경에 쉽게 대처할 수 있으므로 네트워크 통신에서 DNS의 역할이 매우 중요하며, 특히 최근 클라우드 기반 인프라 구성이 많아지면서 인프라가 빈번히 변경되고, MSA(Micro Service Architecture) 기반의 서비스 설계가 많아지면서 다수의 API를 이용하다보니 사용자의 호출뿐만 아니라 서비스 간 API 호출이나 인터페이스가 많아져 DNS의 역할은 더 중요해지고 있다.</p>
<blockquote>
<p><em><strong>용어 정리</strong></em>
IP: 서버 실제 주소 (예: 127.0.0.1)
도메인: 사이트 이름 (예: <a href="http://www.example.com">www.example.com</a>)
DNS: 도메인을 통해 실제 IP에 접속하는 프로세스 일체
DNS 서버: 사이트 이름의 IP를 가리켜주는 서버</p>
</blockquote>
<blockquote>
<p><em><strong>참고</strong></em>
인터넷은 전 세계 컴퓨터 네트워크가 상호 연결되어 있는 거대한 네트워크입니다. 이 네트워크 상에서 각 장치(예: 웹 서버, 사용자의 컴퓨터)는 고유한 IP 주소를 가지고 있습니다. 이 IP 주소는 인터넷 상에서 데이터를 전송하고 받을 때 장치를 식별하는 데 사용됩니다. 즉, 웹 서비스를 이용하려면 해당 서비스가 호스팅되고 있는 서버의 IP 주소를 알아야만 데이터를 올바른 목적지로 보낼 수 있습니다.</p>
</blockquote>
<hr>
<h2 id="특징">특징</h2>
<ul>
<li>OSI 7 Layer에서 7 Layer(Application Layer, 응용 계층)에 해당하는 프로토콜</li>
<li>데이터 프로토콜이 잘 동작하도록 도와주는 컨트롤 프로토콜. 통신에 직접 관여하지 않지만 처음 통신하거나 통신을 유지하는데 큰 역할을 함</li>
<li>Port<ul>
<li>DNS는 속도가 중요하기 때문에 기본적으로 UDP/53를 사용<ul>
<li>특수한 경우(로드가 많은 경우)에는 TCP/53 사용     </li>
</ul>
</li>
<li>데이터가 512 byte를 넘는 경우(예: 많은 수의 리소스 레코드가 포함된 경우) - UDP는 데이터 크기가 512 byte로 제한되기 때문</li>
<li>Zone Transfer(DNS 서버간 동기화를 위해 DNS Zone을 전송하는 경우) - 이 때는 속도보다 신뢰성이 중요하기 때문</li>
</ul>
</li>
<li>상위/하위 기관과 같은 &#39;계층 구조&#39;를 갖는 분산 데이터베이스 구조</li>
</ul>
<hr>
<h2 id="dns-구조와-명명-규칙">DNS 구조와 명명 규칙</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ae7d3fe6-774a-4464-946c-b512799dafcb/image.png" alt=""></p>
<p>도메인은 역 계층 구조로 이루어져 수많은 인터넷 주소 중에서 원하는 주소를 효율적으로 찾아갈 수 있다. 역트리 구조로 최상위 루트부터 TLD(Top-Level Domain, 최상위 도메인), SLD(Second-Level Domain, 차상위 도메인), Third-Level Domain과 같이 하위 레벨로 주소를 단계적으로 찾아간다. 도메인 주소를 사용할 때 각 계층의 경계를 <code>.</code>으로 표시하고 뒤에서 앞으로 해석한다. </p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6e8dbec5-1848-4770-bdf8-0858a41d95c7/image.png" alt=""></p>
<blockquote>
<p><strong><em>도메인과 URL</em></strong>
URL(Uniform resource Localator)은 도메인을 포함한 경로로, 사용자가 도메인 서버로 접속을 원할때 <code>프로토콜</code> + <code>도메인</code> + <code>경로</code> 등을 통합적으로 나타내는 주소이다. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d5d7ad97-d55d-42e0-8aff-0068ab1ba4c7/image.png" alt=""></p>
</blockquote>
<hr>
<h2 id="dns-구현-요소">DNS 구현 요소</h2>
<ol>
<li><strong>Domain Name Space</strong>: DNS가 관리하는 계층적 데이터 베이스(= 트리구조로 구성된 분산 데이터 베이스 ). </li>
<li><strong>Name Server</strong>: DNS에서 도메인 및 그 데이터에 관한 정보를 보유/관리하는 DNS 서버(또는 서버용 프로그램)<ul>
<li>기능: 도메인 정보의 저장 및 관리 + 변환 요청에 대한 응답 수행(DNS 질의에 대한 응답)</li>
</ul>
</li>
<li><strong>Resolver</strong>: 
Resolver = Recursive DNS Server = Local Server(of ISP) = Recursor</li>
</ol>
<hr>
<h2 id="dns-서버-종류">DNS 서버 종류</h2>
<p>모든 DNS 서버는 네가지 카테고리로 분류된다. </p>
<ul>
<li><strong>DNS 리커서(Recursor, 재귀확인자)</strong> - 리커서는 도서관의 어딘가에서 특정한 책을 찾아달라고 요청받는 사서로 생각할 수 있습니다. DNS 리커서는 웹 브라우저 등의 애플리케이션을 통해 클라이언트 컴퓨터로부터 쿼리를 받도록 고안된 서버입니다. 일반적으로, 리커서는 클라이언트의 DNS 쿼리를 충족시키기 위해 추가 요청을 수행합니다.</li>
<li><strong>루트 이름 서버</strong> - 루트 서버는 사람이 읽을 수 있는 호스트 이름을 IP 주소로 변환(확인)하는 첫 번째 단계입니다. 도서관에서 책장 위치를 가리키는 색인으로 생각할 수 있으며, 일반적으로 다른 더욱 특정한 위치에 대한 참조로 사용됩니다.</li>
<li><strong>TLD 이름 서버</strong> - TLD(Top-Level Domain, 최상위 도메인) 서버는 도서관의 특정 책장으로 생각할 수 있습니다. 이 이름 서버는 특정 IP 주소 검색의 다음 단계이며 호스트 이름의 마지막 부분을 호스팅합니다(example.com에서 TLD 서버는 “com”입니다).</li>
<li><strong>권한 있는 이름 서버(Authorative Name Server)</strong> - 최종 이름 서버로서, 책장에 있는 사전처럼 특정 이름을 해당 정의로 변환합니다. 권한있는 이름 서버는 이름 서버 쿼리의 종착점입니다. 권한있는 이름 서버가 요청한 레코드에 대한 액세스 권한이 있다면, 요청한 호스트 이름의 IP 주소를 초기 요청을 한 DNS 리커서(사서)에게 돌려 보냅니다.</li>
</ul>
<hr>
<h2 id="dns-동작-과정">DNS 동작 과정</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b7a37873-a647-4bd1-a809-5c3d4292917c/image.png" alt=""></p>
<h3 id="dns-조회-단계">DNS 조회 단계</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/336c9ac7-305c-48e0-a959-43c197a3e299/image.png" alt="">
0. 사용자의 도메인 입력 -&gt; 브라우저 캐시 확인(DNS 쿼리) -&gt; OS 캐시 확인(systemcall) -&gt; 라우터 캐시 확인 -&gt; ISP(Internet Service Provider, 인터넷 서비스 제공자) 캐시 확인</p>
<p>(캐싱된 정보가 없는 경우, 아래 단계 진행)</p>
<ol>
<li>쿼리가 인터넷으로 이동 -&gt; DNS 재귀 확인자에서 수신</li>
<li>확인자가 DNS 루트 이름 서버(.)를 쿼리</li>
<li>루트 서버가 TLD DNS 서버(예: .com, .net) 주소로 확인자에 응답. </li>
<li>확인자가 .com TLD에 요청</li>
<li>TLD 서버가 도메인 이름 서버의 IP 주소로 응답</li>
<li>재귀 확인자가 도메인 이름 서버로 쿼리 전송</li>
<li>IP 주소가 이름 서버에서 확인자에게 반환 </li>
<li>DNS 확인자가 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답</li>
</ol>
<p>(IP 주소가 반환되면, 브라우저가 웹 페이지를 요청할 수 있음.)
9. 브라우저가 IP 주소로 HTTP, HTTPS 요청 전송 -&gt; 해당 IP의 서버에서 렌더링할 웹 페이지 반환</p>
<hr>
<h2 id="레코드">레코드</h2>
<h3 id="가장-일반적인-dns-레코드-유형">가장 일반적인 DNS 레코드 유형</h3>
<ul>
<li><strong>A 레코드</strong> - 도메인의 IP 주소를 갖고 있는 레코드. A 레코드에 대해 자세히 알아보세요.</li>
<li><strong>AAAA 레코드</strong> - 도메인의 IPv6 주소를 포함하는 레코드(IPv4 주소를 나열하는 A 레코드와 반대).AAAA 레코드에 대해 자세히 알아보세요.</li>
<li><strong>CNAME 레코드</strong> - 하나의 도메인이나 하위 도메인을 다른 도메인으로 전달하며, IP 주소를 제공하지는 않습니다. CNAME 레코드에 대해 자세히 알아보세요.</li>
<li><strong>MX 레코드</strong> - 이메일을 이메일 서버로 전송합니다. MX 레코드에 대해 자세히 알아보세요.</li>
<li><strong>TXT 레코드</strong> - 관리자가 레코드에 텍스트 메모를 저장할 수 있습니다.이 레코드는 종종 이메일 보안에 사용됩니다.TXT 레코드에 대해 자세히 알아보세요.</li>
<li><strong>NS 레코드</strong> - DNS 항목의 이름 서버를 저장합니다. NS 레코드에 대해 자세히 알아보세요.</li>
<li><strong>SOA 레코드</strong> - 도메인에 대한 관리자 정보를 저장합니다. SOA 레코드에 대해 자세히 알아보세요.</li>
<li><strong>SRV 레코드</strong> - 특정 서비스에 대한 포트를 지정합니다. SRV 레코드에 대해 자세히 알아보세요.</li>
<li><strong>PTR 레코드</strong> - 리버스 조회에서 도메인 이름을 제공합니다. PTR 레코드에 대해 자세히 알아보세요.</li>
</ul>
<hr>
<h2 id="cdn과-gslb">CDN과 GSLB</h2>
<h3 id="cdn-content-delivery-network"><strong>CDN (Content Delivery Network)</strong></h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/464c19b9-d0d4-4144-b406-f1d1f01eb984/image.png" alt=""></p>
<ul>
<li><strong>정의</strong>: 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크(지리적으로 분산된 여러 개의 서버).
전 세계에 분산된 서버 네트워크를 통해 컨텐츠를 사용자에게 빠르게 전달하는 시스템으로써, 컨텐츠를 사용자에게 물리적으로 가까운 서버에서 제공함으로써 로딩 시간을 줄이고 성능을 향상시킨다. </li>
<li><strong>장점</strong><ul>
<li><strong>성능 향상</strong>: 컨텐츠 캐싱을 통해 렌더링, 버퍼링 시간 단축 -&gt; 사용자에게 고품질의 빠른 웹 경험 제공 가능</li>
<li><strong>가용성 보장</strong>: 분산되어 있기 때문에 하나의 서버에 장애가 발생해도 컨텐츠 제공이 가능함</li>
<li><strong>보안성 강화</strong>: DDoS 완화, 보안 인증 개선 등 </li>
<li><strong>대역폭 비용 절감</strong>: 사용자와 더 가까운 서버에서 컨텐츠를 전송함으로써 대역폭 소비와 관련 비용 절감 가능</li>
</ul>
</li>
</ul>
<h3 id="gslb-global-server-load-balancing"><strong>GSLB (Global Server Load Balancing)</strong></h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a229309d-83a1-4cbf-8eef-09c581546581/image.png" alt=""></p>
<ul>
<li><strong>정의</strong>: 트래픽을 전 세계에 걸쳐 분산된 서버에 배포하는 방식. 사용자의 위치 뿐만 아니라 서버의 상태, 네트워크 지연 등 다양한 요소를 고려해 최적의 서버로 사용자의 요청을 라우팅한다. </li>
<li><strong>특징</strong>: CDN이 컨텐츠 전송에 최적화 되어있다면, GSLB는 글로벌 트래픽 관리와 라우팅에 초점을 맞추고 있다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[VM을 AWS로 Migration 하기 ]]></title>
            <link>https://velog.io/@num_of_techbytes/VM%EC%9D%84-AWS%EB%A1%9C-Migration-%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@num_of_techbytes/VM%EC%9D%84-AWS%EB%A1%9C-Migration-%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 20 Dec 2023 05:37:04 GMT</pubDate>
            <description><![CDATA[<h1 id="vm을-aws로-migration-하는법">VM을 AWS로 Migration 하는법</h1>
<h2 id="vmware-환경에서-사용하던-vm을-aws로-옮길-수-있을까">VMware 환경에서 사용하던 VM을 AWS로 옮길 수 있을까?</h2>
<p>쿠버네티스 공부겸 cka 시험을 준비하면서 데스크탑에 VMware를 설치하고 쿠버네티스 환경을 구성했다. 
하지만 사람 일이란게 스터디카페 등 다른 곳에서 공부해야하는 상황이 생길 수 밖에 없었고, 그렇다고 데스크탑을 들고 다닐 수 없었기에 늘 아쉬움이 있었다. 
그래서 생각한 방안들이 외장 하드 디스크에 VM을 설치해서 사용하기, 노트북에 설치하기, Google Chrome의 Remote Control Desktop을 이용해 데스크탑에 원격으로 접속하는 방법 등을 고려했었다. 
하지만 데스크탑(램: 32 GB, CPU: i7-6700k)에 설치된 가상 환경은 각각 2GB의 램과 2개의 CPU 코어를 사용하는 7개의 VM을 운영 중이었고, 내 램 8GB짜리 M2 MacBook Air로는 이를 구현하기 어려웠다. 원격 접속은 데스크탑을 계속 켜둬야 하고, 이 경우 다른 사람이 사용하기 어려워 이 방법도 버려야 했다. 
그러다 VM을 AWS로 마이그레이션해서 사용할 수 없을까? 라는 생각을 했고, AWS VMware import 방법을 발견했다. 이번 글은 VM import 과정을 적어볼까 한다. </p>
<blockquote>
</blockquote>
<h3 id="사전-준비">사전 준비</h3>
<p>일단, 당연하게도 VM 환경과 AWS cli 설치가 필요하다. 여기서는 Windows 10, CMD, AWS CLIv2, VMware Workstation을 기준으로 작성하였다. 
또한, 사용하려는 AWS 계정에 S3와 EC2에 대한 권한 역시 필요하다. root 계정인 경우는 상관 없지만, 사용자를 생성해서 사용하는 경우, 아래 권한을 추가해야한다. (<code>{{대상 버킷}}</code>을 사용하려는 버킷의 이름으로 변경 필요)
S3 관련 권한: 특정 S3 버킷과 그 안의 객체에 대한 읽기 및 쓰기 작업 허용
EC2 관련 권한: 인스턴스 및 이미지 작업 취소, 생성, 설명, 태그 생성, 이미지 가져오기 및 내보내기, 인스턴스 상태 제어(시작, 중지, 종료) 등</p>
<pre><code>{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [
    {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Action&quot;: [
        &quot;s3:GetBucketLocation&quot;,
        &quot;s3:GetObject&quot;,
        &quot;s3:PutObject&quot;
      ],
      &quot;Resource&quot;: [&quot;arn:aws:s3:::{{대상 버킷}}&quot;,&quot;arn:aws:s3:::{{대상 버킷}}/*&quot;]
    },
    {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Action&quot;: [
        &quot;ec2:CancelConversionTask&quot;,
        &quot;ec2:CancelExportTask&quot;,
        &quot;ec2:CreateImage&quot;,
        &quot;ec2:CreateInstanceExportTask&quot;,
        &quot;ec2:CreateTags&quot;,
        &quot;ec2:DescribeConversionTasks&quot;,
        &quot;ec2:DescribeExportTasks&quot;,
        &quot;ec2:DescribeExportImageTasks&quot;,
        &quot;ec2:DescribeImages&quot;,
        &quot;ec2:DescribeInstanceStatus&quot;,
        &quot;ec2:DescribeInstances&quot;,
        &quot;ec2:DescribeSnapshots&quot;,
        &quot;ec2:DescribeTags&quot;,
        &quot;ec2:ExportImage&quot;,
        &quot;ec2:ImportInstance&quot;,
        &quot;ec2:ImportVolume&quot;,
        &quot;ec2:StartInstances&quot;,
        &quot;ec2:StopInstances&quot;,
        &quot;ec2:TerminateInstances&quot;,
        &quot;ec2:ImportImage&quot;,
        &quot;ec2:ImportSnapshot&quot;,
        &quot;ec2:DescribeImportImageTasks&quot;,
        &quot;ec2:DescribeImportSnapshotTasks&quot;,
        &quot;ec2:CancelImportTask&quot;
      ],
      &quot;Resource&quot;: &quot;*&quot;
    }
  ]
}</code></pre><hr>
<hr>
<h3 id="vm-내보내기vm-export">VM 내보내기(VM Export)</h3>
<blockquote>
</blockquote>
<p>VM을 AWS로 가져오기(Import)를 하려면, 먼저 해당 VM의 OVA 파일이 필요하다. 따라서 VM을 OVA 파일로 Export하는 과정이 필요하다. 이 과정에서 주의할 점은 확장자를 OVA로 지정해주지 않는 경우 OVF 파일로 Export 되기 때문에 확장자를 OVA로 지정해줘야한다는 점이다. 물론 OVF 파일로 다운 받아도 OVA 파일로 패키징하면 되지만, 단계가 하나 더 생기는거라 매우 귀찮아진다. </p>
<h4 id="1-1-vm-export">1-1. VM Export</h4>
<p>내보내기할 VM 선택 -&gt; File -&gt; Export to OVF... 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ff8a8231-efe7-408e-ae01-6b26adaaddfd/image.png" alt=""></p>
<hr>
<p>파일 이름 및 확장자 지정 후 설치
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3e6f5c12-cadc-4fda-8999-ac62e4efc68b/image.png" alt=""></p>
<hr>
<blockquote>
<p>윈도우 환경에서 파일 확장자 확인하는법
파일 탐색기 화면 상단 보기 클릭 -&gt; 오른쪽 &#39;표시/숨기기&#39; 항목들 중 &#39;파일 확장명&#39; 체크 표시. </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6ae0c53d-cc24-4d22-b0ae-18ed9ba855df/image.png" alt=""></p>
<hr>
<h4 id="1-2-변환-위-과정에서-ova로-export한-경우-생략">1-2. 변환 (위 과정에서 OVA로 export한 경우 생략)</h4>
<p>만약 OVF 파일로 Export 했다면, ovftool을 이용해서 OVA 파일로 패키징하는 과정이 필요하다. VMware Workstation의 경우에는 ovftool이 자동으로 설치되기 때문에 따로 설치할 필요는 없지만(ovftool이 없는 경우 설치 필요), 대신 변수 설정이 안되어 있다면 cmd 창에서 사용시 ovftool 응용프로그램이 설치된 파일로 위치를 이동하거나 경로를 지정해줘야한다. 보통 C:\Program Files (x86)\VMware\VMware Workstation\OVFTool 에 위치한다. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d3f555f8-a4aa-4ba4-b6a4-84e0789331b4/image.png" alt=""></p>
<p>cmd 창에서 <code>ovftool [원본 OVF 파일 경로] [대상 OVA 파일 경로]</code>를 입력하면 ovf 파일을 ova 파일로 변환 해준다.</p>
<hr>
<hr>
<h3 id="s3-생성">S3 생성</h3>
<h4 id="2-1-버킷-생성">2-1. 버킷 생성</h4>
<p>S3 -&gt; 버킷 만들기 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/13be8501-a2d7-4815-a028-ea1f50091654/image.png" alt=""></p>
<hr>
<p>이름 설정(버킷 이름은 고유해야되므로 안겹치게 만들어야됨) 및 옵션 선택 -&gt; 버킷 만들기
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5a4c6fb9-56a0-42e4-ac73-752f69507145/image.png" alt=""></p>
<hr>
<p>생성한 버킷으로 이동 -&gt; 업로드 클릭 -&gt; 파일 추가 클릭 후 ova 파일 업로드
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/15f927ad-dcd4-4bb9-896b-4e5b6cddcabb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/72130c84-adfd-40c4-b9cd-bd7b94b0d51c/image.png" alt=""></p>
<hr>
<p>업로드 후 모습
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5d1c5f0a-74ab-4b05-b99e-30f165de9eaf/image.png" alt=""></p>
<hr>
<hr>
<h3 id="필요한-iam-권한-설정">필요한 IAM 권한 설정</h3>
<blockquote>
</blockquote>
<p>AWS에서 OVA 파일을 실행하려면, 해당 파일을 AWS EC2 인스턴스로 변환하고 실행해야한다. 
하지만 VM Import/Export 작업을 수행하려면 적절한 IAM(Identity and Access Management) 역할과 권한이 필요하므로, AWS cli 또는 AWS Management Console을 통해 이를 설정해야 한다.</p>
<h4 id="3-1-iam-역할-생성">3-1. IAM 역할 생성</h4>
<p>IAM -&gt; 역할 -&gt; 역할 생성 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f7c40152-2cc9-4776-ac25-645354b5b8cd/image.png" alt=""></p>
<hr>
<p>엔터티 유형 AWS 서비스 선택 -&gt; 서비스 또는 사용 사례 EC2 선택 -&gt; 다음 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/332eba7e-b5c9-469d-8d1c-74ffe0b58516/image.png" alt=""></p>
<hr>
<p>권한 추가 선택 X(권한은 나중에 직접 생성할 예정) -&gt; 다음 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/747a508a-a9e7-48f8-a53a-7e0262ba871b/image.png" alt=""></p>
<hr>
<p>역할 이름 설정 -&gt; 역할 생성 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ffc49ad8-7acc-46a6-b41f-af9285f31e66/image.png" alt=""></p>
<hr>
<h4 id="3-2-역할에-권한-추가">3-2. 역할에 권한 추가</h4>
<p>IAM -&gt; 역할 -&gt; 생성한 IAM 역할 검색
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f57c4632-adb4-459b-91e9-28b3e80d3669/image.png" alt=""></p>
<hr>
<p>대상 IAM 역할 클릭 -&gt; 권한 -&gt; 인라인 정책 생성(Inline Policies)
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b4351c64-1654-494f-be24-aae21cbf8589/image.png" alt=""></p>
<hr>
<p>권한 지정 -&gt; 정책 편집기 JSON 선택 -&gt; 내용 입력 -&gt; 다음 클릭</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1ede86d9-f968-4160-85c1-476b7a85e65f/image.png" alt=""></p>
<p>JSON 내용(<code>{{대상 버킷}}</code>을 사용하려는 버킷 이름으로 변경 필요)</p>
<pre><code>{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;s3:GetBucketLocation&quot;,
                &quot;s3:GetObject&quot;,
                &quot;s3:ListBucket&quot;
            ],
            &quot;Resource&quot;: [
                &quot;arn:aws:s3:::{{디스크 이미지용 버킷}}&quot;,
                &quot;arn:aws:s3:::{{디스크 이미지용 버킷}}/*&quot;
            ]
        },
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;s3:GetBucketLocation&quot;,
                &quot;s3:GetObject&quot;,
                &quot;s3:ListBucket&quot;,
                &quot;s3:PutObject&quot;,
                &quot;s3:GetBucketAcl&quot;
            ],
            &quot;Resource&quot;: [
                &quot;arn:aws:s3:::{{내보낸 이미지용 버킷}}&quot;,
                &quot;arn:aws:s3:::{{내보낸 이미지용 버킷}}/*&quot;
            ]
        },
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;ec2:ModifySnapshotAttribute&quot;,
                &quot;ec2:CopySnapshot&quot;,
                &quot;ec2:RegisterImage&quot;,
                &quot;ec2:Describe*&quot;
            ],
            &quot;Resource&quot;: &quot;*&quot;
        }
    ]
}</code></pre><hr>
<p>고객 관리형 정책(Customer Managed Policies)을 생성하고 역할에 해당 정책을 부여해도 되지만, 개인이 쓸거고 특정 IAM에 특정 버킷에 대한 접근 권한을 부여할 생각이었기 때문에 인라인 정책을 생성했다. 재사용이 필요한 경우 관리형 정책을 생성하는 것이 좋다.</p>
<blockquote>
<p>인라인 정책이란? 
단일 IAM 자격 증명(사용자, 그룹 또는 역할)에 대해 생성되는 정책입니다. 인라인 정책은 정책과 자격 증명을 정확히 1대 1 관계로 유지합니다. 이는 자격 증명을 삭제하면 삭제됩니다. 자격 증명을 생성하거나 이후에 생성할 때 정책을 생성하여 자격 증명에 삽입할 수 있습니다. 정책이 둘 이상의 엔터티에 적용될 수 있는 경우 관리형 정책을 사용하는 것이 좋습니다.
출처: <a href="https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies">https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/440536f8-c7e5-4530-9589-9ada7ab494d3/image.png" alt=""></p>
</blockquote>
<hr>
<h4 id="aws-cli-사용하는경우">AWS cli 사용하는경우</h4>
<ol>
<li><p><code>trust-policy.json</code> 파일 생성 - 역할 생성에 필요</p>
<pre><code>{
&quot;Version&quot;: &quot;2012-10-17&quot;,
&quot;Statement&quot;: [
   {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Principal&quot;: { &quot;Service&quot;: &quot;vmie.amazonaws.com&quot; },
      &quot;Action&quot;: &quot;sts:AssumeRole&quot;,
      &quot;Condition&quot;: {
         &quot;StringEquals&quot;:{
            &quot;sts:Externalid&quot;: &quot;vmimport&quot;
         }
      }
   }
]
}</code></pre></li>
<li><p>역할 생성
<code>aws iam create-role --role-name {{역할 이름}} --assume-role-policy-document &quot;file://{{trust-policy.json 파일의 절대 경로}}&quot;</code></p>
</li>
<li><p><code>role-policy.json</code> 파일 생성 - 정책 생성에 필요. 내용은 AWS Console 사용 방법에서 쓴 json 파일과 동일 </p>
</li>
<li><p>정책을 역할에 연결
<code>aws iam put-role-policy --role-name {{역할 이름}} --policy-name {{정책 이름}} --policy-document &quot;file://{{role-policy.json 파일의 절대 경로}}&quot;</code></p>
</li>
</ol>
<hr>
<hr>
<h3 id="ova-파일-ami로-변환">OVA 파일 AMI로 변환</h3>
<blockquote>
</blockquote>
<p>자, OVA 파일도 준비가 됐고 역할에 권한도 부여했으니 이제 S3에 저장된 OVA 파일을 AMI로 변환하는 과정만 진행하면 된다.</p>
<h4 id="4-1-json-파일-작성">4-1. JSON 파일 작성</h4>
<p>OVA 포맷의 가상 머신 이미지를 EC2 AMI로 변환하기 위해서는 구체적인 설정이 필요하다. 즉, &#39;어디&#39;에 있는 &#39;어떤 형식&#39;의 &#39;무슨 파일&#39;을 변환할 것인가에 대한 정보가 필요한데, 이를 위해서 변환하고자하는 OVA 파일에 대한 정보를 JSON 파일을 통해 제공해야한다.  </p>
<p>JSON 파일 내용</p>
<pre><code>[
    { 
        &quot;Description&quot;: &quot;{{변환될 이미지에 대한 설명}}&quot;, 
        &quot;Format&quot;: &quot;ova&quot;, 
        &quot;UserBucket&quot;: { 
            &quot;S3Bucket&quot;: &quot;{{대상 버킷}}&quot;, 
            &quot;S3Key&quot;: &quot;{{변환할 OVA파일 이름}}.ova&quot; 
        } 
    }
]</code></pre><p>작성한 json 파일들. 여러개의 VM을 변환할 것이었기에 VM당 하나의 JSON 파일을 작성했다.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/69ec0260-b2be-4fac-9cec-bb2b98677bed/image.png" alt=""></p>
<hr>
<h4 id="4-2-ova-파일-ami로-변환">4-2. OVA 파일 AMI로 변환</h4>
<p>이제 아래 AWS CLI 명령어로 파일을 변환해주면 된다. 
<code>aws ec2 import-image --disk-containers &quot;file://{{4-1.에서 작성한 json파일의 경로}}&quot; --role-name {{역할 이름}}</code>
명령어를 입력하면 다음과 같은 출력과 함께 변환이 시작된다. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ca197495-fe21-4493-a762-12e10363bf7b/image.png" alt=""></p>
<p>이미지로의 변환 과정 현황은 다음 명령어를 통해 모니터링 할 수 있다. AMI ID 값은 위에서 출력된 값을 입력하면 된다. 
<code>aws ec2 describe-import-image-tasks {{import 중인 AMI의 ID값}}</code>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/87f8ecc5-0476-45c2-b19d-e55173c944df/image.png" alt=""></p>
<hr>
<h4 id="4-3-다수의-ova-파일-변환">4-3. 다수의 OVA 파일 변환</h4>
<p>필자의 경우 총 7개의 VM을 변환해야했는데 aws cli 명령어를 일일이 치기 귀찮아서 윈도우의 bat 파일을 이용했다. 
txt 파일에 변환할 VM에 대응하는 JSON 파일 이름들을 저장하고, bat 파일에 반복문을 사용해서 모두 실행하도록 만들었다. </p>
<p>목록 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ba47ddb3-72cb-4196-8003-7b452fe43748/image.png" alt=""></p>
<p>bat 파일 작성(txt로 작성 후 bat로 확장자 변경)
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0e9227a2-f73f-4351-b11e-90b08d714985/image.png" alt=""></p>
<pre><code>@echo off
for /f %%i in (ovafiles.txt) do (
    set FILENAME=%%i
    aws ec2 import-image --description &quot;Imported from %%i&quot; --disk-containers &quot;file://%%i.json&quot; --role-name {{역할 이름}}
)</code></pre><p>모든 이미지의 변환 모니터링 명령어
<code>aws ec2 describe-import-image-tasks</code></p>
<hr>
<h4 id="4-3-변환-확인">4-3. 변환 확인</h4>
<p>변환된 이미지는 AWS Management Console에서 확인이 가능하다.</p>
<p>EC2 -&gt; 이미지 -&gt; AMI -&gt; 목록 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/36024ed2-e666-4a01-b53a-11ff66fc5c1c/image.png" alt=""></p>
<p>TMI 1.) OVA 파일 변환은 OVA 파일을 EBS 스냅샷으로 변환하고, 이 스냅샷에서 AMI를 생성하는 과정을 거치게 된다. 따라서 EBS 스냅샷 목록에서도 변환된 목록을 확인할 수 있다. </p>
<p>EC2 -&gt; Elastic Block Store -&gt; 스냅샷
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/33951188-d263-4be5-af60-b2251b7dc2b1/image.png" alt=""></p>
<p>TMI 2.) aws ec2 import-image 명령어를 사용할 때 직접적으로 스냅샷과 AMI의 이름을 지정하는 옵션은 제공되지 않는다. 따라서 Name 항목은 따로 입력하는 과정이 필요하다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 네트워크 소모임 - 라우팅과 AWS 네트워크 이야기]]></title>
            <link>https://velog.io/@num_of_techbytes/AWS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%86%8C%EB%AA%A8%EC%9E%84-%EB%9D%BC%EC%9A%B0%ED%8C%85%EA%B3%BC-AWS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9D%B4%EC%95%BC%EA%B8%B0</link>
            <guid>https://velog.io/@num_of_techbytes/AWS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%86%8C%EB%AA%A8%EC%9E%84-%EB%9D%BC%EC%9A%B0%ED%8C%85%EA%B3%BC-AWS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9D%B4%EC%95%BC%EA%B8%B0</guid>
            <pubDate>Mon, 23 Oct 2023 13:56:15 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/46291b35-8d03-4b89-b3da-9b2482f7ba36/image.png" alt=""></p>
<p>2023.10.23 AWS 네트워크 소모임 </p>
<h2 id="개요">개요</h2>
<ul>
<li>AWS 라우팅을 이해하기 위한 라우팅이 무엇인지, (아주) 가볍게 알아보기!</li>
<li>AWS에서 라우팅이 어떻게 사용되는지 알아보기<ul>
<li>Routing Table, Peering, Transit Gateway 등.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="라우팅이란">라우팅이란?</h2>
<p>컴퓨터 네트워크는 노드라고 하는 여러 시스템과 이러한 노드를 연결하는 경로 또는 링크로 구성됩니다. 상호 연결된 네트워크에서 두 노드 간의 통신은 여러 경로를 통해 이루어질 수 있으며, 라우팅은 이처럼 상호 연결된 네트워크에서 미리 정해진 규칙을 이용해 최상의 경로를 선택하는 프로세스입니다. </p>
<p>요약하자면, 어떤 목적지(네트워크)로 가려면 여기(Next Hop)로 가세요.</p>
<h2 id="라우팅의-필요성">라우팅의 필요성</h2>
<h2 id="장비의-역할">장비의 역할</h2>
<p>경로 학습 및 사용자 경로 지정</p>
<p>Routing 동작 
출발지 -&gt; 목적지로 가기 위한 단계. Hop by Hop 라우팅이라고도 부름</p>
<p>Routing 경로</p>
<ul>
<li>direct</li>
<li>static: 양쪽 라우팅 테이블에 상대에 대한 주소가 각각 있어야됨.</li>
<li>dynamic: 
static이 dynamic 보다 높은 우선 순위를 가진다.</li>
</ul>
<p>AWS에서 사용하는 라우팅: BGP
AWS의 라우팅 우선 순위: 다이렉트 커넥트 &gt; VPN</p>
<p>목적지(네트워크): Destination = destination = Address prefix
도착지(): gateway = target = next hop</p>
<p>10.0.0.0/16에 10.0.0.0/24 서브넷이 존재한다고 할 때, On-premise에서는 10.0.0.0/24만 Local Network로 잡히지만, AWS에서는 CIDR에 의해 VPC 전체가 하나의 Local Network로 잡힘.</p>
<h2 id="vpc-간의-연동-peering">VPC 간의 연동: Peering</h2>
<p>VPC간의 Private 연결 필요
라우팅을 통한 통신
중복되지 않는 IP 주소 설계 필요
Peering 생성 후 라우팅 설정이 필요함.</p>
<h2 id="다수-vpc-연동-aws-transit-gateway">다수 VPC 연동: AWS Transit Gateway</h2>
<p>다수의 VPC를 연동해야하는 경우, VPC는 transit 기능이 없기 때문에 VPC마다 각각의 Peering 연결이 필요하다(ex. ABC 연결 시, A-B, B-C, C-A 각각 Peering 연결 필요). 따라서 다수의 VPC를 연결할 때에는 Peering 대신 AWS Transit Gateway를 사용해서 다수의 VPC를 HUB에 연결한 것처럼 사용이 가능함.
AWS Transit Gateway끼리 연결에서는 Propagation(전파)이 새로 필요함.
라우팅 테이블을 이용해 통신 분리가 가능함.</p>
<h2 id="ip-중복시">IP 중복시</h2>
<p>중간계층을 생성해서 중복된 IP를 연결할 수도 있음.</p>
<h2 id="peering과-transit-gateway-사용에-관하여">Peering과 Transit Gateway 사용에 관하여...</h2>
<p>클라우드 설계시 비용 측면에서 구성할 필요가 있다. 대용량 데이터 처리의 경우, transit gateway를 사용하는 경우 Peering과 달리 통신 마다 비용이 발생하기 때문에 On-premise 및 다수 VPC 연결시 비용 측면에서 구성을 고민할 필요가 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS Hands-on LAB 03]]></title>
            <link>https://velog.io/@num_of_techbytes/AWS-Hands-on-LAB-03</link>
            <guid>https://velog.io/@num_of_techbytes/AWS-Hands-on-LAB-03</guid>
            <pubDate>Thu, 31 Aug 2023 08:44:00 GMT</pubDate>
            <description><![CDATA[<h1 id="vpc-고가용성-구성">VPC 고가용성 구성</h1>
<p>EC2 시작 템플릿 -&gt; 시작 템플릿 생성 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/00db7f92-5a51-49d5-885d-0968ce31d194/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/29585777-3737-413d-9891-9752e9808241/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/82ae88fc-244e-4978-bb33-daf3030306e8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/97c85a25-a973-4586-9a38-fa79c3a3a10b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f8f7735d-a14b-4e1c-88db-2d3c1b966bd3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9430ba59-ce20-41db-8fc2-10a06ada8754/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8fc11637-7b2d-42ef-934a-20b0ef9aafe5/image.png" alt=""></p>
<h3 id="auto-sclaing-group-생성">Auto Sclaing Group 생성</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3ef90183-d647-4cd7-96d6-2776a1ab1754/image.png" alt=""></p>
<p>Auto Sclaing Group 생성 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f1ab1377-6dc7-4c65-bcc3-29046715d15e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/13dcc5b0-6b3b-4139-9be3-cc2448bb516e/image.png" alt=""></p>
<p>인스턴스 시작 옵션에서 VPC와 AZ 및 서브넷 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8a13a424-8d2a-43d1-922c-65ab1c828315/image.png" alt=""></p>
<p>고급 옵션 구성에서 로드 밸런싱 및 대상 그룹 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/780314cd-edf2-4301-85d7-fdc97319592c/image.png" alt=""></p>
<p>추가 설정에서 CloudWatch 활성화 선택. Auto Scaling을 위해 필요. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/17719473-17d8-440f-abca-6fb970f447ce/image.png" alt=""></p>
<p>그룹 크기 및 크기 조정 정책 구성 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a84f7d5e-0a8b-4708-8065-f347694bda0a/image.png" alt=""></p>
<p>태그 추가
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/abcffaa9-254f-4c03-9f80-0b94cc799355/image.png" alt=""></p>
<p>검토 후 생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5b20d234-52cd-43a2-945b-f49f48d01a20/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bba65f18-5817-4b97-b731-f3fc72c3b3fc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a8d993e9-5351-4bb5-a529-4aff1a44cce4/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0dbeeb49-4ca7-4afd-ad70-aacfbbe25d4f/image.png" alt=""></p>
<h3 id="db의-고가용성-구성">DB의 고가용성 구성</h3>
<p>읽기 추가 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/62ed7b72-493f-4bf5-8b40-f88d9af29652/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/dbdfa001-6435-4127-a6a4-065dacad6ac0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a7154259-bad1-4f04-a2d1-c3140fd4a1bc/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fff913c1-9771-4a70-947e-92814699f4b7/image.png" alt=""></p>
<p>inventory-cluster 아래에 replica가 생성된다.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c9961c2f-5666-4abd-acf7-966d898bf8e8/image.png" alt=""></p>
<p>생성 후 구조
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9468057f-e77a-4f73-bb6a-f62a418637f2/image.png" alt=""></p>
<h3 id="nat-gateway-생성">NAT Gateway 생성</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5f26a32e-ca7e-45fe-9aba-7fae4d646ecd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/473fedf7-8d5c-4067-8672-a9c649486abc/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/95665d9e-919c-456d-ae61-f5dfbf02763d/image.png" alt=""></p>
<h3 id="routing-table-생성-및-구성">Routing Table 생성 및 구성</h3>
<p>라우팅 테이블 생성 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2123678d-9fe6-4d6b-bf46-8e08306d06a2/image.png" alt=""></p>
<p>VPC 선택 및 생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3c1c55a9-965d-4664-a7bd-74a940b3cefe/image.png" alt=""></p>
<p>리우팅 편집 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c243a766-3a44-4d7f-bd43-425bca5165fc/image.png" alt=""></p>
<p>라우팅 대상에 새로 생성한 NAT gateway 추가
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2c071053-4232-4209-bda7-e3338d3733ca/image.png" alt=""></p>
<h3 id="서브넷-연결-편집">서브넷 연결 편집</h3>
<p>서브넷 연결 편집 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/15a9d54a-22fb-4cbf-8504-4cfbd3f02199/image.png" alt=""></p>
<p>연결할 서브넷 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/13eb676f-0316-409b-b399-30d3679125b8/image.png" alt=""></p>
<h3 id="auto-sclaing-테스트">Auto Sclaing 테스트</h3>
<p>실행중이던 인스턴스를 종료하면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f60fc8be-d80b-4d52-abbd-da0edbbb93b9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e2028cbd-9087-4ae6-bafe-17eaee4a57ee/image.png" alt=""></p>
<p>최소 개수를 맞추기 위해 인스턴스가 다시 생성된다.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/71e6d88b-a0bd-4dd7-9cab-f5b51c836864/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d01e7b94-5995-46ba-a0df-386c811f3928/image.png" alt=""></p>
<h3 id="db-가용성-테스트">DB 가용성 테스트</h3>
<p>DB replica 인스턴스가 정상상태로 올라온 뒤
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8913bf57-ac62-46b9-94b2-fcb077bbcced/image.png" alt=""></p>
<p>primary 인스턴스를 삭제하면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c6a42b29-fe2c-477d-8f94-6b1f973a4a79/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1be1524d-fe9f-4101-8b62-a6db924b0153/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0106f477-6ff8-4ab3-aec7-224359e1683e/image.png" alt=""></p>
<p>Reader 역할이었던 replica 인스턴스가 Writer 역할로 Role이 변환되면서 장애조치가 완료되는 것을 볼 수 있다.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/74feffe2-a1ea-4330-afe7-99fdb605cb86/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Architecting on AWS 01]]></title>
            <link>https://velog.io/@num_of_techbytes/Architecting-on-AWS-01</link>
            <guid>https://velog.io/@num_of_techbytes/Architecting-on-AWS-01</guid>
            <pubDate>Wed, 30 Aug 2023 08:44:34 GMT</pubDate>
            <description><![CDATA[<p>cloud의 미래 -&gt; 양자 컴퓨팅, RnD 등 cloud 투자가 점점 늘고 있음. -&gt; 클라우드 IDC의 최종 목표는 무인화, 자동화</p>
<hr>
<h1 id="architecting-기본-사항">Architecting 기본 사항</h1>
<h2 id=""></h2>
<ul>
<li>보안 - AWS 보안모범사례를 사용하여 데이터와 자산을 보호할 수 있는 정책 및 프로세스를 구축합니다. 감사 및 추적 기능을 사용할 수 있습니다. 작업 및 환경 변경 사항을 실시간으로 모니터링하고 알리고 감사합니다.<ul>
<li>다계층 보안 중요</li>
<li>WAF - 엣지에서 동작</li>
</ul>
</li>
<li>비용 최적화 - 이 기능은 변동이 심한 리소스 요구를 고려하면서 비용 효율성을 달성하는데 도움이 됩니다.</li>
<li>신뢰성 - 잘 정의 된 애플리케이션 운영 임계 값을 충족하는 각 시스템 아키텍처 설계를 보장합니다. 여기에는 장애복구, 수요증가처리, 중단 완화에 대한 지원이 포함됩니다.<ul>
<li>가용성</li>
</ul>
</li>
<li>성능 효율성 - 인스턴스, 스토리지, 데이터베이스, 공간 및 시간과 같은 리소스 세트에 대해 효율적인 성능을 제공하는 시스템 아키텍처설계를 보장합니다.</li>
<li>운영 우수성 - 사업가치를 창출하는 시스템을 실행하고 모니터링할 수 있습니다. 지원 프로세스 및 절차를 지속적으로 개선합니다.<ul>
<li>코드로 운영 수행 -&gt; IaC</li>
</ul>
</li>
<li>지속 가능성  – 클라우드 워크로드를 실행할 때 환경 영향을 최소화하고 이해합니다.</li>
</ul>
<h2 id="보안-주체">보안 주체</h2>
<p>보안 주체: AWS 리소스에 대한 작업 또는 운영을 요청할 수 있는 엔터티. 사용자, Application, idP 또는 페더레이션 사용자.
권한을 줄때는 사용자에게 주는것이 아니라 역할을 통해 준다.</p>
<p>IAM 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8b776557-ae2b-4130-b92b-6b528aacfd8d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bf4d1d0a-b60f-4277-85b3-50e94852de16/image.png" alt=""></p>
<p>IAM 사용자 생성 선택시 콘솔 암호 필요함. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1deb8360-62ca-4ac5-8001-3785ffa8a7a8/image.png" alt=""></p>
<p>필요에 따라 자동 생성 암호 또는 사용자 지정 암호 선택 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8cf93c18-4bcc-41e6-ba91-b4336a3353c6/image.png" alt=""></p>
<h3 id="역할">역할</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/250175a0-0e8f-4bb3-a54e-00c8cc7f0fa4/image.png" alt=""></p>
<p>신뢰할 수 있는 엔터티 유형 선택이 가능함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/65ed83e1-b047-42f9-9a81-647306855aa8/image.png" alt=""></p>
<p>사용자 뿐만 아니라 서비스에도 부여할 수 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ae361a46-00c3-42bf-8eb4-079dc870f7b8/image.png" alt=""></p>
<p>필요에 따라 웹 자격 증명 등 다양한 유형 선택이 가능함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/29c6ee70-ae4a-47dd-a68b-4b28aedd06da/image.png" alt=""></p>
<h3 id="엑세스-키-사용">엑세스 키 사용</h3>
<p>그러나 엑세스 키를 그대로 사용하는 것 역시 보안적으로 취약(키 값 노출시 누구나 자원 사용이 가능)하기 때문에 엑세스 키 대신 role(역할) 사용. 따라서 엑세스 키 대신 역할을 사용</p>
<h3 id="iam-정책-배정">IAM 정책 배정</h3>
<p>사용자에게 직접 권한을 주지 않는 이유: 권한을 직접 빼앗기전까지 권한이 계속 유지되기 때문에 역할을 만들고 권한이 있는 역할을 부여하므로써 관리. 지정된 시간동안만 권한을 가지고 있으며, 이후에는 토큰 재발급이 필요함.</p>
<h3 id="-1"></h3>
<p>리소스 기반 정책 </p>
<h3 id="명시적-허용-및-명시적-거부">명시적 허용 및 명시적 거부</h3>
<p>IAM 정책에는 명시적 허용 또는 명시적 거부가 포함되며, 같은 정책에 대한 허용과 거부가 동시에 존재한다면, 거부가 높은 우선 순위를 가짐. </p>
<h3 id="aws-organization">AWS Organization</h3>
<p>조직적 계정 관리</p>
<h3 id="scp">SCP</h3>
<p>조직의 권한을 관리하는 데 사용할 수 있는 조직 정책 유형.
Organization 엔터티에 SCP를 연결하면 가드레일이 정의됨.</p>
<hr>
<h2 id="네트워킹">네트워킹</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/126c4985-80b1-4f6d-bb0c-ec21a0b77e68/image.png" alt=""></p>
<p>멀티테넌트: 하나의 자원을 여러명이 사용함.</p>
<p>AWS에서는 서브넷 CIDR 블록마다 5개의 주소가 예약됨(처음 4개의 IP + 마지막 IP)</p>
<p>NAT: Network Address Translation. public IP와 private IP를 변환해줌. private subnet은 외부로 직접 접속이 안되므로 NAT gateway를 통해 외부로 통신함.</p>
<p>VPC당 하나의 LoadBalance로 여러개의 AZ로 Load Balancing이 가능함.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/7ce9c3bc-52c0-4a77-965f-b350370d22fc/image.png" alt=""></p>
<h3 id="보안-그룹">보안 그룹</h3>
<p>트래픽이 상위 티어에서 하위 티어로만 흐른 후 다시 반대로 흐를 수 있도록 인바운드와 아웃바운드 규칙이 설정됩니다. 보안그룹은 특정 티어의 보안 위반 시 손상된 클라이언트가 서브넷 전체에서 모든 리소스에 자동으로 액세스할 수 있게되는 현상을 방지하는 방화벽 역할을 합니다.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/841268c1-e4fb-48f7-9b0c-601a8c7c5964/image.png" alt=""></p>
<p>목표 구조
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/634c6055-0312-445e-887f-c99760d853fd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bb6f5398-7fe2-4618-8cba-a31597d2532a/image.png" alt=""></p>
<p>사용자 지정 보안 그룹은 인바운드 규칙이 없고 아웃바운드 트래픽을 허용함. </p>
<hr>
<h2 id="컴퓨팅">컴퓨팅</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/eb598184-880d-43c9-b5b7-5ef76cb3d7e9/image.png" alt=""></p>
<p>CSP -&gt; 반도체 설계 기술이 필요함</p>
<p>AWS 컴퓨팅의 발전 과정</p>
<ul>
<li>EC2</li>
<li>EBS</li>
<li>Lambda</li>
</ul>
<h3 id="ec2">EC2</h3>
<p>EC2를 서버가 아니라 인스턴스라고 부르는 이유: 필요할 때만 생성하고 종료시키기 때문</p>
<p>EC2 옵션:</p>
<ul>
<li>이름 및 태그</li>
<li>Application 및 OS 이미지</li>
<li>Instance 유형 및 크기</li>
<li>인증 및 키 페어</li>
<li>네트워크 설정 및 보안</li>
<li>스토리지 구성</li>
<li>배치 및 테넌시</li>
<li>스크립트 및 메타 데이터</li>
</ul>
<h3 id="ami">AMI</h3>
<p>클라우드의 가상 서버인 인스턴스를 시작하는데 필요한 정보를 제공함. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1105c571-3007-41c6-b702-d2d05bd1a58e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b0739876-8f61-4fb7-adf1-803b84e14298/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5497a9ec-13ff-4cc4-a39b-923aa0d1b615/image.png" alt=""></p>
<p>키페어
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8414c0a6-5385-4775-bd5f-f094d566f0d6/image.png" alt=""></p>
<p>테넌시
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/75dd0f25-ae46-4547-9c1d-dca71f4a2f77/image.png" alt=""></p>
<p>전용 인스턴스는 Host Hardware 수준에서 물리적으로 격리되는 EC2 인스턴스이다. 전용이 아닌 인스턴스와 다른 AWS 계정에 속하는 인스턴스로 부터 격리됨.</p>
<p>배치그룹
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/50645e2b-b723-42aa-a5e1-ec14fca667ed/image.png" alt=""></p>
<p>사용자 데이터
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4e273616-b0f6-4563-b84e-5343f3d9b596/image.png" alt=""></p>
<h3 id="ebs">EBS</h3>
<p>EBS란? Amazon Elaxtic Block Store. EC2 인스턴스용 스토리지로, 인스턴스가 생성될 때 같이 생성되는 Intance store는 인스턴스 삭제 시 함께 삭제되기 때문에 보관이 필요한 정보의 경우 EBS를 사용해서 정보를 저장. 인스턴스 생성 시 Configure Volume(스토리지 구성)은 EBS를 생성하는 옵션이며, 인스턴스 자체 스토리지는 지원하는 인스턴스가 따로 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2b18408f-e2e7-4bd8-803d-933545e5e01a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/2e05f8d5-e0aa-4cb6-99fd-5c18d2f84e33/image.png" alt=""></p>
<p>인스턴스:EBS = 1:N
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/658f820d-2645-4495-887b-226e2ff91c37/image.png" alt=""></p>
<p>EBS Volume 유형
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/392c8a5f-202d-4fb1-9763-26c0d338eab3/image.png" alt=""></p>
<p>EBS Volume 특성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/33667b5e-9710-4760-8bb5-0deb97dbc6c7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/21406c7e-60d4-46e3-b085-164d88d9fb29/image.png" alt=""></p>
<p>Instance Store Volume
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/29a256b5-37c1-430b-bb46-5af787cf4841/image.png" alt=""></p>
<h3 id="amazon-ec2-구매-옵션">Amazon EC2 구매 옵션</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4d14ffe0-b54b-4860-9929-742563668c88/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/705e4373-bf55-4d4c-8994-15ddb1e4a788/image.png" alt=""></p>
<h3 id="lambda">Lambda</h3>
<p>AWS의 대표적인 서버리스 컴퓨팅 서비스. 서버리스 컴퓨팅 서비스를 통해 사용자가 서버를 프로비저닝, 크기 조정, 관리할 필요가 없음. 따라서 서버리스 어플리케이션에서는 개발자가 서버 또는 런타임 관리와 운영에 대해 걱정하기보다는 핵심 제품에 집중할 수 있기 때문에 개발자가 확장성 및 안정성이 향상된 뛰어난 제품을 개발하는데 사용한 시간과 에너지를 회수할 수 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b80768e9-4a78-40b7-9050-81e998d8beb9/image.png" alt=""></p>
<hr>
<h2 id="instance-역할-부여">Instance 역할 부여</h2>
<p>IAM Role을 인스턴스에 바로 부여할 수 없기 때문에 한번 Mapping하여 역할을 부여함. 실제 역할에 부여된 Role은 <code>AmazonEC2RoleforSSM</code>이며 </p>
<p>aurora.cluster-cygzzazbffvv.us-east-1.rds.amazonaws.com</p>
<hr>
<h1 id="lab-01-amazon-vpc-인프라-구축">LAB 01. Amazon VPC 인프라 구축</h1>
<hr>
<h1 id="lab-02-db-계층-생성">LAB 02. DB 계층 생성</h1>
<p>ALB에 대상 그룹 추가 후 화면 ALB의 DNS 이름을 웹 브라우저에 입력했을 때의 출력
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cdf4092a-6c0d-402e-817f-5a3817992642/image.png" alt=""></p>
<p>위 화면에서 <code>Settings</code> 클릭 후 설정 값 입력 및 <code>save</code>.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/729efec2-f438-4421-833f-44785a460fe4/image.png" alt=""></p>
<p><code>save</code> 직후 화면 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2eb31cbd-a391-4e3c-bc00-df0a38d226c9/image.png" alt=""></p>
<p>Add Inventory도 가능함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6fca265a-02d8-4b4b-a556-cb9c49f4492e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230829-terraform_02]]></title>
            <link>https://velog.io/@num_of_techbytes/230829-terraform02</link>
            <guid>https://velog.io/@num_of_techbytes/230829-terraform02</guid>
            <pubDate>Tue, 29 Aug 2023 06:02:26 GMT</pubDate>
            <description><![CDATA[<p>RDS 설치 -&gt; host 서버 접속 -&gt; httpd + wordpress 설치 
패키지 버전 확인: amazon-linux-extras list | grep php 
특정 버전 설치: amazon-linux-extras enable php8.0</p>
<p>rds 만들고 엔드포인트 받기(mydb.chtn61fibgt9.us-west-1.rds.amazonaws.com)
(표준생성 - mysql(엔진버전 8.0.28 제일 낮은) - 프리티어 - 식별자(mydb) - 자격증명(root) - 마스터암호(It12345!) - 버스터블클래스(t2마이크로) - vpc 선택 </p>
<ul>
<li>퍼블릭액세스(아니오) - 보안그룹(만들어둔것) - 가용영역 설정 - 추가구성 클릭</li>
<li>초기데이터베이스 이름(wordpress) - 백업 활성화 체크 해제 - 스냅샷 체크해제</li>
<li>마이너 버전 업그레이드 해제 - 만들기 </li>
</ul>
<p>워드프레스 홈페이지 다운로드(5.7.8버전 tar.gz)
홈페이지 - all releases - 5.7.8 tar.gz 링크 복사</p>
<h2 id="install-php--httpd">Install php + httpd</h2>
<pre><code>#! /bin/bash
wget https://ko.wordpress.org/wordpress-5.7.8-ko_KR.tar.gz
tar xvfz  wordpress-5.7.8-ko_KR.tar.gz
yum install -y httpd
cp -r wordpress/* /var/www/html/
amazon-linux-extras enable php8.0
yum install -y php php-fpm php-pdo php-mysqlnd
cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
sed -i &#39;s/DirectoryIndex index.html/DirectoryIndex index.php/g&#39; /etc/httpd/conf/httpd.conf
sed -i &#39;s/database_name_here/root/g&#39; /var/www/html/wp-config.php
sed -i &#39;s/user_here/root/g&#39; /var/www/html/wp-config.php
sed -i &#39;s/password_here/root/g&#39; /var/www/html/wp-config.php
sed -i &#39;s/localhost/{ endpoint 주소 }/g&#39; /var/www/html/wp-config.php
systemctl enable --now httpd</code></pre><h2 id=""></h2>
<p>코드 작성 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/045603c2-66ad-45fd-8b0a-d92e79ed9cae/image.png" alt=""></p>
<p>명령어들은 코드에 하드 코딩하지 않는것이 좋으므로 따로 파일에 저장하여 사용.</p>
<p>sh 파일 생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4951ba12-7981-4184-9992-691f7365824a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/546e0ee9-4a77-44fa-aeb0-7cb0ca90e2fd/image.png" alt=""></p>
<p>코드 수정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/02089ab0-05d6-400c-86e0-54b4af3933bf/image.png" alt=""></p>
<p>엔드포인트가 없는 경우, 실행하면 DB 연결 오류 화면이 출력됨 -&gt; DB 서버 생성 후 엔드포인트를 추가해 주면 wordpress 화면이 정상적으로 출력됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8ef756da-d25d-49d1-946e-59c5d9dc42b4/image.png" alt=""></p>
<h2 id="elb-생성">ELB 생성</h2>
<p>공식 문서: <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb</a></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c687b928-39bb-4175-83c4-4837c02c4918/image.png" alt=""></p>
<p>tmi: 
AWS는 frontend와 backend를 리스너와 타겟그룹으로 부른다. 접속 구조는 <code>리스너(Front-end) -&gt; LB -&gt; target group(Back-end)</code><br>ALB 생성시 target group은 listener 보다 먼저 생성되어야 한다.
health check는 html로만 가능하기 때문에 health check용 html 생성이 필요할 수 있음.</p>
<p>tf code 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3a629ee9-f973-4ed3-8d85-3cdec7d46370/image.png" alt=""></p>
<p>생성됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/597b0e44-2535-4a31-851a-488c85b82ed1/image.png" alt=""></p>
<h2 id="alb-target-group-생성">ALB Target Group 생성</h2>
<p>공식 문서: <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_target_group">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_target_group</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a13fb3d7-eed9-40b2-a61b-e54f7a50a9f0/image.png" alt=""></p>
<p>tf code
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/89c6133e-ce2c-4e8f-ba4a-776fb104da1a/image.png" alt=""></p>
<p>health check를 위해 sh파일에 <code>health.html</code>을 생성하는 코드 추가.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e6db6725-a23c-4013-98f5-aedf7d9b1a60/image.png" alt=""></p>
<p>apply
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d6be4782-2c11-420e-b97c-80c5402ee09d/image.png" alt=""></p>
<p>user data가 추가 되면 기존 인스턴스는 종료되고 새로운 인스턴스가 생성됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/70aa87a3-8dbc-4195-8c96-252785d563f6/image.png" alt=""></p>
<p>코드 수정후 health.html 내용이 정상 출력됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ad915403-252f-4391-8e76-1dc2be57cf8f/image.png" alt=""></p>
<p>aws console에서 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/112bed59-01cc-4bfe-9c98-fdb932a5e965/image.png" alt=""></p>
<h2 id="alb-listener-생성">ALB listener 생성</h2>
<p>공식 문서: <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_listener">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_listener</a></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/df57381d-3c19-439a-99e2-9b15a5adfd0a/image.png" alt=""></p>
<p>tf code
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6c45bb1f-b03d-4fe1-b811-dc7f7e30f7ad/image.png" alt=""></p>
<p>apply
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f52d3783-cc02-4b05-b58b-2c13fc580a95/image.png" alt=""></p>
<p>auto scale 및 attachment 필요.
auto scaling 그룹 -&gt; 시작 템플릿 필요</p>
<h2 id="ami-생성">ami 생성</h2>
<p>공식 문서: <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ami_from_instance">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ami_from_instance</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4ce96f2b-7f84-4b9a-b845-3fd6e7cd11ba/image.png" alt=""></p>
<p><code>depens_on</code> 명령어 사용</p>
<p>코드
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/efcb4de2-f6a4-4669-8a96-63d8612ebe8e/image.png" alt=""></p>
<p>aws console 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/96c44a9c-36c5-4f84-81ac-0154bf4dffdb/image.png" alt=""></p>
<h2 id="autoscale-생성">AutoScale 생성</h2>
<p>Launch configuration
평문으로 입력하면 안됨 -&gt; <code>filebase64</code> 사용해서 암호화 필요</p>
<p>공식 문서(Launch template): <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f69cf99c-fa33-4706-91fb-d18921f9f981/image.png" alt=""></p>
<p>tf code 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6c3059cd-e779-4f0a-86be-d3261f1d2231/image.png" alt=""></p>
<h2 id="auto-scaling-group-생성">Auto Scaling Group 생성</h2>
<p>공식 문서: <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/56f82417-f399-475f-8ab4-692af815627b/image.png" alt=""></p>
<p>tf code 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4d627af7-fe78-4b01-a814-deb658412f0e/image.png" alt=""></p>
<p>concat을 이용해서 한번에 여러개의 resource를 처리하는것도 가능함.</p>
<p>Auto Scaling group 생성 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a48d3bf6-5210-4808-9d13-5098dae60cd1/image.png" alt=""></p>
<h2 id="auto-scaling-attachment-작성">Auto Scaling Attachment 작성</h2>
<p>공식 문서: <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_attachment">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_attachment</a></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d088ef8f-852e-4de0-8354-31acf67df7ce/image.png" alt=""></p>
<p>tf code 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0806c826-6713-450b-aeb4-e0f32a432d92/image.png" alt=""></p>
<h2 id="rds-생성">RDS 생성</h2>
<p>공식 문서(DB instance): <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance">https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance</a></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6cd33685-bd97-45f5-8d00-20abf2ee2cd2/image.png" alt=""></p>
<p>tf code 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6e26a345-8dd2-40f5-9634-b3e2a405afc8/image.png" alt=""></p>
<p>RDS 생성됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f6293f45-56bb-49bc-9948-20a7dd14412d/image.png" alt=""></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[230809-VMware3 ]]></title>
            <link>https://velog.io/@num_of_techbytes/230809-VMware3</link>
            <guid>https://velog.io/@num_of_techbytes/230809-VMware3</guid>
            <pubDate>Wed, 09 Aug 2023 08:48:18 GMT</pubDate>
            <description><![CDATA[<h1 id="vcsa-설치-및-기능들">VCSA 설치 및 기능들</h1>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e359b2a9-477e-439e-bd6f-a89d68377fcf/image.png" alt=""></p>
<p>VCSA 설치 후 웹 사이트 접속 - 인증서 오류 화면 출력됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e356d78b-f141-434a-850e-00531d93cf48/image.png" alt=""></p>
<h2 id="vcsa-인증서-추가">VCSA 인증서 추가</h2>
<p>접속을 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/db55bcaa-4443-44d7-9427-8278504c3207/image.png" alt=""></p>
<p>CA인증서 다운로드 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1a85a7da-2fff-434d-bce6-99ce6ae82324/image.png" alt=""></p>
<p>인증서 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a4c1af55-9db7-441a-a9de-277514e0c9fd/image.png" alt=""></p>
<p>다른이름 저장
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f8553d47-a9c3-4cf7-82ea-30fec7d1798b/image.png" alt=""></p>
<p>바탕화면 저장
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2f197ba5-b8cb-4662-8378-0d9e91052111/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/20e7bd2f-5e5e-429a-8da7-09e882fdb295/image.png" alt=""></p>
<p>필요한 OS 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/63dfc8fe-a710-4260-b0c8-f9fe7a09b94e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a66f52e9-5d13-4487-aa03-04451cebdc30/image.png" alt=""></p>
<p>인증서 Open
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4d4756ff-c5e8-47cb-87b7-f7c900b1f62c/image.png" alt=""></p>
<p>인증서 내용 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f4846bc4-0d79-4189-9da6-134b2e4f0542/image.png" alt=""></p>
<p>인증서 설정 필요
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5967fc7d-9e20-4dfa-a130-344e6abc4f66/image.png" alt=""></p>
<p>신뢰할 수 있는 인증서 목록에 해당 인증서가 없음을 확인 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a7917143-43ba-4de0-9a8a-caded1c1ac99/image.png" alt=""></p>
<p>인증서에서 install 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3b31100c-1ffb-46dd-a4b3-add0a6bfa081/image.png" alt=""></p>
<p>설치 위치를 Local Machine로 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e792e3a6-1485-4fee-ad1c-9840c8dea552/image.png" alt=""></p>
<p>인증서 설치 위치를 Trusted Root Certification Authorities로 지정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e9bd5dae-dbe2-404f-ba4f-2305023213ba/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/83c296d5-ce24-4284-bd8a-6bb589e806fe/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e8b0066e-eeda-4962-b840-61d978202f53/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/cf1d2cce-8742-4dd9-8631-27684dc0dba7/image.png" alt=""></p>
<p>설치됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5ff291ae-d576-48e5-8d1f-ebc463f5fcf1/image.png" alt=""></p>
<p>웹 브라우저 확인 - 사이트 주소 입력으로 접속해도 접속 거부 알림이 나오지 않음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/52efeb29-1ee1-489c-85f5-2876b1a70bde/image.png" alt=""></p>
<p>Lanch vSphere Client 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/68924233-fcc6-4d22-b0af-4aec5dea9513/image.png" alt=""></p>
<p>즐겨찾기에 추가
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9a71f6d1-b335-4c1b-8588-8a9e2db642e8/image.png" alt=""></p>
<p>접속 화면 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/90c1b94b-51fd-45ba-b763-66b490a0e0b3/image.png" alt=""></p>
<hr>
<p>VMware vCenter Server 관리: 배포한 서버 appliance를 관리</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/842ceb31-f381-435b-ab2d-ea7b6de5bf7b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1f475466-9062-4623-86aa-6b0a0007a644/image.png" alt=""></p>
<p>내부 화면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d44116c7-fdaf-4a53-b047-f5d218d94221/image.png" alt=""></p>
<hr>
<h3 id="컨테이너-기반의-웹서비스에서-신뢰할-수-있는-인증서-사용하기">컨테이너 기반의 웹서비스에서 신뢰할 수 있는 인증서 사용하기</h3>
<p><a href="https://hyeo-noo.tistory.com/267">https://hyeo-noo.tistory.com/267</a>
<a href="https://docs.docker.com/storage/volumes/">https://docs.docker.com/storage/volumes/</a>
<a href="https://zinirun.github.io/2021/03/31/docker-nginx-certbot/">https://zinirun.github.io/2021/03/31/docker-nginx-certbot/</a></p>
<hr>
<h2 id="vcsa-설정">VCSA 설정</h2>
<p>Manage Your Licenses 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/aaf7d73f-ba7e-4290-8353-9004995be1d0/image.png" alt=""></p>
<p>License Key 입력
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7323ecca-4190-4214-9158-92566ffc26f2/image.png" alt=""></p>
<p>License name 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/03eb76dc-34a5-41a2-a2ce-7253bd5952c2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/56706255-4ca5-4c3b-8339-ee2577c806d5/image.png" alt=""></p>
<p>목록에 나옴
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3f72aab2-6687-4020-9882-12c8a0b5aeb2/image.png" alt=""></p>
<hr>
<h3 id="licenses-항목">Licenses 항목</h3>
<h4 id="license-설정">License 설정</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/21b48829-8909-4b01-8c83-5aeaf2ea8613/image.png" alt=""></p>
<p>Assign License 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d58db2f5-d6e5-432f-843e-dbe4229626fc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b9989dac-773b-45ae-bc5d-c1d3b8fe9483/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4e77f9c1-bcb1-4306-a926-765a6e177e7a/image.png" alt=""></p>
<hr>
<h2 id="기능-둘러보기">기능 둘러보기</h2>
<h3 id="inventory---configure">Inventory - Configure</h3>
<h4 id="general">General</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5417b246-bb90-48c5-ad63-cb92b3f45ea5/image.png" alt=""></p>
<p>Mail, SNMP
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1cd30567-cb6e-4acb-ba6a-17d7aefc4c2e/image.png" alt=""></p>
<p>Database
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/967e5792-9b2e-4770-80e2-e440eac6efe6/image.png" alt=""></p>
<p>Statics: 통계 데이터 기록에 대한 설정.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9f79a0b0-3f58-4ae6-b6e4-b59aa38d17f5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/553c37bb-dce3-4e61-af68-117c9fd9830a/image.png" alt=""></p>
<p>General</p>
<ul>
<li>Mail: 알림을 Mail로 수신할 수 있는 서비스</li>
<li>Runtime settings: Unique ID를 통해 중복되지 않고 여러대의 vCenter를 생성할 수 있음. vCenter Server avilable -&gt; Active-Standby 개념의 가용성 보장(백업과 다름)</li>
<li>Database: postgress</li>
</ul>
<h4 id="licnesing">Licnesing</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a935c510-75e1-4992-8b09-b09622164ae0/image.png" alt=""></p>
<h4 id="message-of-day">Message of Day</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/92ebf985-15cb-43e9-84e0-d1c0266ea55a/image.png" alt=""></p>
<h4 id="advenced-setting">Advenced Setting</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/fb434b31-7033-4021-adbf-8f6964b03293/image.png" alt=""></p>
<h4 id="authentication-proxy">Authentication Proxy</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b8efc851-379c-4b8d-b357-9cf4f5b1b14f/image.png" alt=""></p>
<h4 id="vcenter-ha">vCenter HA</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b1265d47-c762-4e9a-a993-38d398eba3d6/image.png" alt="">
Witness vCenter는 두 서버(active, passive) 사이에서 감시하는 서버. </p>
<h3 id="security">Security</h3>
<h4 id="trust-authority">Trust Authority</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d74dede7-b11a-4679-8b48-7038749e58bc/image.png" alt=""></p>
<h4 id="key-providers">Key Providers</h4>
<p>vCenter의 Key 관리 시스템. 저장소에 저장할때 암호화가 필요하다면 이 기능이 필요함
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6f4126d8-2e89-4122-a23f-94e12075f575/image.png" alt=""></p>
<p>Window 11은 TMP 사용이 가능해야 사용할 수 있기 때문에 Window Server 11을 설치하기 위해서는 TMP 사용이 가능해야함.</p>
<h4 id="alarm-definition">Alarm Definition</h4>
<p>error 알림 종류에 따라 On/Off 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/09e184dc-b7aa-4521-a091-84534d332f3c/image.png" alt=""></p>
<p>알람 추가 및 삭제 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f0e08522-cd8a-41a8-adad-84792a210987/image.png" alt=""></p>
<p>알람 추가 1. 알람의 대상 type을 잘 정해야함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9c4416c6-f580-4471-bd9f-d849ac20b707/image.png" alt=""></p>
<p>알람 추가 2. Alarm Rule 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/97b6ae7e-f798-414d-b80b-7895b6f97eef/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c685fcfa-3e5e-4c55-926f-8cfed067368e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ab2c0b67-a954-404a-a3a6-f1c3b5d25aad/image.png" alt=""></p>
<hr>
<h2 id="vcsa에-esxi-추가">VCSA에 ESXi 추가</h2>
<h3 id="datacenter-생성">Datacenter 생성</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5122b9f2-b2ef-41f0-9ffd-56bfb284464c/image.png" alt=""></p>
<p>이름 설정 - 보통 지역 또는 지사를 입력함
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d3379de-ae4a-413a-a7bb-c5754a7f5155/image.png" alt=""></p>
<p>서버 추가 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/18825165-99ca-4879-bf42-4a4ad8c583b8/image.png" alt=""></p>
<p>서버 이름 복사
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f45c4a57-d109-4c14-aed1-24c6d3264032/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a0ae0211-8f4a-45b7-a4c9-bd53df952266/image.png" alt=""></p>
<p>Host 이름 / IP 추가
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1f52f8a5-40fc-413b-94d3-34d2421ba42f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/86dfd2b7-f15c-48d7-9393-969b1324586b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/39c7a460-cfae-4d22-8eb3-0192c594f644/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c01b63a8-b315-48f9-918a-5a467fd8924c/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4d139fb5-03fd-4b66-8fa9-fac9fa0c2f24/image.png" alt=""></p>
<hr>
<h2 id="cluster-생성">Cluster 생성</h2>
<p>생성 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/45131a11-69fe-4a12-8c5a-91111539977c/image.png" alt=""></p>
<p>이름 및 기능 설정 - 업무적인 내용을 추가하는 것이 좋음(업무단위 그룹으로).
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d123a0a-6d7f-4702-b09a-9d855eba7187/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cc2a1eb4-e092-4fb7-b727-ec5148f91c56/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3812cc97-6545-4877-bf32-d569ecda0f61/image.png" alt=""></p>
<p>생성 후 Quickstart 화면이 나옴. -&gt; 서비스를 사용하기 위한 전제조건을 확인하는 work flow가 설정되어있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ae75f772-f49c-4789-babf-5eeb3e0d57e8/image.png" alt=""></p>
<p>HA의 전제 조건: 여러 서버들이 공유 스토리지를 가지고 있음 -&gt; 자신이 어떤 volume을 가지고있는지 등의 정보를 Master Server와 공유함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f6385819-9400-439b-995c-ea001879a041/image.png" alt=""></p>
<hr>
<h2 id="cluster에-host-추가">Cluster에 Host 추가</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1c8bc48a-e293-4553-aa57-c66bb0f472ca/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4722007d-0f4f-4d75-b3dd-58f84762f41f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2447b58b-7bef-43f9-9e54-56a0017db0d4/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8291ffa8-ef51-42a7-abd8-86ab8f564a15/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/642fc0c0-310e-4876-9e5c-43164dc25511/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/009d3c5d-4b42-4074-b48e-e5f7f5ffce81/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/62272132-e4b4-4341-9d0b-d4df57583a21/image.png" alt=""></p>
<hr>
<h2 id="storage-true-nas">Storage True NAS</h2>
<p>yaml 파일을 작성한 뒤 실행.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/956a0add-b8cb-450b-8838-60d461434763/image.png" alt=""></p>
<p>생성됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4592b50d-ba07-48c0-b072-83ff83644282/image.png" alt=""></p>
<p>주요 옵션</p>
<ul>
<li>paravirtual: 반가상화</li>
</ul>
<pre><code>---
- hosts: localhost
  vars_files: ./vars.yaml

  tasks: 
    - name: Create TrueNAS Storage VM
      community.vmware.vmware_guest:
        hostname: &quot;{{ vcenter_hostname }}&quot;
        username: &quot;{{ vcenter_username }}&quot;
        password: &quot;{{ vcenter_password }}&quot;
        validate_certs: &#39;false&#39;
        datacenter: &#39;{{datacenter_name}}&#39;
        folder: &#39;{{ folder_prefix + student_ID }}&#39;
        name: &quot;{{ student_ID + &#39;-Storage&#39; }}&quot;
        state: poweredoff
        guest_id: freebsd13_64Guest
        esxi_hostname: &quot;{{ esxi_hostname }}&quot;
        hardware:
          num_cpus: 2
          nested_virt: yes
          memory_mb: 8192
        disk:
        - size_gb: 40
          controller_type: &#39;paravirtual&#39;
          controller_number: 0
          unit_number: 0
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 100
          controller_type: &#39;paravirtual&#39;
          controller_number: 0
          unit_number: 1
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 100
          controller_type: &#39;paravirtual&#39;
          controller_number: 0
          unit_number: 2
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 100
          controller_type: &#39;paravirtual&#39;
          controller_number: 0
          unit_number: 3
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 100
          controller_type: &#39;paravirtual&#39;
          controller_number: 0
          unit_number: 4
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;          
        networks:
        - name: &quot;{{ student_ID + &#39;-SA-Storage&#39; }}&quot;
          device_type: vmxnet3
        cdrom:
        - controller_number: 0
          unit_number: 0
          state: present
          type: iso
          iso_path: &#39;[RECA3-05]\ISOs\TrueNAS-13.0-U4.iso&#39;
      delegate_to: localhost
      register: deploy_vm</code></pre><p>설치 후</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/dd1a693a-830f-41ff-9647-da34014b0c38/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9823f755-3b93-4b8c-ab4a-95dbfbb403e5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ad6bec63-d22c-4659-a90f-be096471c608/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1df3112f-c016-4e74-b2fb-e25671e1478a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/62e7270b-92ee-442d-b456-299159380554/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0cc8a535-6b94-4137-8490-d849bb8f5219/image.png" alt=""></p>
<h4 id="필요에-따라-dc-서버에-edit-setting-가능">필요에 따라 DC 서버에 Edit Setting 가능</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/44a2b24b-8a21-42e3-b17b-7598e53a94a7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/762ceb6b-f22b-4c4e-b3c5-1e7a94b7f00a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5ffe047f-bfaf-4773-b0fb-78eb04a61ea9/image.png" alt=""></p>
<p>vSphere에서 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d145bc32-172e-4278-b3bc-ad9559f5482e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5da4bbcb-a0ba-4acc-90b9-50b53cf14990/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8b6ef002-c76a-4fcb-b8bc-529e7e4b8f88/image.png" alt=""></p>
<p>목표 구성.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5de1eba6-68ed-4f3a-9a7a-6c0dc19cea37/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e06e276f-2cfc-4a58-a917-3afcc4327921/image.png" alt=""></p>
<p>DC 서버에서 웹 브라우저로 10.10.11.10 접속
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/66faf5ec-0163-4580-a4cc-689c8643564d/image.png" alt=""></p>
<p>인증서 신뢰 접속
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/175d2c76-f2ad-4856-a1f1-81cd01cbe2bb/image.png" alt=""></p>
<p>NAS UI 화면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c4a32c63-6b15-4eeb-8c63-dd1c60c0e8f6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/281874aa-9299-4385-a14c-e9fb7e0b7745/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f717d130-6a24-4dab-9754-90a867400b18/image.png" alt=""></p>
<h3 id="storage-pools-생성">Storage Pools 생성</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/680cc08b-5cb2-4e97-837d-e03dd87f30e3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ee620cb9-42a3-483d-b70f-44d57175a6b5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3aa45665-594f-4857-95a9-11a8255f44f5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9648d46f-5594-4a15-b77d-23a3f96e9bd3/image.png" alt=""></p>
<p>Stripe 방식 선택시 위험 알림이 나옴.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0fb155a7-24ac-4bd9-82c4-9392d5e69177/image.png" alt=""></p>
<p>Raid-z 선택 후 생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d191594-a716-4700-acfb-8a7d2f0b701e/image.png" alt=""></p>
<p>생성된 Pool 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/229ebc3c-9b3c-42d4-be65-946fd1913b85/image.png" alt=""></p>
<p>UI에 포함된 Shell 서비스로 생성된 Pool에 접속 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e3464230-dd2d-485c-956f-98245824f0bb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/56544514-94ce-4751-a002-7ce272d24f57/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9789fbfe-efc4-4f3d-9faa-1516dfa9ba0c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/56711c63-3f2c-4921-b5f5-e52f0ab5b5b6/image.png" alt=""></p>
<p>Quota: 계정별 용량 제한 기능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d1f30806-2e1e-4556-b490-c9d85df94240/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4903dbb8-2b98-4c53-a6de-26ea33e8a01d/image.png" alt=""></p>
<h3 id="iscsi">iSCSI</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/fdee2ac8-fa91-4540-af5d-263d55fceb78/image.png" alt=""></p>
<ul>
<li>Target Global Configuration </li>
<li>Targets </li>
<li>Associated Targets </li>
</ul>
<p>Wizard 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f6c44d5b-f493-42c0-9630-b3ff2eb950c0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e37f599b-faee-44f0-968c-4638ddc736cd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bc98fdeb-5b3f-441a-bfa4-2adeedf605f6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bcb5536c-b280-41ae-9a46-eea49852dc3f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/2477dae4-6aa6-4619-9cfe-65783f2f3388/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/095af392-b597-46b4-bb9f-1875d0bf4a6b/image.png" alt=""></p>
<p>서비스 실행중인지 확인이 필요함 -&gt; iSCSI ON
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1e0cddf2-c934-4058-b2b4-4ac5a5580841/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/207d1a11-22be-48ff-bcbf-84ebec9d1b06/image.png" alt=""></p>
<p>vSphere UI에서 Adapter 확인 -&gt; iSCSI Software Adapter가 없으므로 이후 추가 필요함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5e52c08d-5098-4d2a-8f29-60af74a407dd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/30ec3c7f-93db-4fa6-b0ab-e0b3596aa716/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8f0706f2-9b43-454b-ad8a-7fe88734526c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b3ba2784-c4bf-4796-9591-5dece0befc46/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b7f492a5-b4df-4f42-9c34-28578ffc4be6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d236f79-997a-4abc-8380-0a94f5f0d4d2/image.png" alt=""></p>
<p>Rescan Adapter을 클릭하면 NAS 장치가 목록에 나타남.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a811589c-b0c4-4945-8082-c30090954dde/image.png" alt=""></p>
<hr>
<h2 id="iscsi-연결을-위한-best-practice">iSCSI 연결을 위한 Best Practice</h2>
<p>참고 자료: <a href="https://core.vmware.com/resource/best-practices-running-vmware-vsphere-iscsi#section2">https://core.vmware.com/resource/best-practices-running-vmware-vsphere-iscsi#section2</a></p>
<p>라우터 -&gt; 라우터를 거치지 않는것이 속도가 더 빠름.
스위치 -&gt; 안정성을 위해 uplink를 두개 연결.</p>
<hr>
<p>ansible로 AWS, VMware 제어 가능함</p>
<h2 id="분산-스위치-distributed-switch">분산 스위치 Distributed Switch</h2>
<p>Data Center Level의 스위치는 Data Center에서 설정해야 함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1f58519d-9d27-4c3f-ab0d-5a67946e5dca/image.png" alt=""></p>
<p>New Distributed Switch 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ea6e831a-5480-4846-b1ca-464940a1a82b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3c2f7f2e-7953-4b6c-9f8e-6fcf6c672ff2/image.png" alt=""></p>
<p>Version 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/80711daa-0182-430c-a17b-ba0e46ba6797/image.png" alt=""></p>
<p>Uplink 개수 설정 -&gt; 최소 2개를 권장.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d51d78c6-725f-4add-a444-b568d5823f21/image.png" alt=""></p>
<p>설정 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5b9f3380-7075-4fb7-bff3-1eda546e16d8/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/57df50c3-c0b7-4178-8f36-88a959d0388e/image.png" alt=""></p>
<hr>
<h2 id="host-추가">Host 추가</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/358ce7e0-bf90-45b6-8748-af302a3d5edb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f522f032-5247-4faf-b7ed-6e5e5d6904e0/image.png" alt=""></p>
<p>추가할 서버(Host)들 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9d2a705d-d20a-4755-a962-ad57bd3c6e3c/image.png" alt=""></p>
<p>Adapter 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/90cdb009-fbb1-4c83-8242-021945639804/image.png" alt=""></p>
<p>스위치로 사용중이지 않은 vmnic을 찾아서
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f79cb924-d0d0-436f-9fa9-ce6f149d3396/image.png" alt=""></p>
<p>Uplink로 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7a8619a4-46fc-4ba0-a27e-cd2d05449aac/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/94884d74-67cb-44fb-9084-c22d5deed8cd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8f7fa8d5-a1be-431d-8b7f-e3690c2d7d68/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9915ca85-3637-4354-bbd1-eaf46c3d791d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4777c544-3161-4539-a396-a8f4392a10fe/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/673cdb2c-3f62-4fce-a08d-fa7120a0f861/image.png" alt=""></p>
<h2 id="port-group-생성">Port Group 생성</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bc65033b-4081-492d-afab-36108acf8568/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/27713793-46e3-4715-aa94-064594f65f08/image.png" alt=""></p>
<p>Configure setting - port binding, allocation, Number of ports 설정 가능 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/86ee75e6-a7a0-4cac-9913-e2a7a1cd6a08/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d42089a2-8da1-4433-9124-341bc2532d0c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e5d4e0ff-294d-4014-9d7f-3b564d5dc747/image.png" alt=""></p>
<p>P1, P2 생성 후 우클릭 -&gt; Edit setting 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/939a9116-87bd-42b3-b4f1-b37a3828dd9e/image.png" alt=""></p>
<p>Teaming and failover에서 Uplink를 Failover할지 여부 선택.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f789487c-a8bd-49ca-9ed7-1030b8f612af/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9652d95a-8e00-487f-b287-87031b0ca974/image.png" alt=""></p>
<p>P1 -&gt; Uplink 2를 비활성
P2 -&gt; Uplink 1을 비활성</p>
<hr>
<h2 id=""></h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6466c416-ce22-4f76-8a21-82d48d7a3428/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f9763d72-25fe-408a-b928-9e4fae1ee3e0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e7f521a0-e71d-45fe-87f4-480ddd1edcbe/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c034c5f6-6d3a-456a-854f-a559ee1c5c71/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8187eee5-1b3e-42d9-a9a9-1a649f8cae70/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c3cb9004-366f-46e7-a915-2fe85949a5a6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/242b2437-903d-4a5d-91c1-ae2cba824abf/image.png" alt=""></p>
<p>생성됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b1f07988-8c93-4720-821d-112f1e1f2c13/image.png" alt=""></p>
<hr>
<h2 id="-1"></h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3f818d6b-d89c-495c-9e4a-26492c98fe0e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9b4e55a6-a600-4bb5-9991-dac474042511/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/70cf2527-ce85-410b-b589-7e56c0441fb7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/beb8f4aa-df81-4d2c-b691-b435e3cd9229/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b2e49682-2406-4a61-920b-223317111d72/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/78176453-04b6-4239-ad28-e41b6e5b4dbc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5caf0bcf-88eb-4cfa-ad57-871321987041/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e792a156-2687-4b42-a7b5-9d69ac331399/image.png" alt=""></p>
<hr>
<p>위 과정을 각 서버에서 반복.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[가상화]]></title>
            <link>https://velog.io/@num_of_techbytes/%EA%B0%80%EC%83%81%ED%99%94-%EB%B3%B5%EC%8A%B5</link>
            <guid>https://velog.io/@num_of_techbytes/%EA%B0%80%EC%83%81%ED%99%94-%EB%B3%B5%EC%8A%B5</guid>
            <pubDate>Wed, 09 Aug 2023 01:05:46 GMT</pubDate>
            <description><![CDATA[<h1 id="가상화">가상화</h1>
<p>참고: <a href="https://blog.naver.com/ka10787">https://blog.naver.com/ka10787</a>
가상화: 실제 물리적으로 존재하는 것을 논리적으로 추상화되어 만들어진 것.
종류</p>
<ul>
<li>가상 컴퓨터 하드웨어 플랫폼(Virtual Computer Hardware Platform): = Virtual Machine</li>
<li>가상 스토리지 장치(Virtual Storage Device): RAID(Reduntent Array Idependent Disk), LUN(Logical Unit Number)</li>
<li>가상 네트워크 자원(Virtual Network Resource): = Virtual Local Area Network</li>
</ul>
<h2 id="vpn이란">VPN이란?</h2>
<p>참고: <a href="http://www.ktword.co.kr/test/view/view.php?nav=2&amp;no=342&amp;sh=VPN">http://www.ktword.co.kr/test/view/view.php?nav=2&amp;no=342&amp;sh=VPN</a>
VPN: Virtual Private Network. </p>
<h2 id="도커컨테이너">도커/컨테이너</h2>
<h2 id="jvm">JVM</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f0589948-1cbd-4388-8edb-34705d9c49cd/image.png" alt=""></p>
<h2 id="hypervisor">Hypervisor</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/830b7229-1479-4a82-b0cc-6b49a06d597f/image.png" alt="">
Hypervisor: 커널의 커널 역할을 하는 소프트웨어(프로세스). 가상머신(Virtual Machine)에 필요한 자원을 할당/관리하는 역할을 함.
Host: Hypervisor가 동작하는 물리적 시스템
Guest: Host상에서 동작하는 가상머신
Supervisor: OS의 커널(Guest에서 동작하는 커널)</p>
<h4 id="hypervisor-종류">Hypervisor 종류</h4>
<ul>
<li>Type 1. native(bare metal): Hypervisor가 HW위에서 직접 동작. HW들을 제어하며 VM을 관리하는 형태.</li>
<li>Type 2. hosted: Hypervisor가 OS위에서 다른 프로그램처럼 하나의 프로그램으로 동작하는 형태. </li>
</ul>
<h2 id="반가상화">반가상화</h2>
<p>입출력(I/O, Input/Output)이 시뮬레이션 되지 않고, 하이퍼콜(Hypercall)이라는 시스템콜(System call)을 처리하도록, Guest OS가 수정되어 동작하는 것을 의미. I/O이 시뮬레이션되지 않고 하이퍼콜을 통해서 Host에서 처리하도록 하기 때문에 성능이 뛰어남.</p>
<p>VMware vSphere 참고 영상: <a href="https://www.youtube.com/@VMwarevSphere/videos">https://www.youtube.com/@VMwarevSphere/videos</a></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[230808-VMware2]]></title>
            <link>https://velog.io/@num_of_techbytes/230808-VMware2</link>
            <guid>https://velog.io/@num_of_techbytes/230808-VMware2</guid>
            <pubDate>Tue, 08 Aug 2023 08:56:06 GMT</pubDate>
            <description><![CDATA[<p>VMware 자격증: VCP-DCV</p>
<p>VMware 환경 구축</p>
<ol>
<li>vars.yaml -&gt; 변수 설정</li>
<li>Switching yaml</li>
<li>Routing yaml</li>
<li>Window Server for Data Center yaml</li>
<li>Make Domain Controller yaml</li>
<li>Add DNS record yaml </li>
<li>...</li>
</ol>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f2a3a5f7-7ecd-4f96-a1eb-4508ff00ebb7/image.png" alt=""></p>
<hr>
<h1 id="yaml을-이용한-server-구축">YAML을 이용한 Server 구축</h1>
<h2 id="yaml-of-switching">YAML of Switching</h2>
<p>VMware의 vSwitch Module에 대한 ansible 공식 문서: <a href="https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vswitch_module.html">https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vswitch_module.html</a></p>
<p>ansible을 통해 설정할 수 있는 주요 항목:</p>
<ul>
<li>esxi_hostname</li>
<li>nics</li>
<li>password </li>
<li>port </li>
<li>proxy_host</li>
<li>switch</li>
<li>teaming</li>
<li>load_balancing</li>
<li>network_failure_detection<ul>
<li>beacon_probig: </li>
</ul>
</li>
<li>standby_adapters</li>
</ul>
<h3 id="위-설정값들을-ui에서-설정하는법">위 설정값들을 UI에서 설정하는법</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/29b70a0e-75ce-47da-adb8-8d6f2b1cd19f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5cb35dba-cc14-4644-b7ce-299665d4a19f/image.png" alt=""></p>
<hr>
<h2 id="log-보는-법">log 보는 법</h2>
<p><code>grep -i error  /var/log/hostd.log | tail</code>
<code>grep -i error  /var/log/vpxa.log | tail</code>
<code>tail /var/log/vmkwarning.log</code></p>
<p><code>grep -i error</code>: error가 포함된 것들을 출력
<code>/var/log/hostd.log</code>: log가 기록되는 디렉토리중 하나 -&gt; 여러 파일 확인을 통해 오류 확인이 필요함.
<code>tail</code>: log를 최신순 정렬</p>
<hr>
<h2 id="tmi">TMI</h2>
<ol>
<li><p>OS에 따라 TTL 값이 다르게 나옴</p>
</li>
<li><p>이미 실행된 yaml파일을 시작하는 경우 결과가 changes가 아닌 ok만 출력
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/00b735ea-740a-4af5-bb28-d31595e4375d/image.png" alt=""></p>
</li>
<li></li>
</ol>
<hr>
<h2 id="switching">Switching</h2>
<p><code>vlan_id: 4095</code> : 4095 -&gt; 0번과 같이 system이 쓰는 vlan </p>
<hr>
<h2 id="routing">Routing</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b2c3a30e-7d1f-4cca-9590-fb983724295e/image.png" alt=""></p>
<hr>
<h2 id="window-server">Window Server</h2>
<p>윈도우 서버 설치 - Domain Controller로 사용.
yaml 파일 내용: datacenter 이름, folder 위치, 인증서 확인 여부, Network 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0c2fb0af-0345-4b5e-8700-8d0023562917/image.png" alt=""></p>
<p>yaml 실행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b280b610-4b79-49d8-be68-11cf382c67c0/image.png" alt=""></p>
<p>yaml 실행 후 DataCenter가 생성된 모습.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5c07c451-727b-474e-b74f-804851e59600/image.png" alt=""></p>
<p>Window Server 입장. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2ea0fefd-20ae-4f0f-8469-51eddc5bbc0c/image.png" alt=""></p>
<p>Yes 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e3b0de3b-3e66-4dc1-ada9-1d68836df2f6/image.png" alt=""></p>
<hr>
<h2 id="domain-controller">Domain Controller</h2>
<p>Window Server가 Domain Controller 동작을 할 수 있도록 기능을 활성화.</p>
<p>특징: Window Server OS를 사용하기 때문에 PowerShell의 명령어를 사용함
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/380cd196-b53c-46af-b97e-7c4fa9d35bbe/image.png" alt=""></p>
<p>powershell 위치
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2f206e64-8c1e-4b54-b124-243f4c09df6d/image.png" alt=""></p>
<pre><code>## https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_shell_module.html#ansible-collections-community-vmware-vmware-vm-shell-module 

---
- hosts: localhost
  vars_files: ./vars.yaml

  tasks: 
    - name: Install_WindowsFeatures_AD-DS
      community.vmware.vmware_vm_shell:
          hostname: &#39;{{ vcenter_hostname }}&#39;
          username: &#39;{{ vcenter_username }}&#39;
          password: &#39;{{ vcenter_password }}&#39;
          validate_certs: &#39;false&#39;
          vm_id: &quot;{{ student_ID + &#39;-DC&#39; }}&quot;
          vm_id_type: vm_name
          vm_username: &#39;Administrator&#39;
          vm_password: &#39;VMware1!&#39;
          vm_shell: &#39;c:\windows\system32\windowspowershell\v1.0\powershell.exe&#39;
          vm_shell_args: &#39;-command &quot;(Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools)&quot;&#39;
          vm_shell_cwd: &#39;c:\Users\Administrator&#39;
          wait_for_process: True
          timeout: 180
      delegate_to: localhost
      register: shell_command_with_wait_timeout

    - name: Import_Module_ADDSDeployment
      community.vmware.vmware_vm_shell:
          hostname: &#39;{{ vcenter_hostname }}&#39;
          username: &#39;{{ vcenter_username }}&#39;
          password: &#39;{{ vcenter_password }}&#39;
          validate_certs: &#39;false&#39;
          vm_id: &quot;{{ student_ID + &#39;-DC&#39; }}&quot;
          vm_id_type: vm_name
          vm_username: &#39;Administrator&#39;
          vm_password: &#39;VMware1!&#39;
          vm_shell: &#39;c:\windows\system32\windowspowershell\v1.0\powershell.exe&#39;
          vm_shell_args: &#39;-command &quot;Import-Module ADDSDeployment&quot;&#39;
          vm_shell_cwd: &#39;c:\Users\Administrator&#39;
          wait_for_process: True
          timeout: 180
      delegate_to: localhost
      register: shell_command_with_wait_timeout


    - name: Install_First_ADDSForest
      community.vmware.vmware_vm_shell:
          hostname: &#39;{{ vcenter_hostname }}&#39;
          username: &#39;{{ vcenter_username }}&#39;
          password: &#39;{{ vcenter_password }}&#39;
          validate_certs: &#39;false&#39;
          vm_id: &quot;{{ student_ID + &#39;-DC&#39; }}&quot;
          vm_id_type: vm_name
          vm_username: &#39;Administrator&#39;
          vm_password: &#39;VMware1!&#39;
          vm_shell: &#39;c:\windows\system32\windowspowershell\v1.0\powershell.exe&#39;
          vm_shell_args: &#39;-command &quot;(Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath C:\Windows\NTDS -DomainMode WinThreshold -DomainName vclass.local -DomainNetbiosName VCLASS -ForestMode WinThreshold -InstallDns:$true -LogPath C:\Windows\NTDS -NoRebootOnCompletion:$false -SysvolPath C:\Windows\SYSVOL -Force:$true -SafeModeAdministratorPassword (ConvertTo-SecureString -AsPlainText &quot;VMware1!&quot; -force)&quot;)&quot;&#39;
          vm_shell_cwd: &#39;c:\Users\Administrator&#39;
          wait_for_process: True
          timeout: 180
      delegate_to: localhost
      register: shell_command_with_wait_timeout
      ignore_errors: yes      </code></pre><p>DSRM: Directory Services Remote Mode</p>
<p>Additional Options</p>
<h3 id="yaml로-설정">yaml로 설정</h3>
<p>yaml 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a439d8d1-5202-45e3-aae8-1b9d19c44ffd/image.png" alt=""></p>
<p>yaml 실행: 붉은 글씨로 출력되는 부분이 있지만, failed가 아닌 error 메세지이므로 설정은 정상적으로 진행됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c8465158-f70d-48ab-a54b-7a0b2d8de68e/image.png" alt=""></p>
<p>실행 후 Domain Controller 서버 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ea89c854-3d9a-42bd-bd6e-4a69734dcaa3/image.png" alt=""></p>
<p>서버의 시간 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/df932807-6fcd-4006-89a0-4e3db6dc9654/image.png" alt=""></p>
<h4 id="dns-추가-방법">DNS 추가 방법</h4>
<p>정방향, 역방향...</p>
<ol>
<li>yaml </li>
<li>dnsmgmt.msc 에서 직접 추가</li>
</ol>
<h4 id="yaml">yaml</h4>
<p>powershell 파일 생성 - 주의 사항: 주석을 한글로 작성한 경우, 마지막에 빈칸(space bar)을 추가하지 않으면 아래 줄 내용이 올라오는 경우가 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/70724312-3897-4e0e-886c-2a001f21a43e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3b796659-518f-4fdc-9380-be197a75ea4b/image.png" alt=""></p>
<p>DNS 복사를 위해 폴더 생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c4fbeb04-588b-4601-8a6c-fce1cbca7c53/image.png" alt=""></p>
<p>yaml 실행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c8dcce8a-4383-4515-af2f-f619b1ff5a93/image.png" alt=""></p>
<p>생성되고
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b24363d7-0e56-4f87-9592-537918e324fe/image.png" alt=""></p>
<p>사라짐
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bb29d4b1-ca3b-4569-8c3d-a96839d49e08/image.png" alt=""></p>
<p>DNS Manager에서 확인(before)
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/46f1548e-3f1e-47c5-b617-fde53d4bf4d4/image.png" alt=""></p>
<p>(after)
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9000db18-4fce-4fe6-ba90-e494b320bdee/image.png" alt=""></p>
<blockquote>
<p>ps파일 내용을 DNS 추가가 아니라 AD User 추가로 바꿔도 스크립트는 실행되기 떄문에 오류가 발생하지 않음</p>
</blockquote>
<p>ps파일 수정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/af877c58-e743-4ffe-a369-1d3d6af0d299/image.png" alt=""></p>
<p>yaml 실행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5b9bc5e2-505a-4ab7-a433-a58ea287c83d/image.png" alt=""></p>
<h4 id="직접-추가">직접 추가</h4>
<p>DNS Manager에서 New Host 클릭
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/86776c2a-e841-436a-bade-48b4391b05eb/image.png" alt=""></p>
<p>Host 정보 입력
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/963d973e-d774-443b-b922-b5cd13bfbe76/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b7db3c88-2d0a-4aa1-b1d1-2707950f8c08/image.png" alt=""></p>
<hr>
<hr>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e7b6fcd5-0929-43ce-9345-0290ce1f53fd/image.png" alt=""></p>
<p>User 설정 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/501774b7-90d0-4364-8b69-075e5c668b94/image.png" alt=""></p>
<p>vSphere에서 Admin 계정으로 로그인하면 Acrive Direstory Domain 목록 확인 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c83b3dd0-4ed9-4373-85aa-85c104c27edb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0219dd51-9df6-4530-9074-1963292f8ab6/image.png" alt=""></p>
<hr>
<h2 id="esxi-생성">ESXi 생성</h2>
<h3 id="방법-1-esxi-옵션을-직접-설정">방법 1) ESXi 옵션을 직접 설정</h3>
<p>주요 옵션
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0814951a-13e3-434a-8afb-c42f51148361/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4521d833-8943-45a6-a9ea-95afc019c4be/image.png" alt=""></p>
<p>nvme 설정 시 unit_number를 추가하는 이유: vSAN에서 사용하기 위해</p>
<pre><code>---
- hosts: localhost
  vars_files: ./vars.yaml

  tasks: 
    - name: Create ESXi VMs
      community.vmware.vmware_guest:
        hostname: &quot;{{ vcenter_hostname }}&quot;
        username: &quot;{{ vcenter_username }}&quot;
        password: &quot;{{ vcenter_password }}&quot;
        validate_certs: &#39;false&#39;
        datacenter: &#39;{{datacenter_name}}&#39;
        folder: &#39;{{ folder_prefix + student_ID }}&#39;
        name: &#39;{{ item.vmname }}&#39;
        state: poweredoff
        guest_id: vmkernel7Guest
        esxi_hostname: &quot;{{ esxi_hostname }}&quot;
        hardware:
          num_cpus: 2
          nested_virt: yes
          memory_mb: 8192
        disk:
        - size_gb: 200
          controller_type: &#39;paravirtual&#39;
          controller_number: 0
          unit_number: 0
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 50
          controller_type: &#39;nvme&#39;
          controller_number: 0
          unit_number: 0
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 50
          controller_type: &#39;nvme&#39;
          controller_number: 0
          unit_number: 1
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 200
          controller_type: &#39;nvme&#39;
          controller_number: 0
          unit_number: 2
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        - size_gb: 200
          controller_type: &#39;nvme&#39;
          controller_number: 0
          unit_number: 3
          type: thin
          datastore: &#39;{{ datastore_name }}&#39;
        networks:
        - name: &quot;{{ student_ID + &#39;-SA-Mgmt&#39; }}&quot;
          device_type: vmxnet3
        - name: &quot;{{ student_ID + &#39;-SA-Mgmt&#39; }}&quot;
          device_type: vmxnet3
        - name: &quot;{{ student_ID + &#39;-Trunk&#39; }}&quot;
          device_type: vmxnet3
        - name: &quot;{{ student_ID + &#39;-Trunk&#39; }}&quot;
          device_type: vmxnet3
        cdrom:
        - controller_number: 0
          unit_number: 0
          state: present
          type: iso
          iso_path: &#39;[RECA3-05]\ISOs\VMware-VMvisor-Installer-7.0U3n-21930508.x86_64.iso&#39;
      with_items:
      - {vmname: &quot;{{ student_ID + &#39;-SA-ESXi-01&#39; }}&quot; }
      - {vmname: &quot;{{ student_ID + &#39;-SA-ESXi-02&#39; }}&quot; }
      - {vmname: &quot;{{ student_ID + &#39;-SA-ESXi-03&#39; }}&quot; }      
      delegate_to: localhost
      register: deploy_vm</code></pre><h3 id="방법-2-이미-있는-esxi를-복제">방법 2) 이미 있는 ESXi를 복제</h3>
<p>주요 내용
Full Clone에 대한 내용
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0b800436-867b-4f44-8257-6854ea110f9b/image.png" alt=""></p>
<p>Network 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f54c7ce4-213e-497e-91e3-7b3f30b63194/image.png" alt=""></p>
<p>powershell script 실행 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7aaf8977-1faa-48b8-b22d-86ae8eddd619/image.png" alt=""></p>
<p>yaml 실행 완료</p>
<pre><code>---
- hosts: localhost
  vars_files: ./vars.yaml

  tasks: 
  - name: Clone multiple esxi vms from Template
    community.vmware.vmware_guest:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ item }}&quot;
      state: &quot;poweredoff&quot;
      datacenter: &#39;{{ datacenter_name }}&#39;
      folder: &quot;{{ folder_prefix + student_ID }}&quot;
      esxi_hostname: &#39;{{ esxi_hostname }}&#39;
      datastore: &quot;{{ datastore_name }}&quot;
      template: &quot;{{ sa_esxi_template_name }}&quot;
    loop:
      - &quot;{{student_ID+&#39;-SA-ESXi-01&#39;}}&quot;
      - &quot;{{student_ID+&#39;-SA-ESXi-02&#39;}}&quot;
      - &quot;{{student_ID+&#39;-SA-ESXi-03&#39;}}&quot;
    delegate_to: localhost


# https://stackoverflow.com/questions/59626587/how-to-change-vmware-network-adapter-with-ansible
  - name: Adding ESXi VMs Network Interfaces - Mgmt
    community.vmware.vmware_guest_network:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ item[0] }}&quot;
      label: &quot;{{ item[1] }}&quot;
      network_name: &quot;{{ student_ID + &#39;-SA-Mgmt&#39; }}&quot;
      state: present
      force: yes
    with_nested:
      - [ &quot;{{student_ID+&#39;-SA-ESXi-01&#39;}}&quot;, &quot;{{student_ID+&#39;-SA-ESXi-02&#39;}}&quot;, &quot;{{student_ID+&#39;-SA-ESXi-03&#39;}}&quot; ]
      - [ &quot;Network adapter 1&quot;, &quot;Network adapter 2&quot; ]
    delegate_to: localhost

# https://stackoverflow.com/questions/59626587/how-to-change-vmware-network-adapter-with-ansible
  - name: Adding ESXi VMs Network Interfaces - Trunk
    community.vmware.vmware_guest_network:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ item[0] }}&quot;
      label: &quot;{{ item[1] }}&quot;
      network_name: &quot;{{ student_ID + &#39;-Trunk&#39; }}&quot;
      state: present
      force: yes
    with_nested:
      - [ &quot;{{student_ID+&#39;-SA-ESXi-01&#39;}}&quot;, &quot;{{student_ID+&#39;-SA-ESXi-02&#39;}}&quot;, &quot;{{student_ID+&#39;-SA-ESXi-03&#39;}}&quot; ]
      - [ &quot;Network adapter 3&quot;, &quot;Network adapter 4&quot; ]
    delegate_to: localhost



# https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_guest_module.html
  - name: Power on ESXi VMs
    community.vmware.vmware_guest:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ item }}&quot;
      state: &quot;poweredon&quot;
    loop:
      - &quot;{{student_ID+&#39;-SA-ESXi-01&#39;}}&quot;
      - &quot;{{student_ID+&#39;-SA-ESXi-02&#39;}}&quot;
      - &quot;{{student_ID+&#39;-SA-ESXi-03&#39;}}&quot;
    delegate_to: localhost


  - name: Waiting boot-up
    wait_for:
      timeout: 120
    delegate_to: localhost


  - name: Configure ESXi VM
    community.vmware.vmware_vm_shell:
      hostname: &#39;{{ vcenter_hostname }}&#39;
      username: &#39;{{ vcenter_username }}&#39;
      password: &#39;{{ vcenter_password }}&#39;
      validate_certs: &#39;false&#39;
      datacenter: &#39;{{ datacenter_name }}&#39;
      folder: &quot;{{ folder_prefix + student_ID }}&quot;
      vm_id: &quot;{{ item.vm_name }}&quot;
      vm_id_type: vm_name
      vm_username: &#39;root&#39;
      vm_password: &#39;VMware1!&#39;
      vm_shell: /bin/sh
      vm_shell_cwd: &quot;/tmp&quot;
      vm_shell_args: |
        echo &quot;Don&#39;t remove this line. Write your ESXi configuration commands below.&quot;
        esxcli system settings advanced set -o /Net/FollowHardwareMac -i 1
        sed -i &#39;s#/system/uuid.*##&#39; /etc/vmware/esx.conf
        esxcli network vswitch standard uplink add -u vmnic1 -v vSwitch0
        esxcli network ip interface ipv4 set -i vmk0 -t static -I {{ item.ipaddr }} -N 255.255.255.0 -g 10.10.10.1
        esxcli network ip route ipv4 add -n 0.0.0.0 -g 10.10.10.1
        esxcli network ip dns server add -s 10.10.10.2
        esxcli system hostname set --host {{ item.host_name }}
        esxcli system hostname set --domain vclass.local
        esxcli system ntp set -e yes -s 10.10.10.1
        vim-cmd hostsvc/enable_ssh
        vim-cmd hostsvc/enable_esx_shell
        vim-cmd hostsvc/advopt/update UserVars.SuppressShellWarning long 1
        /sbin/generate-certificates
        /sbin/auto-backup.sh
      wait_for_process: True
    with_items:
    - { vm_name: &quot;{{student_ID+&#39;-SA-ESXi-01&#39;}}&quot;, host_name: sa-esxi-01, ipaddr: 10.10.10.11 }
    - { vm_name: &quot;{{student_ID+&#39;-SA-ESXi-02&#39;}}&quot;, host_name: sa-esxi-02, ipaddr: 10.10.10.12 }
    - { vm_name: &quot;{{student_ID+&#39;-SA-ESXi-03&#39;}}&quot;, host_name: sa-esxi-03, ipaddr: 10.10.10.13 }
#        esxcli network vswitch standard portgroup set -p &#39;Management Network&#39; -v 10
#        esxcli network vswitch standard portgroup set -p &#39;VM Network&#39; -v 10


  - name: Reboot ESXi VM
    community.vmware.vmware_guest_powerstate:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: &#39;false&#39;        
      folder: &quot;{{ folder_prefix + student_ID }}&quot;
      name: &quot;{{ item }}&quot;
      state: reboot-guest
    loop:
      - &quot;{{student_ID+&#39;-SA-ESXi-01&#39;}}&quot;
      - &quot;{{student_ID+&#39;-SA-ESXi-02&#39;}}&quot;
      - &quot;{{student_ID+&#39;-SA-ESXi-03&#39;}}&quot;
    delegate_to: localhost</code></pre><hr>
<h2 id="vcsa-설치">VCSA 설치</h2>
<h3 id="직접">직접</h3>
<h4 id="stage-1-deploy-new-vcenter-server">stage 1. Deploy new vCenter Server</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e66e50c6-9b09-4d5c-8095-0ad5142b822c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/054147da-7b22-45e2-8097-ee837207c496/image.png" alt=""></p>
<p>VCSA-all iso 파일 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/15829763-7680-490e-8112-a07647c62325/image.png" alt=""></p>
<p>Connected 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b6a256ae-fec5-4500-8346-6bd5a602981a/image.png" alt=""></p>
<p>Window DC Server 접속
VMware VCSA 생성 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/538b1537-80e8-4e7e-bb72-432c39a87470/image.png" alt=""></p>
<p>vCenter-Server-Appliance 이미지 파일 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/921c8f66-dabe-4945-8368-85a65794a970/image.png" alt=""></p>
<p>win32 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bae3cfcb-f6d9-47e8-b3f3-f1c052e39548/image.png" alt=""></p>
<p>installer 선택
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/63fbe7db-b338-4258-8d41-583cf06d0897/image.png" alt=""></p>
<p>install 순서
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a61b3ce5-5439-40b0-a0ca-fbacb5535487/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6d6cf672-b630-4dcb-a2a2-85a7c87d6668/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bb52d8d3-2310-487e-92a3-1d0b15e7a1b3/image.png" alt=""></p>
<p>설치할 위치 확인: cmd -&gt; nslookup 입력 -&gt; 주소 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d78dd4ec-29a3-4456-9190-1e90f8c43430/image.png" alt=""></p>
<p>vCenter 배포 위치 입력
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4bb08131-7e28-4675-b56b-3ed75ad42a1b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/dfeabf8e-83bd-43ab-81ab-0b99b442e801/image.png" alt=""></p>
<p>폴더 지정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/dda92583-ee0c-4afd-867e-2acf800c938d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f0a40c93-97a8-4bf4-8dd2-11fdae9a7c91/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/040e225f-c7c1-4b66-824a-1b5c571962a5/image.png" alt=""></p>
<p>Deployment size 선택(경우에 따라 Storage size도 변경 가능)
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a8aadd36-353c-43c0-b412-d0920e2e5350/image.png" alt=""></p>
<p>Data Store 설정 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7955846f-f97e-40ea-9e5c-e02627117447/image.png" alt=""></p>
<p>FQDN 주소 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0619748c-e044-45a3-872e-e2d6d8e95566/image.png" alt=""></p>
<p>Network setting
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a2712160-dadc-4afa-ad86-b7273499850d/image.png" alt=""></p>
<p>Common Ports 설정시 80과 443 포트는 너무 잘 알려져있는 포트라 변경할 필요가 있을 수 있음. 하지만 생성 후 변경은 불가능 하기 때문에 포트 번호의 변경 필요성은 생성 전에 확인해야함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fff12c87-a662-4e8b-acde-42b1df9eca72/image.png" alt=""></p>
<p>생성전 옵션 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f76890f7-033b-4f7e-8df9-b03f3119dd30/image.png" alt=""></p>
<p>생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5bbecbe7-e689-4437-9002-ef23c377f02d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3842400d-37e0-430f-bac0-3af397e3a117/image.png" alt=""></p>
<h4 id="stage-2-set-up-vcenter-server">stage 2. Set up vCenter Server</h4>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a8453fcb-7f84-4168-b318-6edd08706deb/image.png" alt=""></p>
<p>서버 시간 설정 -  NTP 서버로 설정, SSH access는 Enabled
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cc302a10-1756-407d-856b-e1b0a9084d50/image.png" alt=""></p>
<p>SSO Configuration 설정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/94f3d72f-f9e9-4610-a2ea-a51b180231c2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/fa9357d8-3904-4ca7-885f-75676e80aa8f/image.png" alt=""></p>
<p>옵션 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c7289b87-d1c6-4624-ab56-2ef2f5983cae/image.png" alt=""></p>
<p>설치 진행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7132a443-97b9-4f37-ab59-a8368c41ed68/image.png" alt=""></p>
<h3 id="yaml-사용">yaml 사용</h3>
<pre><code>---
- hosts: localhost
  vars_files: ./vars.yaml

  tasks:
  - name: Deploy vCenter Server Appliance VM from Template
    community.vmware.vmware_guest:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ student_ID + &#39;-VCSA&#39; }}&quot;
      state: &quot;poweredoff&quot;
      datacenter: &#39;{{ datacenter_name }}&#39;
      folder: &quot;{{ folder_prefix + student_ID }}&quot;
      esxi_hostname: &#39;{{ esxi_hostname }}&#39;
      datastore: &quot;{{ datastore_name }}&quot;
      template: &quot;{{ vcsa_template_name }}&quot;
      linked_clone: True
      snapshot_src: &quot;{{ vcsa_snapshot_src_name }}&quot;
    delegate_to: localhost

  - name: Change Network Interfaces
    community.vmware.vmware_guest_network:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ student_ID + &#39;-VCSA&#39; }}&quot;
      label: &quot;Network adapter 1&quot;
      network_name: &quot;{{ student_ID + &#39;-SA-Mgmt&#39; }}&quot;
      state: present
      force: yes
    delegate_to: localhost

  - name: Poweron VCSA VM
    community.vmware.vmware_guest:
      hostname: &quot;{{ vcenter_hostname }}&quot;
      username: &quot;{{ vcenter_username }}&quot;
      password: &quot;{{ vcenter_password }}&quot;
      validate_certs: no
      name: &quot;{{ student_ID + &#39;-VCSA&#39; }}&quot;
      state: &quot;poweredon&quot;
      state_change_timeout: 60
    delegate_to: localhost</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[230807-VMware]]></title>
            <link>https://velog.io/@num_of_techbytes/230807-VMware</link>
            <guid>https://velog.io/@num_of_techbytes/230807-VMware</guid>
            <pubDate>Mon, 07 Aug 2023 08:51:31 GMT</pubDate>
            <description><![CDATA[<p>VMware - 가상화, IaaC, vSAN 환경 구축</p>
<p>NFS 관련 git: <a href="https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs">https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs</a>
HCI - 서버와 스토리지의 결합. 
ansible을 이용한 자동화</p>
<hr>
<p>사용 서버: DELL - Integrated DEll Remote Access Controller 8.</p>
<p>사전 상식: 예약 IPv4
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f13d0399-8665-4f7f-8304-64b8e38cde2c/image.png" alt=""></p>
<p>웹 브라우저에서 서버의 UI에 접속하기 위해서는 사전에 설정해놓은 서버의 IP 주소를 입력이 필요하다. 외부의 침입을 방지하기 위해 사설 IP로만 접속할 수 있어야 하며, 내부 네트워크간의 접속만을 허용한다.</p>
<p>사용 IP: 172.16.x.x -&gt; 사설 네트워크. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/48d99d32-8d64-4b23-a825-00818729a4e8/image.png" alt=""></p>
<p>특징: 서버에 한번에 여러명의 사용자가 접근하면 접근이 거부됨. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8273e61e-d8c7-428d-a49d-1520e5f86488/image.png" alt=""></p>
<hr>
<h1 id="esxi-host-client">ESXi Host Client</h1>
<h2 id="내부-구성">내부 구성</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4acf0bd5-d1b6-477e-8ff2-d9d893361070/image.png" alt=""></p>
<h3 id="physical-disks">Physical Disks</h3>
<p>Physical Disk 설정하는 옵션 화면
Hotspare: 문제가 생긴 서버를 대체하는 서버
Non-RAID: RAID에 포함시키지 않음
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8e2a611c-a830-4dbb-b6e1-206697dd024c/image.png" alt=""></p>
<h3 id="virtual-disk">Virtual Disk</h3>
<p>Virtual Disk에 대한 옵션을 설정할 수 있는 화면
Controller, Layout(RAID 설정), Read/Write Policy에 대한 설정이 가능함
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d3a3ae74-373f-4f85-938f-4127938d0499/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5af2f2e1-7f56-46d0-9199-f190db8112ff/image.png" alt=""></p>
<p>RAID란? 참고자료: <a href="https://devocean.sk.com/blog/techBoardDetail.do?ID=163608">https://devocean.sk.com/blog/techBoardDetail.do?ID=163608</a></p>
<h3 id="virtual-console-화면">Virtual Console 화면</h3>
<p>DELL의 서버 UI에서는 console을 통해 서버 설정이 가능함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c9d2a15a-3db9-4544-aed5-408466343836/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/055cee9b-c3a3-4d6d-9ede-34eb841aaf92/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5d73d851-4a18-4340-aa34-df124da769c1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c111d600-ac7d-4744-aeec-23e457bb1969/image.png" alt=""></p>
<hr>
<h2 id="ventoy">Ventoy</h2>
<p>Ventoy: OS 설치 USB를 제작하기 위한 서비스. 이 서비스를 이용해서 USB에 ISO 파일을 저장해 놓으면, USB로 부팅을 통해 사전에 준비한 OS를 설치할 수 있다.
사이트 주소: <a href="https://www.ventoy.net/en/index.html">https://www.ventoy.net/en/index.html</a>
Ventoy 사용 이유: <a href="https://hjm79.top/ventoy-os-usb-install/">https://hjm79.top/ventoy-os-usb-install/</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/56d6d085-b5aa-4c05-9292-c39a19b00a8b/image.png" alt=""></p>
<p>서버에 USB를 연결하고 USB 부팅을 실행한 화면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7ea55ff7-b837-4bfe-ade0-887aa0548332/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/82953d68-b1fa-4308-82cb-96b1b48561c0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6a72ed5b-1aec-488e-a501-5e1ac6048db1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9babaaed-3b2e-4e5b-a3cb-c38f082bbb13/image.png" alt=""></p>
<hr>
<h2 id="bios-설정">BIOS 설정</h2>
<h3 id="os설치-위치-선택-화면">OS설치 위치 선택 화면</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/834470fa-cff5-45c7-b4ec-18a05e733ea8/image.png" alt=""></p>
<h3 id="keyboard-설정">keyboard 설정</h3>
<p>선택한 언어에 따라 키보드 구성이 바뀌기 때문에 주의 필요.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/645d8ef9-4b08-4d9b-8ec5-094551230e96/image.png" alt=""></p>
<h3 id="log-화면">Log 화면</h3>
<p>설치 과정에서 <code>F12</code>키를 눌러서 로그 화면을 확인할 수 있다. 로그 내역은 서버 문제에 대한 내용 및 해결과 직결되기 때문에 매우 중요함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9c46d011-58cd-4cc8-9bd3-267ffad61e5d/image.png" alt=""></p>
<p>문제 발생시 덤프가 제대로 안 떨어지는 경우 로그 확인이 불가능 할 수 있기 때문에 절대 재부팅을 하면 안됨.</p>
<h3 id="설치-완료-화면">설치 완료 화면</h3>
<p>설치 완료 직후의 화면을 보면, DHCP 주소값을 받아오는 것을 알 수 있다. 실무에서는 DHCP를 사용하지 않으며, DHCP 사용여부는 설정을 통해 변경 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1e8cb4c3-12e9-40ef-8cc1-8e537f1a39bc/image.png" alt=""></p>
<p>보통 1(or 2)를 GW로 사용. 2(or 3)은 DNS로 사용함. 2bit 단위로 용도에 따라 나눠서 사용.</p>
<h3 id="network-adapter-설정-화면">Network Adapter 설정 화면</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/45231ee0-cd20-4705-a871-432cd58fa029/image.png" alt="">
기업환경에서는 서비스 안정성을 위해 반드시 2개 이상의 vmnic 연결이 필요함. 또한, on-board 연결 1개, 외부 1개 처럼 서로다른 카드에 연결함. </p>
<p>VLAN: 같은 스위치에 연결 되어있더라도 논리적으로 구분하여 보안성을 높임.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/baef29e8-9b82-40e0-aebf-839decb50eee/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f0270dfc-7828-43af-989b-1b5490825ca3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8d79cfb6-4b1f-42ca-b170-9f8473a16419/image.png" alt=""></p>
<p>설정 완료 후 재가동 필요
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/56be8b4f-4399-4e7b-bcba-b81a08cba7b0/image.png" alt=""></p>
<p>재가동 후 DHCP에서 STATIC으로 변경된 것을 확인 할 수 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/42634fed-dd48-49f9-930a-217ddb12d604/image.png" alt=""></p>
<hr>
<h2 id="host-client">Host Client</h2>
<h3 id="네트워크-설정-후-host-client-접속">네트워크 설정 후 Host Client 접속</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/95c8dbce-9eda-4dda-8e6f-1d41419a5573/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/956368cc-ab7c-4803-b480-5d9d52ebdd82/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b97d3d55-de37-4ec8-b9f5-3572a379ebd7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/71cff005-a242-457d-8899-47289918e70e/image.png" alt=""></p>
<h3 id="host-server-ui">Host Server UI</h3>
<p><code>ls -alht host* vpx*</code>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1d006627-01e0-469f-8c53-7ddc517ae947/image.png" alt=""></p>
<h3 id="enter-maintenance-mode">Enter maintenance mode</h3>
<p>내부 업데이트를 위한 일시 정지?(Drain과 비슷) 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6a1d23d3-a7af-4519-a25c-22bacc728fe2/image.png" alt=""></p>
<h3 id="lockdown">LockDown</h3>
<p>강한 Lockdown은 오히려 불편하기 때문에 자주 사용하지 않음
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fe6b8873-4122-4997-a21f-c823db1ba8bd/image.png" alt=""></p>
<h3 id="manage-permissons">Manage Permissons</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/dc462184-e777-4f78-9f8b-7f95fab2313a/image.png" alt="">
esxi 서버를 하나만 사용하는 경우는 거의 없기 때문에 esxi에 직접 role 지정 대신, 주로 vShpere에 지정하여 사용.</p>
<h3 id="manage---system---advanced-settings">Manage - System - Advanced settings</h3>
<p>System의 다양한 setting 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e5a4d366-f833-488e-87df-506aa446dcc1/image.png" alt=""></p>
<h3 id="command-창에서-log-확인">Command 창에서 Log 확인</h3>
<ol>
<li>PuTTY 실행 </li>
<li>IP, 포트 입력</li>
<li>Accept</li>
<li>ID, Password 입력</li>
<li><code>cd /var/log</code>
<code>ls -alht | more</code></li>
</ol>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6956b7bb-231a-4738-bae7-bfda6c8de9b5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5a1a3ef8-bd41-4b84-8726-a414d56b28ca/image.png" alt=""></p>
<h3 id="log-관련-파일">Log 관련 파일</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ba8f1f8b-8d09-4c97-91a7-3b805a2b8910/image.png" alt=""></p>
<hr>
<h2 id="memory-공유에서의-salting">Memory 공유에서의 Salting</h2>
<p>Memory 공유 편해짐. 하지만 보안 측면에서는 위험.
Memory 공유 시 자주 사용하는 옵션 - <code>ShareForceSalting</code>,  <code>AllowGuestLargePage</code>
<code>FakeSCSIReservations</code></p>
<pre><code>esxcli system settings advanced list -o /Mem/ShareForceSalting
esxcli system settings advanced set -o /Mem/ShareForceSalting -i 0
esxcli system settings advanced list -o /Mem/ShareForceSalting

esxcli system settings advanced list -o /Mem/AllocGuestLargePage
esxcli system settings advanced set -o /Mem/AllocGuestLargePage -i 0
esxcli system settings advanced list -o /Mem/AllocGuestLargePage

esxcli system settings advanced list -o /VSAN/FakeSCSIReservations
esxcli system settings advanced set -o /VSAN/FakeSCSIReservations -i 1
esxcli system settings advanced list -o /VSAN/FakeSCSIReservations</code></pre><p>실무에서는 자주 사용하지 않지만, LAB환경에서는 가끔 사용함. </p>
<p>명령어 입력시 출력되는 화면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1616fa80-f3cd-45ee-8717-dedac1343885/image.png" alt=""></p>
<hr>
<h2 id="setting---system의-나머지-옵션들">Setting - System의 나머지 옵션들</h2>
<h3 id="autostart">Autostart</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9590b267-00be-477a-95a3-0aeaee10ebfc/image.png" alt="">
가상 머신 별로 On/Off 가능
DB -&gt; WAS -&gt; WEB 처럼 순서대로 켜져야하는 경우에 실행 설정이 가능함.</p>
<h3 id="swap">Swap</h3>
<p>Memory와 Disk의 Swap 설정 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1fd7d93a-1c11-4595-9e45-c20c34e47904/image.png" alt=""></p>
<p>Time &amp; date
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6901b924-eb36-4e56-b3d9-d4cf591e9337/image.png" alt=""></p>
<p>NTP 설정 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8077d36d-56a8-480b-86e0-6cfb97835493/image.png" alt=""></p>
<p>NTP 서비스 설정 후 서비스의 실행이 필요함. 서비스를 실행 하지 않으면 <code>ntpq -p</code> 명령어가 실행되지 않음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/83afc263-0cb6-4617-ac5a-18601ab26cc4/image.png" alt=""></p>
<p>NTP 실행 전 모습
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bb2af7b1-6440-4b8b-bbbe-940ec2556a91/image.png" alt=""></p>
<p>NTP 실행 후 모습.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/351a3168-009f-479e-82f4-ab09436fdc95/image.png" alt=""></p>
<p>통신 확인: 8진수로 표현하며, 통신이 모두 성공하면 377으로 표현됨. </p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b504b7c7-1557-4204-80c1-8d340c794010/image.png" alt=""></p>
<h3 id="pci-devices">PCI Devices</h3>
<p>Passthrough: 커널에서 가상 머신으로 가상 Switch을 거치지 않고 바로 접속할 수 있도록 만드는 옵션.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/41988bb9-75fa-46db-bc6e-2593f6b8bd86/image.png" alt=""></p>
<p>SR-IOV
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6a6baae5-13ca-4594-8a2a-95709d06cc38/image.png" alt=""></p>
<h3 id="power-management">Power Management</h3>
<p>데이터 센터는 전기 사용량이 아주 크기 때문에 효율적인 자원 사용이 필요하기 때문에 용도에 따라 설정이 필요함. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/59256d20-1a06-4a1e-b67e-362a68aa1a42/image.png" alt=""></p>
<p>퍼포먼스 옵션 목록.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/745feaf3-60f6-40d4-8b71-7976cd71f0cb/image.png" alt=""></p>
<h3 id="licensing">Licensing</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/7945a386-591a-40fd-8455-289b6241ed89/image.png" alt=""></p>
<h3 id="packages">Packages</h3>
<p>package 목록 확인 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/27defa12-fe9a-4e1f-b8f3-cb4dbc0bef34/image.png" alt=""></p>
<p>필요에 따라 package 업데이트 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b4cc84e5-ca78-42a3-808c-626e5f506eb1/image.png" alt=""></p>
<h3 id="services">Services</h3>
<p>서비스 목록 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d8333883-2547-4029-8cde-7c57dfe2b15f/image.png" alt=""></p>
<h3 id="security--users">Security &amp; Users</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/671c3bad-876e-449f-9675-bce1d6559275/image.png" alt=""></p>
<h4 id="certificates">Certificates</h4>
<p>인증서 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5b7b71f7-f8c0-45b7-b6ad-1bce26a29127/image.png" alt=""></p>
<h4 id="윈도우에서-인증서-확인하기">윈도우에서 인증서 확인하기</h4>
<p><code>certmgr.msc</code> 입력
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/14683ca9-40ce-4eaa-823c-06203e46cc66/image.png" alt=""></p>
<p>필요에 따라 <code>신뢰할 수 있는 루트 인증 기관</code>의 <code>인증서</code> 목록에 인증서를 추가하면 https 접속 시에도 위험 문구가 뜨지 않음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cea95527-b0c2-416e-ac5e-49d974fb1db5/image.png" alt=""></p>
<hr>
<h2 id="monitor">Monitor</h2>
<h3 id="performance">Performance</h3>
<p>각 자원 사용량 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f3a51eec-76bc-49bf-9dec-4b35ad28c990/image.png" alt=""></p>
<h3 id="hardware">Hardware</h3>
<p>시스템의 센서들 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cd9d0491-e98c-475f-9b3f-3257c86493a6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3503b71b-3c12-44d6-8aa0-0743978882b5/image.png" alt=""></p>
<h3 id="events">Events</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/819b57f3-3897-4688-8ee9-162113da2ec1/image.png" alt=""></p>
<h3 id="tasks">Tasks</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/425dff81-5575-47ab-88ea-b73f1bbd0960/image.png" alt=""></p>
<h3 id="logs">Logs</h3>
<p>프로세스에 대한 로그의 종류, 내용, 위치에 대한 정보 확인 가능 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6174a656-a3bc-468d-a43f-02931fdc1a1a/image.png" alt=""></p>
<p>초기 투자 비용은 클라우드 서비스가 더 저렴하지만, 서비스가 커지거나 이후에는 클라우드나 서버를 사서 자체 클라우드를 만드는 거나 비용이 비슷함</p>
<hr>
<h2 id="storage">Storage</h2>
<h3 id="datastores">Datastores</h3>
<p>가상 머신 저장소
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/74238fef-60a2-45aa-aa3c-0de01b9ea43d/image.png" alt=""></p>
<h3 id="adapters">Adapters</h3>
<p>연결된 장치들 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e85bc341-fbc2-47d9-ba10-07dd9d9bbd6f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f68f480b-957d-43b8-8828-43c0f67629af/image.png" alt=""></p>
<p>NFS 서버 연결 경험은 필수</p>
<h3 id="devices">Devices</h3>
<p>Disk 장치 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/11782c69-3797-4a02-a70d-a9428396397e/image.png" alt=""></p>
<p>장치별 세부 정보 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/83dc133c-651e-4f36-8d3a-d04782e0b6c3/image.png" alt=""></p>
<p>Command 창에서도 확인 가능함
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/98e0ba5e-cf2a-46aa-b192-9f15da846f2d/image.png" alt=""></p>
<h3 id="persistent-memory">Persistent Memory</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6289f205-7086-4910-8e15-8a58de0bde1d/image.png" alt=""></p>
<hr>
<h2 id="networking">Networking</h2>
<p>vSwitch의 구조:
VMkernel NICs -&gt; Port Group  -&gt; Virtual switches -&gt; Physical NICs
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/72665eb7-42c7-4173-ab3d-61d0579bf1cf/image.png" alt=""></p>
<h3 id="vmkernel-nics">VMkernel NICs</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a96e177d-447d-41a2-a2b7-226f16efbe84/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/47ad69c4-ab2e-4f5c-9f9e-8d4aca3c40cf/image.png" alt=""></p>
<h3 id="port-groups">Port groups</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/45b810b1-68d5-4ada-98c0-3278f94c2fd9/image.png" alt=""></p>
<p>Port group의 세부정보
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/13f7adb8-790a-4c56-8932-e7881608e883/image.png" alt=""></p>
<h3 id="virtual-switches">Virtual switches</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/661cb021-5c3c-41d5-8062-e877646eab18/image.png" alt=""></p>
<p>vSwitch의 세부 정보
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6ff24b3b-2a6f-4676-8d06-56194e491f27/image.png" alt=""></p>
<h3 id="physical-nics">Physical NICs</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d1b3f7eb-4b6a-4ec8-b600-9a8f7d5c9cbb/image.png" alt=""></p>
<h3 id="tcpip-stacks">TCP/IP stacks</h3>
<p>프로세스의 메모리 정보 확인 가능. 통신 분리에 사용.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/70338225-67e2-4962-bd6b-4f7394aa505f/image.png" alt=""></p>
<h3 id="firewall-rules">Firewall rules</h3>
<p>방화벽 정책 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/91cccfea-9ac7-46f8-a5e4-43a0a2eb57d2/image.png" alt=""></p>
<hr>
<h2 id="datastore-설정">Datastore 설정</h2>
<p>Datastores에서 목록 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a8f174ce-3dbf-40b0-bdbb-7c8a5c652a61/image.png" alt=""></p>
<p>Datastore 선택: 세부정보 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/63e451dc-9500-4a10-b7e8-a82e03847fdf/image.png" alt=""></p>
<p>Datastore browser로 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c3dc42cd-b255-4539-96c9-ffa2083425af/image.png" alt=""></p>
<hr>
<hr>
<h1 id="vcenter-server-management">vCenter Server Management</h1>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/dee0d175-ebc1-40cf-9dc2-704f817c9e4a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f3df9740-4b98-43b7-b566-524b3d77a25e/image.png" alt=""></p>
<h2 id="firewall">Firewall</h2>
<p>방화벽 규칙 확인 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3b7492c1-b074-4a0b-b63e-8c746f96429b/image.png" alt=""></p>
<p>방화벽 규칙 설정시 주의사항: 큰 범위의 규칙을 상위로 지정하는것이 좋음.
Longest Match: 방화벽 규칙을 범위가 긴 것(CIDR)을 높은 우선 순위로 둠
Short Match: </p>
<hr>
<hr>
<h1 id="vsphere">vSphere</h1>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bbe3fa52-8313-4c78-a4bf-99395274e0b7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9ab57ed7-b57f-4fd6-a3dc-250b19b52465/image.png" alt=""></p>
<p>접속 화면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c8a37394-8c61-4fd8-a3f3-3a33ae8521d3/image.png" alt=""></p>
<h2 id="vcenter">vCenter</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/58c06e7c-0c9d-4833-b8d8-b54392168487/image.png" alt=""></p>
<h3 id="permission">Permission</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3026d4ad-8d8e-424e-9ee4-cb9e432d2cd3/image.png" alt=""></p>
<h2 id="storage-1">Storage</h2>
<h3 id=""></h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6f2c708b-0947-4a66-822c-b399a6349eec/image.png" alt=""></p>
<h2 id="vm-생성">VM 생성...?</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9f52c70e-7338-4267-a20e-c58e0266f724/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c35b446c-6123-49b5-923f-8895d3907aa9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/94f8781b-b64b-4c1b-829c-04611167a78d/image.png" alt=""></p>
<p>서버 설치 후 Command 창에서 확인</p>
<hr>
<hr>
<h1 id="vmware-서비스-설명">VMware 서비스 설명</h1>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0ffd62c7-98b6-4814-b1dd-32156a9e1efe/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/64e777cb-8cd3-4033-861c-2b6ed78d4989/image.png" alt=""></p>
<hr>
<hr>
<h2 id="esxi-설정">ESXi 설정</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5ac57de1-702f-45de-937b-1ba09740f521/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bcffc7d6-8b3e-41d1-88a5-aaa596b0bf1a/image.png" alt=""></p>
<p>컴퓨터 네트워크 설정 창 확인</p>
<hr>
<hr>
<h2 id="server-iso-설치">Server ISO 설치</h2>
<p><a href="https://www.microsoft.com/en-us/evalcenter/download-windows-server-2022">https://www.microsoft.com/en-us/evalcenter/download-windows-server-2022</a></p>
<p>Datastore에 ISO파일 추가
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/099966c2-6e1b-4dba-acb4-caf121fa9f1d/image.png" alt=""></p>
<p>ESXi UI에서 Virtual Machines 선택 및 설치 진행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b1a8bb29-f264-4a09-b68c-4acea2bbeed0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1598f830-dc84-4ed1-8608-02ff0a301597/image.png" alt=""></p>
<p>CPU hot plug 옵션: Hardware(vCPU) 설정 변경시 전원 Off 없이 변경이 가능하도록 만든 옵션
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/47861dce-5ef1-4979-a550-4be7b26e35da/image.png" alt=""></p>
<p>반가상화
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/496371f6-c0d7-4e55-8f4a-e206ff11f4f5/image.png" alt=""></p>
<p>설치할 ISO 선택
total video memory 설정 값이 8MB = 거의 모든 색감 표현 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d935b85-9d98-4efe-a070-b0fdbb3e521c/image.png" alt=""></p>
<p>생성 전 설정 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fd9c61ac-b09e-40d0-bab1-11b344992a14/image.png" alt=""></p>
<p>이후 CD/ROM 부팅으로 VM 실행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1c1014f0-798d-4a77-96d6-6a70e7f2ff95/image.png" alt=""></p>
<p>VMware Remote Controle가 설치됨 -&gt;  Window Server 제어 가능</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f22104ee-b8e1-4515-a689-99024485d2cf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/fba53359-5103-4c87-967e-a3f38b54b60c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a62951ff-c1ad-4792-9fec-18814b737015/image.png" alt=""></p>
<hr>
<hr>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/f8dfff59-6866-4c54-b5d6-c5640c9530c2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d1df5987-e20e-44a8-a32c-56fc58a89ad4/image.png" alt=""></p>
<p>웹 콘솔 접속 화면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e785437e-314f-4d13-b359-7aa40e7f9321/image.png" alt=""></p>
<p>MobaXterm 사용: xShell은 기업 환경에서 사용하면 비용이 지불되지만, MobaXterm은 개인이 따로 사용하는거면 기업 환경에서도 사용 가능.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/43293b60-627a-48c2-b249-4becb53066da/image.png" alt=""></p>
<p>PowerShell에서 Ubuntu 설치
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/339cee9a-ff5b-4dad-a3ea-c8c595814e16/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/73f4fed0-c109-443d-be87-5e2535b7f033/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5a6979bd-0fed-4fea-90a1-0b64b9f6ed69/image.png" alt=""></p>
<p>VM 설정 순서</p>
<ul>
<li>네트워크 설정 <ul>
<li>Switche</li>
<li>Routing</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/18070d91-e8a8-427d-bd4d-ff5f01a32c26/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/dd4c21d3-a5ac-4210-a6b1-630daf48e3b4/image.png" alt=""></p>
<p>실행 완료
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b4827446-43cb-4b72-bd71-fe49d20c0ed9/image.png" alt=""></p>
<p>yaml 파일 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230803-CKA3]]></title>
            <link>https://velog.io/@num_of_techbytes/230803-CKA3</link>
            <guid>https://velog.io/@num_of_techbytes/230803-CKA3</guid>
            <pubDate>Thu, 03 Aug 2023 08:44:07 GMT</pubDate>
            <description><![CDATA[<h1 id="storage">Storage</h1>
<p>Storage 참고: <a href="https://kubernetes.io/docs/concepts/storage/volumes/">https://kubernetes.io/docs/concepts/storage/volumes/</a></p>
<ul>
<li>Volume Mount - emptyDir -&gt; 연결된 대상이 모두 삭제되면 같이 삭제됨. </li>
<li>Volume Mount - hostPath -&gt; 연결 대상이 삭제되어도 지워지지 않음. 경로는 다를 수 있지만, 이름은 같아야 함.</li>
<li>Storage Class </li>
<li>Persistent Volume -&gt; pv라고 부름</li>
<li>Persistent Volume Claim -&gt; pvc라고 부름</li>
</ul>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ddb109bb-03c5-40e0-a3ee-7367903e2a9b/image.png" alt=""></p>
<h3 id="emptydir-volume">emptyDir volume</h3>
<ul>
<li>emptyDir 볼륨은 빈 디렉토리로 시작.</li>
<li>Pod 내부에서 실행중인 애플리케이션은 필요한 모든 파일을 작성.</li>
<li>컨테이너 간 데이터 공유, Pod를 삭제하면 볼륨 내용이 손실됨.</li>
<li>동일한 pod에서 실행되는 컨테이너 간에 파일을 공유할 때 유용.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/32664169-d620-4050-a618-61ba49fb4760/image.png" alt=""></p>
<h3 id="hostpath">hostPath</h3>
<ul>
<li>노드의 파일 시스템의 디렉토리나 파일을 컨테이너에 마운트</li>
<li>노드에 디렉토리나 .......</li>
<li></li>
</ul>
<h3 id="pvc">pvc</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/58d2f65a-cf2a-4a64-b0f6-9c69a1b66088/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/712725bb-3cb1-4a06-b65c-0a188523ae69/image.png" alt=""></p>
<hr>
<h2 id="emptydir-volume을-공유하는-multi-pod-운영">emptyDir Volume을 공유하는 multi-pod 운영</h2>
<p>작업 클러스터 : k8s</p>
<blockquote>
</blockquote>
<p>다음 조건에 맞춰서 nginx 웹서버 pod가 생성한 로그파일을  받아서 STDOUT으로 출력하는 busybox 컨테이너를 운영하시오.
Pod Name: weblog
Web container:
    - Image: nginx:1.17
    - Volume mount : /var/log/nginx
    - Readwrite
Log container:
    - Image: busybox
    - args: /bin/sh, -c, &quot;tail -n+1 -f /data/access.log&quot;
    - Volume mount : /data
    - readonly
emptyDir 볼륨을 통한 데이터 공유</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6c02e014-f141-41e8-8589-1feb556a740f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8014a935-157f-4ff3-8c04-8a1176375567/image.png" alt=""></p>
<pre><code>kubectl config use-context k8s
kubectl run weblog --image=nginx:1.17 --dry-run=client -o yaml &gt; weblog.yaml
vi weblog.yaml 
kubectl apply -f weblog.yaml 
kubectl get pv</code></pre><pre><code>apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: weblog
  name: weblog
spec:
  containers:
  - image: nginx:1.17
    name: weblog
    volumeMounts:
    - mountPath: /var/log/nginx
      name: weblog
  - image: busybox
    name: log
    args: [/bin/sh, -c, &#39;tail -n+1 -f /data/access.log&#39;]
    volumeMounts:
    - mountPath: /data
      name: weblog
      readOnly: true
  volumes:
  - name: weblog
    emptyDir: {}</code></pre><hr>
<h2 id="hostpath-volume-구성">HostPath Volume 구성</h2>
<blockquote>
</blockquote>
<p>1./data/cka/fluentd.yaml 파일을 만들어 새로은 Pod 생성하세요. (신규생성 Pod Name : fluentd, image : fluentd, namespace : default)
2. 위 조건을 참고하여 다음 조건에 맞게 볼륨마운트를 설정하시오. 
     1) Worker node의 도커 컨테이너 디렉토리 /var/lib/docker/containers 동일 디렉토리로 pod에 마운트 하시오. 
     2) Worker node의 /var/log 디렉토리를 fluentd Pod에 동일이름의 디렉토리 마운트하시오.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/865e5984-d321-4f1b-8cbf-61d0306c9349/image.png" alt=""></p>
<hr>
<h2 id="persistent-volume-만들기">Persistent Volume 만들기</h2>
<p>참고: <a href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/">https://kubernetes.io/docs/concepts/storage/persistent-volumes/</a></p>
<blockquote>
</blockquote>
<p>작업 클러스터 : hk8s
pv001라는 이름으로 size 1Gi, access mode ReadWriteMany를 사용하여 persistent volume을
생성합니다.
volume type은 hostPath이고 위치는 /tmp/app-config입니다.</p>
<h4 id="history">history</h4>
<pre><code>kubectl config use-context hk8s 
vi pv001.yaml
kubectl apply -f pv001.yaml
kubectl get pv
kubectl describe pv pv001 </code></pre><pre><code></code></pre><hr>
<h2 id="pvc를-사용하는-애플리케이션-pod-운영하기">PVC를 사용하는 애플리케이션 Pod 운영하기</h2>
<h3 id="사전-조건">사전 조건</h3>
<blockquote>
</blockquote>
<ul>
<li>kubectl config use-context k8s</li>
<li>다음의 조건에 맞는 새로운 PersistentVolumeClaim 생성하시오.
Name: pv-volume
Class: app-hostpath-sc
Capacity: 10Mi</li>
<li>앞서 생성한 pv-volume PersistentVolumeClaim을 mount하는 Pod를 생성하시오.
Name: web-server-pod
Image: nginx
Mount path: /usr/share/nginx/html
Volume에서 ReadWriteMany 액세스 권한을 가지도록 구성합니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/501b19f9-9733-4035-b243-1e21fb3a18aa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/ff94074b-816d-42ce-ae8a-60d6c530a22c/image.png" alt=""></p>
<p><code>kubectl describe pod</code> 명령어로 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b447585f-9b58-4372-8e99-9b08ea0151c6/image.png" alt=""></p>
<h4 id="history-1">history</h4>
<pre><code>kubectl config use-context k8s
vi pvc.yaml
kubectl get node
kubectl apply -f pvc.yaml 
kubectl get pvc,pv
vi pvc-pod.yaml
kubectl apply -f pvc-pod.yaml 
kubectl describe pod web-server-pod</code></pre><h4 id="pvcyaml">pvc.yaml</h4>
<pre><code>apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Mi
  storageClassName: app-hostpath-sc</code></pre><h4 id="pvc-podyaml">pvc-pod.yaml</h4>
<pre><code>apiVersion: v1
kind: Pod
metadata:
  name: web-server-pod
spec:
  volumes:
    - name: weblog
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: web-server-pod
      image: nginx
      volumeMounts:
        - mountPath: &quot;/usr/share/nginx/html&quot;
          name: weblog</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d715b934-b5f5-4b9a-9f58-d38003f9268e/image.png" alt=""></p>
<hr>
<hr>
<h1 id="troubleshooting">Troubleshooting</h1>
<h3 id="node-동작-문제-해결">Node 동작 문제 해결</h3>
<blockquote>
</blockquote>
<p>kube-proxy 정상적인지
Docker 데몬이 정상적인지
Kubelet 데몬이 정상적인지
coreDNS 정상적인지</p>
<p>참고 사항: <a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/">https://kubernetes.io/docs/reference/kubectl/cheatsheet/</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/898a4cbd-9293-4eac-9e70-da5e678655b8/image.png" alt=""></p>
<p>app Log 모니터링 
<code>kubectl logs PODNAME -c CONTAINER_NAME</code></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1e53c246-3489-44f7-98fd-869ce88d6df1/image.png" alt=""></p>
<p>Pod가 사용하는 CPU나 Memory 리소스 정보 보기
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a48c8d1e-1eb3-4021-9548-b3e3d9d28ab6/image.png" alt=""></p>
<p>Node가 사용하는 CPU나 Memory 리소스 정보 보기
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c9cce966-bfcf-4e09-a180-793fca9b2e64/image.png" alt=""></p>
<hr>
<h2 id="application-log-추출하기">Application Log 추출하기</h2>
<blockquote>
</blockquote>
<p>kubectl config use-context hk8s
Pod custom-app의 로그 모니터링 후 &#39;file not found&#39; 오류가 있는 로그 라인 추출(Extract)해서
/var/CKA2022/custom-app-log 파일에 저장하시오.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/9ca97330-13a2-4987-acd7-69557b78b6b7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/cb749dc8-a22a-4d22-9e9a-1f0e7de1f6a2/image.png" alt=""></p>
<hr>
<h2 id="persistent-volume-정보-보기">Persistent Volume 정보 보기</h2>
<p>kubectl config use-context k8s
클러스터에 구성된 모든 PV를 capacity별로 sort하여 /var/CKA2022/my-pv-list 파일에 저장하시오.
PV 출력 결과를 sort하기 위해 kubectl 명령만 사용하고, 그 외 리눅스 명령은 적용하지 마시오.</p>
<h4 id="history-2">history</h4>
<pre><code>kubectl config use-context hk8s
kubeclt top pods -l name=overloaded-cpu --sort-by=cpu
echo &#39;`가장 높은 점유율을 가진 pod의 이름`&#39; &gt; /var/CKA2023/custom-app-log </code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a3f64a5d-bd73-437b-bcfe-313608b04730/image.png" alt=""></p>
<hr>
<h2 id="worker-node-동작-문제-해결">Worker Node 동작 문제 해결</h2>
<blockquote>
</blockquote>
<p>kubectl config use-context hk8s
hk8s-worker2 라는 이름의 worker node가 현재 NotReady 상태에 있습니다. 이 상태의 원인을 조사하고 hk8s-worker2 노드를 Ready 
상태로 전환하여 영구적으로 유지되도록 운영하시오.</p>
<p><code>영구적</code>으로 유지해야하므로 <code>start</code>가 아닌, <code>enable --now</code>를 사용해야 함.</p>
<h4 id="history-3">history</h4>
<pre><code>kubectl config use-context hk8s
ssh hk8s-worker2 
sudo systemctl status kubelet
sudo systemctl enalbe --now kubelet
exit</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/68715129-e05a-49c7-a3b1-3f38172ca49c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b110def0-89df-4f3e-ad2d-12d9fce07437/image.png" alt=""></p>
<hr>
<h2 id="worker-node-동작-문제-해결-1">Worker Node 동작 문제 해결</h2>
<p>kubectl config use-context hk8s
Worker Node 동작 문제 해결
hk8s-worker2 라는 이름의 worker node가 현재 NotReady 상태에 있습니다. 이 상태의 원인을 조사하고hk8s-worker2  노드를 
Ready 상태로 전환하여 영구적으로 유지되도록 운영하시오.</p>
<pre><code></code></pre><hr>
<hr>
<h1 id="upgrade">UPgrade</h1>
<p>주의 사항: upgrade는 반드시 Master Node에서 작업해야함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7a073d4e-d523-473f-bf20-2f08c6833519/image.png" alt=""></p>
<p>cluster upgrade 참고: <a href="https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/">https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/41a39290-6230-4bdb-9172-62d99be343ee/image.png" alt=""></p>
<p>순서: </p>
<ol>
<li>업그레이드 - kubeadm upgrade </li>
<li>버전 확인 - kubeadm version </li>
<li>plan - kubeadm upgrade plan </li>
<li></li>
</ol>
<h2 id="cluster-upgrade">Cluster upgrade</h2>
<blockquote>
</blockquote>
<p>작업 클러스터 : hk8s
마스터 노드의 모든 Kubernetes control plane및 node 구성 요소를 버전 1.27.1 버전으로 업그레이드합니다.<br>master 노드를 업그레이드하기 전에 drain 하고 업그레이드 후에 uncordon해야 합니다.
&quot;주의사항&quot; 반드시 Master Node에서 root권한을 가지고 작업을 실행해야 한다.</p>
<p>tip: upgrade 관련 명령어 실행시 vi 편집기로 파일을 생성하여 작업하는 것이 좋음.</p>
<pre><code># replace &lt;node-to-drain&gt; with the name of your node you are draining
kubectl drain &lt;node-to-uncordon&gt; --ignore-daemonsets

# replace x in 1.27.x-00 with the latest patch version
apt-mark unhold kubelet kubectl &amp;&amp; apt-get update &amp;&amp; apt-get install -y kubelet=1.27.x-00 kubectl=1.27.x-00 &amp;&amp; apt-mark hold kubelet kubectl 
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# replace &lt;node-to-uncordon&gt; with the name of your node
kubectl uncordon &lt;node-to-uncordon&gt;</code></pre><h4 id="history-4">history</h4>
<pre><code># Find the latest 1.27 version in the list.
# It should look like 1.27.x-00, where x is the latest patch.
apt update
apt-cache madison kubeadm
apt-mark unhold kubeadm &amp;&amp; apt-get update &amp;&amp; apt-get install -y kubeadm=1.27.1-00 &amp;&amp; apt-mark hold kubeadm
kubeadm version
kubeadm upgrade plan
sudo kubeadm upgrade apply v1.27.1 -y

kubeadm upgrade node
kubeadm upgrade apply

# replace &lt;node-to-drain&gt; with the name of your node you are draining
kubectl drain hk8s-worker1 --ignore-daemonsets

# replace x in 1.27.x-00 with the latest patch version
apt-mark unhold kubelet kubectl &amp;&amp; apt-get update &amp;&amp; apt-get install -y kubelet=1.27.1-00 kubectl=1.27.1-00 &amp;&amp; apt-mark hold kubelet kubectl 
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# replace &lt;node-to-uncordon&gt; with the name of your node
kubectl uncordon hk8s-worker1

kubectl get nodes</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/65c2b464-96d9-4c9c-a764-35a79bc5569b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/871d5183-92aa-4bcb-818b-41353f2d87e7/image.png" alt=""></p>
<hr>
<h2 id="노드-비우기">노드 비우기</h2>
<p>-&gt; <code>drain</code>, <code>cordon</code></p>
<blockquote>
</blockquote>
<p>작업 클러스터 : k8s
k8s-worker2 노드를 스케줄링 불가능하게 설정하고, 해당 노드에서 실행 중인 모든 Pod을 다른
node로 reschedule 하세요.</p>
<p><code>drain</code>: node를 schedule 불가능하게 만들고, 해당 node에 있는 pod들을 다른 node로 reschedule.
<code>cordon</code>: node를 schedule 불가능하게 만듦. 
<code>uncordon</code>: drain 및 cordon로 인해 schedule 불가능하게 된 node를 다시 schedule 가능하도록 만듦.</p>
<h4 id="history-5">history</h4>
<pre><code>kubectl config use-context k8s
kubectl drain k8s-worker2 --ignore-daemonsets --force --delete-emptydir-data 
kubectl get nodes </code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/75ce5599-16bc-4274-914e-079b8b365062/image.png" alt=""></p>
<h4 id="drain-후-스케줄링-가능하도록-바꾸기">drain 후 스케줄링 가능하도록 바꾸기</h4>
<p>-&gt; <code>uncordon</code> 사용</p>
<pre><code>kubectl uncordon k8s-worker2</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a8bc05ef-42e1-4c97-8d6c-8383eb9d87fa/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230711-EKS]]></title>
            <link>https://velog.io/@num_of_techbytes/230711-EKS</link>
            <guid>https://velog.io/@num_of_techbytes/230711-EKS</guid>
            <pubDate>Tue, 11 Jul 2023 08:52:41 GMT</pubDate>
            <description><![CDATA[<p>통상적인 K8S 구조: 3개 이상의 Master Node(Control Node) 생성 -&gt; Master Node가 저장된 서버가 망가지면 전체 서비스가 중단되기 때문에 다수의 Master Node를 클러스터 구조로 연결해서 서비스를 제공.</p>
<p>On-Premise OCP 구성 순서: 개발/검증 OCP 환경에서 Test 후 실제 구축</p>
<p>Hybird Cloud 구조 사용 이유: Front 부분은 Flexible해야하므로 Cloud 환경을 사용함.</p>
<p>K8S: Container Orchestration Tool. 대량의 컨테이너를 자동 배포하는 도구.</p>
<hr>
<h2 id="k8s-실습-환경-준비">K8S 실습 환경 준비</h2>
<ol>
<li>가상 머신 생성(CPU: core 2, RAM: 2GiB, OS: ubuntu 20.0)</li>
</ol>
<ul>
<li><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a33976d3-21b0-478c-8e60-ea4c19a2d14c/image.png" alt=""></li>
</ul>
<ol start="2">
<li><p>ubuntu 설치 </p>
</li>
<li><p>화면 조정 - 1280 &amp; 800.</p>
</li>
<li><p>ubuntu setting에서 IPv4 설정 + 전원 사용안함 설정.
IP : 10.100.0.105, 서브넷마스크 : 255.255.255.0(24), 게이트웨이 : 10.100.0.1 , DNS : 10.100.0.1</p>
</li>
</ol>
<ol start="5">
<li><p>terminal에서 <code>sudo passwd root</code> 명령어로 root 계정의 암호 설정. (<code>sudo su -</code> 명령어로 root 계정 접속 후에 암호 변경이 가능함)</p>
</li>
<li><p>ping 8.8.8.8로 인터넷 연결 확인</p>
</li>
<li><p>sudo apt-get update</p>
</li>
<li><p><code>sudo apt-get install -y openssh-server curl vim tree</code> 명령어로 ssh 다운로드 + sudo systemctl start sshd </p>
</li>
<li><p>xShell 에서 원격 터미널 접속.  (호스트: 127.0.0.1 -&gt; 포트번호 : 105로 설정.)</p>
</li>
<li><p>/etc/hostname 파일 내용 변경</p>
<pre><code>Master</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/e31b1891-3d9e-4897-9cda-7e5f378e045f/image.png" alt=""></p>
</li>
</ol>
<ol start="11">
<li><p>/etc/hosts 파일 내용 변경. IP, 이름 추가
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/768be188-c502-4732-a58e-6718ff1fa150/image.png" alt=""></p>
</li>
<li><p>docker 설치</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1aeb3b31-9c83-480c-8249-41a6150555e6/image.png" alt=""></p>
<ol start="13">
<li>스냅샷 생성</li>
</ol>
<pre><code>sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml</code></pre><hr>
<h2 id="worknode-생성">worknode 생성</h2>
<ol>
<li><p>Master Node를 Stop 후 복제본 생성 -&gt; work node로 만듦
옵션: 복제 설정 -&gt; 완전 복제
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/73cbc2f4-49e9-4ad8-b1f6-605bbdb0430b/image.png" alt=""></p>
</li>
<li><p>work1의 /etc/hosts 파일과 /etc/hostname 파일 내용 수정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/54aaafa8-0096-4b64-a902-c29f5412c455/image.png" alt=""></p>
</li>
</ol>
<pre><code>swapon &amp;&amp; cat /etc/fstab
swapoff -a &amp;&amp; sed -i &#39;/swap/s/^/#/&#39; /etc/fstab
setenforce 0
ufw disable
systemctl stop firewalld
systemctl disable firewalld
modprobe br_netfilter
cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF 
sudo sysctl --system
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
apt install selinux-utils
setenforce 0
cat /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo &quot;deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main&quot; | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo vim /etc/apt/sources.list.d/kubernetes.list
cat /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
sudo apt-mark hold kubelet kubeadm kubectl
sudo mkdir /etc/docker
cat &lt;&lt;EOF | sudo tee /etc/docker/daemon.json
{
  &quot;exec-opts&quot;: [&quot;native.cgroupdriver=systemd&quot;],
  &quot;log-driver&quot;: &quot;json-file&quot;,
  &quot;log-opts&quot;: {
    &quot;max-size&quot;: &quot;100m&quot;
  },
  &quot;storage-driver&quot;: &quot;overlay2&quot;
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/916ef0f5-3366-4840-8cf8-e04ee5e8a2fc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/09dec026-e8a9-4f5a-b8cb-78b0147ac4a6/image.png" alt=""></p>
<p>현재 실행중인 pod를 -o yaml 옵션으로 yaml파일 저장이 가능함</p>
<hr>
<h2 id="k8s-주요-명령어">K8S 주요 명령어</h2>
<p>cordon: 장애 발생시 스케쥴링을 중지하는 명령어
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f64066cb-1ee0-4e20-8bd7-23510c41d9f0/image.png" alt=""></p>
<p>uncordon: 스케줄링 재시작
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b6cbb6d7-87e3-437a-b301-1e556cf9591e/image.png" alt=""></p>
<p>drain: 노드의 pod들을 옮기는 명령어 -&gt; 부하 문제가 발생하지 않음</p>
<p>kubectl get pod -n kube-system
의미 : kube-system 의 pod 조회</p>
<p>kubectl get nodes
의미 : node 상태확인</p>
<p>kubectl get nodes -o wide
의미 : node 에 대한 자세한 정보</p>
<p>kubectl get pod --all-namespaces
의미 : 모든 네임스페이스 pod 리스트</p>
<p>kubectl get pods -n green (특정한 네임스페이스에서 정보를 볼떼)
의미 : green 이란 이름의 pods 조회</p>
<p>watch kubectl get pods -o wide 
으미 : 2초 간격으로 상태 모니터링 하겠다.</p>
<p>kubectl get pods -n green -o wide (상세정보볼때)
의미 : green 이란 이름의 pods 상세조회</p>
<p>kubectl apply -f obj.yaml 
의미 : obj.yaml 파일로 pod,deployment,service 등 생성하겠다.</p>
<p>kubectl delete -f obj.yaml 
의미 : obj.yaml 파일로 만들어진 pod,deployment,service 삭제</p>
<p>kubectl create deployment demo-deployment --image=nginx:1.14 
의미 : demo-deployment 란 deployment 를 배포하고 컨테이너 이미지는 nginx:1.14 를 사용</p>
<p>kubectl create deployment demo-deployment --image=nginx:1.14 --replicas=5
의미 : demo-deployment 란 deployment 를 배포하고 컨테이너 이미지는 nginx:1.14 를 사용하고 5개의 레플리카를 사용</p>
<p>kubectl scale deployment demo-deployment  --replicas=10
의미 : demo-deployment 의 레플리카 개수를 10개로 변경</p>
<p>kubectl get deployment
의미 : 배포 목록 확인</p>
<p>kubectl get deployment.apps demo-deployment -o yaml
의미 : demo-deployment 의 .yaml 파일을 확인</p>
<p>kubectl get deployment.apps demo-deployment -o yaml &gt; demo-deployment.yaml 
의미 : demo-deployment 의 .yaml 파일을 demo-deployment.yaml로 저장</p>
<p>cat(vi) demo-deployment.yaml
의미: demo-deployment.yaml를 본다</p>
<p>kubectl delete deployments.apps demo-deployment
의미: demo-deployment 를 지운다</p>
<p>kubectl get po
의미 : get pods 과 같은 의미(현재 네임스페이스의 pods 리스트 )</p>
<p>kubectl get rs
의미 : get replicaset 과같은 의미(현재 네임스페이스의 replicaset 리스트)</p>
<p>kubectl get deploy
의미 : kubectl get deployment 와 같은 의미(배포 목록 확인)</p>
<p>watch kubectl get po -o wide
의미 : pod 의 상세정보를 실시간 확인</p>
<p>kubectl delete pod pod-exam
의미 : pod-exam pod 삭제</p>
<p>kubectl delete rs demo-deployment-6d8dbd56d7
의미 : demo-deployment-6d8dbd56d7 replicaset 삭제</p>
<p>kubectl delete deploy demo-deployment
의미 : demo-deployment deployment 삭제</p>
<p>========================================================3/28
kubectl cordon node3.example.com 
의미 : node3.example.com 노드의 포드들이 더이상 스케쥴링 실행 x</p>
<p>kubectl drain node2.example.com
의미 : node2.example.com 노드의 포드들을 다른곳으로 이동 </p>
<p>kubectl get nodes
의미 : node 상태확인</p>
<p>kubectl uncordon node3.example.com
의미 : node3.example.com 노드의 포드들이 정상적으로 스케쥴링 </p>
<p>kubectl drain node2.example.com --ignore-daemonsets
의미 : node2.example.com 노드의 데몬셋을 이용한 포드들을 제외한 다른포드들이 다른곳으로 이동</p>
<p>kubectl delete nodes node3.example.com
의미 : node3.example.com 노드 제거</p>
<p>kubeadm token list
의미: token 값 조회</p>
<p>kubeadm token create
의미 : token 생성</p>
<h3 id="worker-node-에서-설정">worker node 에서 설정</h3>
<p>kubeadm reset
의미 : kubeadm 초기화</p>
<p>kubeadm join --token 4gun4p.v..b 10.100.0.104:6443 --discovery-token-unsafe-skip-ca-verification 
의미 : token 을 워커노드에 join</p>
<p>docker build -t hub.example.com/nginx . 
의미 : hub.example.com/nginx 테그를 이용해 도커 생성</p>
<p>docker push hub.example.com/nginx
의미 : hub.example.com/nginx 이미지</p>
<p>kubectl create deployment nginx --image=nginx1.14 
의미 : nginx 란 deployment 를 배포하고 컨테이너 이미지는 nginx:1.14 를 사용</p>
<p>kubectl expose deploy nginx --type=ClusterIP --port 80 
의미 : nginx 란 deployment 를 80포트로 외부 노출</p>
<p>docker version
의미 : docker 버전확인</p>
<p>watch kubectl get pods -o wide
의미 : pods 의 상세정보를 실시간 확인</p>
<p>kubectl drain nodeX.example.com --dry-run=client
의미 : nodeX.example.com 노드의 포드들을 다른곳으로 이동할 정보를 미리보기</p>
<p>kubectl drain nodeX.example.com --ignore-daemonsets
의미 : nodeX.example.com 노드의 데몬셋을 이용한 포드들을 제외한 다른포드들이 다른곳으로 이동</p>
<p>kubectl drain nodeX.example.com --force 
의미 : nodeX.example.com 노드의 포드들을 다른곳으로 이동할떄 중요한역할을 하는 포드의 경우 삭제되지 않아서 drain 이 진행되지않기때문에 --force 옵션을 주면 강제로 삭제</p>
<p>kubectl uncordon nodeX.example.com 
의미 : nodeX.example.com 노드의 포드들이 정상적으로 스케쥴링</p>
<p>kubectl drain nodeX.example.com --ignore-daemonsets
의미 : nodeX.example.com 노드의 데몬셋을 이용한 포드들을 제외한 다른포드들이 다른곳으로 이동</p>
<p>kubectl delete node nodeX.example.com 
의미 : nodeX.example.com 노드 제거</p>
<p>kubectl logs multipod -c nginx-container 
의미 : 멀티pod 내의 컨테이너 로그 출력</p>
<p>kubectl get pods --show-labels
의미 : pods 의 레이블 정보 확인</p>
<p>kubectl get pod -L <label_type>
의미 : pods 의 레이블 타입 확인</p>
<p>kubectl get pod
의미 : 현재 네임스페이스의 pods 조회</p>
<p>kubectl get pod --show-labels
의미 : pod 의 레이블 정보 확인 </p>
<p>kubectl label pod redis-pod app=db 
의미 : redis-pod 에 app=db 라는 레이블 부여 </p>
<p>kubectl label pod nginx-pod app=web-services type=frontend 
의미 : nginx-pod 에 app=web-services 라는 레이블 부여 타입은 frontend</p>
<p>kubectl label po label-pod app=web-services --overwrite
의미 : label-pod 에 app=web-services 라는 레이블 로 변경</p>
<p>kubectl get pod --show-labels 
의미 : pod 의 레이블 조회</p>
<p>kubectl get pod -L app,type 
의미 : pod 의 레이블의 app,type 정보 조회</p>
<p>kubectl get nodes --show-labels
의미 : nodes 의 레이블 정보 확인</p>
<p>kubectl get nodes -L beta.kubernetes.io/arch
의미 : 레이블이 beta.kubernetes.io/arch 라는 nods 조회</p>
<p>kubectl delete pod nodeselector-pod 
의미 : nodeselector-pod 삭제</p>
<p>kubectl label node node2.example.com ssd-
의미 : node2.example.com 노드에 디스크가 ssd 인 레이블 추가 </p>
<p>kubectl create -f pod-nodeselector.yaml
의미 : pod-nodeselector.yaml 파일 생성</p>
<p>kubectl label node node1.example.com ssd=true
의미 : node1.example.com 노드에 디스크가 ssd 인 레이블 추가</p>
<p>kubectl get pods nodeselector-pod -o wide
의미 : nodeselector-pod 란 pod 의 상세정보 확인</p>
<p>kubectl describe pod nginx-pod 
의미 : nginx-pod 의 full 정보 확인</p>
<p>kubectl delete pod testpod
의미 : testpod 삭제</p>
<p>kubectl delete pod -l release=canary
의미 : release=canary란 레이블을 가진 pod 삭제</p>
<p>kubectl create -f pod-liveness.yaml 
의미 : pod-liveness.yaml 생성 </p>
<p>kubectl describe pod liveness-pod
의미 : liveness-pod 의 full 정보 확인</p>
<p>kubectl get pod testpod
의미 : testpod 조회</p>
<p>kubectl get pod testpod -o yaml
의미 : testpod 의 yaml 상세정보 확인</p>
<p>kubectl get pod testpod -o json 
의미 : testpod 의 json 상세정보 확인</p>
<p>kubectl logs testpod
의미 : testpod의 로그 확인</p>
<p>kubectl logs testpod -c appjs-container
의미 : testpod 의 appjs-container 로그 확인</p>
<p>kubectl port-forward testpod 8888:8080 
의미 : testpod 888:8080 으로 포트 포워딩</p>
<p>curl localhost:8888
의미: localhost:8888 연결 확인</p>
<p>kubectl label pod testpod2 env=debug --overwrite 
의미 : testpod2 에 env=debug 라는 레이블 로 변경</p>
<p>kubectl get po -L app,env
의미 : pod 의 레이블의 app,type 정보 조회</p>
<p>kubectl get po -l app=hpe 
의미 : 레이블이 app=hpe 인 pod 조회</p>
<p>kubectl get po -l &#39;!env&#39; 
의미 : 레이블이 &#39;!env&#39; 인 pod 조회</p>
<p>kubectl delete pod test-gpu
의미 : test-gpu 삭제 </p>
<p>kubectl delete po -l app=hpe
의미 :레이블이 app=hpe 인 pod 삭제</p>
<p>kubectl delete po --all 
의미 : 모든 포드 삭제</p>
<p>kubectl get rc
의미 : replication controller 정보 조회</p>
<p>kubectl get pods
의미 : pods 조회</p>
<p>kubectl get pods -o wide
의미 : pods 의 상세정보 조회</p>
<p>kubectl delete pod nginx-rc-jm99k 
의미 : nginx-rc-jm99k pod 삭제</p>
<p>kubectl delete replictioncontroller nginx-rc 
의미 : replictioncontroller nginx-rc 삭제</p>
<p>kubectl edit replicationcontroller nginx-rc
의미 : replicationcontroller nginx-rc 수정</p>
<p>kubectl create -f rs-nginx.yaml
의미 : rs-nginx.yaml 파일 생성</p>
<p>kubectl get rs
의미 : replicaset 조회</p>
<p>kubectl get pods 
의미 : pods 조회</p>
<p>kubectl describe pod rs-nginx-XXXX
의미 : rs-nginx-XXXX full 정보 확인</p>
<p>kubectl get all
의미 : 모든 pod,service,deployment,replicaset 조회</p>
<p>kubectl scale deployment nginx-deploy --replicas=2
의미 : nginx-deploy의 replicas 를 2로 변경</p>
<p>kubectl delete deployments.apps nginx-deploy 
의미 : nginx-deploy 삭제</p>
<p>kubectl get daemonsets.apps -n kube-system 
의미 : default 로 존재하는 데몬셋 확인</p>
<p>kubectl get pods -n kube-system -o wide | grep -e proxy -e weave 
의미 : kube-system 네임스페이스에 속하고 proxy 왕 weave 가 들어간 상세정보 조회</p>
<p>kubectl get pod -o wide 
의미 : pod 의 상세정보 조회</p>
<p>kubectl get daemonsets.apps 
의미 : 데몬셋 정보 조회</p>
<p>kubectl edit daemonsets.apps fluentd
의미 : 데몬셋을 fluentd(로그수집기)로 업데이트</p>
<p>kubectl rollout history daemonset 
의미 : daemonset 변경내역 확인</p>
<p>kubectl rollout undo daemonset fluentd
의미 : 바로 직전버전으로 롤백</p>
<p>kubectl rollout status daemonset fluentd 
의미 : daemonset fluentd 의 rollout status 확인</p>
<p>kubectl describe pod fluentd-<NEWID> 
의미 : fluentd-<NEWID> 상세정보 확인</p>
<p>kubectl delete daemonsets.apps fluentd 
의미 : daemonsets.apps fluentd  삭제</p>
<p>kubectl apply -f job-centos.yaml 
의미 : job-centos.yaml 수행</p>
<p>kubectl get pods --watch
의미 : pods 실시간 확인</p>
<p>kubectl get events
의미 : events 확인</p>
<p>kubectl create deployment my-first-deploy --image=nginx:1.14
의미 : my-first-deploy 란 deployment 를 배포하고 컨테이너 이미지는 nginx:1.14 를 사용</p>
<p>kubectl scale deployment my-first-deploy  --replicas=2
의미 : my-first-deploy 의 replicas 를 2로 변경</p>
<p>kubectl get pods
의미 : pods 확인</p>
<p>kubectl get pods -o wide
의미 : pods의 상세확인</p>
<p>kubectl describe replicaset my-first-deploy-zzz 
의미 : replicaset my-first-deploy-zzz의 full 정보 확인 </p>
<p>kubectl get deployment
의미 : 배포목록 확인</p>
<p>kubectl expose deployment my-first-deploy --port=80 --type=NodePort
의미 : my-first-deploy 란 deployment 를 80포트로 외부 노출 타입은 nodeport</p>
<p>kubectl get svc
의미 : 서비스 확인</p>
<p>kubectl describe svc my-first-deploy 
의미 : my-first-deploy란 서비스의 full 정보 확인</p>
<p>kubectl delete deployment my-first-deploy
의미 : my-first-deploy 삭제</p>
<p>kubectl delete svc my-first-deploy 
의미 : my-first-deploy 삭제</p>
<p>kubectl create -f replicationcontroller-definition.yaml 
의미 : replicationcontroller-definition.yaml 파일 생성</p>
<p>watch kubectl get pods 
의미 : pods 목록 실시간 확인</p>
<p>kubectl get rc 
의미 : replication controller 정보 조회</p>
<p>kubectl describe rc myapp 
의미 : myapp란 replication controller 의 full 정보 확인</p>
<p>kubectl get pod --show-labels
의미 : pod의 label 정보 조회</p>
<p>kubectl label pod myapp-rc-XXX app=nginx --overwrite 
의미 : myapp-rc-XXX pod 에 app=nginx 라는 레이블로 변경</p>
<p>kubectl get pods --show-labels
의미 : pod의 label 정보 조회</p>
<p>kubectl get pod -L app,type 
의미 : pod 의 레이블의 app,type 정보 조회</p>
<p>kubectl scale rc myapp-rc --replicas=5<br>의미 : myapp-rc 라는 replication controller 의 replicas를 5로 변경</p>
<p>kubectl edit rc myapp-rc
의미 : myapp-rc 수정</p>
<p>kubectl scale rc myapp-rc --replicas=3 
의미 : myapp-rc 라는 replication controller 의 replicas를 3으로 변경</p>
<p>kubectl get pods -L app
의미 : pod 의 레이블의 app 정보 조회 </p>
<p>kubectl describe pod myapp-rc-xxx
의미 : myapp-rc-xxx 의 full 정보 확인</p>
<p>kubectl get rs
의미 : replicaset 조회</p>
<p>kubectl get pods -L app,type 
의미 : pods 의 레이블의 app,type 정보 조회</p>
<p>kubectl delete rs myapp-rs
의미 : myapp-rs 라는 replicaset 삭제</p>
<p>kubectl delete pod --all
의미 : 모든 포드 삭제</p>
<p>kubectl label nodes node1.example.com ssd=true
의미 : node1.example.com 노드에 디스크가 ssd 인 레이블 추가</p>
<p>kubectl label nodes node3.example.com ssd=true
의미 : node3.example.com 노드에 디스크가 ssd 인 레이블 추가</p>
<p>kubectl get nodes --selector ssd=true
의미 : ssd=true 인 nodes 확인</p>
<p>kubectl get node --show-labels
의미 : node의 레이블 확인</p>
<p>kubectl get nodes -L ssd
의미 : ssd 라는 레이블의 nodes 확인</p>
<p>kubectl label nodes node1.example.com ssd
의미 : ssd 라는 레이블을 node1.example.com node 에 추가</p>
<p>kubectl get pods -o wide
의미 : pods 의 상세정보 확인</p>
<p>kubectl get pod -o wide
의미 : pods 의 상세정보 확인</p>
<p>kubectl get svc
의미 : service 정보 확인</p>
<p>iptables -t nat -S | grep 80
의미 : nat 테이블 중 80이들어간 목록 확인</p>
<p>kubectl get pod --show-labels -o wide
의미 : pod의 레이블 상세정보 확인</p>
<p>kubectl get svc 
의미 : service 정보 확인</p>
<p>kubectl describe svc appjs-service
의미 : appjs-service 라는 service 의 full 정보 확인</p>
<p>kubectl get endpoints
의미 : endpoints 정보 확인</p>
<p>kubectl describe svc my-service 
의미 : my-service 라는 service 의 full 정보 확인</p>
<p>cp svc-appjs.yaml svc-node.yaml 
의미 : svc-appjs.yaml 라는 파일을 svc-node.yaml이름으로 현위치에 복사</p>
<p>cat svc-node.yaml 
의미 : svc-node.yaml 확인</p>
<p>systemctl start nginx &amp;&amp; systemctl enable nginx
의미 : nginx(웹서버) 실행 / nginx(웹서버) 자동 시작 등록 </p>
<p>systemctl status nginx
의미 : nginx 상태 확인</p>
<p>firewall-cmd --add-service=http
의미 : http service 추가</p>
<p>firewall-cmd --add-service=http --permanent 
의미 : http service 추가 [시스템 재부팅 이나 방화벽 재시작후에도 적용되도록 설정]</p>
<p>setsebool -P httpd_can_network_connect 1
의미 : httpd 프로세스에서 네트워크 연결 허용</p>
<p>systemctl restart nginx
의미 : nginx 재시작</p>
<p>kubectl get pod -n kube-system -l k8s-app=kube-dns
의미 : kube-system 의 pod 중 레이블이 k8s-app=kube-dns 인 pod 확인</p>
<p>kubectl get service
의미 : service 확인</p>
<p>kubectl exec -it centos-pod -- /bin/bash
의미 : centos-pod 에 접속</p>
<p>kubectl expose deploy ev237 --port 80
의미 : ev237 란 deployment 를 80포트로 외부 노출</p>
<p>kubectl get service 
의미 : service 확인</p>
<p>kubectl get endpoints
의미 : endpoints 확인</p>
<p>kubectl edit service ev237
의미 : ev237 란 service 를 수정</p>
<p>cp rs-appjs.yaml readiness-appjs.yaml 
의미 : rs-appjs.yaml 라는 파일을 readiness-appjs.yaml 이름으로 현위치에 복사</p>
<p>vim readiness-appjs.yaml 
의미 : readiness-appjs.yaml 조회</p>
<p>kubectl get namespaces
의미 : namespaces 확인</p>
<p>kubectl delete pod nginx-pod-request 
의미 : nginx-pod-request pod 삭제</p>
<p>vim nginx-pod-request.yaml 
의미 : nginx-pod-request.yaml 조회</p>
<p>kubectl create -f nginx-pod-request.yaml
의미 : nginx-pod-request.yaml 파일 생성</p>
<p>kubectl get pods
의미 : pod 확인</p>
<p>kubectl get ns </p>
<p>의미 : namespaces 확인</p>
<p>kubectl get pod --namespace kube-system 
의미 : kube-system 라는 namespace 의 pod 확인</p>
<p>kubectl create namespace custom-namespace 
의미 : custom-namespace 라는 namespaces 생성</p>
<p>kubectl create -f testpod.yaml -n custom-namespace 
의미 : testpod.yaml 파일과 namespace custom-namespace 를 생성</p>
<p>kubectl get namespaces
의미 : namespaces 확인</p>
<p>kubectl delete namespace custom
의미 : custom 이란 namespace 삭제</p>
<p>kubectl get pod -o wide --watch
의미 : pod 상세정보를 실시간 확인</p>
<p>kubectl delete deployments.apps stressful
의미 : deployments.apps stressful 제거</p>
<p>kubectl get pod -n ingress-nginx
의미 : ingress-nginx pod 확인</p>
<p>kubectl exec -n ingress-nginx ingress-nginx-controller-69fb496d7d-hrmrb -- /nginx-ingress-controller --version
의미 : ingress-nginx ingress-nginx-controller-69fb496d7d-hrmrb 를 실행시키고 nginx-ingress-controller의 버전 확인</p>
<p>kubectl get svc -n ingress-nginx
의미 : ingress-nginx 란 이름의 service 확인</p>
<p>kubectl config current-context 
의미 : 현재 context 확인</p>
<p>kubectl config set-context ingress-nginx --namespace=ingress-nginx --cluster=kubernetes --user=kubernetes-admin
의미 : ingress-nginx 란 context 를 생성하고 namespace 는 ingress-nginx cluster는 kubernetes user는 kubernetes-admin 으로 세팅한다</p>
<p>kubectl config view
의미 : kubeconfig 확인</p>
<p>kubectl config use-context ingress-nginx
의미 : ingress-nginx context 를 사용한다</p>
<p>kubectl config current-context 
의미 : 현재 context 확인</p>
<p>dynamic-web Pod 내의 web-server 컨테이너의 마운트 디렉토리를 사용해보자.
touch 명령으로 파일을 생성할 수 있는가?</p>
<p>kubectl exec dynamic-web -c web-server -- ls /usr/share/nginx/html 
의미 : dynamic-web파드에 접속하여 [container은 web-server] /usr/share/nginx/html 경로에있는 파일 목록을 보여준다</p>
<p>kubectl exec dynamic-web -c web-server -- touch /usr/share/nginx/html/test.html
의미 : dynamic-web파드에 접속하여 [container은 web-server] /usr/share/nginx/html 경로에 test.html 파일을 생성한다</p>
<p>kubectl get pods -o wide -n kube-system 
의미 : kube-system란 namespace를 가지고있는 pods의 상세정보</p>
<p>kubectl exec -n kube-system -it fluentd-elasticsearch-2dqfp -- bash 
의미 : fluentd-elasticsearch-2dqfp 포드에 접근</p>
<p>ls /var/log 
의미 : ls /var/log 경로의 파일 목록 확인</p>
<p>ls /var/lib/docker/containers 
의미 : ls /var/lib/docker/containers 경로의 파일 목록 확인</p>
<p>exit
의미 : 나가기</p>
<p>kubectl create -f pv1.yaml -f pv2.yaml -f pv3.yaml -f pv4.yaml
의미 : pv1.yaml , pv2.yaml , pv3.yaml , pv4.yaml 파일 생성</p>
<p>kubectl get pv
의미 : Persistent Volume 확인</p>
<p>kubectl create -f pvc.yaml
의미 : pvc.yaml 파일 생성</p>
<p>kubectl get pvc
의미 : Persistent Volume Claim 확인</p>
<p>kubectl create -f pod-mongodb.yaml 
의미 : pod-mongodb.yaml 파일 생성</p>
<p>kubectl exec -it mongodb-pod -- mongo 
의미 : mongodb-pod pod 에 접근</p>
<p>kubectl delete pod mongodb-pod 
의미 : mongodb-pod 삭제</p>
<p>kubectl delete pvc mongo-pvc 
의미 : mongo-pvc 삭제</p>
<p>kubectl get pv,pvc
의미 : Persistent Volume,Persistent Volume Claim 확인</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230710-EC2 + RDS 연동, ACM]]></title>
            <link>https://velog.io/@num_of_techbytes/230710-EC2-RDS-%EC%97%B0%EB%8F%99-ACM</link>
            <guid>https://velog.io/@num_of_techbytes/230710-EC2-RDS-%EC%97%B0%EB%8F%99-ACM</guid>
            <pubDate>Tue, 11 Jul 2023 00:11:29 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/39c4e63e-e9fc-4b0f-9e35-ae2bf0a4e28f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5319694f-0de1-4f5a-8d17-fd1758b5db48/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fa1cf577-ea76-4744-aa56-6360903b0d0d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e0a8b8d0-ed59-4d3d-98cb-ea9b07e127db/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/753655fc-6f85-45be-b126-aaf76da92403/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bd08a232-bbc0-4bd8-a885-2127c5dfc0e6/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/42898ae9-f275-40f0-b029-f9a824afcc5e/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8163c05f-0d4d-452f-b5ee-f794e7cfcb90/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/75f9f9cf-aeb2-41ed-84b7-7515acc980d4/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7c2cf070-a16e-444a-b34e-3cf0b886b60d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/42acf1c4-3f1e-445e-ab05-cddaca9446d0/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a7f50394-cb56-4248-b949-128e76b881b2/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/714be5a7-17a9-4b8c-b09e-cb3b364a45f0/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f5b15948-c23a-453e-b5e4-f9718d9dcc9d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6319af89-7945-46bd-95e4-58c78f7edfdf/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c91fdd50-bc16-4714-a851-da9a0a415b7e/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f13bc754-1a37-4131-a00c-9090029277b8/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6b0bd070-35f9-4c3b-afdd-ad2acc91db61/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d501781d-d8e2-4409-afc6-c0709a1d2b93/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/760ebf03-8c63-4f0c-a4ed-914be70e4ffc/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/83dff553-c9de-4537-ad71-dfc647efb834/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/dbcbf3d0-ba48-422d-aaaf-59a2f82138c6/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/375e260a-e3bb-44fc-aee3-b750aca29832/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/daa625d8-43c0-4d57-bcc2-ebd51c2698ab/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f7aeedf3-af9e-4738-9597-ad7b00ced33c/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/340a8f44-3e70-4f20-b9d2-7aeee3ce0927/image.png" alt="">
ㅍ
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cc64ec34-433a-4f16-974b-47e180df159b/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1cf2407a-b5db-4b65-bd9d-817ff8efca4a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1e143100-117e-4dbe-b492-9210e5d2ee42/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0ed631ad-df03-4102-a7f5-af0725bf1a45/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/47bb49a2-96fa-4840-af26-df7cfb6ad9b6/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6441edf4-8073-49ab-b58d-26d0e5064643/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e6d0a20a-9518-4b57-bd95-f11a4fe94a10/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b8d4b608-4622-4c4d-a205-b407dd7c86bd/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9daacf88-bcc3-46f4-9c7d-c623633f8564/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d2a1f51-0759-4278-b823-1975fc9d3bb8/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d0b51535-799d-41c7-8435-6c8f54c9ac5a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3a971075-e28b-4766-81f8-f545a69242b8/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/501a9ecd-8661-4212-8561-37c5756f0494/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2ae4ee3b-b440-4410-87a5-d2ce28301cb7/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/36b63b64-20dc-4b00-966f-ae571d53c233/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/952f77d2-52e8-4b1a-8466-042206dc7bb0/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3c324f4b-d4ce-4cf7-a715-be1ec3499463/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d003e4a0-3dd1-43c4-bb35-a0ee7656ddb0/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6cbddcb1-2415-4727-88fb-0d57615f6bca/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/da5831f6-10e1-4bf1-aa9c-82aae8f46f15/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b1f149ca-0354-430c-ad42-5f173dd53f1d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/eaeae816-2404-4ec0-9e41-548edee97d33/image.png" alt=""></p>
<p>nameserver 등록 = 도메인 </p>
<p>버전 배포 종류</p>
<ul>
<li>rolling update</li>
<li>blue-green</li>
<li>canaria</li>
</ul>
<p>EC2는 VM 단위이므로 무거움, 요즘에는 컨테이너(이미지) 단위로 만들어서 배포함.</p>
<hr>
<h2 id="rds-ec2-연동">RDS EC2 연동</h2>
<ol>
<li>DB용 보안그룹(실습용이므로 0.0.0.0/0으로 설정함), 서브넷 필요</li>
</ol>
<h2 id="acm으로-인증서-발급">ACM으로 인증서 발급</h2>
<ol>
<li><p>ACM을 통해 도메인의 인증서 발급. HTTPS 프로토콜 사용시 필요.</p>
</li>
<li><p>ALB 보안그룹, WEB 보안그룹 인바운드 그룹에 HTTPS 추가.</p>
</li>
<li><p>ALB 리스너 대상 그룹으로 HTTPS 선택</p>
</li>
</ol>
<p>인증서 발급, 도메인 등록 후 도메인 접속을 시도하면 WEB 서버에 정상적으로 연결됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5ca1358a-bc3e-436c-acf7-4bfea31ca972/image.png" alt=""></p>
<h2 id="aws-cli-사용">AWS CLI 사용</h2>
<ol>
<li><p>AWS CLI 설치
참고 자료: <a href="https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-AWS-CLI-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%89%BD%EA%B3%A0-%EB%B9%A0%EB%A5%B4%EA%B2%8C#%EC%9C%88%EB%8F%84%EC%9A%B0_windows">https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-AWS-CLI-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%89%BD%EA%B3%A0-%EB%B9%A0%EB%A5%B4%EA%B2%8C#%EC%9C%88%EB%8F%84%EC%9A%B0_windows</a></p>
</li>
<li><p>설치 후 계정 Accesse Key 값을 입력한 뒤, aws configure list를 입력해서 확인.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6b0a984e-14a7-47a8-b17b-b1a347849528/image.png" alt=""></p>
</li>
<li><p>CLI를 이용해 인스턴스를 원격으로 실행/중지 시킬수 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/dd2b7868-8e62-4d87-88cb-bdcdfebb2ed2/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9d226805-4c08-4656-9a33-3a1f9f83bd82/image.png" alt=""></p>
</li>
<li><p>이제 aws 콘솔 접속 대신 CLI로 서비스 제어가 가능함</p>
</li>
</ol>
<hr>
<h2 id="s3-browser">S3 Browser</h2>
<p>설치 사이트: <a href="https://s3browser.com/">https://s3browser.com/</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2040967c-bd36-4e8c-b2d9-11e723ee8f34/image.png" alt=""></p>
<p>버킷 생성시 주의할 점: 이름에 대문자 불가, 이미 사용중인 이름 사용<img src="https://velog.velcdn.com/images/num_of_techbytes/post/58300b0c-3c4a-4427-a378-2dafaa31d779/image.png" alt="">
 불가.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1fe51429-e8d2-42d4-b271-5480ee07b387/image.png" alt=""></p>
<p>S3는 파일 업로드가 가능함 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/feeffbf3-6cf9-4414-a7e9-3400f1f2a48a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/95def99f-40a0-44ca-85b7-a950ef26f8bb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/14d14915-ef54-4f1b-9769-36d0b9571765/image.png" alt=""></p>
<h2 id="cloudfront">CloudFront</h2>
<p>CloudFront = 온프라미스에서의 CDN 서비스로 볼 수 있음.
전송 가속기 역할을 함.</p>
<h3 id="cdn이란">CDN이란?</h3>
<p>CDN = Content Delivery Network의 약자. 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크로, 지리적 제약 없이 전 세계 사용자에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 콘텐츠 전송 기술을 의미함. </p>
<h3 id="사용이유">사용이유</h3>
<p>웹페이지는 다양한 미디어를 제공하기 때문에 무겁다. 따라서, 보다 빠른 서비스 제공을 위해 CDN을 사용함. 넷플릭스, 왓챠, 유튜브 등 다양한 콘텐츠 제공 서비스에서 활용함.</p>
<h3 id="cloudfront-생성">CloudFront 생성</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4c16d932-2913-41e2-9772-9f52c772947a/image.png" alt=""></p>
<p>원본도메인 = ALB의 도메인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f67eb05d-7f4f-44ad-a2c4-4d3a01501c91/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/2526ec9e-f7ad-466d-9960-03641874e323/image.png" alt=""></p>
<p>Cache policy and origin request policy (recommended) 선택. Legacy cache settings 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9384de79-4569-4ea7-9ff0-80d05a98a536/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/16bfc16a-6ec4-4c69-9e42-a334a43791bc/image.png" alt=""></p>
<p>한국리전에서 발급받은 인증서는 안됨 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/42914f18-ced9-4949-8a96-7a32960264d4/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0221e565-b089-464d-af5b-64a63b450bde/image.png" alt=""></p>
<p>생성.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e2576053-e6b8-4359-9ebd-fcba708071b8/image.png" alt=""></p>
<p>Route53에서 레코드 생성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e2b0ab66-9e61-4654-a0ba-4a09ad34250b/image.png" alt=""></p>
<p>배포 프로토콜을 HTTPS로 선택하면 아래와 같은 에러 화면이 출력됨. HTTP로 선택해야 정상 화면이 출력됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e5a8accf-bf27-4de4-84f3-02d0809bed61/image.png" alt=""></p>
<h3 id="cloudfront-3대-원칙">CloudFront 3대 원칙</h3>
<ul>
<li>이미지와 같은 정적 컨텐츠는 클라우드 프론트에 오래도록 캐시한다.</li>
<li>웹페이지와 같은 동적 컨텐츠는 클라우드 프론트의 전송 최적화 기능을 활용한다.</li>
<li>썸네일 이미지 같은 재사용 가능한 동적 컨텐츠는 클라우드 프론트의 기능을 활용</li>
</ul>
<p>따라서 </p>
<ul>
<li>자주 쓰는 데이터를 저장</li>
<li>통신경로를 최적화 할 때</li>
<li>편의점 느낌 - 사용자가 많이 드나드는 입지에 자주 오는 사용자의 기호에 맞춰, 인기있는 상품을 빠르게 검색 할 수 있도록 해준다. (즉 한마디로 표현하면 편의점 또는 ATM 기기라고 할 수 있다.)</li>
<li>서울리전에는 2곳의 엣지 로케이션이 있고, 글로벌적으로는 53개의 엣지 로케이션이 있다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[230705-클라우드 아키텍처]]></title>
            <link>https://velog.io/@num_of_techbytes/230705-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98</link>
            <guid>https://velog.io/@num_of_techbytes/230705-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98</guid>
            <pubDate>Wed, 05 Jul 2023 23:58:35 GMT</pubDate>
            <description><![CDATA[<h2 id="awsdb">AWSDB</h2>
<p>aws DB 종류</p>
<ul>
<li>Amazon Aurora - Mysql, postgres 호환</li>
<li>Aurora severless</li>
<li>NoSQL</li>
<li>...</li>
</ul>
<p>사용자 &gt; 1000명 -&gt; 부하 분산을 위한 로드밸런싱 필요, db 이중화 필요</p>
<p>이중화: 두개의 AZ에 위치하는 DB중 하나는 active, 다른 하나는 standby로 구분. Active db가 다운되면, Standby db를 Active로 변경.
standby는 읽기 불가능</p>
<p>ELB: 부하 분산을 위한 로드밸런서 - HTTPS 통신을 위한 보안 인증 필요 = 인증서 다운로드를 위한 DNS 필요</p>
<ul>
<li>ALB </li>
</ul>
<p>사용자 &gt; 10000 -&gt; 읽기 전용 복제본(Read Replica) 필요.</p>
<ul>
<li>active와 standby는 동기 방식(변경사항 바로 복제)</li>
<li>active와 read replica는 비동기 방식</li>
</ul>
<p>정적 컨텐츠 = S3와 CloudFront 활용.</p>
<ul>
<li>S3: 오브젝트 기반 스토리지 = 이미지와 같은 미디어 저장 가능</li>
<li>CloudFront: 컨텐츠 전달을 위한 캐싱</li>
</ul>
<p>보다 많은 보하 분산 = 캐시 사용(섹션 유지)</p>
<ul>
<li>AWS ElastiCache: 사용자의 섹션을 유지, DB의 부하를 줄여줌.<ul>
<li>관리형 Memcached(단일 AZ 서비스), Redis(다중 AZ 서비스) 사용</li>
<li>인메모리 기반이므로 DB보다 빠른 읽기 속도</li>
<li>사용 비용이 매우 높음</li>
</ul>
</li>
</ul>
<p>사용자 &gt; 5000000 -&gt; 오토 스케일링 필요
오토 스케일링: 효율적인 운영을 위해 트래픽에 따라 컴퓨터 클러스터의 용량을 자동 조절</p>
<p>사용자 &gt; 1백만 -&gt; interner elb 사용
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/41cccef5-e812-416f-9946-3143e68c2763/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b5c37639-2169-4ab2-bb2b-576cfc7d71b9/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8212197a-f486-4d86-aa55-c75ff73df3f1/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b11c102e-4ad1-4fee-8631-ed23749052dc/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e2a85b24-aef5-4613-9f25-ec17f004b363/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d528d7f-4287-4bd0-b7aa-bcf15283fda3/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/447f01cd-ff51-408f-bea9-73cc696790ea/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cb8856a3-6b14-4b3c-89fc-641eae6b777a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a50895ec-6924-4cea-a53d-71196d905de0/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a7271e0e-14b9-4140-b042-f7b12456b27d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f6ae680c-9bc2-4cef-bc26-6ecf6954b72f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3cada015-d244-4b75-beaf-16ae837f9c18/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3370de0f-9de2-4b01-96b7-e92ee90e1ded/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/81fda555-3901-43de-80df-5b7b3efca908/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7afcc7a2-ccea-4f35-aadd-429e3790150b/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0ebadad0-b4c8-494e-9b70-79b765e96c23/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d145f531-ae02-4832-9ef8-e1798152545c/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e2515c3f-563c-4a3f-b30d-7d2d55274477/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/070fd251-a426-40a9-9110-2fa2cac4ec18/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/2a0c7595-8c44-4dd6-831c-f89630e996c9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/653fd395-19f8-40d5-bd5a-f2cd10d3c385/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/732acb24-e6f9-4fb9-a4ce-19707b87ab45/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/27663965-f3ab-4371-90ca-ec71505f0967/image.png" alt=""></p>
<hr>
<h2 id="aws-rds-생성">AWS RDS 생성</h2>
<p>순서: RDS 선택 - 데이터베이스 생성 선택 - 설정 및 생성 - MySQL WorkBench 설치 및 연결</p>
<p>mysql은 크게 두가지 방식으로 사용할 수 있다. -&gt; 워크밴치 or 서버에서 자체 설치</p>
<h3 id="workbench-사용법">Workbench 사용법:</h3>
<p><a href="https://m.blog.naver.com/nieah914/221815212859">https://m.blog.naver.com/nieah914/221815212859</a></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4ca002d6-da2a-47b1-904f-994ea1010986/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d0750cca-f2ed-4d6e-88c1-701c0d58ffc8/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e19f0868-b7df-4ee9-ab8f-2ad18c9eef27/image.png" alt=""></p>
<h3 id="aws-ec2linux에-mysql-설치하는법">aws EC2(Linux)에 mysql 설치하는법:</h3>
<p><a href="https://blogshine.tistory.com/322">https://blogshine.tistory.com/322</a> </p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d3d87146-d2f6-45a0-b89b-41a5397f0c9b/image.png" alt=""></p>
<p>server에 mysql 설치 직후에는 <code>mysql -u root -p</code>로 연결이 안됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4a8ad1d2-9833-40f5-a294-36c9968c9286/image.png" alt=""></p>
<p>이는 IP가 없기 때문에 생기는 문제로, DB 인스턴스와 연결하기 위해선 <code>mysql -u &#39;관리자계정명&#39; -p -h &#39;aws db 인스턴스의 엔드포인트 주소&#39;</code>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/300f49b3-cb01-4f40-83cf-d74edab71db4/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/638c55a5-69ce-4262-8def-b0273023d57a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8d17787f-1e69-474a-b8f7-3ca077fe527c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8408e43c-5014-4dec-a690-061319c5f5d7/image.png" alt=""></p>
<h3 id="설치-이후-설정-1-시간대-변경">설치 이후 설정 1. 시간대 변경</h3>
<p>select now()를 통해 시간을 확인해보면, RDS의 현재 시간이 시간대가 UTC로 설정되어있음을 알 수 있다. 
정상적인 시스템 운영을 위해서는 올바른 시간대(Asian/Seoul)를 사용해야되므로 AWS RDS의 시간대 수정 및 재부팅 필요함.
참고 사이트: <a href="https://programforlife.tistory.com/52">https://programforlife.tistory.com/52</a>
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ca828244-0c7a-410c-bef5-e7fb52b8daaa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/10201e52-0074-4146-b8ee-be6414da7929/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fb4d9976-c07b-459d-8549-046b1271181d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b7d1051b-4099-4b2f-9b21-c08358d9abd0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d4c9ea33-711a-4c56-959b-6bd5899f1a8d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f5bc4f18-e7bf-4ee2-9e4b-9f889705ce12/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/50254654-f565-4c85-b126-1c6a4ced7ecd/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/df5f504f-2049-48f9-929e-5e8ef5b6d3dd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/27bd4a25-ce47-493d-af3f-267cbfaa51ba/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b664c356-76a7-4eba-879b-41c09fbcacab/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/dc8b76f7-224b-43a2-b1fa-9897e1f9beb8/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/fe55a922-51fc-4650-8265-cbf7ba09370e/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c0d64881-a956-4364-bf46-d7eb7497b463/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bffa7f10-8156-402d-8e2c-e81c75421f32/image.png" alt=""></p>
<p>Workbench에서 신간대 변경 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e36f9733-295a-4baf-8b84-065d05e3ab7f/image.png" alt=""></p>
<p>ubuntu에서 시간대 변경 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/49b8f179-2613-4e02-9260-b7a3ce6900b1/image.png" alt=""></p>
<h3 id="설치-이후-설정-2-utf-변경">설치 이후 설정 2. UTF 변경</h3>
<p>데이터가 영어 값으로만 저장되는 것이 아니기 때문에(한국은 한국어 입력이 필요 = 2byte 단위 저장) UTF 설정 변경이 필요함.
참고: hevton.tistory.com/521</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/04ec2198-69d1-49d7-b098-a5b1f6052e3e/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4891250c-4c1a-402d-ba72-6aa0f8906e44/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/47a9608e-379a-424e-a3dc-fb09ec55838b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bbc6105c-1d2c-463f-a28f-cfa6afb8148b/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bdd8a3c2-9a0b-4f0b-ae1c-be4adb8a2551/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3256d984-a6c1-4453-adde-8fd6e3f94da1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/5af7105c-99d9-48d8-8476-ae97fab0e1ec/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2240ead5-5c3f-46cb-9a5e-5d0114dd2af3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/bb451b16-3db0-4764-8c52-b001abaf05f3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/7561625f-d532-4c98-a6a6-675190869139/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/14742d4e-b557-4efd-8b84-660ba8a3d659/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b00a2d32-5815-4d21-b170-81feb40a42d2/image.png" alt=""></p>
<p>저장후 마찬가지로 저장 및 인스턴스의 수정, 재부팅 진행.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6f758934-3a0d-41d9-9d95-66f620d63100/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS Architect-VPN]]></title>
            <link>https://velog.io/@num_of_techbytes/AWS-Architect-VPN</link>
            <guid>https://velog.io/@num_of_techbytes/AWS-Architect-VPN</guid>
            <pubDate>Tue, 04 Jul 2023 15:22:47 GMT</pubDate>
            <description><![CDATA[<h2 id="vpn이란">VPN이란?</h2>
<p>VPN이란 Virtual Private Network의 약자로 가상 사설망을 의미한다. 인터넷을 마치 확장된 전용 사설 네트워크처럼 사용하는 방식으로, 인터넷을 통해 사적인 트래픽을 비교적 안전하게 통신할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/7a67a9c1-0074-4aa4-8c8d-abd7fe8f854c/image.jpg" alt=""></p>
<h2 id="aws의-vpn-서비스">AWS의 VPN 서비스</h2>
<p>AWS는 AWS Client VPN와 AWS Site-to-Site VPN 두가지 방식의 VPN 서비스를 제공한다. 사용자는 두 서비스를 통해 네트워크 트래픽을 보호하는 탄력적이고 고가용성 관리형 클라우드 VPN 솔루션을 이용할 수 있다. IPsec(인터넷 프로토콜 보안) VPN 연결을 통해 On-Premise 환경의 사내망을 AWS의 VPC와 연결할 때 또는 서로 다른 리전에 위치하는 VPC간의 연결(원격 액세스)을 생성해준다. </p>
<h4 id="aws-client-vpn">AWS Client VPN</h4>
<p>완전관리형의 탄력적 VPN 서비스서, 사용자 요구 사항에 맞추어 자동으로 확장하거나 축소 가능. 클라우드 VPN 솔루션이므로, 하드웨어나 소프트웨어 기반 솔루션을 설치 및 관리하거나 한 번에 지원할 원격 사용자 수를 예측하지 않아도 된다는 장점이 있음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4df7de2d-eb6e-4f2f-aa28-578352c7975f/image.png" alt=""></p>
<h4 id="aws-site-to-site-vpn">AWS Site-to-Site VPN</h4>
<p>데이터 센터 또는 지점과 AWS 클라우드 리소스 사이에서 보안 연결을 생성. 글로벌로 분산된 애플리케이션에 대해 AWS Global Accelerator와 함께 Accelerated Site-to-Site VPN 옵션을 사용하여 성능을 향상 가능.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/6de6a82f-58e2-40d4-a543-8be3ebf76954/image.png" alt=""> 출처: <a href="https://aws.amazon.com/ko/vpn/">https://aws.amazon.com/ko/vpn/</a></p>
<h3 id="aws-site-to-site-vpn을-이용한-서로-다른-리전-연결의-예시">AWS Site-to-Site VPN을 이용한 서로 다른 리전 연결의 예시</h3>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d8639f20-1139-4af8-97d9-ccb1d5ff547e/image.png" alt=""></p>
<h2 id="연결-과정">연결 과정</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/0d166584-9561-4fea-b739-1158c9e36a4b/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7829677c-6953-485c-9da3-a38e933bf21f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/074d0e6c-5d94-45e6-99a8-a2740160dca4/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6ed51cc9-5588-4202-bccf-d7c487bb6c3a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ebb9d1dd-1775-410c-aa52-5c798df21cdc/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/416ed341-8253-45c4-a56d-8769588be10a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/52a6a944-8566-41c2-8c03-dd43d3157d5a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/47a27328-b6c1-4af7-bf1f-db489f6c909d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/12da3348-2466-41e7-b21d-df612593543f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/58bb671c-89f0-4d1c-b273-87693d4f0aea/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/042e6756-b33d-4845-9ae9-213bbf118a9c/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/06bc8262-550e-46f5-8002-05740a9469de/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/195971f3-0e05-428d-8f1d-52824e62037b/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c2c4080e-8399-4218-bc4c-c6d66dd7a61b/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ff86428e-0265-4af4-8243-ba01d4c79a8e/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7a2d7e00-099e-4557-a2f9-7e651a266aa4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230703-퍼블릭 클라우드 아키텍쳐_01]]></title>
            <link>https://velog.io/@num_of_techbytes/aws</link>
            <guid>https://velog.io/@num_of_techbytes/aws</guid>
            <pubDate>Mon, 03 Jul 2023 14:38:10 GMT</pubDate>
            <description><![CDATA[<h2 id="aws-웹-서버-구축">AWS 웹 서버 구축</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a8ee1afd-5314-49cf-8331-2d8cf90829a6/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/32a12ad9-a0cd-437f-ace4-59f40cec2cad/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/33605001-8910-499b-969e-e95038d37a05/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/685b0a25-dac8-4c00-8ca5-620bcbcf42c3/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/90937540-006f-491b-b4b4-44f1ec94420f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b3f3aded-d480-4437-9b07-57427ebb7258/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6f2d24bc-e508-4820-a2c5-78cb200244bd/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0ffb73c9-82e6-4e28-b97a-bbec132107e2/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9ab15cca-0177-46cf-babb-99dcd0ef9657/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/01596521-bd88-4f44-af97-2d9b3f845c4a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c2302bb3-02c9-446f-ab95-593c75d40ff8/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d60126ae-bf9e-490e-a93d-16c4a410a0f4/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6de868c9-0bcd-4910-b974-e6941cd35142/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d20bdf40-fa53-4abf-8f9f-b30324f58113/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/af3ab212-90ed-4c14-9ce5-31ebf3313c24/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c5632aba-1834-4958-be4f-fffc45118bcd/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6a54c863-2d64-429a-b954-4d2806e5ecf3/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/4d447392-30f2-4c14-aab2-c8fb6386dc8f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c486b80b-3125-424c-ae70-d85643b2aea7/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8294f66a-bded-4587-aefe-dfa71c135ec5/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8b42a9a7-b78b-46ef-92ed-5eeeac12431a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/139508f1-fd96-4cb4-8502-2f55b0540d21/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/21544275-01b6-4da8-b9b5-54238f705d1c/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bfe157ef-b960-4f8e-82d2-9b9a9a7c19a0/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2327934a-fdc1-489c-8a32-af100b428d78/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c3187636-9008-4ebd-baac-06a625bd0352/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/d56c5b02-4a88-447f-9ca1-4ecae34d7511/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5cf4ab3d-56d2-4ee8-a6ad-c410492fb339/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/6f17ffb8-d575-4980-b5d6-13ccf07d787a/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/8828c975-7549-4567-9597-e1fd161a4fbc/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/32e86c9e-3e9f-44a2-8d82-ec59a7885846/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c8ed4e87-b795-412f-b5e5-62d1e048c5b1/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ad2be132-3e67-4341-85c1-57a64a14d651/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/afbc587b-1814-4995-b4cb-e0203c0a458d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cd69427a-28ab-4b75-a2b7-b1058a32476f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/194a1686-6c48-4cfe-8241-e5219f76e091/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/274428aa-19a0-4a08-84ba-c514f0988b48/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/c1f87162-251a-43b8-8994-5385ab5c29c1/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9fe1254a-3e9c-48fa-a855-b3bb639645ec/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f0e40849-365c-4f9a-a983-a88c117b9666/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/7de1600e-6fef-47f1-916f-060723cebf71/image.png" alt=""></p>
<h2 id="xshell-설정---xshell에서-bastion-인스턴스와-ubuntu-인스턴스에-ssh-접속하도록-설정">xShell 설정 - xShell에서 Bastion 인스턴스와 Ubuntu 인스턴스에 SSH 접속하도록 설정</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/8c1ed8bb-d4e7-46fd-b53a-38d224953e05/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/56e905be-e6d2-4c80-bb30-63991bc4d111/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f633c8a0-0dd8-4009-b8c3-bafd58434212/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1a1489a2-56e5-48fe-a802-a574388801e3/image.png" alt=""></p>
<h2 id="ubuntu-서버에-nginx-설치">ubuntu 서버에 nginx 설치</h2>
<pre><code>sudo apt update
sudo apt upgrade
sudo apt autoremove

sudo service nginx start
sudo service nginx status</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/531d31d4-f379-4df7-b58c-050745aa9758/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5b0f39be-29af-41d0-a707-24dcc10b8275/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f16892eb-ffb5-47fe-a7ba-03dd44d6682d/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9d9f9a86-b75b-4c44-85f5-90a3ae0867d2/image.png" alt=""></p>
<h2 id="nginx-동작-확인---브라우저-창에서-ubuntu-서버의-퍼블릭-ip로-접속-및-status-명령어로-서비스-상태-확인">nginx 동작 확인 - 브라우저 창에서 Ubuntu 서버의 퍼블릭 IP로 접속 및 Status 명령어로 서비스 상태 확인</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/eb5ae1ca-2b4e-48e3-b54f-c9ebd7aad0e9/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/78828bf3-5535-454a-a74b-ec6f613a6400/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/135b5a37-ffbd-4104-b33e-5de1dc6de313/image.png" alt=""></p>
<h2 id="bastion-서버와-ubuntu-서버의-핑-확인---ubuntu-서버의-private-ip-주소로-ping-전송-보안-규칙에서-icmp-통신을-허용해놔서-핑이-도달함을-확인-가능">Bastion 서버와 Ubuntu 서버의 핑 확인 - Ubuntu 서버의 Private IP 주소로 Ping 전송. 보안 규칙에서 ICMP 통신을 허용해놔서 핑이 도달함을 확인 가능.</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a4c53050-7f75-4927-9be1-b498e5b4378d/image.png" alt=""></p>
<h2 id="xftp-프로그램으로-ssh키를-bastion-서버와-ubuntu-서버로-복사">Xftp 프로그램으로 ssh키를 Bastion 서버와 Ubuntu 서버로 복사</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/d7b65456-92a0-42b4-944c-858e30a8358c/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a0c3b076-ab72-4731-8c24-6ab1e4612dd4/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/17938f07-d11c-4d46-a33d-433651762e4f/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/bab2bbcc-f29d-44fb-83c2-734e63186b48/image.png" alt=""></p>
<h2 id="ssh-연결-확인---각-서버에서-반대편-서버로-ssh-접속">ssh 연결 확인 - 각 서버에서 반대편 서버로 ssh 접속</h2>
<pre><code>chmod 400 ssh키.pem
ssh -i &quot;ssh키.pem&quot; &quot;user이름&quot;@&quot;대상의 public IP&quot;</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/61fc2471-9b9e-4aa6-8699-b8facfc8acb9/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b02cc7fb-54c0-4a47-898a-8eb4e29c07ee/image.png" alt=""></p>
<h2 id="설정-표">설정 표</h2>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/58b06b2e-8bdd-4c86-a25f-c6fde69c202f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[230623 - K8S]]></title>
            <link>https://velog.io/@num_of_techbytes/230623-K8S</link>
            <guid>https://velog.io/@num_of_techbytes/230623-K8S</guid>
            <pubDate>Sat, 24 Jun 2023 01:38:11 GMT</pubDate>
            <description><![CDATA[<h1 id="volume-replecaset">Volume, Replecaset</h1>
<p>cluster ip, nodeport, loadbalance(metalib 사용), external name</p>
<hr>
<h2 id="service를-yml파일로-만들기">service를 yml파일로 만들기</h2>
<p>kubectl get pod,svc,deploy --all-namespaces : 모든 namespace의 pod, service, deployment 확인 가능</p>
<pre><code>---
apiVersion: v1
kind: Service
metadata:
  name: svc-nginx
  labels:
    run: nginx
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 30080
    protocol: TCP
  selector:
    app: web
</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4d5ad756-3230-4087-ad12-798ba1eb1beb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/a5823abf-8458-416f-a066-624f76031bcf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/043145ab-d156-40d6-9800-0ef8efc318eb/image.png" alt=""></p>
<p>replicaset: pod의 복제
deployment: replicaset 관리
외부 서비스는 pod, deployment만 가능, 보통 replicaset 관리가 가능한 deployment를 서비스함</p>
<hr>
<h2 id="pod의-replicaset-생성">Pod의 Replicaset 생성</h2>
<p>다수의 pod를 생성하기 위해 replica를 사용하는것이므로 템플릿이 필요함.</p>
<p>clusterIP - 일종의 부하 분산 서비스. 어떤 노드에 연결될지 모름. = /ㅍ1
nodeport - </p>
<hr>
<h2 id=""></h2>
<pre><code>---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-apache
  labels: 
    dep: apache
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rep-apache
  template:
    metadata:
      name: tem-apache
      labels:
        app: rep-apache
    spec:
      containers:
      - name: apache
        imange: httpd
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/822eb527-554e-451f-b202-60bcdc7405f5/image.png" alt=""></p>
<hr>
<h2 id="연습">연습</h2>
<h4 id="조건">조건</h4>
<ol>
<li>1개의 pod를 mysql5.7로 생성</li>
<li>wordpress5.6을 depolyment로 생성해서 3개의 rep pod 생성</li>
<li>nodeport =&gt; 32080로 외부에 서비스</li>
<li>개별 pod의 ip 접속, clusterip접속, node의 ip 접속</li>
</ol>
<h4 id="해설">해설</h4>
<ol>
<li><p>mysql pod 생성을 위한 yml 파일 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/63dc17fe-e295-489f-a680-97e6d5ec7f8d/image.png" alt=""></p>
</li>
<li><p>wordpress service 하는 yml 파일 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2fb98e9f-4837-4227-9adc-6bbfdac2a127/image.png" alt=""></p>
</li>
<li><p>각 yml 파일을 순서대로 실행 후 <code>kubectl get</code> 명령어로 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/62fc4142-b6f9-4928-b5d0-89a0b93db4a8/image.png" alt=""></p>
</li>
<li><p><code>kubectl describe</code>로 wordpress service 상태 확인 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/58580440-081b-4d11-bd5d-6b800ebb7a70/image.png" alt=""></p>
</li>
<li><p>pod 상태 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/48f2981a-c093-4c46-8bf4-5cc2f8458fa2/image.png" alt=""></p>
</li>
<li><p><code>curl</code> 명령어로 ip 접속. 오류 메세지가 나오지는 않지만, wordpress container를 배포하기 때문에 apache나 nginx와 달리 출력값이 나오지 않음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0aec0107-295d-4396-92b5-55c92381d7e4/image.png" alt=""></p>
</li>
<li><p>보다 확실한 접속 확인을 위해 lynx 설치 후 lynx로 pod, cluster ip 접속
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0e052fd8-02d7-4ff6-b4d1-3b503bd512a6/image.png" alt="">
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/2e59c775-0f7d-4bca-85bc-234e4e6741fe/image.png" alt=""></p>
</li>
</ol>
<ol start="7">
<li>웹 브라우저에서 Host IP 접속
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ff326df8-8edb-4eea-b768-dd3c684a46fe/image.png" alt=""></li>
</ol>
<hr>
<p>nginx공부: <a href="https://nginxstore.com/training/">https://nginxstore.com/training/</a></p>
<h2 id="cni-비교">cni 비교</h2>
<p>참조 자료: <a href="https://ykarma1996.tistory.com/179">https://ykarma1996.tistory.com/179</a>
weaveNet: 같은 lan으로 인식
calico: 라우팅 가능
dummy0 = docker0: weav랑 datapath가 기능을 대신하기 때문에 사용되지 않음.</p>
<hr>
<h2 id="volume">Volume</h2>
<p>참고: <a href="https://virtualtech.tistory.com/339">https://virtualtech.tistory.com/339</a></p>
<p>k8s Volume은 크게 세가지로 분류.</p>
<ul>
<li>emptydir: life cycle이 pod와 동일</li>
<li>hostpath:node 단위로 관리</li>
<li>persistent Volume: cluster 단위로 관리</li>
</ul>
<ol>
<li><p>마운트 경로를 /usr/sharenginx/html 디렉토리로 지정
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/db6e7a0f-70b1-4946-9724-e78dc5501ac6/image.png" alt=""></p>
</li>
<li><p>위 코드에서 alpine 이미지 실행을 포함시킨 코드. nginx 컨테이너와 달리 alpine의 마운트 경로는 아직 존재하지 않는 디렉토리인 /test로 설정.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/cfff7d13-ad88-43ea-a730-dd426a2406b2/image.png" alt=""></p>
</li>
<li><p>Volume Mount를 존재하지 않는 경로로 지정하면 상태 값이 ContainerCreating에서 멈추고 정상 동작하지 못한다.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/79e2b3cd-70d6-4bb7-b17e-d15b8cb3af2b/image.png" alt=""></p>
</li>
<li><p><code>describe</code> 명령어로 확인했을 때 출력된 오류 정보
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/3a7dc4cf-8fa4-4007-9df1-c2bd67ad7e53/image.png" alt=""></p>
</li>
<li><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/981e69f3-6869-44ad-a577-6f8cc882f7dd/image.png" alt=""></p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b6334478-5c0c-43fe-8bd1-0bac4219f2bc/image.png" alt=""></p>
<p>nodeName을 이용해 pod가 실행될 node 지정 가능
type이 Directory인 경우, 위치에 path에서 지정한 디렉토리가 없으면 정상적으로 동작하지 못함. </p>
<p>type을 DirectoryOrCreate로 바꾸면, 디렉토리가 없으면 디렉토리를 생성함.</p>
<p>persistant volume - 다른 노드에 위치해도 vol 사용이 가능해짐</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/b4063bee-e25f-4c3c-9e74-d0ec9a29ed69/image.png" alt=""></p>
<p>persistant volume yml 파일 실행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/b0e2c779-c86c-4974-868c-ede352e66d95/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/faafe208-7675-46d9-82d7-eaf6dcdf6bb5/image.png" alt=""></p>
<p>deployment yml파일 작성
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ffa33f5e-3081-4a32-a8d6-7ba158232c4e/image.png" alt=""></p>
<p>yml 파일 실행
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/e9fc1f8e-dfd0-43c8-9666-cdd6bd8aa2b9/image.png" alt=""></p>
<p><code>curl</code> 명령어로 각 노드에 배포된 pod의 IP로 접속. 사전에 index.html 파일을 작성해놓은 노드(나는 node1에 작성함)외의 노드에 존재하는 pod들은 html 파일이 변경되지 않음을 확인할 수 있다. 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/05613b5e-06b9-4c44-a1b7-e0d5728ff7de/image.png" alt=""></p>
<p>다른 노드에 /test 디렉토리가 있는지 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9f7ba4c5-263c-41ea-a830-79f51e59a65b/image.png" alt=""></p>
<p>persistant만 사용하면 node간의 디렉토리 동기화는 되지만, 디렉토리 내부 파일까지 동기화 되지 않음. 
디렉토리 내부 Data까지 동기화하기 위해서는 nfs 사용이 필요.</p>
<p>참고 사이트: <a href="https://zgundam.tistory.com/179">https://zgundam.tistory.com/179</a></p>
<hr>
<h2 id="ingress">Ingress</h2>
<p>설치 사이트1: <a href="https://github.com/kubernetes/ingress-nginx">https://github.com/kubernetes/ingress-nginx</a>
설치 사이트2: <a href="https://kubernetes.github.io/ingress-nginx/deploy/">https://kubernetes.github.io/ingress-nginx/deploy/</a></p>
<p>설치 순서: 사이트1에서 started 링크 클릭 -&gt; 사이트2로 이동함 -&gt; vmware를 사용중이므로, baremetal 선택 -&gt; 코드 복사 -&gt; kubectl apply -f 를 지우고 wget으로 먼저 설치한 뒤 kubectl apply -f 사용해서 설치 </p>
<p>Ingress:  Cluster 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. Ingress 는 LoadBalancer, SSL Terminated, Named 기반의 가상 호스팅을 제공할 수 있다.
ex) bsbo.com/svc1과 babo.com/svc2 의 화면을 다르게 출력함
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/56ef5504-d541-4c8a-a8ed-f920572b024e/image.png" alt=""></p>
<ol>
<li><p>Ingress-nginx 설치
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/a7a37a41-02bc-426b-9f26-571f11ee7cca/image.png" alt=""></p>
</li>
<li><p>ingress-nginx에 포함된 yml 파일의 내용
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/27b646c2-801d-4710-925e-9ac369f0ee08/image.png" alt=""></p>
</li>
<li><p>필요한 것들이 설치 됐는지 확인
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/15f0611d-3fd1-4e62-9ce4-ad351aa3e343/image.png" alt=""></p>
</li>
<li><p>ingress를 사용하는 yml 파일 작성 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/1b663b49-297d-454e-8de7-72ea26d987b8/image.png" alt=""></p>
</li>
<li><p>ingress 실행 확인 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/74259c50-f3b5-4442-8d66-fab95a5d5bbb/image.png" alt=""></p>
</li>
</ol>
<p>....</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Ansible - Nginx + PHP7.4 연동 ]]></title>
            <link>https://velog.io/@num_of_techbytes/230614-ansible</link>
            <guid>https://velog.io/@num_of_techbytes/230614-ansible</guid>
            <pubDate>Wed, 14 Jun 2023 08:49:44 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-nginx와-db를-연동시키기">목표: nginx와 DB를 연동시키기</h1>
<p>5번 서버에 nginx + PHP(wordpress)를 설치하고 mysql이 설치되어있는 4번서버와 연동시켜보자.</p>
<p>조건: </p>
<ul>
<li>1번 서버에서 ansible로 yml을 파일을 실행시켜서 원격으로 서버를 설정</li>
<li>wordpress 디렉토리 내부 파일들을 nginx/html/ 디렉토리로 복사</li>
<li>php-fpm이 nginx을 인식하도록 <a href="http://www.conf">www.conf</a> 파일 내용 수정(apache를 nginx로 수정)</li>
<li>DB 서버에 연결시키기 위해, nginx 디렉토리에 복사된 wp-conf.php의 내용 수정 필요</li>
</ul>
<p>실행 전 준비: <code>yum</code>으로 <code>rdate</code> 설치 후 시간 설정 필요.</p>
<hr>
<p>참고자료: <a href="https://docs.ansible.com/ansible/2.9/modules/blockinfile_module.html#blockinfile-module">https://docs.ansible.com/ansible/2.9/modules/blockinfile_module.html#blockinfile-module</a></p>
<h2 id="초기-코드">초기 코드</h2>
<pre><code>---
- name: nginx + wordpress + mysql
  hosts: nginx
  tasks:
  - name: install wget + yum utils + epel-release
    yum:
      name: &quot;{{ item }}&quot;
      state: latest
    loop: 
      - wget
      - yum-utils 
      - epel-release
      - http://rpms.remirepo.net/enterprise/remi-release-7.rpm

  - name: install php7.4 
    yum: 
      name: &quot;{{ packages }}&quot;
      state: present
    vars:
      packages:
        - php
    - php-common
    - php-cli
    - php-curl
    - php-mcrypt
    - php-gd
    - php-opcache
    - php-fpm
    - php-mysqlnd

  - name: url file download - wordpress
    get_url: 
      url: https://ko.wordpress.org/wordpress-5.8.6-ko_KR.tar.gz
      dest: ./

  - name: unarcive tar file
    unarchive:
      src: wordpress-5.8.6-ko_KR.tar.gz
      dest: ./
      remote_src: yes

  - name: copy wordpress to nginx
    copy:
      src: &quot;{{ item.src }}&quot;
      dest: &quot;{{ item.dest }}&quot;
      remote_src: yes
    loop:
      - {src: &quot;./wordpress/&quot;, dest: &quot;/usr/share/nginx/html/&quot;}
      - {src: &quot;/usr/share/nginx/html/wp-config-sample.php&quot;, dest: &quot;/usr/share/nginx/html/wp-config.php&quot;}

  - name: port 80/tcp open
    firewalld:
      port: 80/tcp
      permanent: yes
      immedinate: yes
      state: enabled

  - name: nginx + php started 
    service:
      name: &quot;{{ item }}&quot;
      state: started
    loop: 
      - nginx
      - php-fpm</code></pre><p>이 yml파일을 적용했을 때, 정상적인 동작이 되지 않음. </p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/10e5b2dd-2885-4876-9dea-ddafd9812e10/image.png" alt=""></p>
<p>문제: /etc/nginx/nginx.conf 파일에 내용 추가를 위해 blockinfile 모듈을 사용했는데, 내용이 의도대로 추가 되지 않음
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/13b27dcc-976d-4b7f-90a7-8044c2de08a2/image.png" alt=""></p>
<p>원인: blockinfile 모듈은 동일 파일에 중첩이 안되기 때문에 문제가 발생함.</p>
<p>해결 방안: 함수 내부에 있으면 위치는 상관없는 코드들이므로, 두 개의 blockinfile 모듈의 내용을 하나로 통합해서 작성.</p>
<pre><code>  - name: block in /etc/nginx/nginx.conf - 1
    blockinfile:
      path: /etc/nginx/nginx.conf
      insertafter: &#39;^(\s+server_name\s+)_;&#39;
      block: |
    #
            index   index.php;
            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_pass unix:/run/php-fpm/www.sock;
                    fastcgi_index   index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
                }</code></pre><hr>
<h2 id="1차-수정">1차 수정</h2>
<h3 id="오류-수정--mysql-연결-추가한-코드">오류 수정 + mysql 연결 추가한 코드</h3>
<p>blockinfile 모듈 사용시 regexp 대상이 여러개인 경우, 이상한 위치에 입력되므로 유일한 대상(<code>&#39;^(\s+error_page\s+)404 /404.html;&#39;</code>)을 지정해서 해당 라인의 윗 줄에 추가 하도록 코드 수정(<code>insertafter</code>를 <code>insertbefore</code>로 변경).</p>
<pre><code>---
- name: nginx + wordpress + mysql
  hosts: nginx
  tasks:
  - name: install wget + yum utils + epel-release
    yum:
      name: &quot;{{ item }}&quot;
      state: latest
    loop:
      - wget
      - yum-utils
      - epel-release
      - http://rpms.remirepo.net/enterprise/remi-release-7.rpm
      - nginx

  - name: install php7.4
    yum:
      name: &quot;{{ packages }}&quot;
      state: present
    vars:
      packages:
        - php
        - php-common
        - php-cli
        - php-curl
        - php-mcrypt
        - php-gd
        - php-opcache
        - php-fpm
        - php-mysqlnd

  - name: url file download - wordpress
    get_url:
      url: https://ko.wordpress.org/wordpress-5.8.6-ko_KR.tar.gz
      dest: ./

  - name: unarcive tar file
    unarchive:
      src: wordpress-5.8.6-ko_KR.tar.gz
      dest: ./
      remote_src: yes

  - name: copy wordpress to nginx
    copy:
      src: &quot;{{ item.src }}&quot;
      dest: &quot;{{ item.dest }}&quot;
      remote_src: yes
    loop:
      - {src: &quot;./wordpress/&quot;, dest: &quot;/usr/share/nginx/html/&quot;}
      - {src: &quot;/usr/share/nginx/html/wp-config-sample.php&quot;, dest: &quot;/usr/share/nginx/html/wp-config.php&quot;}

  - name: change /etc/php-fpm.d/www.conf
    replace:
      path: /etc/php-fpm.d/www.conf
      regexp: &quot;{{ item.src }}&quot;
      replace: &quot;{{ item.dest }}&quot;
    loop:
      - {src: &#39;apache&#39;, dest: &#39;nginx&#39; }
      - {src: &#39;;listen.owner = nobody&#39;,dest: &#39;;listen.owner = nginx&#39;}
      - {src: &#39;;listen.group = nobody&#39;,dest: &#39;;listen.group = nginx&#39;}
      - {src: &#39;listen = 127.0.0.1&#39;,dest: &#39;;listen = 127.0.0.1&#39;}

  - name: block in /etc/nginx/nginx.conf - 1
    blockinfile:
      path: /etc/nginx/nginx.conf
      insertafter: &#39;^(\s+server_name\s+)_;&#39;
      block: |
    #
            index   index.php;
            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_pass unix:/run/php-fpm/www.sock;
                    fastcgi_index   index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
                }

  - name: change wp-config.php
    replace:
      path: /usr/share/nginx/html/wp-config.php
      regexp: &quot;{{ item.src }}&quot;
      replace: &quot;{{ item.dest }}&quot;
    loop:
      - {src: &quot;database_name_here&quot;, dest: &quot;wordpress&quot; }
      - {src: &quot;username_here&quot;, dest: &quot;root&quot; }
      - {src: &quot;password_here&quot;, dest: &quot;It12345@&quot; }
      - {src: &quot;localhost&quot;, dest: &quot;10.0.0.4&quot; }

  - name: install mysql
    shell: &quot;yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm&quot;
    ignore_errors: yes

  - name: mysql client repo gpg_check disable
    yum:
      name: &quot;{{ item }}&quot;
      disable_gpg_check: yes
      state: present
    loop:
        - mysql-community-client
        - mysql-community-server

  - name: mysql port open
    firewalld:
      port: &quot;{{ item }}&quot;
      permanent: yes
      immediate: yes
      state: enabled
    loop:
      - 80/tcp

  - name: nginx + php + mysql started
    service:
      name: &quot;{{ item }}&quot;
      state: started
    loop:
      - nginx
      - php-fpm
      - mysqld
</code></pre><p>yml 파일이 정상적으로 실행됨 확인</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/31618def-7b19-4df1-8421-94fac107e57b/image.png" alt=""></p>
<p>5번 서버의 nginx.conf 파일 역시 지정한 위치에 입력됨을 확인</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/15f809c6-03f7-4f33-b859-b9fda2ce3ae0/image.png" alt=""></p>
<hr>
<h2 id="2차-수정">2차 수정</h2>
<ul>
<li>입력되는 위치가 마음에 들기 때문에 입력 위치 변경.</li>
<li>mysql는 다른 서버에 설치하고 사용할 것이므로 mysql 설치 코드는 제거.</li>
<li>php7.4 사용을 위한 코드 추가.</li>
</ul>
<pre><code>---
- name: nginx + wordpress
  hosts: nginx
  tasks:
  - name: install wget + yum utils + epel-release
    yum:
      name: &quot;{{ item }}&quot;
      state: latest
    loop:
      - wget
      - yum-utils
      - epel-release
      - http://rpms.remirepo.net/enterprise/remi-release-7.rpm
      - nginx

  - name: install php7.4
    yum:
      name: &quot;{{ packages }}&quot;
      state: present
    vars:
      packages:
        - php
        - php-common
        - php-cli
        - php-curl
        - php-mcrypt
        - php-gd
        - php-opcache
        - php-fpm
        - php-mysqlnd

  - name: install php74
    shell: yum-config-manager --enable remi-php74

  - name: url file download - wordpress
    get_url:
      url: https://ko.wordpress.org/wordpress-5.8.6-ko_KR.tar.gz
      dest: ./

  - name: unarcive tar file
    unarchive:
      src: wordpress-5.8.6-ko_KR.tar.gz
      dest: ./
      remote_src: yes

  - name: copy wordpress to nginx
    copy:
      src: &quot;{{ item.src }}&quot;
      dest: &quot;{{ item.dest }}&quot;
      remote_src: yes
    loop:
      - {src: &quot;./wordpress/&quot;, dest: &quot;/usr/share/nginx/html/&quot;}
      - {src: &quot;/usr/share/nginx/html/wp-config-sample.php&quot;, dest: &quot;/usr/share/nginx/html/wp-config.php&quot;}

  - name: change /etc/php-fpm.d/www.conf
    replace:
      path: /etc/php-fpm.d/www.conf
      regexp: &quot;{{ item.src }}&quot;
      replace: &quot;{{ item.dest }}&quot;
    loop:
      - {src: &#39;apache&#39;, dest: &#39;nginx&#39; }
      - {src: &#39;;listen.owner = nobody&#39;,dest: &#39;;listen.owner = nginx&#39;}
      - {src: &#39;;listen.group = nobody&#39;,dest: &#39;;listen.group = nginx&#39;}
      - {src: &#39;listen = 127.0.0.1&#39;,dest: &#39;listen =  /run/php-fpm/www.sock&#39;}

  - name: block in /etc/nginx/nginx.conf
    blockinfile:
      path: /etc/nginx/nginx.conf
      insertbefore: &#39;^(\s+error_page\s+)404 /404.html;&#39;
      block: |
    #
            index   index.php;
            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_pass unix:/run/php-fpm/www.sock;
                    fastcgi_index   index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
            }

  - name: change wp-config.php
    replace:
      path: /usr/share/nginx/html/wp-config.php
      regexp: &quot;{{ item.src }}&quot;
      replace: &quot;{{ item.dest }}&quot;
    loop:
      - {src: &quot;database_name_here&quot;, dest: &quot;wordpress&quot; }
      - {src: &quot;username_here&quot;, dest: &quot;root&quot; }
      - {src: &quot;password_here&quot;, dest: &quot;It12345@&quot; }
      - {src: &quot;localhost&quot;, dest: &quot;10.0.0.4&quot; }

  - name: mysql port open
    firewalld:
      port: 80/tcp
      permanent: yes
      immediate: yes
      state: enabled

  - name: nginx + php started
    systemd:
      name: &quot;{{ item }}&quot;
      state: started
      enabled: yes
    loop:
      - nginx
      - php-fpm</code></pre><p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/3ca4648f-fe4e-4620-88e1-c2026fc91e0f/image.png" alt=""></p>
<hr>
<h2 id="결과-화면">결과 화면</h2>
<p>정상적으로 DB서버와 연동되어 nginx 화면이 아닌 wordpress 화면이 정상적으로 출력됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9cfdf2ea-ade1-4c7d-a6ad-b4cfd3556a6e/image.png" alt=""></p>
<hr>
<h3 id="linux-명령어-공부---diff-명령어">Linux 명령어 공부 - diff 명령어</h3>
<p><code>diff 파일1, 파일2</code>: 두 파일의 내용을 비교하는 명령어
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/5c32da34-6fdb-40ff-ae57-84975e8c7150/image.png" alt=""></p>
<hr>
<p>사용자 생성(useradd = usermod)과 연관된 파일들</p>
<pre><code>1. /etc/passwd
 1.1. 원본 root:x:0:0:root:/root:/bin/bash
 1.2. 분석
     root         - ID
    :x            - 패스워드
    :0            - UID            -u
    :0            - GID            -g(기본그룹) -G(추가그룹) 
    :root        - comment        -c
    :/root        - 홈디렉토리        -d
    :/bin/bash    - Login shell    -s(/bin/bash, /bin/sh, /bin/false(로그인 불허 이유 설명 X), /sbin/nologin(로그인 불허 이유 설명 O))

/etc/shadow
/etc/group
/etc/default/useradd
/etc/login.defs
/etc/skell/</code></pre><hr>
<h3 id="uid-gid-확인">UID, GID 확인</h3>
<p><code>/etc/login.defs</code> 파일을 통해 UID 및 GID 설정값 확인 가능
기본적으로 1000으로 저장되어있지만, 값을 변경하면 useradd 시 사용자의 uid랑 gid 값이 설정값이 파일의 설정값에 따라 바뀜.</p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/1acafcf9-2402-4066-be3b-9a903c04ef3b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/eef537ba-594f-4061-aa56-600146d01ca3/image.png" alt=""></p>
<p>주의점: GID는 UID 생성시 자동적으로 생성되기 때문에 없는 useradd할 때 없는 GID를 생성하면(useradd -u 옵션과 -g 옵션을 동시에 사용하면) 오류가 발생(-u 사용시 group은 자동적으로 생성됨).
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/afeb549b-de02-4c8e-882a-8a153338ecc6/image.png" alt=""></p>
<hr>
<h3 id="uid-설정">UID 설정</h3>
<p>옵션 없이 useradd 실행 시 마지막으로 추가된 사용자의 UID 뒷 번호로 추가됨.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f462dbf4-cd93-49c1-839f-89cc9cbcc6fb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4766daeb-1597-4776-9536-11ea437e5992/image.png" alt=""></p>
<hr>
<h3 id="useradd-설정"><code>useradd</code> 설정.</h3>
<ul>
<li>옵션을 통해 사용자의 &#39;UID&#39;, &#39;저장 위치&#39;, &#39;설명(comment)&#39;, &#39;로그인 할 shell&#39; 및 &#39;거부 설명 표시 여부&#39;를 설정할 수 있음</li>
<li>/home_1 디렉토리를 만들고 user a를 추가 후, <code>tail</code> 명령어를 이용해서 a에 대한 useradd 설정 확인 가능.</li>
</ul>
<p>-s 옵션을 <code>/sbin/nologin</code> 지정하면 
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/9600e74c-eebc-4485-ab4c-e8d24da669a0/image.png" alt=""></p>
<p>로그인 거부에 대한 설명을 출력함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/0403b50d-14e0-4056-a9ba-3d219b5db6e7/image.png" alt=""></p>
<p>-s 옵션을 <code>/bin/false</code> 지정하면
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/27fe2a55-97f3-4927-8d8e-a022b5ab6adb/image.png" alt=""></p>
<p>로그인 거부에 대한 설명을 출력하지 않음.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f8342b1c-7cb7-422b-a6e7-121b13bc3dc5/image.png" alt=""></p>
<p><code>cat /etc/shells</code>를 통해 어떤 shell이 있는지 확인할 수 있음</p>
<hr>
<h3 id="로그인하는-shell-지정">로그인하는 shell 지정</h3>
<p>CentOS에서는 <code>chsh</code> 명령어를 통해 다음 로그인하는 shell을 지정 가능
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/25462770-b807-48e2-a7fa-78f212d496ec/image.png" alt=""></p>
<hr>
<h3 id="사용자의-shell-지정">사용자의 shell 지정</h3>
<p><code>/etc/default/useradd</code> 파일 설정을 통해 추가되는 사용자의 shell 설정을 변경 가능. </p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/2d7e89e2-703e-4c02-a305-a4ce4b9d406c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/4daa635a-d69c-415c-85f8-ec1b9c1eb98a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/37d44ad0-d68d-4c60-b5eb-100bef39f8b8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/041968ec-a495-40f3-a2eb-88363650209a/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Linux - Ansible 모듈 연습]]></title>
            <link>https://velog.io/@num_of_techbytes/Linux-Ansible-%EB%AA%A8%EB%93%88-%EC%97%B0%EC%8A%B5</link>
            <guid>https://velog.io/@num_of_techbytes/Linux-Ansible-%EB%AA%A8%EB%93%88-%EC%97%B0%EC%8A%B5</guid>
            <pubDate>Sun, 11 Jun 2023 02:01:17 GMT</pubDate>
            <description><![CDATA[<h2 id="ansible-연습---lineinfile-모듈">Ansible 연습 - Lineinfile 모듈</h2>
<p>참고 자료: <a href="https://docs.ansible.com/ansible/2.9/modules/lineinfile_module.html#lineinfile-module">https://docs.ansible.com/ansible/2.9/modules/lineinfile_module.html#lineinfile-module</a></p>
<p>lineinfile 모듈을 이용해 파일 안의 내용을 변경해보자.</p>
<p>inven.list에 정의된 web1에 포함된 모든 서버의 selinux라는 파일의 내용을 변경해보자. </p>
<p>사용한 코드&gt; 
<code>ansible -i inven.list web1 -m lineinfile -a &quot;path=/etc/sysconfig/selinux regexp=&#39;^SELINUX=enforcing&#39; line=&#39;SELINUX=disabled&#39;&quot;</code></p>
<p>입력은 되지만 내용을 변경하는게 아니라 마지막 줄에 추가 되는 모습...
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/da0e348a-6db8-489d-9c34-f6f85f2946df/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/706b2b0f-09df-44fd-9d78-f735b8ff5d49/image.png" alt=""></p>
<p>Lineinfile 모듈은 regexp에 입력된 패턴과 일치하는 라인의 내용을 line에 입력된 값으로 변경하는 동작을 한다. 하지만 파일에 일치하는 라인이 없는 경우, 파일의 마지막 라인에 해당 내용을 저장한다. 따라서 지금처럼 SELINUX의 설정값이 이미 disable로 설정되있는 경우에는 SELINUX 파일 마지막줄에 <code>SELINUX=enforcing</code>이 추가 된다.</p>
<hr>
<h2 id="ansible-명령어를-yml-파일로-만들어-보기">Ansible 명령어를 yml 파일로 만들어 보기</h2>
<h3 id="연습-httpd-설치--방화벽-80tcp-열기--healthhtml-복사">연습) httpd 설치 + 방화벽 80/tcp 열기 + health.html 복사</h3>
<p>(/etc/httpd/conf/httpd.conf -&gt; index.html를 controller의 /root 디렉토리에 health.html로 이름 변경 후 복사.)</p>
<p>오류 화면 1) 실행은 되지만 html 파일이 적용이 안됨
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/ab08d4d4-ccff-499b-b1f8-df3f9b5f08aa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/num_of_techbytes/post/c2870333-5c8a-4b5e-b631-c79603143620/image.png" alt=""></p>
<p>-&gt; 원인: yml 파일에 lineinfile 명령어 부분이 &#39;DirectoryIndex index.html&#39;이 아니라 &#39;^DirectoryIndex index.html&#39;로 입력되어 정상적으로 라인 입력이 안됨.</p>
<p>-&gt; 이유: httpd.conf 파일에서 DorectoryIndex 앞에 띄어쓰기가 있기 때문에 yml파일의 lineinfile에서<code>^</code>을 앞에 포함시키면 해당 라인을 인식하지 못함.
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/f1aafcfa-bfcc-4d5a-88b6-2c68b77e6dbf/image.png" alt=""></p>
<p>-&gt; 해결 방법: 각 서버의 httpd.conf 파일에 잘못 추가된 줄을 지우고, yml 파일 수정(<code>^</code> 제거) 후 yml 실행 및 각 서버의 httpd 재시작</p>
<p>수정한 yml 파일 내용
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/468e5595-b3d2-442d-a6de-1bb396ad5a59/image.png" alt=""></p>
<p>httpd 재시작 모습
<img src="https://velog.velcdn.com/images/num_of_techbytes/post/06b109fd-2f6e-45dd-af49-2a3b1d24b37b/image.png" alt=""></p>
<p>최종 ansible 코드</p>
<p>ansible -i inven.list -m yum -a &quot;name=httpd state=latest&quot;
ansible -i inven.list -m firewalld -a &quot;port=80/tcp state=enabled&quot;
ansible -i inven.list -m lineinfile -a &quot;path=/etc/httpd/conf/httpd.conf regexp=&#39;^DirectoryIndex index.html&#39; line=&#39;DirectoryIndex health.html&#39;&quot;
ansible -i inven.list -m copy -a &quot;src=httpd.html dest=/var/www/html/health.html&quot;</p>
<p>최종 yml파일 코드</p>
<pre><code>---
- name: install httpd &amp; open port 80/tcp &amp; change name index.html to health.html &amp; copy health.html
  hosts: test
  tasks:
  - name: install httpd
    yum:
      name: httpd
      state: latest
  - name: firewall port open 80/tcp
    firewalld:
      port: 80/tcp
      state: enabled
  - name: change name index.html
    lineinfile: 
      path: /etc/httpd/conf/httpd.conf
      regexp: &#39;DirectoryIndex index.html&#39;
      line: &#39;DirectoryIndex health.html&#39;
  - name: copy health.html file
    copy:
      src: httpd.html
      dest: /var/www/html/health.html
  - name: httpd deamon restart
    service:
      name: httpd
      state: restarted</code></pre>]]></description>
        </item>
    </channel>
</rss>