DevOps Roadmap

HYEOB KIM·2022년 9월 28일

데브옵스 로드맵

https://roadmap.sh/devops

Learning a Programming Language

자동화를 위한 프로그래밍 역량은 필수

Python

  • 초보자도 배우기 쉬움.
  • 다양한 분야에서 사용됨(라이브러리가 정~말 많아서 가능)
    • Django를 이용한 웹 프로그래밍
    • Numpy를 이용한 수치 연산 프로그래밍
    • Pandas를 이용한 데이터 분석
    • IoT에서 라즈베리파이 센서 제어
    • 윈도우와 리눅스를 위한 시스템 유틸리티 제작
    • GUI 프로그래밍
    • AWS Lambda에서 이벤트 트리거를 만들 때 사용되는 언어
    • boto3를 이용한 클라우드 운영 자동화

유틸리티
컴퓨터 사용에 도움을 주는 여러 소프트웨어.

Go

  • 성능
    • 컴파일 언어 중에서 컴파일 속도가 제일 빠름.
    • 고루틴(비동기 메커니즘)을 이용하면 이벤트 처리, 병렬 프로그래밍이 간단해짐
    • 자체적인 스케줄러에 의해 관리되는 경량 스레드를 이용해서 CPU 코어 수에 관계 없이 수천 개의 고루틴을 돌려도 성능에 문제가 생기지 않음.
  • 사용처
    • Grafana에서 Slack으로 발송하는 알림의 양식을 작성하는데 Go 언어를 사용했음.
    • Docker, Kubernetes를 작성하는데 사용된 언어
    • 트위치, 뉴욕 타임즈 API 백엔드 서비스, SpaceX 원격 측정 프로그램, 이더리움의 메인 클라이언트인 Geth 모두 Go로 작성됨.
    • 구글을 비롯해 드롭박스사운드클라우드 등에서도 기존의 기능들 중 상당수를 새롭게 Go를 이용해 바꿨다고 한다.

Understand different OS concepts

컴퓨터 공학에 관련된 지식들

I/O Management

  • OS가 다양한 I/O 디바이스를 어떻게 관리하는지
  • I/O 디바이스: 마우스, 키보드, 디스크 드라이브, LED, 네트워크 연결, 오디오 I/O 등등

Socket

  • 서로 다른 두 프로세스 간을 연결해주는 엔드포인트(동일/외부 네트워크)
  • Point-to-Point 방식
  • IPC(Inter-Process Communication)
  • 클라-서버에 IP주소와 포트 번호로 구성된 연결 포인트를 생성.

POSIX

  • Portable Operating System Interface
  • IEEE에서 제정한 유닉스의 API 규격.
  • 유닉스와 직접적인 연관이 없어도 POSIX를 따르면 유닉스 호환 운영 체제라고 부름.
  • 리눅스/macOS 모두 POSIX를 준수하기 때문에 유닉스 호환 운영 체제

initd

  • 리눅스에서 PID=1로 가장 먼저 실행되는 데몬
  • 이 데몬이 다른 프로세스, 스레드, 서비스, 데몬을 실행
  • 시스템이 부팅될 때 /etc/init.d에 적힌 스크립트를 토대로 서비스를 자동 시작
  • service 명령어를 이용해 서비스를 제어(시작/중단)

systemd

  • RHEL7으로 넘어오면서 initd를 대체하는 루트 데몬(PID=1)
  • systemctl 명령어를 이용해 서비스를 제어(시작/중단)

Concurrency

  • 동시성 제어
  • 여러 스레드가 병렬로 동시에 처리될 때 동작.
  • 처리량을 최대로 하기 위해서 프로세스의 실행 순서, 메모리 할당, 스케줄링하는 기능.
  • Locking 기법(자기가 사용하는 공유 메모리에 대해 다른 스레드가 사용하지 못하도록 선점)이 사용되는데, 이로 인해 데드락, block이 발생할 수 있음.

Learn about Managing Servers

Operating System

Linux

RHEL

  • Red Hat Enterprise Linux
  • 페도라를 기반으로 한 상업용 오픈 소스 리눅스 배포판

