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 객체 찾기
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
'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 |