본문 바로가기

Kubenetes/Kubernetes Pods

Pod 2 - (YAML이나 JSON 파일 디스크립터에서 Pod 만들기)

Pod와 그 밖의 쿠버네티스 리소느는 일반적으로 JSON 또는 YAML 매티페스트를 쿠버네티스R EST API 앤드포인트에 게시해 생성

각 리소스 유형의 모든 속성을 구성하려면 쿠버네티스 API 객체의 정의를 알아야 함. 

 

1. Pod의 YAML 디스크립터 검사

 

[배포된 Pod의 전체 YAML]

 

$ kubectl get po kubia-zxzij -o yaml

apiVersion: v1
kind: Pod
metadata:
    annotations:
        kubernetes.io/created-by: ...
    creationTimestamp: 2016-03-18T12:37:50Z
    generateName: kubia-
    labels:
        run: kubia
    name: kubia-zxzij
    namespace: default
    resourceVerion: "294"
    selfLink: /api/v1/namespaces/default/pods/kubia-zxzij
    uid: 3a564c0-ed06-11e5-ba3b-42010af0004
spec:
    containers:
    - image: luksa/kubia
      imagePullPolicy: IfNotPresent
      name: kubia
      ports:
      - containerPort: 8080
        protocol: TCP
      resources:
         requests
            cpu: 100m
Type of K
object/re
terminationMessagePath: /dev/termination-log
         volumeMounts:
         - mountPath: /var/run/secrets/k8s.io/servacc
           name: default-token-kvcqa
           readOnly: true
    dnsPolicy: ClusterFirts
    nodeNAme: gke-kubia-e8fe08b8-node-txje
    restartPolicy: Always
    serviceAccount: default
    terminationGracePeriodSeconds: 30
    volumes:
    - name: default-token-kvcqa
      secret:
          secretName: default-token-kvcqa
status
    conditions:
    - lastProbeTiem: null
      lastTransitionTime: null
      status: "True"
      type: Ready
   containerStatuses:
   - containerID: docker://f0276994322d247ba...
      image: luksa/kubia
      imageID: docker://4c325bcc640c.....
      lastState: {}
      name: kubia
      ready: true
      restartCount: 0
      state:
         running:
              startAt: 2016-03-18T12:46:05Z
hostIP: 10.132.0.4
phase: Running
podIP: 10.0.2.3
startTime: 2016-03-18T12:44:32Z

 

[Pod 정의의 주요 부분]

 

- 메타 데이터(Metadata)에는 Pod와 관련된 이름, 네임스페이스, 라벨 그 밖의 정보가 있다.

- 스펙(SPEC)에는 Pod의 컨테이너, 볼륨, 그 밖의 데이터와 같은 Pod 내용의 실제 설명이 있다.

- 상태(Status)에는 Pod의 상태, 각 컨테이너의 설명 및 상태, 포드 내부의 IP 및 그 밖의 기본정보 등 실행중인 포드의 현재 정보가 들어 있다.

 

2. Pod의 간단한 YAML 디스크립터 만들기

 

[기본적인 Pod Menifest: kubia-manual.yaml]

apiVersion: v1                      # 디스크립터는 쿠버네티스 API의 v1 버전을 따른다.
kind: Pod                             # Pod 설명
metadata:
    name: kubia-manual       # Pod의 이름
spec:
    containers:
    - image: luksa/kubia       # 생성할 컨테이너의 컨테이너 이미지
      name: kubia
      ports:
     - containerPort: 8080   # 응답 대기할 애플리케이션의 포트
       protocol: TCP

 

[kubectl explain]

 

kubernets 사용 가능한 API 객체 찾기

http://kubernetes.io/docs/api

 

The Kubernetes API

The Kubernetes API lets you query and manipulate the state of objects in Kubernetes. The core of Kubernetes' control plane is the API server and the HTTP API that it exposes. Users, the different parts of your cluster, and external components all communica

kubernetes.io

 

$ kubectl explain pods