CentOS

  • RHEL과 호환되는 무료 오픈소스 리눅스 배포판
  • 레드헷이 21년 12월에 지원을 중단하면서 Rocky Linux, AlmaLinux가 대체제.

Ubuntu

  • 데비안을 기반으로 한 무료 오픈소스 리눅스 배포판

SUSE Linux(openSUSE)

  • 유럽에서 큰 인기. 국내, 미국에서는 별로.
  • YaST(Yet another Setup Tool)를 이용하면 GUI를 통해 시스템 관리가 가능(가장 큰 장점)
  • OBS(Open Build Service) 서비스. OBS 서버에 오픈 소스 프로젝트의 소스 파일들을 올리면 페도라, 우분투, 데비안 등의 각 배포판 별로 패키지를 자동으로 생성해주고, 리포지토리를 제공(또 다른 장점).
  • 많은 오픈 소스 프로젝트들이 각 배포판용 패키지를 만들고 저장소를 호스팅하는 데에 OBS를 사용하고 있다.

Unix

FreeBSD

  • 무료 오픈소스 유닉스 계열 운영체제

Learn to live in Terminal

Learn Bash Scripting

  • 배시 스크립트 작성은 필수
  • 자동화도 가능할 뿐더러 반복적인 작업에서의 휴먼 에러를 줄일 수 있음.

Text Manipulation Tools

awk

  • C언어를 기반으로 한 프로그래밍 언어
  • 보통 특정 패턴 포함되어 있는 파일들을 검색하고 적절한 액션을 취해주고 싶을 때 사용

sed

  • 특정 패턴을 포함하는 파일을 찾거나 내용을 변경, 삽입, 삭제할 때 사용
  • vi 편집기 없이도 명령줄에서 파일 수정 가능

grep

  • 특정 패턴을 포함하는 라인을 출력
  • 다른 명령어와 파이프라인으로 연계해서 많이 사용

sort

  • 파일의 내용을 특정 규칙으로 정렬할 때 사용

cut

  • file 이나 표준 입력에서 받은 문자열을 잘라내서 새로운 문자열을 만드는 명령어

uniq

  • 입력 내용에서 중복된 항목을 제거
  • 파이프라인과 연계해서 많이 씀

fmt

  • 원하는 형식의 포맷대로 내용을 포맷해서 출력
  • 라인별 글자 수 지정, 문장별 한 줄 씩 출력 등

tr(translate characters)

  • 파일 속 문자를 원하는 규칙을 통해 변환(입력 리다이렉션을 통해 파일을 읽어들임)
  • 중복 제거, 글자 제거, 소문자를 대문자로 변경 등

nl(number line)

  • 파일 내용의 줄 번호를 함께 출력

wc

  • 특정 파일내에서 존재하는 바이트(Bytes)수, 단어(Words)수, 행(Lines)수를 카운트하여 화면에 출력

egrep

  • grep의 확장 버전으로 추가적인 정규표현식 메타문자들을 지원

fgrep

  • 모든 문자를 문자 그대로(정규표현식도 문자 그대로) 취급

terminal multiplexers

tmux

  • 하나의 스크린에서 여러 개의 터미널을 만들고 액세스하고, 제어할 수 있도록 해주는 터미널 멀티플랙서
  • 원격 서버로 접속했을 때 터미널 화면을 분할해서 사용하고 싶을 때 사용

Process Monitoring

ps

  • 터미널에 있는 모든 프로세스에 대한 정보를 보여줍니다.

top

  • 시스템 프로세스를 정렬해서 리스트로 보여줍니다.
  • 맨 위에는 전체 프로세스가 OS에 대해서 리소스를 어느정도 차지하고 있는지를 알려줍니다.

htop

  • top 명령어와 비슷한데, 수평/수직 스크롤이 가능하고 마우스로 상호작용이 가능.

atop

  • 역시 top과 비슷한데, top과 비교해 프로세스, cpu, 메모리, 디스크, 네트워크에 이르기까지 좀 더 많은 하드웨어 리소스의 요약 정보를 제공

lsof

  • list open files
  • 프로세스에 의해 열려 있는 파일에 대한 정보들을 보여줍니다.

System Performance

