물리적인 시스템 ( 클러스터 구성 노드 )
kube-apiserver
-> 각 컴포넌트 간에 통신 지원 (컨트롤 플레인의 프론트 엔드)
kube-scheduler
-> 각 노드 별 컨테이너(오브젝트)를 배치
조건
* 어피니티(afinity)
* 안티 어피니티(anti-afinity)
* 하드웨어 요구 사항
* 특정 데이트가 있는 노드에 할당
etcd
-> 쿠버네티스 클러스터 구성 정보들을 보관하는 저장소
* 클러스터링
-여러 대의 컴퓨터를 연결 해 하나의 시스템처러 만드는 것
kube-controller-manager(컨트롤 플레인)
-> 컨테이너 관리 시 컨트롤러 이용해서 관리
cloud-controller-manager
-> 클라우드 환경에서 쿠버네티스를 운영할 때 필요
-> 클라우드에서 관리하는 컴포넌트
- 노드 컨트롤러
- 라우터 컨트롤러
- 서비스 컨트롤러
- 볼륨 컨트롤러
kublet(노드)
-> 컨테이너(오브젝트) 생성/관리
(내부적으로 컨테이너 런타임을 통해 관리하도록 지시)
kube-proxy
-> 컨테이너(오브젝트) 들이 통신 가능하도록 네트워크 환경 구성/제공
컨테이너 런타임
-도커(Docker) , Containerd , runc
: 쿠버네티스에서 필요로 하는 기능을 실행하는 파드
| dns | 대시보드 | 모니터링 | 로깅
dns - 내부적인(컨테이너) DNS 서비스 제공
쿠버네티스 내부에서 사용되는 각종 객체들을 지칭
오브젝트 정의 방식은 명령어/템플릿(YAML) -> 명령형/선언형
ex) 파드, 서비스, 볼륨, 네임스페이스
파드를 포함한 오브젝트를 관리하는 관리도구를 총칭
ex) 레플리케이션 컨트롤러, 레플리카셋, 디플로이먼트 , 데몬 셋, 스테이트풀셋
운영체제에서 각종 리소스들을 관리하기 위한 도구로 사용
격리 기능을 제공
리소스 할당량 조정
개념 : 컨테이너를 관리하는 최소 단위
컨테이너 하나 이상
사이드카 방식(메인+서브) , 엠베서더 방식(메인+프록시) , 어댑터 방식(외부노출)
일반적으로는 컨트롤러를 통해 관리
컨테이너들의 자원 공유 영역
접근 시에는 파드 단위로 접근 ( 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
kubectl delete -f test.yml