2 minute read

일지

특이사항 없음

주요 키워드

Pod
Lable
Selector
Annotation
Namespace

오늘의 할일

  • 220518 TIL 작성
  • 정보공유 스터디 진행
  • AWS 스터디 준비

수업 정리

Pod

  • 쿠버네티스 클러스터에서 워크로드를 처리하기 위한 리소스의 최소 단위
  • 하나 이상의 컨테이너로 구성
  • 최소 2개의 컨테이너로 구성(container 네트워크 구성에 필요한 Pause컨테이너)
    • 리소스의 상태 조회시에는 1개로 표시됨
    • Pause 컨테이너는 내부적인 용도를 위해서 사용되고, 표시되지 않음
  • 파드는 여러 노드에 걸쳐 실행될 수 없음 - 단일 노드에서 모든 컨테이너가 구동
  • 파드는 일부 속성을 공유함
    • 네트워크(IP)
      • IP를 공유하며, 각자 포트를 열어서 서비스 가능
      • 파드 내 컨테이너 간 통신을 localhost 주소를 사용하여 통신
    • 볼륨: 파드에 연결된 볼륨은 모든 컨테이너에서 사용 가능

기본 Pod 리소스의 오브젝트 구성

testpod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - image: c1t1d0s7/myweb
    name: test-pod-container
    ports:
    - protocol: TCP
      containerPort: 8080

파드 생성
kubectl create -f <파일명> kubectl apply -f <파일명>

파드 정보 확인
kubectl get pod [파드이름] // 기본정보 출력
kubectl get pod [파드이름] -o wide // IP, NODE 등 추가정보 출력
kubectl get pod [파드이름] -o yaml // YAML 포맷으로 파드 전체 정보 출력
kubectl describe pod [파드이름] // 파드에 대한 상세정보 출력

파드 및 리소스 세부 필드 확인
kubectl explain <리소스명> kubectl explain <리소스명>.<필드명>...

로그 확인
kubectl logs <파드이름>

파드로 포트포워딩
kubectl port-forward <파드명> <호스트포트>:<파드포트>

레이블(Label)

  • 리소스의 세부항목 중 metadata에 포함
  • 키/값 형식을 사용: 값이 반드시 있어야 할 필요는 없음
  • 리소스를 식별하기 위한 용도로 사용
  • 파드 및 기타 리소스에 광범위하게 사용
  • 필수항목은 아님
  • 형식: 키이름, 접두사/키이름
  • 예시
    • release: stable, alpha, beta
    • environment: production, dev, qa
    • tier: webserver, was, database

레이블을 반영한 파드 생성

apiVersion: v1
kind: Pod
metadata:
  name: test-pod2
  labels:
    release: beta
    tier: web
spec:
  containers:
  - image: c1t1d0s7/myweb
    name: test-pod-container
    ports:
    - protocol: TCP
      containerPort: 8080

파드에 반영된 레이블 정보 확인

kubectl get pod <파드명> --show-labels kubectl get pod <파드명> -o wide // metadata.labels 항목 kubectl describe pod <파드명> // labels 항목

레이블 변경

kubectl label pod <파드명> <키>=<값> // 없는 키 생성 kubectl label pod <파드명> <키>=<값> --overwrite // 존재하는 키의 값 변경 kubectl label pod <파드명> <키>= --overwrite // 키의 값 삭제 kubectl label pod <파드명> <키>- // 키 삭제

셀렉터(Selector)

검색방식

  • 존재 유무: 키가 존재하느냐, 존재하지 않느냐
  • 일치성 기준: 같으냐, 같지 않느냐
  • 집합성 기준: ~~ 안에 포함되어 있느냐, ~~ 안에 포함되어 있지 않느냐

kubectl 명령 사용시 대상을 식별하는 레이블 조건: -l

-l ‘<키>’ : 키가 존재하는 대상 -l ‘!<키>’ : 키가 존재하지 않는 대상 -l ‘<키>=<값>’ 또는 -l ‘<키>==<값>’ : 키과 값이 일치하는 대상 -l ‘<키>!=<값>’ : 키와 값이 일치하지 않는 대상 -l ‘<키> in (<값1>,<값2>...)’ : 값1, 값2… 안에 키의 값이 해당되는 대상 -l ‘<키> notin (<값1>,<값2>...)’ : 값1, 값2… 안에 키의 값이 해당되지 않는 대상

어노테이션(Annotations)

  • label과 유사하게 키/값 구조를 가지는 데이터
  • 개체 식별용도로 사용하지 않음
  • 부가적인 설명 등이 필요한 항목 기술
    • 리소스 관련 기본 정보
    • 모니터링 관련 정보
    • 디버깅 정보
    • 다른 요소와의 관련 정보
    • 책임자 등
  • 쿠버네티스 클러스터 내에서 API서버 및 다른 요소에서 참고하는 용도로 사용

annotation 예시

apiVersion: v1
kind: Pod
metadata:
  name: test-pod3
  annotations:
    developer: Michael Jackson
    manager: Bill Gates
spec:
  containers:
  - image: c1t1d0s7/myweb
    name: test-pod-container
    ports:
    - protocol: TCP
      containerPort: 8080

네임스페이스(Namespace)

쿠버네티스 내 리소스를 논리적으로 분리

기본적으로 생성되어 있는 네임스페이스

  • kube-node-lease: 쿠버네티스 노드의 가용성을 체크하기 위한 리소스용
  • kube-public: 기본적으로 생성되어 모든 사용자가 읽기 권한으로 접근 가능한 네임스페이스. 일반적으로 사용하지 않음
  • kube-system: 기본적인 쿠버네티스 클러스터의 리소스(컨트롤플레인)
  • default: 기본적으로 생성된 사용자용 네임스페이. 기본값

네임스페이스 리소스 파일 예시

apiVersion: v1
kind: Namespace
metadata:
  name: my-private-namespace

네임스페이스 생성

  1. 오브젝트 파일 사용
    kubectl create -f mynamespace.yaml
  2. 명령 사용
    kubectl create namespace mynamespace

네임스페이스에 리소스 생성

  1. 리소스 정의 내에 네임스페이스 지정: .metadata.namespace
     …
     metadata:
       name: testpod
       namespace: mynamespace
     …
    
  2. 생성 명령 실행 시 네임스페이스 지정:
    kubectl create -f testpod.yaml –namespace mynamespace
  3. kubectl 명령 사용환경에서 기본 네임스페이스 지정
    ServiceAccount 부분에서 확인예정

정보공유 스터디 7주차

w7

Categories:

Updated:

Leave a comment