정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • docker
  • 레플리카셋
  • mysql
  • 파이썬
  • 디플로이먼트
  • Kubernetes
  • 모각코
  • 리액트
  • 이코테
  • 그리디
  • Jenkins
  • 자바스크립트
  • 프로그래머스
  • image run
  • 백준
  • replicaset
  • 알고리즘
  • 개발지식
  • javascript
  • flutter
  • NodePort
  • 우테코
  • 노드
  • 공식문서
  • programmers
  • React
  • 쿠버네티스
  • kubelet
  • image pull
  • Deployment

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

쿠버네티스 YAML 파일 작성 시 실행 순서에 대해서
Kubernetes & Docker/궁금한 것

쿠버네티스 YAML 파일 작성 시 실행 순서에 대해서

2020. 7. 17. 08:49
반응형

※주의

이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서

글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다.

공식문서가 더욱 더 큰 도움이 될 수 있습니다!

궁금점

YAML 하나의 파일안에 여러 개의 오브젝트를 생성했을 때,

실행 순서는 위에서부터 아래로 생성이 될까?


행동

apiVersion: apps/v1 
kind: Deployment                        # deployment 
metadata: 
  name: jenkins                         # deployment의 이름 = jenkins 
  labels: 
    app: MyApp                          # deployment의 레이블 = MyApp 
spec: 
  replicas: 1                           # 최대 생성 pod 개수 
  selector: 
    matchLabels:                         
      app: MyApp                        # MyApp이라는 레이블을 가진 container와 연결해준다. 
  template: 
    metadata: 
      labels: 
        app: MyApp                      # pod tempate의 레이블 명세 
    spec: 
      containers: 
      - name: jenkins                   # jenkins 컨테이너 명세 
        image: jenkins/jenkins:lts      # jenkins 이미지 이름 명시 
        ports: 
        - containerPort: 8080           # container에서의 port번호 
          name: jenkins                 # port의 이름 = Service와 connect 
--- 
apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nexus 
  labels: 
    app: MyApp 
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      app: MyApp 
  template: 
    metadata: 
      labels: 
        app: MyApp                       
    spec: 
      containers: 
      - name: nexus
        image: sonatype/nexus3:latest
        ports:
        - containerPort: 8081
          name: nexus
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: MyApp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: MyApp
  template:
    metadata:
      labels:
        app: MyApp
    spec:
      containers:
      - name: tomcat
        image: tomcat
        ports:
        - containerPort: 8080
          name: tomcat
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb
  labels:
    app: MyApp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: MyApp
  template:
    metadata:
      labels:
        app: MyApp
    spec:
      containers:
      - name: mariadb
        image: mariadb
        volumeMounts:
        - name: test-volume
          mountPath: /myvolume
        ports:
        - containerPort: 3306
          name: mariadb
        env:                            #환경변수 설정
        - name: MYSQL_ROOT_PASSWORD     #root_password 
          value: admin                  # = admin
      volumes:
      - name: test-volume
        hostPath:
          path: /mounttest-minikube
          type: Directory
---
apiVersion: v1
kind: Service
metadata:
  name: service
spec:
  type: NodePort
  ports:
    - name: jenkins
      protocol: TCP                     #기본 프로토콜 : TCP 
      port: 8080                        #Service 자신의 포트
      targetPort: jenkins               #Pod 내 컨테이너 포트 (deployment의 port name과 연결)
      nodePort: 30001
    - name: nexus
      protocol: TCP
      port: 8081
      targetPort: nexus
      nodePort: 30001
    - name: tomcat
      protocol: TCP
      port: 8082
      targetPort: tomcat
      nodePort: 30003
    - name: mariadb
      protocol: TCP
      port: 3306
      targetPort: mariadb
      nodePort: 30004
  selector:
    app: MyApp

 

현재

Jenkins deployment - Nexus deployment - Tomcat deployement - Mariadb deployment - Service

