쿠버네티스 아키텍쳐

물리적인 시스템 ( 클러스터 구성 노드 )

  • 컨트롤플레인(=마스터)
    클러스터 환경을 관리하는 역할
  • 노드(=워커/=미니언)
    컨테이너 실행(동작)

마스터용 컴포넌트

kube-apiserver

-> 각 컴포넌트 간에 통신 지원 (컨트롤 플레인의 프론트 엔드)

kube-scheduler 

-> 각 노드 별 컨테이너(오브젝트)를 배치
	조건
	* 어피니티(afinity) 
	* 안티 어피니티(anti-afinity)
    * 하드웨어 요구 사항
	* 특정 데이트가 있는 노드에 할당

etcd

-> 쿠버네티스 클러스터 구성 정보들을 보관하는 저장소

	* 클러스터링 
		-여러 대의 컴퓨터를 연결 해 하나의 시스템처러 만드는 것 

kube-controller-manager(컨트롤 플레인)

-> 컨테이너 관리 시 컨트롤러 이용해서 관리 

cloud-controller-manager 

-> 클라우드 환경에서 쿠버네티스를 운영할 때 필요
-> 클라우드에서 관리하는 컴포넌트 
	- 노드 컨트롤러 
	- 라우터 컨트롤러 
    - 서비스 컨트롤러
    - 볼륨 컨트롤러

노드용 컴포넌트

kublet(노드)

-> 컨테이너(오브젝트) 생성/관리

(내부적으로 컨테이너 런타임을 통해 관리하도록 지시)

 kube-proxy 

-> 컨테이너(오브젝트) 들이 통신 가능하도록 네트워크 환경 구성/제공

컨테이너 런타임 

-도커(Docker) , Containerd , runc  

addons

: 쿠버네티스에서 필요로 하는 기능을 실행하는 파드
| dns | 대시보드 | 모니터링 | 로깅
dns - 내부적인(컨테이너) DNS 서비스 제공

object

쿠버네티스 내부에서 사용되는 각종 객체들을 지칭
오브젝트 정의 방식은 명령어/템플릿(YAML) -> 명령형/선언형
ex) 파드, 서비스, 볼륨, 네임스페이스

Controller

파드를 포함한 오브젝트를 관리하는 관리도구를 총칭
ex) 레플리케이션 컨트롤러, 레플리카셋, 디플로이먼트 , 데몬 셋, 스테이트풀셋

Namespace

운영체제에서 각종 리소스들을 관리하기 위한 도구로 사용
격리 기능을 제공
리소스 할당량 조정

Pod

개념 : 컨테이너를 관리하는 최소 단위
컨테이너 하나 이상
사이드카 방식(메인+서브) , 엠베서더 방식(메인+프록시) , 어댑터 방식(외부노출)
일반적으로는 컨트롤러를 통해 관리
컨테이너들의 자원 공유 영역
접근 시에는 파드 단위로 접근 ( IP주소 하나)

-구성방식

-생성/관리/삭제

-라이프사이클
pending -> Running -> succeeded / Failed

​ (스케일 / 이미지다운로드) (노드할당 및 생성) (모두 실행 완료 / 실패)

-probe : 파드(컨테이너)의 상태를 확인해주는 개체
livenessProbe : 컨테이너가 동작 중인 지를 확인 (지속적)
readinessProbe : 사용자가 실제로 서비스를 요청할 때 응답 가능한지 확인
startupProbe : 어플리케이션 시작 여부 확인 , 다른 프로브보다 먼저 확인


kubectl 후 탭키 두번 누르면 자동완성 [ bash쉘 등록했기 때문에 사용 가능 completion]
세번은 메뉴 구성

kubectl completion bash > /etc/bash_completion

kubectl completion bash > /etc/bash_completion/kubectl

kubectl 명령어 사용법

​ kubectl [동작][오브젝트 종류] [대상이름][옵션]

kubectl run echoserver --image="k8s.gcr.io/echoserver:1.10" --port=8080
kubectl get pods
kubectl expose pods echoserver --type=NodePort 
root@controll-plane:~# kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
echoserver   NodePort    10.233.61.51   <none>        8080:31709/TCP   29s
root@controll-plane:~# curl 192.168.56.11:31709


Hostname: echoserver

Pod Information:
	-no pod information available-

Server values:
	server_version=nginx: 1.13.3 - lua: 10008

Request Information:
	client_address=10.233.99.0
	method=GET
	real path=/
	query=
	request_version=1.1
	request_scheme=http
	request_uri=http://192.168.56.11:8080/

Request Headers:
	accept=*/*
	host=192.168.56.11:31709
	user-agent=curl/7.58.0

Request Body:
	-no body in request-
kubectl api-resources	
kubectl api-versions

version 내용에 뜨는 alpha , beta에 관한 정보는 https://v1-18.docs.kubernetes.io/ko/docs/reference/using-api/api-overview/ 에서 확인할 수 있다.

kubectl explain pods
kubectl explain pods.metadata
kubectl explain pods.metadata.name
### 다음과 같은 형식으로 찾아 볼 수 있다

vim test.yml

apiVersion: v1
kind: Pod
metadata:
  name: kubernetes-simple-pod
  labels:
    app: kubernetes-simple-pod
spec:
  containers:
   - name: kubernetes-simple-pod
     image: arisu1000/simple-container-app:latest
     ports:
      - containerPort: 8080

kubectl describe pods kubernetes-simple-pod
kubectl describe pods kubernetes-simple-pod -o json

kubectl apply -f test.yml

  • yml 적용

kubectl delete -f test.yml

  • pods delete로 지우지 않아도 이렇게 하면 yml안에있는 오브젝트 삭제

https://v1-18.docs.kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

profile
greatness

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN