카카오클라우드스쿨 Week17

황동근·2022년 10월 4일
0

카카오클라우드스쿨

목록 보기
17/21

10/03

휴일


10/04

Kubernetes

k8s api resource

  • object

  • application

    • container
    • pod
    • replicaSet
    • deployment
  • Pod

    • 고래, 물개 등의 작은 무리(떼)
    • 배포 단위
      • container
      • application
    • 하나의 pod는 여러 개의 container를 보유
      • mulit-container 생성
    • pod는 container의 host와 같음
      • pod ip를 통해 container에 접근할 수 있음
    • container type
      • runtime container
        • 일반적인 application container
      • init container
        • 특정 조건을 담고 있는 container
        • 조건 만족 시, runtime container 실행
      • sidecar container
        • runtime container의 log 수집을 위한 container
        • pattern
          • sidecar
          • ambassador
          • adapter
    • name
      • container의 host name과 같음
    • pause container
      • network namespace 공유
        • ethernet
          • ip, mac
        • route table
      • port
        • 중첩 불가
        • 같은 host
    • 추상화 object
      • 격리된 container 포함
      • 격리된 network(network namespace), storage(namespace) 자원 공유
    • ip 할당
      • calico
      • 가상 cluster ip pool
    • calico
    • tunl
    • label
      • key-value 구조
      • pod 식별, 그룹화
      • 복합적
      • service에 연결
      • kubectl get po --show-labels
      • kubectl get po -l key
      • kubectl get po --selector=key=value
      • node label 가능
      • annotations
        • 확장 기능
        • 추가적인 메타 정보 제공
    • namespace
      • networkpolicies
    • schedule
      • kube-scheduler-k8s-master
        • 특정 계산 알고리즘으로 할당
      • nodeName
        • hostname으로 노드 지정
        • kubelet을 통해 직접 할당
      • nodeSelector
        • 해당 노드의 label를 통해 지정
        • control plane의 scheduler에 의해 할당
      • 사용자 지정 방식
        • label
  • Service

  • Controller

  • Volume

Pod와 Service

  • pod
    • infra ip
  • service
    • pod를 외부와 연결하는 object

DB

  • RDBMS
    • MySQL
    • Pod + Service
    • 제약사항
      • 3306
      • 환경변수
  • NoSQL
    • mongoDB
    • Pod + Service
    • 제약사항
      • 27017
      • JSON
  • log

10/05

Kubernetes

k8s api resource

  • Pod
    • pod 개수
      • node당 110~5000개
      • node는 150000개
      • container는 300000개
      • QoS
    • 유지보수
      • taint
        • NoSchedule
        • pod 할당
      • drain
        • 특정 노드의 모든 pod 제거
        • master node 5대 구성요소 제외
      • cordon
        • 특정 노드 할당 방지
        • 기존 pod 유지
      • uncordon
        • drain, cordon 해제
  • Service
    • docker-compose > docker run -p
      • multi container
      • kompose
        • convert
      • pod.yaml
      • service.yaml
    • kube-proxy와 연관
      • kube-proxy를 통해 트래픽 전달
      • docker-proxy
    • object
      • ClusterIP
      • NodePort
        • L4
      • LoadBalancer
        • Metal LB
          • private cloud를 구축하거나, 내부 서버스 구축하는 경우 사용
      • Ingress
        • L7
        • https
          • TLS 기법 사용
      • externalIPs
        • pod가 위치한 node의 IP 제공
        • 해당 node의 IP를 이용해서 pod의 열려있는 port로 접근
      • NeetworkPolicy
        • namespace 간 송수신 규칙
    • 외부에서 pod 접근
      • serviceIP:port
      • endpoint
        • service는 pod에 접근하기 위한 podIP:port 보유
        • route
    • mulit pod 연결
      • 자체 LB 기능 수행
      • label
    • 동작
      • 3개 pod와 service 연결
      • service 생성
        • coredns(kube-dns) 자동 등록
        • 서비스명:IP
        • 외부에서 서비스를 통해 서비스 접속
          • serviceIP:port
          • NAT, NAPT, iptables
            • kube-proxy
            • kube-dns
          • podIP:port
    • 분산 환경
      • cluster
      • k8s 특성상 노드 또는 pod에 장애가 발생할 경우 pod가 다른 노드 및 다른 ip로 실행
      • 정적 라우팅으로 해결 안됨
      • service는 label를 참조하기 때문에 pod ip가 바뀌어도 상관 없음
    • kube-proxy
      • DaemonSet
      • 동작모드
        • ClusterIP
          • 내부에서만 사용 가능한 IP 제공
          • --pod-network-cidr
          • --service-cidr
        • NodePort
          • external
          • 외부 연결용
          • 30000~32767 중 랜덤으로 모든 노드의 port opne
          • nodeIP:port
          • kube-proxy
            • route table 보유
            • source, destination
            • 외부 트래픽 > service > pods
          • port 할당
            • 자동 지정
            • 수동 지정
          • 설계
            • NodePort : externalTrafficPolicy
            • ClusterIP : seesionAffinity
        • LoadBalancer
          • external-ip에 public ip 제공
          • cloud 환경에서 주로 사용
          • vm 환경에서 MetalLB를 통해 구현 가능
    • ingress
      • L7
      • http(80), https(443, TLS, Secret)
      • rules
        • smart router
        • 특정 url로 들어오면 backend server의 특정 service로 이동
      • ingress controller
        • nginx
        • nodeport방식의 proxy로 구성된 서비스
  • Volume
    • 데이터를 공유하고 유지
    • emptyDir
      • ephemeral
      • pod lifecycle과 같음
      • 휘발성
    • hostPath
      • 비휘발성
    • 외부
      • node to node
      • NFS
      • gitRepo(deprecated)
      • GCE
        • google compute engine
    • PV
    • PVC

