[Cloud-Native] 전반적 개념 정리

Ericamoyed·2020년 12월 29일
0

개발한장

목록 보기
2/22
  • 컨테이너 기술 요소

    • namespace는 프로세스에게 격리된 OS View를 제공하는 커널 기술 (네임스페이스별로 프로세스가 격리됨)
      • → namespace로 격리된 프로세스들은 같은 NIC을 가지고 있더라도 (ex. eth0) 다른 Network Resource를 사용하게 됨
    • cgroups (Control Group)은 어플리케이션(프로세스) 에게 하드웨어 리소스 (ex. CPU, MEM, Disk, Network, …) 를 그룹으로 묶어서 할당하는 (제한할 수 있는) 기술입니다.
    • cgroup 으로 묶인 프로세스들은 리소스 별로 정해진 량만 사용하게 설정 가능
    • unionfs는 컨테이너별 사용할 파일 시스템의 격리를 가능하게 하는 친구 (서로다른 fs/dir를 합쳐서 하나의 논리적인 파일시스템으로 컨테이너에 제공)
    • → 같은 이미지를 여러 컨테이너가 사용하더라도 격리가 가능
  • 도커

    • 컨테이너를 이미지 파일로 빌드/배포 하는 오픈소스
    • git 처럼 이미지에 대한 build/push/pull 를 처음으로 제공하면서 주목받음
    • 클라이언트(docker) /서버(dockerd) 로 구성
    • 모든 명령은 클라이언트에서 dockerd에 REST로 요청됨
      • dockerd가 이미지 빌드를 수행하고, 도커 레지스트리에 이미지를 올리고, 받아오고, 등등.. 모두 수행함
  • 쿠버네티스

    • 도커 orchestration을 위한 오픈소스 (Scheduling, Networking, Logging, Monitoring, Storage 등 지원)
    • 쿠버네티스는 선언적으로 동작 (리소스들을 선언한 후, 해당 리소스에서 실제 잡을 돌리는 방식): 쿠버네티스 오브젝트를 쿠버네티스 시스템에 반영하는 방식으로 동작
      • Kubernetes Object
        • Basic: Pod, Service, Volume, Namespace
        • Controller
          • Basic Object들을 생성하고 관리하는 역할
          • Deployment, Replication Controller, ReplicationSet, DeamonSet, Job, StatefulSet
    • 쿠버네티스의 작동 단위: Pod
      • 한 Pod 내의 컨테이너는 네트워크/로컬 디스크 볼륨을 공유함 (컨테이너 스토리지는 별개로 할당!)
    • ReplicaSet
      • selector (Pod의 Label)에 속하는 Pod들의 갯수를 replicas 만큼 유지시켜줌
      • template은 배포할 Pod에 대한 정보를 같이 적어, ReplicaSet 배포시 Pod도 같이 배포되도록 함
    • Deployment
      • Pod과 ReplicaSet을 함께 관리 (Deployment를 배포하면 자동으로 ReplicaSet, Pod이 생성)
      • Rolling Update가 가능
        • 무중단 배포의 방법 세가지: Blue/Green, Rolling Update, Canary
        • 롤링 업데이트란, 새 버전을 배포하면서, 새 버전 인스턴스를 하나씩 늘려가고 기존 버전의 인스턴스를 하나식 줄여나가는 방식
        • 새 버전의 인스턴스로 트래픽이 이전되기 전까지 이전 버전과 새 버전의 인스턴스가 동시에 존재할 수 있다는 단점이 있지만, 시스템을 무중단으로 업데이트 할 수 있다는 장점
        • 즉, Deployment로 새 버전 배포 시, 새로운 파드가 점진적으로 추가되고, 이전 파드가 점진적으로 중지되는 방식
    • Service
      • Deployment, RS 이 관리하는 Pod들의 EndPoint 제공 (IP addr (Cluster IP), NodePort, ...)
        • ClusterIP : 내부에서만 접근 가능한 IP를 서비스에 할당함.
        • LoadBalancer : 외부에서 접근이 가능한 External IP를 할당함.
        • → LoadBalancer 타입을 써야지만, 비로소 외부에서 해당 pod에 접근이 가능한 것!
    • StatefulSet
      • Deployment와 유사하나, 각각의 Pod이 고유한 Identity를 가진다는데.. 예시로는 뭔가 확 와닿지가 않음 → 직접 써보면서 익히자! ㅎㅎ
    • ConfigMap
      • Pod에 환경변수/설정파일을 전달할 때 사용하는 오브젝트: key: value 형태로 정의!
      • Pod에 생성한 ConfigMap을 환경 변수로 사용하고 싶을 때에는 pod에서 컨테이너 정의 시, env.name에 컨테이너 내에서 사용할 환경변수 이름, env.valueFrom.configMapKeyref에 사용할 환경변수에 매칭시킬 configmap 정보랑 key name을 추가하면 됨
      • 마찬가지로 설정 파일을 사용하고 싶을 때에는 volumes.configMap에 name 제시!
    • Secret
      • ConfigMap과 유사 but password, token, key 등 민감한 데이터 저장
  • Cloud-Native

    • loosly coupled : 전체 시스템의 컨포넌트들간 의존성을 최소로 줄입니다. → MSA 철학과 일치
    • resiliencent : 시스템에서 발생한 장애에 스스로 대응하고 회복합니다.
    • observable : 시스템의 노드와 컨테이너상에 존재하는 모니터링 요소들을 관찰 가능합니다.
    • manageable : 시스템이나 시스템 위의 서비스를 좀더 쉽고 안정적으로 관리할 수 있습니다.
profile
꿈많은 개발자, 일상 기록을 곁들인

0개의 댓글