12. Docker-vs-ContainerD

  • 쿠버네티스
  • rkt(로켓)
  • 컨테이너디
  • 도커

컨테이너디 (이하 컨디)

  • 컨테이너디 CIL : ctr
  • 도커링 비슷한 crt이 nerdctl / 범생이ctr
  • 예시
docker
= nerdctl

docker run --name redis redis:alpine
= nerdctl run --name redis redis:alpine

docker run --name webserver -p 80:80 -d nginx
= nerdctl run --name webserver -p 80:80 -d nginx

crictl

  • CLI for CRI 호환 컨테이너 런타임
  • 검사하고 디버깅에 사용
  • 컨디 커뮤니티를 위해 작성됨
  • 디버깅툴임! 큐블렛이랑 잘어울림
  • 예시
crictl pull busybox
crictl imges
crictl ps -a
crictl pods << pod 리스트 출력됨

요약

  • ctr : 안씀
  • nerdcrl : 쓸꺼임 dockerCLI 랑 비슷함
  • crictl : 디버깅용으로만 쓰는데, 쿱커뮤니티에서 만든거임

13. ETCD For Beginners

  • etcd 관련 배울점
    • 이게 뭔지
    • key-value 스토어
    • 가볍게 시작하기
    • 써먹는방법
    • 분산시스템
    • RAFT 프로토컬
    • 베스트 프렉티스

ETCD

  • key-value 스토어 형식임 : HashMap 이나 레디스같은거..
  • JSON 이나 YAML 형식 씀
  • etcd 컨트롤 클라이언트 설치해서 쓸수도 있음

ETCD 버전정보

  • v2 랑 v3 랑 차이가 많다
  • 이 명령어로 버전 확인 etcdctl --version
  • ectd 버전3 라도 api 버전2 로 동작도 가능하다

14. ETCD in Kubernetes

etcd 가 쿱에서 어떻게? 어떤 부분에서 사용되나??

nodes
pods
configs
secrets
accounts
roles
bindings
other....
  • 그냥 모든곳에 다쓰이는 근간이라고 할수 있다
  • 쿠버네티스에 뭔가를 하는거가 그냥 etcd 서버에 뭔가를 변경하는거랑 같음
  • etcd 설치하고 싶음 : 깃헙 coreos/etcd 가서 다운받기
$ kubectl get pods -n kube-system

NAME                                              READY   STATUS      RESTARTS   AGE
calico-kube-controllers-@@@@@@@@@@-kzm6v          1/1     Running     1          185d
calico-node-@@@@@                                 1/1     Running     1          185d
coredns-@@@@@@@@@@@@@@                            1/1     Running     3          424d
coredns-secondary--@@@@@@@@@@@@@@@                1/1     Running     2          424d
csi-cinder-controllerplugin-@                     6/6     Running     0          5d7h
csi-cinder-nodeplugin-@@@@@                       3/3     Running     0          5d7h
dns-autoscaler--@@@@@@@@@@@@@@                    1/1     Running     2          424d
dns-autoscaler-secondary-@@@@@@@@@@@@@@@          1/1     Running     2          424d
kube-apiserver-@@@@@@@@@@@@@-master-1             1/1     Running     2          517d
kube-apiserver-@@@@@@@@@@@@@-master-2             1/1     Running     5          517d
kube-apiserver-@@@@@@@@@@@@@-master-3             1/1     Running     3          243d
kube-controller-manager-@@@@@@@@@@@@@-master-1    1/1     Running     22         183d
kube-controller-manager-@@@@@@@@@@@@@-master-2    1/1     Running     15         183d
kube-controller-manager-@@@@@@@@@@@@@-master-3    1/1     Running     16         183d
kube-proxy-@@@@@                                  1/1     Running     0          108d
kube-proxy-@@@@@                                  1/1     Running     0          144d
kube-scheduler-@@@@@@@@@@@@@-master-1             1/1     Running     15         183d
kube-scheduler-@@@@@@@@@@@@@-master-2             1/1     Running     17         183d
kube-scheduler-@@@@@@@@@@@@@-master-3             1/1     Running     21         183d
@@@@@@@-fluent-bit-@@@@@                          1/1     Running     0          179d
local-volume-provisioner-@@@@@                    1/1     Running     4          490d
metrics-server-@@@@@@@@@@-@@@@@                   2/2     Running     1          144d
  • 만들다가 망한 장난감 1호기 뭐가 적혀있는지 찾아봤음

  • HA 구성은 마스터노드 여러개여야함

    • 엣시디 서버도 마스터마다 각각 존재한다는건가?? 궁금함(@@@)

16. Kube-API Server

  • Kube-API Server 가 하는dlf