nmon

  • 성능 모니터링 커맨드라인 툴
  • CPU, 메모리, 네트워크, 디스크, 파일 시스템, NFS, 프로세스, 리소스
  • nmon 분석 엑셀 파일을 통해서 그래프로 가시화 가능

iostat

  • 디스크의 입출력 통계를 모니터링

sar

  • System Activity Report
  • CPU, 메모리, 디스크 입출력, 네트워크 사용 정보

vmstat

  • CPU, 프로세스, 메모리, 스왑, 디스크 등 정보 표시

Network Tools

traceroute

  • 명령어를 실행하는 컴퓨터에서 목적지 서버로 가는 네트워크 경로 확인
  • ICMP 프로토콜 이용
  • 최종 목적지까지 가기까지 각 구간에서의 속도를 표시해줘서 느린 구간이 어디인지 파악하는데 굉장이 용이

ping

  • 호스트와 서버 사이에 네트워크 연결 체크

mtr

  • traceroute + ping
  • 낮은 TTL로 구간 별로 ping
  • traceroute보다 더 많은 정보 제공(응답 속도, 응답 시간, 통계)

nmap

  • 네트워크 상의 모든 호스트 탐색
  • CIDR를 이용하면 여러 호스트 탐색 가능
  • 보안감사나 네트워크 상의 가동중인 서비스의 모니터링에 유용

netstat

  • 네트워크 연결, 라우팅 테이블, 인터페이스 정보 및 통계 등의 정보 제공

airmon

  • 칼리 리눅스에서 주로 사용
  • 무선 인터페이스의 모드를 변경(모니터 모드, 관리 모드)
  • 무선 인터페이스 운영과 관련된 프로그램의 목록을 보여주거나 종료시킬 수 있음.

ufw

  • 방화벽 규칙 설정

tcpdump

  • 네트워크 상에 흐르는 트래픽에서 패킷을 잡아내 사람이 읽을 수 있는 형태로 보여줌

airodump

  • 칼리 리눅스에서 주로 사용
  • 공중에 떠다니는 무선 트래픽의 패킷을 볼 수 있음

iptables

  • 패킷 필터링 도구
  • 방화벽 구성, NAT 구성에 사용

dig

  • Domain Information Groper
  • nslookup, host를 대체하는 명령어
  • 도메인과 관련된 네임 서버의 정보를 보여줌.

scp

  • SSH를 이용하여 호스트 간 파일이나 디렉토리를 전송

Others

strace

  • 특정 프로그램으로 호출된 시스템 콜이나 시그널을 기록
  • 예를 들어 특정 프로그램으로 kill 명령을 날렸다면 로그가 기록됨

dtrace

  • dtrace 스크립트 작성: 이벤트를 정의(probe)하고 정의된 이벤트가 실행(dtrace)될 때 작성된 로직이 실행(action)

systemtap

  • 실행중인 리눅스 커널의 작업을 동적으로 모니터링
  • dtrace와 유사
  • systemtap 스크립트 작성

uname

  • 시스템 정보 출력
  • 운영 체제, 커널, 하드웨어 아키텍처, 버전 등의 정보를 출력

df

  • 시스템 전체에 마운트된 디스크 공간 확인

du

  • 특정 디렉토리를 기준으로 디스크 사용량 확인

Networking, Security and Protocols

HTTP

  • 인터넷 상에서 전송되는 내용들이 어떻게 요청되고 전송되는지를 정의한 프로토콜

HTTPS

  • HTTP + SSL/TLS
  • 평문이 보내질 때 암호화됨

FTP

  • 2개의 TCP 연결 사용(제어: 21, 데이터: 20)
  • 파일 전송 프로토콜

SSL/TLS

  • SSL은 TLS의 이전 버전: 기존에 SSL을 개발하던 Netscape가 더 이상 참여하지 않게 되면서 TLS로 명칭이 변경

SSH

  • 네트워크 커뮤니케이션 프로토콜
  • 두 호스트가 암호화된 네트워크에서 커뮤니케이션이 가능
  • SFTP = SSH + FTP

Port Forwarding

  • 특정 포트로 들어오는 데이터 패킷을 다른 포트로 바꿔서 전송
  • 게이트웨이를 통해 사설망 안에 있는 특정 서비스로 라우팅 시켜 줄 때 주로 사용

