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

 

# 쿠버네티스 컴포넌트

<출처 :&nbsp; https://kubernetes.io/ko/docs/concepts/overview/components/ >
<출처 : https://arisu1000.tistory.com/27827>

 

# 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 은 도커허브에 있는 이미지 사용

< spec image : https://hub.docker.com/r/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

+ Recent posts