수업내용
Part 1. 쿠버네티스 시작하기
- 쿠버네티스 소개
- 쿠버네티스 설치하기
- 쿠버네티스로 컨테이너 실행하기
Part 2. 쿠버네티스 기본 개념
- 쿠버네티스 아키텍처
파드
- 컨트롤러
- 서비스
- 인그레스
- 레이블과 애너테이션
- 컨피그맵
- 시크릿
Part 3. 쿠버네티스 한 걸음 더 들어가기
- 파드 스케쥴링
- 인증과 권한관리
- 데이터 저장
- 클러스터 네트워킹 구성
- 쿠버네티스 DNS
- 로깅과 모니터링
- 오토스케일링
- 사용자 정의 자원
- 쿠버네티스 기반으로 워드프레스 앱 실행하기
- 헬름
Pod의 환경변수 설정하기
환경변수
- Pod내의 컨테이너가 실행될 때 필요로 하는 변수
- 컨테이너 제작 시 미리 정의
- NGINX Dockerfile의 예
- ENV NGINX_VERSION 1.19.2
- ENV NJS_VERSION 0.4.3
- NGINX Dockerfile의 예
- POD 실행 시 미리 정의된 컨테이너 환경변수를 변경할 수 있다.
환경변수 사용 예
- pod-nginx-env.yaml
```
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-env
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80 protocol: TCP env:
- name: MYVAR value: “testvalue” ```
- name: nginx-container
image: nginx:1.14
ports:
kubectl get pods
kubectl exec nginx-pod-env --env
환경변수 실습
- pod 전체 삭제
kubectl delete pods --all
- pod yaml 작성
# 기존 pod yaml 활용
cat > pod-nginx-resources.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-env
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
env:
- name: MYVAR
value: "testvalue"
resources:
requests:
memory: 500Mi
cpu: 200m
- pod 생성
kubectl create -f pod-nginx-resources.yaml
- nginx-pod-env에 bashshell로 접속
kubectl exec nginx-pod-env -it -- /bin/bash
- [nginx-pod-env 컨테이너] 환경변수 조회후 생성한 환경변수 조회
- 명령어 실행 결과
master@master:~$ kubectl exec nginx-pod-env -it -- /bin/bash root@nginx-pod-env:/# env HOSTNAME=nginx-pod-env NJS_VERSION=1.14.2.0.2.6-1~stretch NGINX_VERSION=1.14.2-1~stretch KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 MYVAR=testvalue KUBERNETES_PORT=tcp://10.96.0.1:443 PWD=/ HOME=/root KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 TERM=xterm SHLVL=1 KUBERNETES_SERVICE_PORT=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_SERVICE_HOST=10.96.0.1 _=/usr/bin/env
Pod 구성패턴의 종류 3가지
POD 실행패턴
- Pod를 구성하고 실행하는 패턴
- multi-container Pod
1. 사이드카 패턴 (Sidecar Pattern)
설명: 사이드카 패턴은 주 애플리케이션 컨테이너와 함께 보조 기능을 제공하는 컨테이너를 동일한 파드 내에 배치하는 패턴입니다. 보조 컨테이너는 주 컨테이너의 기능을 확장하거나 지원하는 역할을 합니다.
사용 예: 로그 수집, 데이터 동기화, 프록시 설정, 모니터링 에이전트
구현 예시: 주 애플리케이션 컨테이너와 로그 수집 컨테이너를 함께 배포하는 경우
apiVersion: v1
kind: Pod
metadata:
name: sidecar-example
spec:
containers:
- name: main-app
image: main-app-image:latest
- name: log-collector
image: log-collector-image:latest
volumeMounts:
- name: shared-logs
mountPath: /var/log/app
volumes:
- name: shared-logs
emptyDir: {}
2. 어댑터 패턴 (Adapter Pattern)
설명: 어댑터 패턴은 기존 시스템과 새로운 시스템 간의 인터페이스를 맞추기 위해 중간에 배치되는 컨테이너를 사용하는 패턴입니다. 어댑터 컨테이너는 데이터 형식 변환, 프로토콜 변환 등을 수행합니다.
사용 예: 레거시 시스템과의 통합, 데이터 형식 변환, 프로토콜 브리징
구현 예시: 레거시 시스템과 RESTful API 간의 데이터를 변환하는 어댑터를 배포하는 경우
apiVersion: v1
kind: Pod
metadata:
name: adapter-example
spec:
containers:
- name: legacy-system
image: legacy-system-image:latest
- name: adapter
image: adapter-image:latest
ports:
- containerPort: 8080
3. 앰배서더 패턴 (Ambassador Pattern)
설명: 앰배서더 패턴은 주 애플리케이션 컨테이너와 외부 서비스 간의 통신을 처리하는 프록시 역할을 하는 컨테이너를 사용하는 패턴입니다. 앰배서더 컨테이너는 외부 서비스와의 통신을 관리하고, 보안, 로깅, 모니터링 등의 추가 기능을 제공합니다.
사용 예: 외부 서비스와의 통신 관리, 트래픽 라우팅, 보안, 로깅, 모니터링
구현 예시: 외부 데이터베이스 서비스와의 통신을 관리하는 앰배서더 컨테이너를 배포하는 경우
apiVersion: v1
kind: Pod
metadata:
name: ambassador-example
spec:
containers:
- name: main-app
image: main-app-image:latest
- name: ambassador
image: ambassador-image:latest
env:
- name: DATABASE_URL
value: "jdbc:mysql://external-database:3306/mydb"
ports:
- containerPort: 3306
Pod 강의 총정리(5장)
학습내용
- Pod 개념 및 사용하기
- livenessProbe를 사용한 self-healing Pod
- init container
- infra container(pause) 이해하기
- static pod 만들기
- Pod에 resource 할당하기
- 환경변수를 이용해 컨테이너에 데이터 전달하기
- pod 구성 패턴의 종류
Pod 운영 실습
Quize1
- Create a static pod on node01 called mydb with image redis.
- Create this pod on node01 and make sure that it is recreated/restarted automatically in case of a failure.
- Use/etc/kubernetes/manifests as the Static Podpath for example.
- kubelet Configured for Static Pod
- Pod mydb-node01 is Up and running
Quize2
- 다음과 같은 조건에 맞는 Pod를 생성하시오
- Pod name: myweb, image:nginx:1.14
- CPU200m, Memory 500Mi를 요구하고, CPU 1core, 1Gi제한받는다.
- Application 동작에 필요한 환경변수 DB=mydb 를 포함한다.
- namespace product에서 동작되어야 한다.
Quize1 풀이과정
- node1 접속
- node1의 /etc/kubernetes/manifests경로 이동
- 해당 경로에 mydb.yaml 파일 작성
```yaml
apiVersion: v1
kind: Pod
metadata:
name: mydb-node01
spec:
containers:
- image: redis name: mydb ```
Quize2 풀이과정
- product namespace생성
kubectl create namespace product
- myweb.yaml파일 작성
```
apiVersion: v1
kind: Pod
metadata:
name: myweb
namespace: product
spec:
containers:
- name: nginx
image: nginx:1.14
env:
- name: DB value: “mydb” resources: requests: memory: “500Mi” cpu: “200m” limits: memory: “1Gi” cpu: “1” ```
- name: nginx
image: nginx:1.14
env:
- pod 생성 확인
master@master:~$ kubectl create -f myweb.yaml pod/myweb created master@master:~$ kubectl get pods -n product NAME READY STATUS RESTARTS AGE myweb 1/1 Running 0 2m56s