728x90
반응형
# 쿠버네티스의 이해
- 쿠버네티스는 컨테이너 오케스트레이션(Orchestration)이란 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공. 다수의 컨테이너를 유기적으로 연결, 실행, 종료할 뿐만 아니라 상태를 추적하고 보존하는 등 컨테이너를 안정적으로 사용할수 있게 만들어 주는것
# kubectl get nodes
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
m-k8s Ready master 2d4h v1.18.4
w1-k8s Ready <none> 2d4h v1.18.4
w2-k8s Ready <none> 2d3h v1.18.4
w3-k8s Ready <none> 2d3h v1.18.4
# kubectl get pods --all-namespaces
# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-99c9b6f64-f2hgs 1/1 Running 7 2d4h
kube-system calico-node-5j69x 1/1 Running 12 2d4h
kube-system calico-node-c4grb 1/1 Running 11 2d3h
kube-system calico-node-dmlgz 1/1 Running 10 2d3h
kube-system calico-node-r5w6f 1/1 Running 7 2d4h
kube-system coredns-66bff467f8-26xcv 1/1 Running 7 2d4h
kube-system coredns-66bff467f8-b5v8m 1/1 Running 7 2d4h
kube-system etcd-m-k8s 1/1 Running 7 2d4h
kube-system kube-apiserver-m-k8s 1/1 Running 8 2d4h
kube-system kube-controller-manager-m-k8s 1/1 Running 14 2d4h
kube-system kube-proxy-b48gp 1/1 Running 11 2d3h
kube-system kube-proxy-b8sl2 1/1 Running 11 2d4h
kube-system kube-proxy-c4frz 1/1 Running 7 2d4h
kube-system kube-proxy-jdsdn 1/1 Running 10 2d3h
kube-system kube-scheduler-m-k8s 1/1 Running 17 2d4h
kubernetes-dashboard dashboard-metrics-scraper-68fc77645b-lxhkc 1/1 Running 5 24h
kubernetes-dashboard kubernetes-dashboard-7f9d757bdb-k4h6l 1/1 Running 5 24h
# 쿠버네티스 컴포넌트
# Master Node
- kubectl : 쿠버네티스 클러스터에 명령을 내리는 역할.
- API 서버 : 쿠버네티스 클러스터의 중심 역할을 하는 통로
- etcd : 구성 요소들의 상태값이 모두 저장되는 곳
- 컨트롤러 매니저(c-m) : 쿠버네티스 클러스터의 오브젝트 상태를 관리(워크노드 통신이 안되는 경우 상태 체크와 복구는 컨트롤러 매니저에 속한 노트 컨트롤러에서 이루어짐
- 스케줄러(sched) : 노드의 상태와 자원, 레이블, 요구 조건 등 고려해 파드를 어떤 워커 노드에 생성할것인지 결정
# Work Node
- kubelet : 파드의 구성내용(PodSpec)을 받아서 컨테이너 런타임으로 전달하고, 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링 (파드의 상태를 관리 # systemctl start kubelet
- 컨테이너 런타임(CRI, Continer Runtime Interface) : 파드를 이루는 컨테이너의 실행을 담당
- 파드(pod) : 한 개이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위(컨테이너의 묶음)
# 파드의 상태관리와 통신관리
- kubelet : 파드의 생성과 상태 관리 및 복구
- kube-proxy : 파드의 통신을 담당
# 파드의 생성 과 관리
# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest b690f5f0a2d5 3 months ago 187MB
nginx stable 3a8963c304a2 10 months ago 142MB
# (그냥 파드로 생성)
# kubectl run nginx-pod --image=nginx
# (deployment 파드로 생성)
# kubectl create deployment dpy-nginx --image=nginx
# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 5m30s
dpy-nginx-c8d778df-4tsmz 1/1 Running 0 4m59s
# kubectl scale pod nginx-pod --replicas=3
Error from server (NotFound): the server could not find the requested resource
(일반 파드로 생성되었기 때문에 deployment replicas 명령이 안먹힘)
# kubectl scale deployment dpy-nginx --replicas=3
(deployment 파드로 생성되었기 때문에 deployment replicas 명령이 먹힘)
# kubectl get pods
NAME READY STATUS RESTARTS AGE
dpy-nginx-c8d778df-4tsmz 1/1 Running 0 16m
dpy-nginx-c8d778df-6qzjj 1/1 Running 0 77s
dpy-nginx-c8d778df-mtwsz 1/1 Running 0 77s
nginx-pod 1/1 Running 0 17m
# 스펙을 지정해 오브젝트 생성하기 (야믈)
# cat echo-hname.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-hname
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: echo-hname
image: sysnet4admin/echo-hname
# 야믈 파일실행
# kubectl create -f echo-hname.yaml
deployment.apps/echo-hname created
# kubectl get pods
NAME READY STATUS RESTARTS AGE
echo-hname-7894b67f-cndkd 1/1 Running 0 44s
echo-hname-7894b67f-gbxk5 1/1 Running 0 44s
echo-hname-7894b67f-tv7rs 1/1 Running 0 44s
nginx-pod 1/1 Running 0 30m
- 야믈 파일의 image : sysnet4admin/echo-hname 은 도커허브에 있는 이미지 사용
# 스펙의 오브젝트를 변경하려고 할때
# pod의 갯수를 6개로 변경하여 다시 생성
(아래 spec: replicas 3 ---> 6으로 변경후)
# cat echo-hname.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-hname
labels:
app: nginx
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: echo-hname
image: sysnet4admin/echo-hname
# kubectl create -f echo-hname.yaml
Error from server (AlreadyExists): error when creating "echo-hname.yaml": deployments.apps "echo-hname" already exists
# 파드 갯수가 3개에서 6개로 적용이 안됨
# kubectl apply -f echo-hname.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
deployment.apps/echo-hname configured
# kubectl get pods
NAME READY STATUS RESTARTS AGE
echo-hname-7894b67f-cndkd 1/1 Running 0 7m4s
echo-hname-7894b67f-frrrl 1/1 Running 0 38s
echo-hname-7894b67f-gbxk5 1/1 Running 0 7m4s
echo-hname-7894b67f-s9pv4 1/1 Running 0 38s
echo-hname-7894b67f-trwcb 1/1 Running 0 38s
echo-hname-7894b67f-tv7rs 1/1 Running 0 7m4s
nginx-pod 1/1 Running 0 37m
오브젝트 생성 명령어 비교
구분 | Run | Create | Apply |
명령 실행 | 제한적임 | 가능함 | 안됨 |
파일 실행 | 안 됨 | 가능함 | 가능함 |
변경 가능 | 안 됨 | 안 됨 | 가능함 |
실행 편의성 | 매우 좋음 | 매우 좋음 | 좋음 |
기능 유지 | 제한적임 | 지원됨 | 다양하게 지원 |
파드의 내부 접속 방법
# kubectl get pods
NAME READY STATUS RESTARTS AGE
echo-hname-7894b67f-cndkd 1/1 Running 0 14m
echo-hname-7894b67f-frrrl 1/1 Running 0 7m41s
echo-hname-7894b67f-gbxk5 1/1 Running 0 14m
echo-hname-7894b67f-s9pv4 1/1 Running 0 7m41s
echo-hname-7894b67f-trwcb 1/1 Running 0 7m41s
echo-hname-7894b67f-tv7rs 1/1 Running 0 14m
nginx-pod 1/1 Running 0 44m
# kubectl exec -it echo-hname-7894b67f-cndkd -- /bin/bash
root@echo-hname-7894b67f-cndkd:/# exit
exit
# kubectl exec -it nginx-pod -- /bin/bash
root@nginx-pod:/# exit
exit
# 파드의 삭제
# nginx-pod는 삭제, echo-hname-xx 는 삭제후 재생성됨
# kubectl delete pods nginx-pod
# kubectl delete pods echo-hname-7894b67f-tv7rs
# kubectl get pods
NAME READY STATUS RESTARTS AGE
echo-hname-7894b67f-c4pxc 1/1 Running 0 36s
echo-hname-7894b67f-cndkd 1/1 Running 1 15h
echo-hname-7894b67f-frrrl 1/1 Running 1 14h
echo-hname-7894b67f-gbxk5 1/1 Running 1 15h
echo-hname-7894b67f-s9pv4 1/1 Running 1 14h
echo-hname-7894b67f-trwcb 1/1 Running 1 14h
# echo-hname 완전 삭제
# kubectl delete deployments.apps echo-hname
728x90
반응형
LIST
'kubernetes' 카테고리의 다른 글
Kubernetes 연결을 담당하는 서비스 (1) | 2024.02.13 |
---|---|
Prometheus 설명 (0) | 2024.02.12 |
centos7에서 docker 재설치(missing signature key) (0) | 2024.02.04 |