01. Java
02. git
03. Database
04. Jsp [Server]
05. HTML,CSS
07. JS
06. 미니프로젝트-2W
08. SpringFramework , SrpingBoot
19. 중간프로젝트 (1M)
10. Linux 명령어
11. AWS
12. Docker
13. Kubernetes(v)
14. React JS [Front-end]
15. App - Android
16. 최종프로젝트 (1M)
컨테이너화된 애플리케이션을 자동으로 배포, 확장 관리해주는 오픈소스 플랫폼
인프라/네트워크 엔지니어링 기술
개발자가 작성한 애플리케이션을 컨테이너화함
운영에 필요한 인프라 자동화를 대신 처리
개발자가 직접 자신의 코드를 배포하고 운영
쿠버네티스 주요 구성 요소
클러스터
: 여러 대의 서버(노드) 집합노드
: 컨테이너가 실제 실행되는 서버파드(Pod)
: 하나 이상의 컨테이너를 묶은 최소 배포 단위디플로이먼트
: 파드의 생성과 업데이트를 관리하는 객체
롤링
: 서비스를 중단하지 않고(무중단) 새 버전으로 교체하는 전략롤백
: 특정 버전으로 되돌리는 전략
서비스
: 파드에 안정적으로 접근할 수 있게 하는 네트워크 추상화
- 파드 IP가 변해도 서비스는 변하지 않는 고정된 IP와 DNS를 보장하여 안정적으로 접근 가능하게함
- 트래픽(요청)을 여러 파드에 분산(로드밸런싱)시켜 안정적이게 함
볼륨
: 데이터 저장소, 컨테이너 데이터 영속성 보장
- 파드가 재시작되거나 컨테이너가 재생성되어도 데이터를 유지할 수 있음
apiVersion: v1 kind: Pod metadata: name: webapp # 프로젝트명칭 이름 labels: app: webapp release: "0" # 버전명 추가 spec: containers: - name: webapp image: coding404/k8s-coding404-webapp-react:v0 --- apiVersion: v1 kind: Pod metadata: name: webapp-v-0-1 # 프로젝트명칭 변경 labels: app: webapp release: "0-1" # 버전명 추가 spec: containers: - name: webapp image: coding404/k8s-coding404-webapp-react:v0-1 # 버전변경
apiVersion
: 이 리소스가 사용할 쿠버네티스 API 버전kind
: 생성할 리소스의 유형metadata
: 리소스의 식별자 정보를 정의하는 블록
name
: 생성될 파드의 이름으로 클러스터 내에서 고유해야 함labels
: 서비스에서 매칭시 필요
app
: 라벨의 이름을 정의하는 곳release
: 버전 관리용 태그로 같은 앱내에서 버전별 구분이 가능
spec
: 파드의 구체적인 실행 사양을 정의하는 부분
containers
: 이 파드 안에서 실행될 컨테이너 목록으로 최소 1개 이상 필요- name
: 이 컨테이너의 이름으로 pod내에서만 고유하면 됨
image
: 이 컨테이너가 실행할 Docker 이미지
- 서비스는 이런 파드들의 **고정된 접근 지점(가상 IP 또는 DNS이름)**을 제공
# first-service.yaml apiVersion: v1 kind: Service metadata: name: coding404-webapp spec: selector: app: webapp # 파드의 label을 가르킴 release: "0" ports: - name: http # 이름 port: 80 #서비스 자체의 포트번호 targetPort: 80 # 뒤에 연결된 pod컨테이너의 포트번호 (만약 생략하면 port와 동일한 값을 가지게 됨) nodePort: 30080 type: NodePort # 외부에서 접근이 가능 함 (ports 속성에 nodePort 번호를 작성) # type: ClusterIP # 외부에서 접근하지 못하게 함 (내부 서비스들끼리만 참조할 수 있음)
kind: Service
: 이 리소스의 종류는 Service임metadata
: 리소스의 메타정보 정의
name
: 이 리소스의 이름 정의
spec
: Service의 구체적인 동작 방식을 정의
selector
: 이 서비스가 트래픽을 전달한 파드들을 선택하는 기준
app
: 트래픽을 전달한 파드의 라벨 이름을 지정하는 곳release
: 트래픽을 전달한 파드의 버전
ports
: 외부와 파드 사이의 포트 연결관계 정의
- name
: 포트의 이름port
: 클라이언트가 접근할 서비스의 포트targetPort
: 실제 파드 컨테이너에서 동작하는 포트nodePort
: 노드 외부에서 접근시 사용할 포트