What is and how to setup a X?

Reverse proxy

  • 사용자가 인터넷에 데이터를 요청하면 리버스 프록시가 이 요청을 받아 내부 서버에서 데이터를 받은 후 사용자에게 전달
  • 내부 서버는 WAS를 의미하고 WAS에 직접 접근한다는 것은 DB에 접근이 가능해진다는 의미이기 때문에 보안상 치명적
  • 로드 밸런싱 기능도 가능함
  • 클라이언트는 리버스 프록시에게 요청하기 때문에 서버의 정보를 알 수 없다.

Forward Proxy

  • 사용자가 직접 인터넷에 연결되는 것이 아니라 프록시 서버를 통해 인터넷에 연결됨
  • 캐싱 기능이 있어 자주 사용하는 데이터라면 프록시 서버까지만 접근하면 되므로 성능 향상이 가능
  • 서버는 포워드 프록시를 통해서 요청을 받기 때문에 클라이언트가 감춰진다.

Caching Server

  • 클라이언트가 요청한 컨텐츠들을 기억하고 있다가 동일한 요청이 들어왔을 때 캐싱 서버를 통해 신속하게 응답

Load Balancer

  • 클라이언트의 요청에 대해서 여러 서버로 분산
  • 서버가 하나 중단된다면 다른 서버로 요청 전송하며 가용성 보장

Firewall

  • 인바운드/아웃바운드 정책을 통해서 안전한 트래픽만 접근 허용

Web Server

  • NginX vs Apache
    : NginX의 경우 여러 연결을 동시에 처리할 수 있는 정교한 아키텍처로 짜여져 있어 모듈 개발이 Apache에 비해 어려움.
    : 정적 컨텐츠 제공 성능은 NginX2.5배 정도 좋음
    : 동적 컨텐츠 제공 성능은 동일
    : 두 웹 서버 모두 다양한 OS를 지원하지만 NginX의 경우 Windows에서의 안정성은 떨어짐.

Learn Infrastructure as Code

인프라를 YAML, JSON 같은 마크업 언어를 통해서 관리하는 것을 말함.

IaC의 장점

  1. 휴먼 에러 감소
    : 초기 구축 리소스는 조금 더 들 수 있으나 한 번 정확하게 작성해 놓으면 휴먼 에러를 현저히 줄일 수 있음.

  2. 버전 관리, 롤백, 공유, 재사용 가능
    : 코드를 사용할 때의 장점들을 그대로 이용할 수 있음.

Service Mesh

서비스 메시란 API를 사용해서 마이크로 서비스 간의 통신을 원활하게 할 수 있도록 설계된 인프라의 한 계층입니다.
서비스 메시 솔루션은 마이크로 서비스 환경에서 어플리케이션의 각각 다른 파트들(컨테이너)이 데이터를 서로 잘 공유하도록 제어하는 역할을 담당합니다.
서로 다른 기능들이 원활하게 소통하도록 도와줌으로써 최적화 및 어플리케이션이 안정적으로 확장될 수 있도록 도와줍니다.

Consul

  • Hashicorp사에서 개발한 서비스 메시 솔루션
  • MSA의 서비스 검색, 상태 확인정책 적용을 관리
  • ID 기반 정책 및 암호화를 통해 서비스 간 트래픽을 보호
  • 각 서비스들에는 consul agent가 실행되고, agent들은 하나 이상의 consul server와 통신. consul server에는 데이터가 저장되고 복제된다. consul 자체는 한 서버에서 동작되지만 데이터의 손실을 막기 위해 3~5대의 서버가 클러스터를 이룬다.

Istio

  • 서비스 코드 변경 없이 로드밸런싱, 서비스 간 인증, 모니터링 등을 적용하여 마이크로 서비스를 쉽게 관리할 수 있다.
  • 데이터 플레인의 각 서비스에 Envoy 프록시가 배포되어 서비스로 들어오고 나가는 모든 트래픽을 통제하고, 컨트롤 플레인Istiod 모듈을 통해 Envoy를 관리한다.

Containers

