20230720

아홍·2023년 7월 20일

2023.07

목록 보기
7/12

아파치 웹 서버

아파치 홈 디렉토리의 기본 설정은 /usr/local/apache

디렉토리.
bin아파치 실행파일
build아파치 개발과 관련된 라이브러리 및 도구
cgi-binCGI파일
conf설정 파일
error에러코드에 관한 문서
htdocs웹문서
icons아이콘 이미지파일
includeC 헤드파일
lib라이브러리
logs웹 로그
manman 페이지 파일
manual매뉴얼 파일
modulesDSO 방식의 아파치에서 로드할 모듈 파일

Docker Compose

여러 개의 컨테이너로 이루어진 서비스의 구축, 실행을 자동으로 하여 관리를 간단히 하는 기능

docker-compose.yml을 작성하여 각 컨테이너의 실행 정의를 한다.

docker-compose up
// 종료는 up이 아닌 down

을 통해 docker-compose.yml로 정의한 컨테이너를 실행한다.

version: '3.8'

services:
  nginx:
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  spring:
    image: 0xnsky/server-spring
    restart: 'always'
    ports:
      - "4999:3000"
    container_name: server-spring

쿠버네티스 Kubernetes, k8s

컨테이너 오케스트레이션 도구
수십, 수백 개의 컨테이너를 관리하기 위한 툴이다
대규모 분산 애플리케이션의 배포, 관리, 확장을 자동화한다.
도커와 마찬가지로 컨테이너 런타임 기반
컨테이너화된 애플리케이션을 관리해주고, 각기 다른 환경에 대응할 수 있다.

모놀리식 아키텍처, 몇 개 되지 않는 컨테이너, 단순한 아키텍처에 스케일링이 필요하지 않은 경우에는 쿠버네티스는 적합하지 않다

컨테이너 스케줄링

클러스터 내에서 컨테이너를 적절히 분배하고 스케줄링하여 자원을 효율적으로 활용한다.
노드 간의 부하 분산, 자동 복구 및 확장 기능을 제공한다

자동화된 롤링 업데이트

애플리케이션의 업데이트나 패치를 배포, 관리한다.
사용자에게 중단없는 업데이트를 제공할 수 있다

스케일 인/아웃

애플리케이션의 수평 스케일링을 지원하여 자동으로 애플리케이션 인스턴스의 개수를 조정한다.
부하에 따라 자원을 동적으로 조절할 수 있다.

서비스 디스커버리와 로드 밸런싱

내부와 외부의 트래픽을 적절히 분배할 수 있다.

자가 치유와 자동 복구

애플리케이션과 노드의 상태를 모니터링하여 장애를 탐지하고 복구한다

리소스

노드 Node

쿠버네티스 클러스터를 구성하는 개별 서버 혹은 가상 머신을 나타내는 리소스
애플리케이션 컨테이너를 실행하고 관리한다
각 노드는 CPU, 메모리, 스토리지 등의 자원을 갖고, Pod는 노드 상에서 실행된다.

파드 Pod

가장 작은 배포 단위. 하나 이상의 컨테이너를 포함한다.
관련 컨테이너를 함께 실행하고 네트워크와 스토리지 리소스를 공유할 수 있다.

레플리카세트 ReplicaSet

Pot의 복제본 집합을 정의하는 리소스
파드의 개수를 지정하고, 파드의 가용성을 보장하고 스케일링과 롤링 업데이트를 관리한다
지정된 개수의 파드가 항상 실행되도록 유지한다
파드가 실패, 삭제된 경우 자동으로 복구한다

디플로이먼트 Deployment

애플리케이션의 버전 관리 및 롤링 업데이트를 지원하는 리소스
파드를 관리하고 수를 조정하여 애플리케이션의 가용성과 확장성을 유지한다

서비스 Service

여러 파드에 대한 로드 밸런싱, 서비스 디스커버리 및 네트워크 연결을 제공하는 리소스
애플리케이션에 대한 단일 진입점을 만들어서 외부에서 접근할 수 있게 한다

