• 파드 정의 Yaml
    • Metadata : 이름, 네임스페이스, 레이블 및 파드에 관한 기타정보
    • Spec : 파드 컨테이너, 볼륨, 기타 데이터 등 파드에 대한 실제 명세
    • Status : 파드 상태, 각 컨테이너의 상태, 기타 기본 정보 현재 파드의 현재 정보
  • 새 파드 정의 Yaml
    • 새 파드 작성 시에는 Status는 작성 할 필요가 없다.
    apiVersion: v1
    kind: Pod
    metadata:
    	name: kubia-manual
    spec:
    	containers:
    		- image: luksa/kubia
    			name: kubia
    			ports:
    			- containerPort: 8080
    				protocol: TCP
    
    • containerPort는 정보성으로 입력 실제 연결에는 영향을 끼치지 않음.
    • 위 설명은 kubectl explain pods 명령어를 통해 확인이 가능
    • 위와 같이 yaml을 만들고 kubectl create -f kubia-manual.yaml 명령을 실행하면 파드 생성
    • 만들어진 파드의 정보를 보고 싶으면
      • kubectl get po kubia-manual -o yaml
      • kubectl get po kubia-manual -o json
      • 으로 확인 가능 yaml로 실행했더라도 json으로 보기 가능
      • kubectl get pods 명령어로 실행중인 파드들 확인 가능
    • 컨테이너의 로그는 일반적으로 파일에 쓰기보단 표준 출력과 표준 에러에 로그를 남긴다.
    • 도커가 이 스트림을 파일로 전달한다.
    • ssh로 컨테이너에 접속해 docker logs <container id> 명령을 통해 로그를 가져올 수 있다.
    • 하지만 직접 접근할 필요없이 쿠버네티스를 이용해 파드의 로그를 받을 수 있다.
      • kubectl logs kubia-manual
    • 파드 안의 특정 컨테이너의 로그만 가져올 수도 있다.
      • kubectl logs kubia-manual -c kubia
    • 여기서 로그는 파드가 삭제되면 함께 사라진다.
    • 그렇기 때문에 로그를 유지하기 위해 중앙집중식 로깅을 사용
    • 일반적인 Elastic Stack (중앙집중식 로깅의 하나)애플리케이션 로그 보기

 

  • 포트 포워딩
    • 일반적으로는 서비스를 거쳐 파드에 접근하지만
    • 디버깅이나 테스트 환경을 위해 특정 파드에 직접 접근 할 수 있도록 포트 포워딩을 할 수 있다.
    • kubectl port-forward kubia-manual 8888:8080
    • 이제 localhost:8888로 kubia-manual에 접근 가능
  • 레이블
    • 레이블은 쿠버네티스를 활용하게 되면 수많은 오브젝트가 생기게 되는데 이 오브젝트들을 관리하기 쉽게 분류하여 조직화하는 역할을 한다.
    • 키-벨류 쌍으로 이루어져 하나의 리소스에 몇개든 붙일 수 있고, 이후 레이블 셀렉터를 이용해 특정 리소스들만 선택해 작업을 할 수 있게 해준다.
    • 인스타 태그를 붙이는 느낌
    • 레이블은 메타데이터에 붙이면 된다.
    ...
    metadata:
    	name: kubia-manual
    	labels:
    		env: dev
    		app: as
    ...
    
    • 파드의 레이블 확인은 kubectl get po —show-labels를 통해 할 수 있다.
    • kubectl get po -l <레이블 조건> 을 통해 특정 부분집합만 확인 가능
  • 레이블을 어디에 써먹을까
    • 특정 워커노드에 파드 할당 (ssd, GPU 등의 이유)
      • 노드에 레이블을 설정하고 pod의 yaml파일에 nodeSelector 추가
      spec:
      	nodeSelector:
      		gpu: "true"
      
    • 이 후 레플리케이션컨트롤러와 서비스에서 중요하게 쓰임
  • 어노테이션
    • 레이블과 비슷하게 키-값 쌍으로 오브젝트를 설명하기 위해 쓰임
    • 단 레이블과 다르게 오브젝트를 묶는데는 사용 불가
    • 대신 더 많은 정보를 입력할 수 있음.
    • ex) 새로운 기능 명시, 만든 사람 이름 등
  • 네임스페이스
    • 오브젝트들을 겹치지 않게 분리하고 싶을 때 사용
    • 레이블은 여러 오브젝트에 들어갈 수 있기 때문에 완전 분리는 불가능
    • 리눅스 네임스페이스와는 다른 개념.
    • 각 네임스페이스 마다 오브젝트의 이름을 따로 관리하기 때문에 오브젝트의 이름은 네임스페이스 안에서만 유니크하면 된다. ( 네임스페이스가 다르면 같은 이름으로 두어도 된다)
    • 네임스페이스가 제공하는 분리가 격리를 제공하지는 않음.
  • 리소스의 삭제
    • 리소스의 삭제는 위의 레이블 셀렉터, 네임스페이스, 리소스 이름 등을 이용해 삭제 가능

 

+ Recent posts