개발강의정리/DevOps

[데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 초기 명령어 및 아규먼트 전달과 실행

nineDeveloper 2021. 1. 19.
728x90

초기 명령어 및 아규먼트 전달과 실행

초기 실행시 명령어와 아규먼트를 전달

  • Pod을 생성할 때 spec.containers.command와 args에 실행하기 원하는 인자를 전달하면 컨테이너가 부팅된 뒤 실행

https://kubernetes.io/ko/docs/tasks/inject-data-application/define-command-argument-container/#%ED%8C%8C%EB%93%9C%EB%A5%BC-%EC%83%9D%EC%84%B1%ED%95%A0-%EB%95%8C-%EC%BB%A4%EB%A7%A8%EB%93%9C%EC%99%80-%EC%9D%B8%EC%9E%90%EB%A5%BC-%EC%A0%95%EC%9D%98%ED%95%98%EA%B8%B0

pod-command-args.yaml

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]
  restartPolicy: OnFailure
  • 환경 변수를 활용하여 출력할 때는 $를 사용하여 명령 내용 변경 가능

https://kubernetes.io/ko/docs/tasks/inject-data-application/define-command-argument-container/#%EC%9D%B8%EC%9E%90%EB%A5%BC-%EC%A0%95%EC%9D%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%B4-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

env:
- name: MESSAGE
  value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]

연습문제

  • busybox 이미지를 사용하는 busybox 포드를 만들어라

https://v1-16.docs.kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pod-templates

busybox-cmd-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox

kubectl로 생성 및 확인
정상적으로 실행되지 않고 Crash 가 발생하는 것을 확인할 수 있음

$ kubectl create -f busybox-cmd-pod.yaml
pod/busybox created

$ kubectl get pod -w
NAME      READY   STATUS      RESTARTS   AGE
busybox   0/1     Completed   0          7s
busybox   0/1     Completed   1          7s
busybox   0/1     CrashLoopBackOff   1          9s
  • busybox 포드가 유지되는가? 그렇지 않다면 그 이유는 무엇인가?
    • 서버의 형태가 아니라 Application 일 뿐이라 유지되지 않고 종료됨
    • sleep 하는 명령어와 아규먼트를 전달해서 busybox를 장시간 유지하게 할 수 있음
  • busybox를 장시간 유지하기 위해 장시간 sleep하는 명령어와 아규먼트를 추가하여 실행하라

busybox-cmd-pod.yaml 파일에 command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] 을 추가하여 생성

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

kubectl 생성 및 정상 동작 확인

$ kubectl delete pod busybox
pod "busybox" deleted

$ kubectl create -f busybox-cmd-pod.yaml
pod/busybox created

$ kubectl get pod -w
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          6s
  • busybox가 계속 유지될 수 있는가? 셸을 접속하여 확인하자
$ kubectl exec -it busybox -- sh
/ #
728x90

댓글

💲 추천 글