TIL kubernetes 2

sundays·2022년 10월 11일
0

kubectl

  • Kubernetes 상태를 확인하고 원하는 상태를 요청하는 client 명령
  • kubectl 명령 동작시 config file은 $HOME/.kube 디렉토리에서 찾으며 KUBECONFIG 환경 변수를 설정하거나 ‘--kubeconfig’ flag를 사용하여 다른 kubeconfig 파일 지정할 수 있다.

kubectl CLI

kubectl [ command ][ TYPE ] [ NAME ][ flags ]

command - 하나 이상의 리소스( object )에서 수행하려는 동작 지정

  • kubectl api-versions -> 현재 cluster에서 사용가능한 API 버전 정보

  • kubectl api-resources -> 사용할 수 있는 resource 목록

  • create

  • run

  • apply

    • kubectl apply -f [ yaml 파일( 현재 시스템/원격지 시스템 경로 포함 ) ]
    • 리소스 생성
    • 하나 이상의 서비스 생성
  • get

    • kubectl get [ resources ]
    • kubectl get all -> Pod, Replicaset, Deployment, Service, Job 전체 목록
    • kubectl get nodes -> cluster내 node 목록
    • kubectl get pods -> pod 목록
    • kubectl get pods -o wide -> pod 목록 정보 상세 출력( node 정보 포함 )
    • kubectl get pod <pod 이름> -o yaml -> pod 정보를 yaml 형식으로 출력
    • kubectl get pods --show-labels -> label 포함 출력
  • describe

    • kubectl describe [ resource 이름 ]
    • resource에 대한 상세 정보 출력( 초기화되지 않는 리소스 포함 )
    • 통산 pod가 제대로 동작하지 않는 경우 log를 확인하거나 해당 pod의 describe 정보를 확인하여 원인 파악
  • delete
    kubectl delete -f [ yaml 파일 ]
    생성시 사용한 yaml을 이용하여 리소스 삭제
    kubectl delete [ TYPE ][ NAME ]
    TYPE에 해당 하는 NAME의 리소스 삭제
    kubectl delete [ pod NAME ]
    해당 pod 삭제

  • exec
    kubectl exec [ pod NAME ] -it /bin/bash
    특정 pod에 대하여 명령 실행

  • logs
    kubectl logs POD [ -c CONTAINER ][ --follow ] [ flags ]
    pod log 확인

  • config
    kubectl config view
    config 파일 내용 확인

TYPE

  • 리소스 Type 지정
  • 리소스 Type은 대소문자를 구분하지 않으며 단수형, 복수형 또는 약어 형식으로 지정

NAME

  • 리소스 이름 지정
  • 대소문자 구분
  • 생략하면 모든 리소스를 지정하거나 하나 이상의 file을 지정
  • TYPE 및 NAME으로 리소스 지정시 참고 사항
  • 리소스가 모두 동일한 TYPE인 경우 리소스를 그룹화 하려면 ‘TYPE name1, name2 name<#>’ 형식과 같이 사용
    ex) kubectl get nodes worker1.example.com worker2.example.com
  • 여러 리소스 TYPE을 개별적으로 지정하려명 ‘TYPE1/name1 TYPE2/name2 TYPE<#>/name<#>’ 형식과 같이 사용
    ex) kubectl get nodes worker1.example.com worker2.example.com

flags

  • 선택적 flag 지정( 옵션 )
  • -o <flag 내용> : 출력 형식 지정
  • -f <파일명> : 파일 지정

Namespace

Kubernetes Object

Kubernetes는 Object( Resource )와 Object를 관리하는 Controller로 나누어져 있다.
Kubernetes Object
Kubernetes 시스템에서 영속성을 가지는 Object( Resource )
Object를 생성하면 Kubernetes 시스템은 원하는 상태를 보장하기 위해 지속적으로 동작
Kubernetes는 cluster의 상태를 나타내기 위해 Object를 이용
Object를 2개의 필드에 의해서 구성
status - Kubernetes 시스템과 component에 의해 제공되고 업데이트된 Object의 현재 상태 설명
spec - Object 특성으로 추구하는 상태
Controller는 status와 spec이 일치하도록 Object 관리

Kubernetes 기본 Object

Pod

Kubernetes에서 가장 기본적인 배포 단위
container를 포함하는 단위
Kubernetes의 특징중 하나로 container를 개별적으로 배포하는 것이 아닌 Pod 단위로 배포
Pod는 하나 이상의 container 포함

Volume

container는 기본적으로 상태가 없는 app container 사용
상태가 없다는 것은 container 혹은 node에 문제가 있어 container를 새로 실행했을 때 다른 node에 자유롭게 옮길 수 있다는 뜻으로 container 장점
하지만 container가 실행되지 않거나 삭제된다면 현재까지 저장한 데이터는 사라진다는 단점
app의 특성에 따라 container에 문제가 발생해도 데이터를 보존해야 하는 경우 Volume 사용
Volume은 container가 재시작하더라도 데이터 유지

Service

Pod 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
Service는 Pod에게 고유한 IP 주소와 Pod 집합에 대한 단일 DNS 를 부여하여 Pod가 cluster 안 어디에 있든 고정 주소를 통해 접근 가능하도록 한다.

Namespace

  • Kubernetes cluster 하나를 여러 개의 논리적인 단위로 나눠서 사용

  • Pod와 Service등 namespace 별로 생성하고 관리될 수 있다.

  • 별도로 namespace를 지정하지 않으면 항상 default namespace에 Object 생성

  • namespace 는 논리적인 분리 단위를 의미하고 물리적인 분리를 의미하지는 않는다

  • 하나의 cluster를 논리적으로 dev( 개발 ) / stg( 통합 ) / prd( 운영 )로 namespace 분리

    • dev( 개발 ) namespace - 개발 용도로 사용
    • std( 통합 ) namespace - 통합 목적으로 사용
    • prd( 운영 ) namespace - 운영 목적으로 사용

Reference

profile
develop life

0개의 댓글