12/19~4/12까지 진행하는 Kubernetes 전문가 양성과정에 참여하게 되었다. 이전에 AWS 포스팅에서처럼 AWS관련 지식을 공부하다 보니 쿠버네티스에 관심이 생겼고, 이번 과정을 통해 프로젝트도 진행해보면서 실무에 근접한 공부를 해보고 싶어 지원하였다.
지금의 AWS가 된 과정 (가상화) aws 책 - 물류 - 빅데이터사용 더빨리 -가상화를 사용해서 개발자가 단 몇번의 클릭으로 인프라를 구축할수 있게 함 paas - 개발자가 몇번의 클릭으로 네트워크,서버,보안,스토리지등 인프라 즉, 플랫폼을 구축할 수 있게 해줌
브라우저가 보안성이 높은 포트443(https)로 고정시켜주게 만들어주는 기능만약 포트80(http)로 접근해도 https로 자동으로 변경된다📒 chrome, Edge가 이 기능을 지원한다.
topology Star > - 가장 일반적인 네트워크 구성 형태 허브가 중앙에서 다른 모든 노드들을 연결한다 통신망의 처리능력과 신뢰성은 허브가 좌우한다 케이블 하나의 문제는 해당노드에만 영향을 줄 뿐 전체 네트워크에 영향을 주지 않는다.
네트워크 장비 Repeater(중계기) 접속시스템의 수를 증가시키거나 네트워크 전송 거리를 연장하려고 사용하는 장치 장거리로 전송하면 신호가 약해지거나 감쇠되는데 중계기는 노드 사이의 케이블에서 신호를 증폭시켜 문제를 해결한다
네트워크는 어디가나 쓰이고 인프라에서 네트워크는 필수적이다 . 특히 기업은 이미 인프라가 구축되어있고 우리는 기업의 토폴로지를 이해하고 숙지하기 위해 네트워크 지식이 있어야 한다.
레거시 - 온프레미스, 코로케이션
Linux 각종 명령어들 ls : 디렉터리의 내용을 출력한다 > 형식 : ls [옵션] [데릭터리 파일] 📌 ls -af : 모든 파일 종류 출력한다 ex) ls -aF /usr/bin 📒 파일이나 디렉터리가 '.'로 시작하면 숨김 파일이다.
vi (~이어서) 문자열 바꾸기 :%s/문자열1/문자열2 vi작업 도중 명령 실행 :!명령어 여러번 명령어 입력 :sh -> exit 몇줄인지 확인 ctrl + g set 설정 / 해제하기 set 명령어 set no명령어 ex) :set nu :set no
Linux 명령어(~이어서) chmod 기호를 사용한 permission 변경 > > - 파일이나 디렉터리의 접근 권한을 변경한다. 📒 파일의 소유자나 root계정만 권한을 변경할 수 있다. > - 형식 : chmod [옵션] [권한모드 파일 or 디렉터리]
포그라운드 / 백그라운드 포그라운드 프로세스 : 사용자가 입력한 명령이 실행되어 결과가 출력 될 때까지 기다려야 하는 작업\-> 명령의 결과가 출력되는 동안 다른 작업 못함ex) sleep 100 하면 다른 작업 못하고 기다림
파일과 디렉터리의 집합을 구조적으로 관리하는 체계구조화된 일련의 정보를 구성하는 파일과 디렉터리의 집합파일과 디렉터리를 저장하기 위한 방식리눅스에서 지원하는 기타 파일 시스템 : 읽기/쓰기/저장하기 등의 용도를 위한 시스템 📌 cat /proc/filesystems
이전 포스팅에서 디스크를 사용하기위해 아래 단계를 거쳐야 한다고 언급했다. 이번 포스팅에서는 파티셔닝 단계부터 마운트까지 진행할 것이다. 물리적으로 디스크 추가 디스크 인식 파티셔닝 파일시스템 초기화(포맷) 마운트 : 파일 시스템을 디렉터리 계층 구조의 특정 디렉터리
LVM 디스크의 용량이 부족할 때 여러 개의 디스크를 하나의 디스크처럼 사용 독립적으로 구성된 디스크 파티션을 하나로 연결하여 한 파티션처럼 사용할 수 있도록 해줌 PV (물리 볼륨) : /dev/sdb1처럼 실제 하드디스크의 파티션
리눅스의 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스 리눅스 시스템에서 동작하는 각종 서비스를 제공하는 프로세스들📒 데몬 프로세스는 sshd처럼 d로 끝나는 프로세스들 , 보통 서버쪽 서비스를 제공하는 백그라운드 프로세스
로그 관리
OSI 7계층 네트워크 : 최소 2개이상의 장비가 통신하는 것 1계층 / 물리계층 역할 : 전기적, 기계적 규칙을 정의하여 네트워크가 물리적으로 송수신 가능하게 하는 계층 PDU : BIT = 전기신호 단위 장비 : 허브, 리피터, 케이블선
open SSH 원격에서 암호화로 서버에 접속하는 클라이언트 프로그램 -> 과거에는 telnet을 이용해서 원격으로 접속했지만 평문으로 접속하기 때문에 보안이 약해서 현재는 사용하지 않는다 암호화 이론 : SSH, SSL(HTTPS)
SElinux는 리눅스의 보안을 강화하기 위해 탄생하였다💡 리눅스의 전통적인 보안은 퍼미션이다커널에서 동작하는 보안 모듈📕 메모리는 커널과 사용자로 나누어져있고 커널이 실제 프로세스 작업을 하는 것이고 사용자는 메모리에 올라온 프로그램 (프로세스)
DB 데이터베이스 : 여러 사람에 의해 공유되어 사용할 목적으로 통합하여 관리되는 데이터의 집합 파일 DB는 여러가지 문제가 있어 대용량 데이터에는 사용하지 않는다 (가벼운 파일에는 SQLite를 쓰긴함) DBMS : 데이터베이스 관리 시스템
HTTPS HTTPS = HTTP + SSL -> HTTP는 평문 통신이여서 보안에 취약하기 때문에 SSL프로토콜로 포장해서 암호화 통신 SSL : HTTP, FTP등 평문 통신 프로토콜을 암호화해주는 프로토콜
SAMBA 리눅스, 유닉스, 윈도우 등 다른 계열의 운영체제 시스템끼리 자원을 공유하기 위한 서비스 📒 리눅스와 리눅스의 자료 공유는 NFS SAMBA를 이용한 Linux끼리 파일 공유
5일이라는 기간동안 아래의 인프라를 구축하는 세미 프로젝트를 진행 할 예정이다. 웹 서비스 구축 및 이중화 dns서비스 구축 및 이중화 로드밸런싱 스토리지, FTP, NFS, DB 등의 인프라 구축 웹 서비스 구축 및 이중화 웹 서버는 nginx를 이용하기로 하였다.
AWS 클라우드 이론 시스템 기반이란? 어플리케이션을 사용자가 24시간/365일 이용할 수 있는 환경을 제공하는 기술 요소 데이터센터의 정의 시스템 기반 환경을 제공하기 위하여 각 구성요소를 제공하는 시설
aws EC2 / S3 실습 ec2생성 및 터미널에서 키로 해당 ip 입력해서 접속 sodo -i root로 진행 rpm -qa | grep unzip 압축푸는 프로그램 깔려 있는지 확인
AWS 데이터베이스 데이터베이스 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합 정보를 구조화하여 빠르고 효율적인 검색 및 갱신이 가능하도록 구성 DBMS를 통하여 관리됨 SQL을 통한 표준화된 접근 지원 DB의 트랜잭션은 ACID를 만족한다
IaC (Infrastructure as Code-코드형 인프라) 인프라를 웹 인터페이스 및 대화형식의 도구를 사용해 수동적으로 인프라를 구성하는 것이 아닌, 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및 배포를 자동화 하는 것
Ansible 실습 플레이북 Ansible 플레이북은 반복 가능하고 재사용 가능하며 간단한 구성 관리부터 여러 호스트에 복잡한 애플리케이션을 배포하는데 매우 적합 작업을 두 번 이상 실행해야하는 경우 Ad-hoc 명령을 사용하지 않고,
Ansible 플레이북 이전 블로그에서는 플레이북의 변수까지 다루었다. 이번에는 변수 이후에 조회 플러그인 부터 다룰 예정이다. 조회(lookup) 플러그인 파일, 인벤토리, 키/값 저장소, API 등 외부 소스에서 데이터를 검색해 변수로 가져올 수 있음
Ansible 플레이북 이전 블로그에서는 플레이북의 필터까지 다루었다. 이번에는 필터 이후에 팩트(fact) 변수 부터 다룰 예정이다. 팩트(fact) 변수
Ansible 플레이북 작업제어 이전 블로그에서는 작업제어의 반복문까지 다루었다. 이번에는 반복문 이후에 조건문부터 다룰 예정이다. 조건문 Ansible은 조건문을 사용하여 특정 조건을 충족하는 작업 또는 플레이를 실행할 수 있음
Ansible 플레이북 작업제어 이전 블로그에서는 작업제어의 조건문까지 다루었다. 이번에는 조건문 이후에 템플릿부터 다룰 예정이다. 템플릿 Asible에서 파일을 관리하는 가장 강력한 방법은 템플릿을 만드는 것
<가상화 배경>가상화는 1960년대에 처음 소개되었지만 2000년대에 이르러서야 주목받기 시작가상화가 주목받기 시작한 이유는 하드웨어 기술의 성장과 보급 증가로 성능이 우수한 하드웨어를 구하기 쉬워졌기 때문이로 인해 시스템의 리소스 활용률은 낮아졌고,
docker docker 실습 __ docker exec 컨테이너명 yum -y install httpd # 패키지 설치 docker exec -d 컨테이너명 httpd -D FOREGROUND # 서비스 실행
Docker Docker 이미지 제작 __ 이미지를 업로드 할 때 이름이 중요하다 하지만 이미지의 이름을 변경하는 기능은 없으며,태그 기능을 사용하여 이미지를 가리키는 이름을 하나 추가하는 형태 이미지를 업로드 하려는 목적이라면 태그를 지정할 때
도커를 사용하는 경우를 생각해보면, 웹 서비스를 제공하기 위한 어플리케이션을 구동하는 컨테이너와, 어플리케이션 구동에 필요한 데이터를 저정하고 있는 데이터베이스 컨테이너를 함께 구동하는 환경을 예로 들수 있음
Kubernetes(k8s) 이번 쿠버네티스 교육은 1.24v으로 다룰 예정이다 쿠버네티스는 CNCF라는 재단에서 관리한다. 📗 CNCF 공식 사이트 CNCF는 Linux의 산하 재단이다 단지 쿠버네티스만 사용하는 것이 아니라 그 외에도 필요에 따라 수많은 서비스들을
Kubernetes kubectl 쿠버네티스 클러스터(= 서버)를 관리하는 동작은 대부분이 kubectl이라는 커맨드라인 인터페이스(CLI)로 실행할 수 있다. kubectl에서 지원하는 명령은 아래와 같이 확인 가능.
Kubernetes 쿠버네티스 기본 명령어 1 . apply git clone https://github.com/c1t1d0s7/goorm-8th-k8s 해당 사이트에서 실습자료 파일 다운로드
Kubernetes 워크로드 리소스 (= 컨트롤러) 컨트롤러중 디플로이먼트와 스테이트풀셋은 추후 다룰 예정이고, 두개를 제외한 나머지 컨트롤러는 이번 장에서 다룰것이다. replication controller
kubernetes 네트워크 쿠버네티스 네트워크에는 서비스, 로드밸런싱, 네트워킹이 있다. 서비스 서비스의 주요 기능 파드의 proxy 역할 LB = reverse proxy service discovery -> pod를 생성해 ip를 확인해보면 삭제하고 다시
스토리지 컨테이너는 stateless, 즉 상태가 없기 때문에 항상 일정하다. 따라서 이미지를 통해 컨테이너를 생성할 수 있는 것이다. 컨테이너 = Immutable Infrastructure 컨테이너는 stateless이지만 데이터는 state가 존재한다.
- 디플로이먼트가 레플리카셋을 만들고 레플리카셋이 정의된 개수만큼 파드를 만드는 구조이다. - 이미지의 새로운 버전이나 새로운 이미지를 배포/교체 하는 것을 쉽게 해준다 = 배포 전략
docker에서도 컨테이너를 생성할때 --memories나 --cpus옵션을 이용해서 컨테이너에 할당되는 리소스를 제한해서 생성했다.쿠버네티스에서도 request나 limit을 통해 컨테이너가 할당받는 리소스를 제한할 수 있다.만약 리소스를 제한하지 않는다면,
Authentication 사용자는 kubectl, 클라이언트 라이브러리 또는 REST 요청을 통해 API에 접근한다. 사용자와 쿠버네티스 서비스 어카운트 모두 API에 접근할 수 있다. 요청이 API에 도달하면, 다음 다이어그램에 설명된 몇 가지 단계를 거친다.
Helm 쿠버네티스 패키지 매니저 쿠버네티스용 소프트웨어를 검색하거나, 공유하고 사용하기 위함 쿠버네티스 애플리케이션을 패키지 형태로 손쉽게 관리할 수 있도록 도와주는 도구다 쿠버네티스와는 별개의 프로젝트이다 📒 헬름 사이트 참조 📒 헬름 공식 문서
EKS git-bash 다운로드 window powershell, 터미널 대신 git-bash 다운로드 윈도우에 kubectl 설치 윈도우 패키지(choco) 다운로드 kubectl을 설치하기 위해서는 curl명령이 필요한데, 일일이 다운받기 보다는 윈도우 패키지인
애드온 이전 블로그에서 말했다시피, 클라우드환경에서는 온프레미스와 다른점이 몇가지 존재한다. 네트워크 스토리지 스케일링 이러한 다른점을 해결하기 위해 애드온을 설치해야한다. 네트워크 클라우드환경(AWS)에서 ingress(L7)를 사용하기 위해서는 ALB(L7)를
git git은 프로젝트를 관리하기 위한 오픈소스이다. git은 SCM(Source Code Management) 도구로 분류된다. VCS(Version Control System)로 불리기도 한다. git = 버전관리 도구 git과 github은 다르다
각 언어의 빌드과정(워크플로우) 각 프로그래밍 언어마다 빌드하는 과정이 다르고 특성도 다르다. 이러한 각 언어의 빌드와 특성을 이해해야지만 개발자가 만든 코드가 git에 올라오면 코드를 빌드하고 Docker image로 만들고 쿠버네티스에 올리는(=배포) 작업을 할
Devops 데브옵스는 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다 개발자가 개발을 잘할수 있도록 도와준다.
파이프라인 파이프라인은 지속적 통합 및 지속적 전달/배포를 하기 위해 버전 제어에서 최종 목표까지 소프트웨어를 가져오는 자동화된 프로세스를 지원하는 기능/플러그인 파이프라인은 DSL(Domain-Specific Language)를 통해 코드로 작성
Jenkins with EKS EKS설치 및 Jenkins올리기 1 . Deploy EKS eksctl create cluster --name myeks --region ap-northeast-2 --version 1.24 --instance-types
세미프로젝트 개요 이번 세미프로젝트는 하루정도로 아주 간단한 프로젝트로 진행할 것이다. 프로젝트에서 해야할 것은 Wordpress App 구축, Mysql App 구축 이다. 주로 App을 구성하는 각 기능에 대해 YAML파일을 작성하는 프로젝트이다.
CKA Kubeadm 쿠버네티스 클러스터를 생성하고 관리하기 위한 쿠버네티스의 기본적인 설치 도구 일반적으로는 Kubespray를 사용하지만 CKA만큼은 Kubeadm을 설치할 줄 알고, 사용할 줄 알아야 한다. Kubeadm 설치 Kubeadm 설치 github
3/13 ~ 4/11 까지 약 한달 간 쿠버네티스 전문가 양성과정의 마지막 과정인 파이널 프로젝트가 진행된다.팀은 총 5명으로 구성되었다.최종발표는 4/12일이며, 최종 보고서 및 기술 보고서, 시연영상을 준비해야 한다.첫날은 가볍게 자기소개 및 팀장 정하기
프로젝트 착수 보고서 주제 / 아이디어 , 주제 선정 배경 이전 블로그에서 작성하였던 여행관련 아이디어에서 타당성 , 차별점을 추가하고 구체화를 하여 아래와 같이 최종 아이디어를 도출해냈다. >포스트 코로나 이후 여행 수요가 폭발적으로 증가하고 있다.
프로젝트 착수 보고서 원래 오늘부터 인프라 구축에 들어가려 했지만 아이디어가 명확하지 않고, 다른 기존의 서비스와의 차별점이 없다는 피드백을 통해 주제를 변경하게 되었다. 이전 블로그에서 작성한 착수 보고서에서 프로젝트 주제와 AS IS - TO BE를 제외하고는 변경
인프라 구축 착수보고서가 끝나고 본격적으로 인프라 구축을 시작했다. Front/back 개발을 담당하는 팀원도 이제 개발을 시작했기에 Front/back 실행파일이 존재하지 않는다. 따라서 개발자가 git에 push한 실행파일을 가지고 Jenkins가 테스트와 빌드를
인프라 구축 이전 인프라 구축에 이어서 오늘도 인프라 구축을 작업할 것이다. 오늘의 목표는 스토리지 구축, HPA, EC2 AutoScailing 구축이다. 클러스터 오브젝트 생성 스토리지 여러 AZ에 배포된 EC2인스턴스들이 동시적으로 하나의 스토리지에 접근해서
도커라이징 도커라이징이란 어떠한 기술이나 툴 보다는 개발자가 만든 코드를 테스트 & 빌드 해보고 도커 이미지로 만드는 과정을 말한다.
도커라이징 이전 블로그에서 개발자님이 만드신 테스트코드를 TEST & BUILD 후 java -jar 명령어를 통해 배포하여 브라우저에서 정상적으로 접속되는 것을 확인하였다. 오늘은 이전 작업에이어서 테스트 코드에 대해서 TEST & BUILD 후 배포까지 하는 Doc
Route53 Route53과 External DNS를 이용하여 외부에서 클라이언트가 IP주소나 복잡한 로드밸런서의 주소를 입력하는 것이 아니라, 우리가 흔히 보는 도메인을 입력하여 서비스에 접근할 수 있도록 한다 .
Jenkins 설치 오류 해결 Jenkins를 배포하고나서 하루가 지난뒤 갑자기 접속이 안되는 현상이 발생했다. Jenkins를 띄우는 파드의 로그를 확인해보니 볼륨 마운트에 문제가 발생했다. 내 생각으로는 원래 gp2볼륨을 스토리지로 사용했는데 gp2-csi-dri
Jenkins 추가 설정 Jenkins에 접속하여 Jenkins관리에 들어가보니 아래와 같은 에러 메세지가 뜨는 것을 확인했다. 이것을 해결하기 위해 아래와같이 Jenkins 시스템 설정에 들어가 Jenkins Location부분에서 이 브라우저에 접속할때 입력한
CI/CD 파이프라인 CI/CD 파이프라인 구축에 앞서 일단 지금까지 개발자분이 개발한 코드가 정상적으로 빌드되는지 테스트를 하기로하였다. 이전에 백엔드 코드를 도커라이징한 과정을 그대로 실행하였다. 개발자님이 기능을 추가하는 과정에서 git에 새로운 디렉터리들을 추가
일단 어제 지금까지만 개발된 백엔드 코드에 대한 도커라이징을 테스트했다. 이제부터 Jenkins를 이용해 파이프라인을 구축할 것이다. 1 . 백엔드 코드 수정 및 변경 개발자님의 백엔드코드를 나의 git으로 fork해서 가져온뒤 workDIR에 clone을 통해 rem
Backend CI/CD 파이프라인 이전 작업까지해서 Backend CI/CD 파이프라인 구축 작업 테스트는 완료하였다. 하지만 개발자님이 Backend부분에 대해서 추가 개발 및 Git을 나누어 놨기 때문에 해당 Git을 다시 fork해서 나의 workDIR과 rem
Backend 와 Frontend 연결 Backend 파이프라인 구축 작업은 마무리한 상태에서 Frontend 도커라이징 테스트를 완료하였다. Frontend 파이프라인 구축 작업에 앞서 일단 생성한 Frontend 이미지로 배포한 웹과 Backend 서버가 연결이 잘
Frontend 와 Backend 연결 지난번 작업에서의 405에러를 잡기위해 많은 자료조사를 한 결과 백엔드에 연결이 안되어있다는 것을 알 수 있었고, nginx가 405에러를 지원을 하지 않기 때문이라는 자료를 찾았다. 따라서 nginx에러를 잡는다면 해결될 것이라
Frontend-User 도커라이징 이전까지 작업으로 Frontend-Admin 과 Backend , DB 연결을 마무리하였고, Frontend-Admin과 Backend의 CI/CD 파이프라인 구축작업을 마무리하였다. 이제 실제로 User가 보는 웹페이지를 배포하기
User / Admin 페이지 경로 구분 이전 작업으로 3-tier 구성 / 연결이 완료되었고, Frontend 부분에서는 Ingress의 다중경로를 사용하여 User 와 Admin페이지를 구분하였다. 또한 User, Admin, Backend의 파이프라인 구축도 완료
Flask 도커라이징 EC2인스턴스에서 빌드테스트하는 것은 아래 블로그를 참조하였고, 정상적으로 빌드가 되었다. 📒 flask 빌드 테스트 참조 Dockerfile을 작성하여 빌드하여 이미지를 생성할 것이다.
프로젝트 정리 지난 작업까지해서 인프라 구성, CI/CD 파이프라인 구축, 서비스 테스트, 트러블 슈팅까지 완료하였다. 마지막에 추가된 머신러닝 Backend 서버같은 경우에는 도커라이징까지만 하고 해당 이미지를 ArgoCD에서 ML-deployment의 파드로 띄우기
프로젝트 최종 지난 Project 정리 작업에 이어서 앞으로 총 3일간 Project 정리 작업 및 최종 PT를 진행한다. 구현한 인프라 및 CI/CD 파이프라인 , 서비스 , Monitoring 시스템에 대한 코드 정리, 기술보고서 및 PPT 작성을 할 것이다. 코