DESCRITION:
Pod ~~~

FIELDS:
    kind          <string>
         Kind is a string value representing the REST resource this object represetns ~~
    metadata <object>
        Standard object's metadata...
    spec         <object>
        Specification of the desired behavior of the pod..
    status.      <object>
        Most recently observed status of the pod. This data may not be up to date...

 

kubectl은 객체의 설명을 출력하고 객체가 포함할 수 있는 속성을 나열한다. 그 다음 각 속성을 더 자세히 조사할 수 있다. 

 

$ kubectl explain pod.spec

RESOURCE: spec <Object>

DESCRIPTION:
    Specification of the desired behaviro of the pod...
    podSpec is a descrition of a pod.
FIELDS:
   hostPID <boolean>
       Use the host's pid namespace. Optional: Default to false.

 

 

[컨테이너 포트 지정]

 

Pod 정의에서 포트를 지정하는 것은 순수하게 정보를 제공하려는 것

포트를 생략해도 클라이언트가 포트를 통해 Pod에 연결 가능 여부에는 영향을 미치지 않음

 

3. 주요 kubectl 명령어

 

[kubectl을 사용해 포드 만들기]

 

$ kubectl create -f kubia-manual.yaml

pod "kubia-manual" created

 

kubectl create -f 명령은 YAML 또는 JSON 파일에서 포드뿐 아니라 다른 리소스를 생성하는데 사용됨

 

[실행 중인 포드의 전체 정의 검색]

 

YAML 파일로 요청할 경우

$ kubectl get po kubias-manual -o yaml

or

JSON 파일로 요청할 경우

$ kubectl get po kubia-manual -o jason

 

[포드 목록에 새로 생성된 포드 보기]

 

$ kubectl get pods

 

[애플리케이션 로그 보기]

 

 - 컨테이너 런타임(docker)는 해당 스트림을 파일로 리다이렉션하고 실행을 통해 컨테이너의 로그를 가져올 수 있다.

 - $ docker logs <container id?

쿠버네티스의 경우 더 쉬운 방법을 제공한다.

 

포드의 로그(포드 안의 컨테이너의 로그)를 보려면 로컬 시스템에서 다음 명령을 실행

 

$ kubectl logs kubia-manual

Kubia server starting ...

--> 단일 컨테이너만 있으면 쿠버네티스에서 실행되는 애플리케이션의 로그는 바로 검색됨

--> 컨테이너 로그는 매일 로그 파일이 10MB 크기에 도달할 때마다 자동으로 순환됨. kubectl logs 명령은 마지막 순환의 로그 항목만 표시

 

[컨테이너 이름 지정해 다중 컨테이너 포드의 로그 가져오기]

 

- 포드에 여러 컨테이너가 있는 경우 kubectl 로그를 실행할 때 -c <컨테이너 이름> 옵션을 포함시켜 컨테이너 이름을 명시적으로 지정

- kubia-manual 포드에서는 컨테이너의 이름을 kubia로 설정했으므로 아래와 같이 진행

 

$ kubectl logs kubia-manual -c kubia

Kubia server starting ...

 

[포드의 포트에 local. network Port Forwarding]

- 컴퓨터의 로컬 포트 8888을 kubiamanual pod의 8080 포트로 전달

 

$ kubectl port-forward kubia-manual 8888:8080

 

[포트 전달자를 통한 포드 연결]

 

$ curl localhost:8888

kubectl port-forward와 curl을 함께 사용할 때 일어나는 내용 간단히 보기

 

 

 

'Kubenetes > Kubernetes Pods' 카테고리의 다른 글

데몬셋 (Daemon Set)  (0) 2021.02.11
라이브니스 프로브 (Liveness Probe)  (0) 2021.02.10
Pod 4 - (Namespace)  (0) 2021.02.10
Pod 3 - (Label을 이용한 Pod 구성)  (0) 2021.02.10
Pod 1 - (Pod 개요)  (0) 2021.02.10