Kubernetes & Docker/궁금한 것

    쿠버네티스 podSpec의 호스트(host)에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 podSpec에 명세 해주는 호스트의 default값은 무엇일까 그리고 설정은 어떻게 할까? docker-compose의 user의 이름을 설정해줄 때에는 user 라는 필드를 통해서 사용을 했다. 쿠버네티스에는 어떻게 될까? 행동 파드 스펙(Pod spec)에는 선택적 필드인 hostname이 있다. 이 필드는 파드의 호스트네임을 지정할 수 있다. hostname 필드가 지정되면, 파드의 이름보다 파드의 호스트네임이 우선시된다. 예를 들어 hostname 필드가 "my-host"로 설정된 파드는 호스트네임이 "my-host"..

    쿠버네티스 네트워킹(networking)과 포트 포워딩(port forwarding)에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 쿠버네티스에서 네트워킹은 어떤 식으로 진행되고, 어떻게 연결되며 포트 포워딩에 대해서 궁금했다. 행동 쿠버네티스 클러스터 네트워킹 쿠버네티스에는 4가지 대응해야 할 네트워킹 문제가 있는데 1. 고도로 결합된 컨테이너 간의 통신 2. 파드 간 통신 3. 파드와 서비스 간 통신 4. 외부와 서비스 간 통신 서비스에 대해서 3,4번에 대해서 알기 위해서는 우선 서비스를 알아야 한다. 쿠버네티스에서 서비스는 파드의 논리적 집합과 그것들에 접근할 수 있는 정책을 정의하는 추상적 개념이다. 서비스가 대상으로 하는 파드 집합은 일반적으로 ..

    쿠버네티스 레플리카셋(replicaset)의 실패 복구(failover)와 proxy에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 레플리카셋이 만약에 3이면 3개의 pod를 동시에 실행하는 것인데, 동시에 실행한다라는 말이 조금 와닿지 않는다. 그리고 동시에 실행했을 때 어느 하나의 pod에 접근을 한다면 3개중에 어느 pod에 접근을 하는 것인가? 또, 세 개중 하나가 오류가 나서 재실행을 할 때에는 정확히 어떤식으로 동작하는가? 행동 정말 궁금했던 내용들인데.. 위의 궁금점들이 공식사이트의 ReplicaSet 파트에 나오는 것이 아니라, ReplicaSet으로 생성된 복제된 pod들의 HTTP 요청에 대한 내용은 Service에서 나온다고 합니다.. ..

    쿠버네티스 스케줄러 : 노드(node)에 파드(pod)의 배치 방법

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 클러스터 안에 단일 노드가 아닌 멀티 노드일때, 파드 생성 시 어떤 방식으로 파드가 노드에 배치가 되고 파드는 노드를 어떻게 선택할까? 행동 1. 멀티 노드일 때 파드 생성 시 아무것도 지정안해줬을 때에 파드는 무슨 노드에 배치가 될까? 2. pod를 생성할 때 pod의 spec에 여러 조건을 추가함으로써 원하는 노드에 배치를 할 수 있습니다. 마스터 컴포넌트(컨트롤-플레인 컴포넌트)에서 kube-scheduler 라는 컴포넌트가 pod가 할당 될 노드를 결정합니다. 우리가 kubectl apply 등의 명령어를 통해서 사용자..

    쿠버네티스 "kubectl get all" 명령어에 나오는 모든 것들에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 kubectl get all 명령어를 입력했을 때 나오는 목록들의 의미를 알고싶었습니다. 행동 Pod NAME 이 부분은 kubectl get pods / kubectl get pod 로도 얻을 수 있는 부분입니다. 둘의 차이점은 kubectl get all 명령어는 오브젝트를 구분해주기 위해 앞에 오브젝트의 이름이 붙고 그 다음에 name이 붙습니다. kubectl get all = pod / pod의 name kubectl get pod = pod의 name READY READY 필드는 파드(pod)에 몇 개의 컨테이너가 ..

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

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 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이라는 레이블을 가진 con..

    쿠버네티스 apiVersion에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 apiVersion에 대해서 궁금하다! 행동 API 쿠버네티스 API를 사용하면 쿠버네티스 오브젝트들의 상태를 쿼리하고 조작할 수 있습니다. 쿠버네티스 컨트롤 플레인의 핵심은 API 서버와 그것이 노출하는 HTTP API입니다. 사용자와 클러스터의 다른 부분 및 모든 외부 컴포넌트는 API 서버를 통해 서로 통신합니다. 새로운 유스케이스가 등장하거나 기존 시스템이 변경됨에 따라 성공적인 시스템은 성장하고 변경될 필요가 있습니다. 따라서, 쿠버네티스는 쿠버네티스 API를 지속적으로 변경하고 성장시킬 수 있는 디자인 기능을 가지고..

    쿠버네티스 볼륨(volume)에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 볼륨의 전체적인 개념과 볼륨을 지정을 안해줬을 때, 해줬을 때의 차이점에 대해서 궁금했습니다. 행동 볼륨 볼륨은 저장소와 관련된 오브젝트로, 컨테이너를 사용하고 있을 때 컨테이너가 갑자기 종료되어서 재시작 되었을 때 컨테이너에서 새로 만들거나 새로 추가한 파일들은 전부 날아갑니다. 그럴 때 필요한 것이 볼륨으로 컨테이너가 없어졌을 때, 파드가 없어졌을 때 유지할 수 있는 볼륨으로 emptyDir 과 hostPath로 나눌 수 있습니다. default volume을 지정해주지 않으면 emptyDir 옵션으로 지정이 됩니다. (그..

    쿠버네티스 minikube status 명령어를 입력하면 나오는 kubelet, apiserver,kubeconfig에 대해서

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 minikube status 를 입력했을 때 나오는 type, host, kubelet, apiserver, kubeconfig들은 각각 무엇을 의미할까? 행동 맨 처음 나오는 minikube는 cluster의 이름을 의미한다. kubelet kubelet은 클러스터의 각 노드에서 실행되는 에이전트로 파드에서 컨테이너가 확실하게 동작하도록 관리한다. kubelet이 정상적으로 돌아가고 있다는 뜻이다. apiserver apiserver는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트이다. API 서버는 작업 상..

    쿠버네티스 노드와 마스터 서버에 대해서(kubelet, kubeadm)

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 쿠버네티스의 마스터와 노드에 대해서 더 알고싶다. kubelet의 역할과 kubeadm이 무슨 역할을 하는지 알고싶다. 행동 마스터 (컨트롤 플레인) (워커) 노드를 제어하고 전체 클러스터를 관리해주는 (제어/관리) 서버 컨트롤 플레인 컴포넌트는 클러스터에 관한 전반적인 결정(예를 들어, 스케줄링)을 수행하고 클러스터 이벤트(예를 들어, 디플로이먼트의 replicas 필드에 대한 요구 조건이 충족되지 않을 경우 새로운 파드를 구동시키는 것)를 감지하고 반응한다. (워커) 노드 컨테이너가 배포될 물리 서버 또는 가상 머신이며 워..

    쿠버네티스 서비스(service)의 노드포트(NodePort)의 포트가 겹쳤을 때 어떻게 될까?

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 궁금점 NodePort로 연결해줄 때 포트가 곂치게 되면 어떻게 될까? 행동 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: TC..

    쿠버네티스 YAML파일 Selector는 무엇을 가리킬까?

    ※주의 이 글은 제가 혼자 공부하면서 여기저기 찾아보고 정리하는 곳이라서 글의 퀄리티나 내용상 맞지 않는 부분들이 있습니다. 공식문서가 더욱 더 큰 도움이 될 수 있습니다! 이 글에서 가져온 코드들은 쿠버네티스 공식문서에서 가져왔습니다. https://kubernetes.io/ko/ 운영 수준의 컨테이너 오케스트레이션 운영 수준의 컨테이너 오케스트레이션 kubernetes.io 궁금점 디플로이먼트, 서비스, 파드, 레플리카셋등 오브젝트를 명시할 때 yaml파일에서 spec을 정의해준다. 그 때 selector는 어떤 것을 가리킬까? 다 똑같은 오브젝트를 가리키는 것인지? 예상 pod를 가리킬 것 같다. 행동 파드 - 레플리카셋 - 디플로이먼트 - 스테이트풀셋 - 데몬셋 - 서비스순으로 진행하겠습니다. 파..