목록분류 전체보기 (271)
전공공부
우선 Job을 현실 세계에서 이해하려면, pod가 보고서를 만들고 그것을 job이 이메일을 보내 주는 행위를 상상해보자 실제로는 batch job을 많이 사용한다. RestartPolicy K8S의 RestartPolicy는 기본적으로 Always이다. 그래서, 내부 컨테이너의 명령어가 실행 되어지는 명령어가 필요하다면 매번 Pod Restart하면서 명령어를 재시작한다. 이를 막기 위해서 아래와 같이 설정 할 수 잇다. apiVersion: v1 kind: Pod metadata: name: myapp-pod lables: app: app1 function: Front-end spec: containers: - name: math-add image: ubuntu command: ['expr', '3',..
Deployment Strategy - K8S의 배포 전략은 구 버전의 Pod 하나를 제거하고 새로운 버전의 Pod를 하나씩 생성하므로써 무중단 배포를 가능하게 한다. - 기본 배포 전략 잠깐 강의 중에 나온 것 기존의 pod 이미지 수정시 pod-defination.yaml을 수정하여 kubectl apply -f 을 실행하는 방법 말고 kubectl set image / \ nginx=nginx:1.9.1 이런식으로 새로운 배포가 가능하다고 한다. 하지만, 위와 같이 변경하면 pod-defination.yaml 파일이 올라간 Pod와 달라져서 추후 확장성에 문제가 있을 듯 하다. Strategy - Recreate vs Rolling Update - Recreate 전략의 ReplicaSet의 경우 ..
Labels 사용자가 필터로 사용해서 Label에 따라서 사용 할 수 있게 끔 key value 쌍을 제공해줍니다. pod-defination.yaml apiVersion: v1 kind: Pod metadata: name: myapp-pod lables: app: app1 function: Front-end spec: containers: - name: data-processor image: data-processor ports: - containerPort: 8080 - name: log-agent image: log-agent Selectors kubectl get pods --selector app=app1 여러 Label 검색 kubectl get pod --selector =,=,= #여러 L..
쿠버네티스 Pod의 로그를 보는 법 kubectl logs -f 그런데, 멀티 Pod 라면 어떻게 될까? kubectl logs -f pod-defination.yaml apiVersion: v1 kind: Pod metadata: name: myapp-pod spec: containers: - name: data-processor image: data-processor ports: - containerPort: 8080 - name: log-agent image: log-agent 위와 같은 상황에서 log-agent의 로그를 보려면... kubectl logs -f pod-defination log-agent Monitor 쿠버네티스는 우선 완전한 모니터링 솔루션을 제공하지 않습니다. 그래서, 오픈 ..
POD Status - 일반 순서도 1. Pending : 처음 포드 생성시 노드에 배치 되지 않으므로 2. CotainerCreating : 컨테이너 작동전 받기 3. Running : 가동 livenessProbe : 컨테이너의 동작 여부를 판단함, 실패시 k8s이 container 재시작을 함 readinessProbe : 컨테이너가 준비 되었는지 판단함, 만약 실패시 Pod가 Service에서 삭제됨 POD Conditions Ready 상태여도 Application Program이 Running 준비 중 일 수도 있습니다. (WAS 서버가 실행되자마자 준비 되지 않는 상황을 상상해봅시다.) Readiness Probe 위와 같은 상황을 준비하기 위해서 app 내부로 테스트 해서 ready 상태인..
k8s에는 다양한 타입의 멀티 컨테이너 포드 방식이 존재합니다 Ambassador, Adapter, Sidecar Pod에 각각 페어 형태로 기능이 달라도 같이 공용으로 움직이는 Pod가 필요하다면 MultiContainer Pod가 필요합니다. 종속성을 가지는 포드들 끼리 묶어 줄 수 있어야 하죠. Create pod-definition.yaml apiVersion: v1 kind: Pod metadata: name: myapp-pod spec: containers: - name: data-processor image: data-processor ports: - containerPort: 8080 - name: log-agent image: log-agent Design Patterns 1. Sidec..
1. Node Selector Label Nodes 노드에 라벨을 붙이는 방법 kubectl label nodes = kubectl label nodes node-1 size=Large pod-definition.yaml apiVersion: kind: Pod metadata: name: myapp-pod spec: containers: - name: data-processor image: data-processor nodeSelector: size: Large # Node에 할당된 Label(key,value)을 통해서 Large Node 인지 알아봄 하지만, 위와 같이 nodeSelector로 모든 노드에 붙일 수는 없다 size middle과 같이 여러 다른 상황이라면 일일이 nodeSelector..
1. Taint - Node - 노드가 두는 제한 kubectl taint nodes node-name key=value:taint-effect taint-effect는 Taint를 견디지 못하는 Pod가 할당 되었을때의 정책을 제시합니다. taint-effect : [Noschedule | PreferNBoSchedule | NoExecute] 1-1) Taint - NoExecute - Taint의 제한이 걸려서 실행이 되지 않고 Terminate 되는 Pod가 있을 수 있다. 예시) kubectl taint nodes node1 app=blue:NoSchedule 2. Toleration - Pods - 명시적으로 Toleration 되어진 Pod만 Taint된 노드 에 접근 할 수 있게 됌 2-1..