[kube-apiserver]
- 1) kubectl 명령어 입력받아서
- 2) 유효성 검증하고
- 3) ETCD 클러스터에다가 검색
- 4) ETCD 클러스터에다가 변경사항 업데이트

[master]

[worker code]

[kube-scheduler]
- 5) 스케쥴러가 돌면 kube-apiserver 가 일하게 만듬

[???]
- 6) Kublet : 뭔지모름

==============================
사용자 : kubectl 명령어 입력시

  • 큐브adm 같은걸로 돌리면 이런거 몰라도 되는데
  • 하드웨이로 한땀한땀 구성했으면.. 알고있을꺼다
  • 마스터 하나마다 api-server 하나씩 있음

17 컨트롤러

  • 내가 선언한(원하는) 상태를 유지해줌
    • 지속적으로 모니터링
    • KubeAPI 서버를 통해서
  • 컨트롤러 스페이스
  • 포드 컨트롤러
  • 레플리케이션 컨트롤러
  • 어쩌구저쩌고 다양한 컨트롤러 많음
  • 큐브 컨트롤러 매니져
    • 모든 컨트롤러가 들어있는 서비스임
    • 큐브-컨트롤러-매니져 » 다운로드받아서 뭐 하는 방법이 있긴 함..

18. Kube Scheduler

  • 스케쥴러는 “위치"만을 결정
  • 어떤 포드가 어떤 노드에 배치되어야 하는지만 검증
  • 노드(VM의 쿱 추상) 보고 가장 적당한 노드에다가 배치
  • 관련주제
    • 리소스 requirements, Limits
    • Taints, Tolerantions
    • Node Selector / Affinity

19. Kubelet

  • 배의 선장같음.
선내의 모든 활동을 지휘
무리의 일원이 되기 위해 필요한ㅡ모든 서류를 처리하죠
마스터와의 유일한 연락망
선박에 컨테이너를 싣거나 내립니다
주 운항 일정 관리자의 지시에 따라서요
선박과 컨테이너의 상태를일정 간격으로 보고하죠
쿠베르네테스 워커 노드로 클러스터로 노드를 등록해요
  • 이미지엔진(도커)한테 실행하라고 명령도 큐블렛이 내림
  • 큐벨렛은 포드의 상태와 컨테이너를 계속 모니터링하고 동시에 kube API를 통해서 보고함

20. Kube Proxy

  • 도커 프로세스 돌리면 격리되는게 너무 당연하죠?
  • 근데 쿠버네티스 안에서는 pod(도커 프로세스 같은)끼리는 통신이 원활이 잘 되잖아요? 이게 큐브프록시가 있어서임
  • 모든 포드가 연결되도록 클러스터를 연결시켜주는 네트워크임
  • POD 에 IP 도 할당해줄수 있고, IP 가지고 찾아갈수도 있는데(마치 DNS 같은기능도 있음) IP는 바뀔수 있음
  • IP 바뀌는거 대비해서 쿠버네티스 내부 도메인 스면됨

21. Recap - Pods

  • 포드 : 앱 인스턴스 한개 » 프로스스 하나 , 혹은 jar파일 실행한거 하나라고 보면 됨. (그런데 거기에 도커프로세스를 얹은)
  • 포드랑 앱 인스턴스랑은 1:1 관계이어야만 함
  • 포드 개념이 있으니까 » APP 레이어의 스케일아웃이 아주 편함
  • 헬퍼앱이랑 , 앱 인스턴스랑 한포드에 두 인스턴스가 같이 지내는경우가 있는데, 이러면 통신도 간단하고 디스크 공유도 편함

22. Pods with YAML

  • 쿱은 입력으로 YAML 파일을 받음 » 쿱을 컨트롤하는 얌을 배울꺼임

  • 가장먼저 쿱 얌파일에 기본적으로 있어야하는거 4가지

apiVersion: #
kind:
metadata:
# ...
spec:
# ...

23. Demo - Pods with YAML

# pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  lables:  # 레이블을 정의함
    app: nginx # 자식으로
    tier: frontend
spec:
  containers: 
  - name: nginx-helper #렌즈에서 보일 앱의 이름
    image: nginx #도커허브의 이미지 이름을 적기
  - name: busybox-my #두번째
    image: busybox
  • 탭은 쓰지말고 스페이스2칸을 쓰자
  • 명령어로 실행 : kubectl apply -f pod.yml
  • 확인 명령어 : kubectl get pods » 포드가 떳는지 확인
  • 디테일한 내용 확인 : kubectl describe pod ${pod이름}

24. Practice Test Introduction

  • 시험 연습할수 있게 뭐 줌 해보기