10/06

Docker

container

  • 내부 용량 제한
    • --storage-opt size
  • mount된 dir 용량 제어
    • cmd dd 임시파일
    • os 의존적

Kubernetes

k8s api resource

  • Volume
    • 외부
      • NFS
    • PV
      • Persistent Volume
      • 지속적 볼륨
      • 가상 스토리지 인스턴스
      • OS, Cloud 등에서 실제 storage의 물리적 공간(disk) 활용
      • 용량, 권한(AccessMode)
      • 권한
        • ReadWriteOnce(RWO) : 하나의 노드가 볼륨을 RW 가능하도록 mount
        • ReadWriteMany(RWX) : 여러 노드가 볼륨을 RW 가능하도록 mount
        • ReadOnlyMany(ROX) : 여러 노드가 볼륨을 RO 가능하도록 mount
    • PVC
      • Persistent Volume Claim
      • 사용자(개발자)에 의해 PV를 프로비저닝하는 요청
      • 용량, 권한 부여
      • 매칭되는 PV에 자동 연결
        • bound
    • Github
  • ConfigMap
    • key-value 구조 데이터 저장
    • 환경변수, 명령 인수(args), 구성 파일(*.conf)
  • Secret
    • key-value 구조 데이터 저장
    • 암호, 기밀 데이터
    • encoding
    • kubectl create

Multi-Container Design Patterns

  • Sidecar Pattern
  • Ambassador Pattern
  • Adapter Pattern

10/07

Kubernetes

k8s api resource

  • Secret
    • https
  • Deployment
    • 상위 추상화 개념
    • pod, deployment는 stateless
      • session은 stateful
    • ReplicatSet, Replication controller
      • pod 복제
      • 안정성
      • 무중단
      • HA
      • LB
      • desired state management
    • rolling update
    • rollout
      • undo
      • revision
    • spce
      • replicas
        • 복제 수 유지
      • selector
        • label과 매칭되는 pod가 있는지 확인 후 연결
      • template
        • 매칭되는 pod가 없을 때 생성되는 실질적인 Pod 의 내용
        • metadata
        • spec
    • history
    • scale-out/in
    • revisionHistoryLimit
      • default=10
    • HPA
      • Horizontal Pod Autoscaler
      • CPU, Memory 사용율 계산을 통해 적정한 pod 수 지정
        • Deployment, ReplicaSet, DaemonSet 등
      • scale-out/in
      • 확장성 object
      • autoscaling/v2
      • 수평적 pod 자동 확장
profile
안녕하세요~

0개의 댓글