순으로 되어있습니다.

 

실행을 시키면

 

위에서부터 순차적으로 실행이 되는 것을 볼 수 있습니다.

순서를 바꿔도 똑같이 순차적으로 실행이 될까요?

 

apiVersion: v1
kind: Service
metadata:
  name: service
spec:
  type: NodePort
  ports:
    - name: jenkins
      protocol: TCP                     #기본 프로토콜 : TCP 
      port: 8080                        #Service 자신의 포트
      targetPort: jenkins               #Pod 내 컨테이너 포트 (deployment의 port name과 연결)
      nodePort: 30001
    - name: nexus
      protocol: TCP
      port: 8081
      targetPort: nexus
      nodePort: 30001
    - name: tomcat
      protocol: TCP
      port: 8082
      targetPort: tomcat
      nodePort: 30003
    - name: mariadb
      protocol: TCP
      port: 3306
      targetPort: mariadb
      nodePort: 30004
  selector:
    app: MyApp
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb
  labels:
    app: MyApp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: MyApp
  template:
    metadata:
      labels:
        app: MyApp
    spec:
      containers:
      - name: mariadb
        image: mariadb
        volumeMounts:
        - name: test-volume
          mountPath: /myvolume
        ports:
        - containerPort: 3306
          name: mariadb
        env:                            #환경변수 설정
        - name: MYSQL_ROOT_PASSWORD     #root_password 
          value: admin                  # = admin
      volumes:
      - name: test-volume
        hostPath:
          path: /mounttest-minikube
          type: Directory
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: MyApp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: MyApp
  template:
    metadata:
      labels:
        app: MyApp
    spec:
      containers:
      - name: tomcat
        image: tomcat
        ports:
        - containerPort: 8080
          name: tomcat
---
apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nexus 
  labels: 
    app: MyApp 
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      app: MyApp 
  template: 
    metadata: 
      labels: 
        app: MyApp                       
    spec: 
      containers: 
      - name: nexus
        image: sonatype/nexus3:latest
        ports:
        - containerPort: 8081
          name: nexus
---
apiVersion: apps/v1 
kind: Deployment                        # deployment 
metadata: 
  name: jenkins                         # deployment의 이름 = jenkins 
  labels: 
    app: MyApp                          # deployment의 레이블 = MyApp 
spec: 
  replicas: 1                           # 최대 생성 pod 개수 
  selector: 
    matchLabels:                         
      app: MyApp                        # MyApp이라는 레이블을 가진 container와 연결해준다. 
  template: 
    metadata: 
      labels: 
        app: MyApp                      # pod tempate의 레이블 명세 
    spec: 
      containers: 
      - name: jenkins                   # jenkins 컨테이너 명세 
        image: jenkins/jenkins:lts      # jenkins 이미지 이름 명시 
        ports: 
        - containerPort: 8080           # container에서의 port번호 
          name: jenkins                 # port의 이름 = Service와 connect 

이번에는 거꾸로 순서를 바꿔서

Service - Mariadb deployment - Tomcat deployment - Nexus deployment - Jenkins deployment

순서로 실행을 해보았습니다.

 


결과

kubectl apply 명령어는 yaml 파일에 적힌 오브젝트들의 순서대로 생성이 됩니다!

반응형

'Kubernetes & Docker > 궁금한 것' 카테고리의 다른 글

쿠버네티스 스케줄러 : 노드(node)에 파드(pod)의 배치 방법  (2) 2020.07.17
쿠버네티스 "kubectl get all" 명령어에 나오는 모든 것들에 대해서  (0) 2020.07.17
쿠버네티스 apiVersion에 대해서  (0) 2020.07.17
쿠버네티스 볼륨(volume)에 대해서  (0) 2020.07.17
쿠버네티스 minikube status 명령어를 입력하면 나오는 kubelet, apiserver,kubeconfig에 대해서  (0) 2020.07.17
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바