본문 바로가기
반응형

전체 글116

[k8s]Kubernetes - Controller/ReplicationController Controller란 Pod의 개수를 보장 스케줄러는 파드를 노드에 알맞게 배치, 컨트롤러는 파드의 개수를 보장 컨트롤러가 보장중인 파드 중 한개가 다운되어 수가 적어질 경우 컨트롤러가 파드를 하나 생성하여 보장 개수를 맞춰줌 보장하는 Pod의 구분은 레이블을 이용 Controller 종류 Replication Controller 가장 기본적인 컨트롤러 요구하는 Pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표로 함 요구하는 Pod의 개수가 부족하면 template를 이용해 Pod를 추가 요구하는 Pod의 수 보다 많으면 최근에 생성된 Pod를 삭제 기본 구성 selector replicas template selector의 key: value에 해당하는 레이블을 갖는 컨테.. 2023. 2. 21.
[k8s]Kubernetes - Pod 환경 변수 & 구성 패턴 환경변수 Pod내의 컨테이너가 실행될 때 필요로 하는 변수 컨테이너 제작 시 미리 정의 NGINX Dockerfile의 예 ENV(환경변수) [환경변수 이름] [환경변수 값] ENV NGINX_VERSION 1.19.2 ENV NJS_VERSION 0.4.3 Pod 실행 시 미리 정의된 컨테이너 환경변수를 변경할 수 있음 미리 정의된 환경변수를 입력한 기존의 환경변수 값으로 변경 미리 정의된 환경변수를 입력한 새로운 환경변수 값으로 변경 환경변수 사용 예 환경변수 변경 여러개 작성 가능 Pod 구성 패턴의 종류 Pod를 구성하고 실행하는 패턴 multi-container Pod Sidecar Pod, Sidecar Container 단독으로 혼자서 움직일 수 없는 pod의 형태 웹 서버 컨테이너의 로그를.. 2023. 2. 20.
[k8s]Kubernetes - Pod에 Resource 할당하기 Pod에 리소스(cpu, memory) 할당하기 pod에 리소스 제한을 하지 않으면 하나의 pod가 노드의 리소스를 전부 다 사용할 수도 있음 같은 노드의 다른 pod는 사용할 리소스가 없을 수 있음 특정 pod가 해킹당해 리소스를 다 잡아먹으면 다른 pod가 제대로 동작을 못하는 상황이 발생할 수 있음 Pod 리소스 요청 및 제한 Resource Requests 파드를 실행하기 위한 최소 리소스 양을 요청 Resource Limits 파드가 사용할 수 있는 최대 리소스 양을 제한 Memory limit을 초과해서 사용되는 파드는 종료(OOM Kill)되며 다시 스케줄링 됨 Resource 단위 memory Gib, Mib, Kib 등으로 표현 1Gib = 1024Mib, 1Mib = 1Kib CPU c.. 2023. 2. 20.
[k8s]Kubernetes - static pod(kubelet daemon) static Pod 특정 노드의 kubelet daemon에 의해 동작되는 Pod API에게 요청 보내지 않음 kubelet daemon이 관리하는 static pod directory(dir/)에 yaml파일을 저장하면 알아서 컨테이너 실행하고 yaml 파일 지우면 알아서 컨테이너 삭제 보통 /etc/kubernetes/manifests/ 디렉토리가 static pod 디렉토리 노드의 /var/lib/kubelet/config.yaml 파일안에서 static pod 디렉토리 확인 가능 /var/lib/kubelet/config.yaml 파일안의 static pod 디렉토리 수정시 kubelet deamon은 restart 필수 스케줄러가 pod를 생성할 노드를 정해주는 것이 아닌 사용자가 직접 지정 가.. 2023. 2. 17.
[k8s]Kubernetes - init/infra container init container 앱 컨테이너 실행 전에 미리 동작시킬 컨테이너 본 컨테이너가 실행되기 전에 사전 작업이 필요한 경우 사용 로그인 컨테이너가 실행되기 전 db에 접속하여 내용을 받아오는 사전 작업이 필요한 경우 앱을 실행하기 전에 네트워크 점검이 필요한 경우 등 init container가 모두 실행된 후에 앱 컨테이너를 실행 init container example init-myservice, init-mydb라는 init container와 myapp-container라는 메인 컨테이너를 만드는 yaml파일 메인 컨테이너는 init container가 모두 실행되어야 실행 init-myservice, init-mydb는 제대로 동작되지 않으면 계속 'wating for myservice'라는.. 2023. 2. 16.
[k8s]Kubernetes - Liveness Probe(Self-healing Pod) Liveness Probe Pod가 계속 실행할 수 있음을 보장 Pod의 Spec에 정의 주기적으로 80포트에 접속 응답이 나오면 건강한 컨테이너로 판단 응답이 나오지 않으면 건강하지 않는 컨테이너로 판단 Liveness Probe 매커니즘 httpGet probe 웹 서비스를 하는 컨테이너에 해당 지정한 IP주소, port, path에 HTTP GET 요청을 주기적으로 보내 해당 컨테이너가 응답하는지 확인 반환코드가 200이 아닌 값이 나오면 오류 연속으로 세번 오류가 발생하면 컨테이너 죽임 도커 hub에서 건강한 새 컨테이너를 받아 컨테이너 다시 시작 tcpSocket probe sshd 서비스를 하는 컨테이너에 해당 지정된 포트에 TCP연결을 시도 연속으로 세번 연결되지 않으면 컨테이너 죽임 hub.. 2023. 2. 15.
[k8s]Kubernetes-Pod동작flow Pod 동작 flow '웹 서버 컨테이너 실행해줘' 명령 요청 API에 Pod형태로 전달 API가 문법이 제대로 된 문법인지 점검 Pod API 포맷에 맞는 정보가 입력되었는지 점검 etcd에서 노드 정보를 받아 스케줄러에 전달 스케줄러가 어느 노드에서 실행할지 선택 Pod는 스케줄링을 받을 때, Pending 상태 Pod를 노드에 배치 Pod는 노드를 배치 받으면 Running 상태 Pod가 배치 완료되면 Succeeded, 실패하면 Failed Pod 관리하기 동작중인 파드 정보 보기 kubectl get pods kubectl get pods --all-namespaces kubectl get pods -o wide kubectl describe pod webserver 동작중인 파드 수정 kube.. 2023. 2. 14.
[k8s] single/multi-container Pod Container 정리 컨테이너 사용 과정 애플리케이션 생성 컨테이너 빌드 저장소(hub)에 push 도커 플랫폼에 컨테이너를 올려 사용 컨테이너 하나 = 애플리케이션 하나 Pod 란? 컨테이너를 표현하는 k8s API의 최소 단위 API에서 컨테이너 동작은 불가능 Pod에는 하나 또는 여러개의 컨테이너가 포함될 수 있음 Pod 생성하기 kubectl run 명령(CLI)으로 생성 kubectl run webserver --image=nginx:1.14 pod yaml을 이용해 생성 kubectl create -f pod-nginx.yaml Multi-container Pod 생성하기 두개의 컨테이너 정보를 포함한 yaml파일 생성 kubectl create -f pod-multi.yaml 생성된 pod.. 2023. 2. 13.
[k8s]Kubernetes yaml 템플릿 & API yaml 템플릿 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식 기본 문법 구조화된 데이터를 표현하기 위한 데이터 포맷 Python처럼 들여쓰기로 데이터 계층을 표기 들여쓰기를 할 때에는 Tab이 아닌 Space Bar를 사용 가독성이 좋아 설정 파일에 적합한 형식 Scalar문법: ':'을 기준으로 key:value를 설정 배열 문법: '-'문자로 여러개를 나열 kubernetes yam example cat nginx-pod.yaml apiVersion:v1과 kind: pod가쿠버네티스용 문법임 API version alpha -> beta -> stable kubernetes Object 정의 시 apiVersion이 필요 kubernetes가 update하는 API가 있으면 새로운 API가 생성됨.. 2023. 2. 13.
[k8s]Kubernetes namespace k8s namespace k8s api 종류 중 하나 물리적인 클러스터 하나를 여러 개의 논리적인 단위로 나눠서 사용 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유 용도에 따라 실행해야 하는 앱을 구분할 때 사용 수 많은 pod를 용도에 따라 논리적으로 분류하여 활용하는 방법 통합솔루션에서 Example 롯데에서 클러스터 하나를 롯데 홈쇼핑, 백화점, 면세점에서 나눠서 사용한다고 가정 클러스터를 3개의 namespace로 구분하여 각 회사에 할당 blue (API - Pod - Service - P.V) -> 롯데 홈쇼핑 orange (API - Pod - Service - P.V) -> 롯데 백화점 green (API - Pod - Service - P.V) -> 롯데 면세점 네임스페이스 .. 2023. 2. 10.
[k8s]Kubernets 아키텍처 - 동작 원리 & 컴포넌트 쿠버네티스에서 컨테이너 동작 Flow 사용 주체 개발자 운영자 동작 순서 컨테이너 빌드 main ui container, log in container, pay container 등 저장소에 컨테이너 이미지 push 사내 저장소, docker hub 등 사용 주체가 명령어를 통해 control-plane에 컨테이너 실행 요청 명령어: CLI(kubectl), yaml 등 control-plane의 rest api server에서 요청을 받아 어느 노드에 컨테이너를 배치할지 스케줄러에게 요청 control-plane의 스케줄러가 노드의 상태를 보고 적합한 노드를 선택해 rest api server에게 응답 control-plane의 rest api server가 응답 받은 내용을 실행할 노드의 kubele.. 2023. 2. 10.
[k8s]kubectl실습(command, pod 생성) command 살펴보기 command 정보 kubectl --help command 정보 표시 kubectl [command] --help 해당 command 설명 예시 및 옵션 정보 또한 제공 object 정보 kubectl api-resources object 정보(목록, 약어 등) 표시 노드 정보 kubectl get nodes 노드 정보 kubectl get nodes -o wide 노드 정보 상세히 kubectl describe node [name] 해당 노드의 더욱 상세한 정보 여러 방법으로 nginix pod 생성하기 run으로 pod 생성 pod 생성 kubectl run webserver --image=nginx:1.14 --port 80 run은 컨테이너 하드를 만드는 command w.. 2023. 2. 8.
반응형