Docker

  • 마이크로서비스 환경을 구축할 수 있도록 해주는 컨테이너 런타임
  • 도커 허브에 저장되어 있는 컨테이너 이미지를 통해 손쉽게 독립적인 컨테이너를 실행할 수 있음
  • dockerfile을 작성해서 컨테이너 이미지를 직접 빌드할 수 있음
  • YAML 파일을 작성하고 docker compose를 이용하면 YAML 파일에서 구성한 설정대로 컨테이너가 실행됨.

Configuration Mgmt.

효율적인 형상 관리 가능

Ansible

  • 여러 호스트에게 동시에 같은 작업을 한 번에 수행할 수 있도록 해준다.
  • 인벤토리를 작성해 호스트에 대한 정보를 파일로 관리할 수 있음.
  • 플레이북을 작성해 CLI가 아닌 IaC 형태로 관리 가능

Container Orchestration

Kubernetes(k8s)

  • 다수의 컨테이너를 효율적으로 관리
  • Docker 지원 중단으로 인한 이슈
    • 쿠버네티스는 원래 컨테이너 런타임과 통신할 때 CRI라는 API를 이용해서 통신하는데, 도커는 이를 지원하지 않아서 도커심(Dockershim)이라는 것이 사용되어 왔음.
    • 하지만 최신 버전부터는 도커심 지원이 중단.
    • 도커가 생성하는 이미지는 쿠버네티스에서 호환 가능
    • 개발은 도커로 진행하되 이를 실행하는 컨테이너 런타임을 바꾸면 됨.
    • 대체 컨테이너 런타임: containerd, CRI-O

Infrastructure Provisioning

Terraform

  • 멀티 클라우드 환경에서 대단히 효율적
  • ruby를 기반으로 한 테라폼 언어를 통해 리소스 생성 및 관리

Learn some CI/CD Tool

CI(Continuous Integration): 지속적 통합

  • 버전 관리 레포에 여러 플랫폼에서의 코드 변경 사항을 통합
  • 성능, API, 브라우저, 디바이스, 코드 분석, 보안 테스트 자동화
  • 협업코드 품질 개선

CD(Continuous Deployment): 지속적 배포

  • 빌드, 테스트, 배포의 과정 자동화
    • 버전 제어에서 코드를 풀링해서 빌드 실행
    • 단계 게이트에서 자동화된 보안, 품질 및 규정 준수 확인과 필요한 경우 이를 뒷받침하는 승인 활성화.
    • 코드로 자동화된 필요 인프라 단계를 실행해 클라우드 인프라 구축 또는 해체
      타깃 컴퓨팅 환경으로 코드 이동
    • 환경 변수를 관리하고 타겟 환경에 맞게 구성
    • 애플리케이션 구성요소를 웹 서버, API, 데이터베이스 서비스와 같은 적절한 서비스로 푸시
    • 새 코드 푸시에 필요한 서비스 엔드포인트를 호출하거나 서비스를 재시작하기 위해 필요한 단계 실행
    • 지속적 테스트 실행과 테스트 실패 시 롤백
    • 제공 상태에 대한 로그 데이터 및 알림 제공
    • 구성 관리 데이터베이스를 업데이트하고 IT 서비스 관리 워크플로우에 완료된 배포에 대한 알림 전송

Gitlab CI

  • SaaS 모델로 제공되는 CI/CD 무료/유료 솔루션
  • Gitlab 레포, 깃헙 레포, Bitbucket 클라우드를 사용하는 환경 모두 GitLab CI를 사용할 수 있음(유료 버전).
  • 무료 버전의 경우 CI/CD 기능 사용을 월 400분으로 제한
  • 유닉스 계열만 지원
  • 지원하는 플러그인이 제한적인 대신 CI/CD를 도와주는 편리한 기능들이 내장되어 있음.

Jenkins

  • 무료 오픈소스 CI/CD 솔루션
  • 유닉스 계열, 윈도우, 맥 모두 지원
  • 1700여개의 플러그인 지원
  • 커뮤니티 활성화가 잘 되어 있음.

GitLab vs Jenkins
https://www.clickittech.com/devops/gitlab-vs-jenkins/

GitHub Actions

  • GitHub에서 제공하는 CI/CD 솔루션
  • 개발자라면 GitHub 계정은 누구나 가지고 있기 때문에 진입장벽이 낮음.
  • GitHub 레포에서 일어나는 모든 활동에 CI/CD 적용