인그레스 Ingress

외부에서 클러스터 내부로의 HTTP, HTTPS 트래픽을 관리하는 리소스
로드 밸런싱, 경로 기반 라우팅, SSL 인증서 관리 등을 제공하여 애플리케이션에 대한 인바운드 트래픽을 제어한다

컨피그맵 ConfigMap

설정 데이터를 저장하고 파드에서 사용할 수 있도록 제공하는 리소스
환경 변수, 설정 파일 등을 저장하고 애플리케이션의 동적인 구성 변경을 지원한다

잡 Job

일회성 작업을 실행하는 리소스
특정 작업이 성공적으로 완료될 때까지 파드를 실행하고 관리한다.
배치 작업, 데이터 처리, 크론 작업 등 한 번에 실행되고 종료되는 작업에 적합하다
작업이 성공적으로 완료될 때까지 파드를 유지하고, 실패한 경우에도 재시작하여 안정성을 제공한다

네임스페이스 Namespace

쿠버네티스 클래스터 내에서 리소스를 그룹화하고 격리하는 논리적인 공관
리소스의 이름 충돌을 방지하고, 다른 팀이나 애플리케이션 간의 리소스를 분리하여 관리한다
클러스터 관리를 단순화하고 보인 및 리소스 관리를 용이하게 한다.

쿠버네티스 작동 원리

클러스터는 최소 하나 이상의 제어판ControlPlane 컴포넌트와 이와 연결된 몇 개의 워커 노드로 구성된다
워커 노드에서는 kubelet이라는 프로세스가 돌아간다
kubelet은 다른 노드와 서로 통신하거나 태스크를 실행할 수 있게 한다
워커 노드 안에는 한 개 이상의 컨테이너가 있다. >> 애플리케이션이 실행되고 있는 곳

관리를 위해 필요한 프로세스는 전부 제어판 컴포넌트에 있다.

API 서버 kube-apiserver

제어판 컴포넌트의 프로세스 중 하나
클러스터 관리의 입구로, 명령을 내릴 수 있는 관문

컨트롤러 매니저 kube-controller-manager

클러스터에서 발생하는 일을 추적한다

스케줄러 kube-scheduler

프로세스 중 하나
서버 리소스를 바탕으로 파드가 노드에 배치되게 만드는 역할을 담당한다
새로 생성된 컨테이너를 찾아 노드에 할당한다

키-값 저장소 ETCD

클러스터 관리에 필요한 모든 데이터를 저장하는 공간

쿠버네티스 설치 후

kubectl get pods -A

모든 파드를 조회하는 명령어. 제어판 컴포넌트의 프로세스들이 파드로 존재함

minikube start

minikube를 이용해 클러스터 생성

kubectl create deployment {리소스명} --image={허브유저명}:{레포지토리}:tag

이미지를 사용해 디플로이먼트 생성

kubectl expose deployment {리소스명} --type=NodePort --port=8080

서비스를 8080 포트로 설정해 노출

kubectl port-forward service/{리소스명} 3333:8080

로컬 클러스트를 호스트 컴퓨터에서 접속하도록 포트 포워딩

kubectl port-forward service{리소스명} 8085:8080

접속 가능하능한 포트를 변경

kubectl delete pod {파드명}

파드는 제거되지만, 레플리카세트에 의해 복구되어 다른 파드가 실행된다.

kubectl describe deployment {리소스명}

디플로이먼트의 정보를 확인할 수 있다

kubectl get replicaset

레플리카세트의 정보를 확인할 수 있다

kubectl delete replicaset {레플리카세트명}

이 명령을 통해 레플리카 세트를 제거할 수 있지만 파드와 마찬가지로 레플리카 세트는 계속 존재한다
디플로이먼트가 레플리카 세트를 만들어주기 때문이다.

kubectl edit deployment {리소스명}

이 명령을 통해 리소스(디플로이먼트)의 정보를 수정할 수 있다
레플리카 세트의 갯수도 바꿀 수 있다

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

유익한 글 잘 봤습니다, 감사합니다.

답글 달기