본문 바로가기

CI-CD

(18)
Kubernetes- Service Service란?  동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공한다. 동일한 Label을 가지고 있는 Pod들을 하나의 ip로 묶어서 Virtual Ip를 부여한다. 이렇게 부여된 Virtual Ip가 단일 진입점이 되고 외부 트래픽이 여러개의 파드 중 특정한 파드로 진입하게끔 로드 밸런싱 기능을 제공한다. 예시- Deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: webuispec: replicas: 3 selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui ..
Kubernetes- Controller control plane의 구성요소control plane(이하 cp)는 다양한 api들을 관리하는 역할을 하며 cp 내부에는 api server, etcd, scheduler, controller가 있다. 그 중 controller는 pod의 개수를 보장해주는 역할을 한다.Replication ControllerapiVersion: v1kind: ReplicationControllermetadata: name: rc-nginx # replication controller 이름spec: replicas: 3 # 보장할 pod 개수 selector: app: webui # 보장할 pod의 라벨 template: metadata: name: nginx-pod ..
Kubernetes- Multi Container Pod 생성 yaml 파일로 pod 생성하기 도커 컴포즈에서도 compose를 위한 yaml 파일로 여러개의 컨테이너를 동시에 관리했듯이, 쿠버네티스에서도 yaml 파일로 여러개의 컨테이너를 하나의 파드에 동시에 생성 및 관리할 수 있다. apiVersion: v1 # Pod의 api version은 v1이다.kind: Pod # 관리하려는 apimetadata: name: multipod # pod 명spec: # Pod의 내용 정의 containers: - name: nginx-container image: nginx:1.14 ports: - containerPort: 80 #..
Kubernetes- Context 쿠버네티스의 설정 확인하기$ kubectl config view 쿠버네티스의 설정 정보를 확인할 수 있다. 해당 명령어의 출력의 디폴트 상태는 아래와 같다.apiVersion: v1clusters:- cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.0.18:6443 name: kubernetescontexts:- context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetescurrent-context: kubernetes-admin@kuberneteskind: Configpreferences: {}users..
Kubernetes- 동작원리 컨트롤 플레인은 API Server를 통해 사용자로 부터 kubectl 명령어를 받아서 명령어 검증을 진행한다. 정상적인 명령어인 경우 해당 명령을 실행하도록 한다. 워커 노드에는 Kubelet 데몬이 존재하며 Kubelet은 컨테이너를 트래킹하여 관리하는 역할을 한다. 만일 kubectl create deployment --image=nginx라는 명령어가 들어온다면, kubelet은 자신의 노드에서 pod를 실행하라는 요청이 들어올 시 해당 요청을 본인의 노드에 있는 컨테이너 엔진(Docker, containerd, runc...) 명령어로 치환하여 컨테이너를 생성한다. Control Plane 구성요소API사용자로부터 kubectl 명령을 받아서 문법을 체크하고 컨트롤 플레인 내부의 다양한 컴포넌트..
Kubernetes- 기본 개념 정리 Pod쿠버네티스의 최소 단위로서 컨테이너(혹은 컨테이너들)를 추상화한다. 일반적으로 하나의 어플리케이션이 파드에 들어가게 되며 해당 pod들은 여러개의 노드에서 동작할 수 있다. 각 포드는 독립적인 private ip address를 가진다. 파드는 죽거나 다시 시작될 수 있는데 기존의 파드가 재시작 되는 경우, 포드의 ip주소는 변경된다. 기존의 다른 앱과 연결되어있던 파드가 재시작 되어 ip 주소가 변경되게 되었다면 일일히 새로운 주소에 맞도록 이를 수정해 주어야한다. 이는 불편한 과정이므로 쿠버네티스에서는 서비스를 제공하여, 이를 보조한다.  Service서비스는 영구적으로 할당된 ip 주소를 가진다. CNIcontainer network interface의 약자로 컨테이너 간의 통신을 지원하는 V..
Docker- Network NetworkDocker network를 통해서 컨테이너를 연결하고 다른 네트워크와는 격리할 수 있다. 기본적으로 bridge라는 이름의 기본 네트워크가 주어진다. 만일 run 명령을 실행할 때 컨테이너를 연결할 별도의 network를 명시해주지 않는다면 기본적으로 bridge 네트워크에 연결이 된다. 현재 존재하는 network들의 목록은 다음 명령어로 확인 가능하다.// docker network 목록 확인$ docker network ls 확인한 네트워크들 중에서 확인하고 싶은 네트워크가 있다면 다음 명령어로 확인 가능하다.// 네트워크 확인$ docker inspect [network 명] 예를 들어 두개의 컨테이너 (my_container1, my_container2)를 my_bridge라는 d..
Docker- Volume 볼륨이란 볼륨은 호스트 머신, 즉 사용자의 PC나 가상 머신과 같은 사용자의 컴퓨터를 의미한다. 볼륨을 사용하는 경우, 컨테이너 상의 어플리케이션과 호스트 머신의 폴더를 마운트 해줄 수 있다. 따라서 컨테이너 데이터를 저장하는 경우에 사용할 수 있다. 기존에는 컨테이너를 제거하는 경우 컨테이너에 포함된 데이터들도 모두 제거되지만, 볼륨을 통해 데이터를 호스트 머신에 유지할 수 있다. 한마디로 컨테이너 내부의 데이터를 외부로 마운트하여 컨테이너 내부에서 데이터의 수정이 일어나는 경우 볼륨이 걸린 호스트 머신에도 반영되게 하는 것이다. 볼륨 생성 $ docker volume create [생성할 볼륨 이름] $ docker volume create volume-test # volume-test라는 이름의 볼..