Circle CI

  • GitLab CI와 같이 클라우드 기반으로 유사한 점이 많음
  • 차이점은 버전 관리 기능이 없으며, 디버깅 기능이 있음.

Learn how to monitor software and infrastructure

Infrastructure Monitoring

Prometheus

  • PromQL을 이용하는 시계열 데이터베이스 기반 무료 모니터링 소프트웨어
  • 다른 모니터링 시스템과의 가장 큰 차이점은 풀(pull) 방식
    • 보통 모니터링 시스템은 호스트에서 에이전트가 모니터링 서버로 매트릭을 보내는 푸시(push) 방식
    • 프로메테우스의 경우 모니터링을 할 호스트에 Exporter를 설치하고 방화벽의 특정 포트를 열어놓으면 프로메테우스 서버에서 풀 방식으로 해당 포트를 통해 HTTP Get 요청으로 매트릭을 수집
    • 각 호스트에 Exporter만 설치되어 있으면 프로메테우스 서버 한 곳에서 제어가 가능하기 때문에 관리가 용이
  • 서비스 디스커버리 기능을 이용하면 EC2 Instancek8s pod로 부터 매트릭 수집 가능
  • Pushgateway를 통해 푸시(push) 방식으로 매트릭을 수집할 수도 있음.

Grafana

  • 프로메테우스와 같은 모니터링 서버에 수집된 데이터들을 시각화하는 소프트웨어

Datadog

  • 클라우드 기반 모니터링 솔루션
  • 대규모 어플리케이션에 적합한 모니터링 솔루션
  • 인프라 모니터링 뿐만 아니라 애플리케이션 성능 모니터링, 로그 관리, UX 모니터링까지 다양한 기능 제공

Application Monitoring

Jaeger

  • 복잡한 분산 시스템에서 트랜잭션에 대한 모니터링 및 트러블슈팅 가능

New Relic

  • Datadog은 클라우드 인프라 모니터링과 보안 쪽에 집중
  • New Relic은 데스크탑, 웹, 모바일 애플리케이션의 모니터링에 집중
  • 실시간 모니터링이 가능하기에 실시간이 중요시 되는 환경이라면 New Relic이 좋음.
  • 비용 측면에서는 Datadog이 훨씬 유리.

Datadog vs New Relic
https://www.eweek.com/enterprise-apps/datadog-vs-new-relic/

Logs Management

Elastic Stack

  • 모든 유형의 데이터(특히 비정형 데이터)를 저장, 실시간으로 검색, 분석 및 시각화 할 수 있도록 도와주는 Elastic의 오픈소스 로그 수집 솔루션
  • Elastic Search + Logstash/Beats + Kibana(ELK)
  • Elastic Search: 대규모의 데이터(특히 비정형 데이터)를 빠르게 검색, 분석, 저장
  • Logstash: 데이터 수집, 변환, 운송
    • Beats: Logstash와 유사하나 변환 기능이 제외되어 보다 가볍게 사용 가능
  • Kibana: 데이터 시각화

Loki

  • 로그 수집 솔루션으로 ELK가 운영하기 어렵고 비용 감당이 안될 경우 대체제.
  • Grafana에서 개발한 오픈 소스 중앙 집중식 로그 집계 플랫폼.
  • 소규모 환경에 적합. Go로 개발되어 성능 우수.
  • LogQL 쿼리 언어를 이용.

Cloud Providers

Digital Ocean

  • 기술적인 면에서는 떨어질지 모르나 UI가 직관적이고 상당히 경량화 되어 있으며, 메이저 퍼블릭 벤더사에 비해 가격이 저렴하다.

Cloud Design Patterns

시스템 아키텍처를 설계할 때 발생할 수 있는 전형적인 문제에 대해 설계 방법, 해결 방안을 알기 쉽게 분류하여 노하우로 이용할 수 있도록 정리한 것

고려사항

  1. 가용성(Availability)
  2. 데이터 관리(Data Management)
  3. 디자인 & 구현(Design & Implement)
  4. 관리 & 모니터링(Management & Monitoring)
profile
Devops Engineer

0개의 댓글