[k8s #1] 쿠버네티스 공부

YoungHo-Cha·2022년 10월 14일
1

k8s

목록 보기
1/3
post-thumbnail

이번 시리즈는 쿠버네티스를 찍먹해보는 시리즈이다. 자세한 설명을 적을 여유가 없기 때문에 아주 간단하게만 작성할 계획이다.


목차

  • 동작원리
  • 컴포넌트 살펴보기
  • 애드온
  • namespace
  • pod

동작원리

  1. 개발자가 컨테이너를 빌드한다.

  2. 도커 명령어로 컨테이너 허브로 업로드한다.

  3. 쿠버네티스 명령어로 명령어를 Control-Plane에게 보낸다.

  4. 마스터의 API 서버가 명령어를 받고, 스케쥴러에게 노드 배치를 질의한다.

  5. 스케쥴러에게 적당한 배치를 받으면, API 서버는 해당 노드 kubelet에게 해당 컨테이너 실행 요청을 한다.

  6. kublet은 해당 인스턴스에 실행되어있는 도커 엔진에게 컨테이너 허브에 저장되어있는 이미지를 실행해달라고 요청한다.

  7. 도커 엔진은 허브에서 이미지를 내려받아 실행하여 컨테이너를 동작시킨다.

  8. 이때 동작된 컨테이너는 "파드" 라고 부른다.

컴포넌트 살펴보기

스크린샷 2022-10-14 오후 4 55 18

마스터 컴포넌트

  • etcd : 워커 노드에 대한 정보를 key-value 타입으로 저장하고있는 저장소
  • kube-apiserver : k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
  • kube-scheduler : 파드를 실행할 노드를 선택
  • kube-controller-manager : 파드를 관찰하며 개수를 보장

워커 노드 컴포넌트

  • kubelet

    • 모든 노드에서 실행되는 k8s 에이전트
    • 데몬 형태로 동작
    • cAdvisor를 통한 상태 관리
  • kube-proxy

    • k8s의 network 동작을 관리
    • iptables rule을 구성
  • 컨테이너 런타임

    • 컨테이너를 실행하는 엔진(docker, containerd, runc)

애드온

  • 네트워크 애드온
  • dns 애드온
  • 대시보드 애드온
  • 컨테이너 자원 모니터링
  • 클러스터 로깅
    • 컨테이너 로그, k8s 운영 로그들을 수집해서 중앙화
    • ELK 및 EFK 지원

k8s namespace란?

namespace는 "클러스터 하나를 여러 개의 논리 적인 단위로 나눠서 사용"한다는 의미이다.

  • 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유
  • 용도에 따라 실행해야 하는 앱을 구분할 때 사용
스크린샷 2022-10-14 오후 5 09 38

kubectl 예시

namespace 생성

$ kubectl create namespace
-blue API-POD.service.~
-orange API-POD.service.~
-green API-POD.service.~

위의 예시로 보았을 때,

blue는 배포, orange는 테스트, green은 개발용 클러스터로 구분하여 컨테이너 pod들을 분리하여 관리할 수 있다.

방법은 총 2가지가 존재한다.

  • CLI
  • yaml

CLI

$ kubectl create namespace blue
$ kubectl get namespaces

yaml

$ kubectl create namespace green --dry-run -o yaml > green-ns.yaml
$ vim green-ns.yaml
$ kubectl create -f green-ns.yaml

namespace 사용

$ kubectl create deploy ui --image=nginx --namespace green

위의 명령어 뜻은

쿠버네티스야~ nginx 컨테이너를 green 공간에 실행해줘~

라는 뜻이다.

namespace switch

쿠버네티스 context 만들기

$ kubectl config view

위 명령어는 컨텍스트를 살펴보는 것이다.

$ kubectl config set-context blue@kubernetes --cluster=kubernetes --user=kubernetes-admin --namespace=blue

위 명령어는 쿠버네티스 "blue" namespace에 blue@kubernetes라는 사용자를 admin 권한으로 생성하는 것이다.

쿠버네티스 context 바꾸기

$ kubectl config use-context blue@kubernetes

위 명령어는 현재 사용자를 "blue@kubernetes"로 교환하는 것이다.

쿠버네티스 namespace의 pod 삭제

kubectl delete pods mypod -n <namespace 이름>

위 명령어는 해당 namespace의 mypod를 삭제한다.

namespace를 삭제하면 내부의 pod도 모두 삭제된다.

Pod란?

컨테이너를 표현하는 k8s api의 최소 단위이다.

스크린샷 2022-10-14 오후 6 05 45

pod는 위와같이 1개의 컨테이너 혹은 1개 이상의 컨테이너를 포함할 수 있다.

Pod 생성하기

Multiple Container Pod 생성하기

  • yaml
apiVersion: v1
kind: Pod
metadata:
    name: multipod
spec:
    containers:
    - name: nginx-container
      image: nginx:1.14
      ports:
      - containerPort: 80
    - name: centos-container
      image: centos:7
      command:
      - sleep
      - "10000"

Multiple Container Pod 실행하기

  • yaml
kubectl create -f pod-multi.yaml

Pod의 Container 진입하기

kubectl exec <pod name> -c <container name> -it -- /bin/bash

위와 같이 명령어를 입력하면 해당 pod의 해당 container에 접속한다.

profile
관심많은 영호입니다. 궁금한 거 있으시면 다음 익명 카톡으로 말씀해주시면 가능한 도와드리겠습니다! https://open.kakao.com/o/sE6T84kf

0개의 댓글