CI/CD란?CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해 좀 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것을 말한다.CI/CD의 핵심은 자동화이며, DevOps 엔지니어의 핵심이다. CI/CD의 종류jenkinsGitLabCricleCITeamCity CI (Continuous Integration)지속적인 통합이라는 의미이다.애플리케이션의 버그 수정이나 새로운 코드 변경이 주기적으로 빌드 및 테스트되면서 공유되는 저장소에 통합되는 것을 의미한다.개발자를 위한 자동화 프로세스라고 볼 수 있으며 code - bulid, Test 단계이다.Code: 개발자가 코드를 원격 코드 저장소에 push하는 단계.Build: 원격 코드 저장소로부터 코드를 가져와 유..
DevOps
helm쿠버네티스를 사용하다 보면 수많은 템플릿을 관리해야 하는데 이 때 헬름을 통해 쉽게 관리할 수 있다.헬름은 템플릿 파일들의 집합을 관리하는 쿠버네티스 패키지 매니저 도구이다.차트와 차트 압축 파일을 만들고, 차트가 저장된 차트 저장소와 연결해 쿠버네티스 클러스터에 차트를 설치하거나 삭제할 수 있다.헬름을 이용하면 잘 정리된 차트들로 필요한 애플리케이션들을 빠르게 설치할 수 있다.chart: 쿠버네티스에서 실행할 애플리케이션을 만드는데 필요한 정보 묶음config: 패키지한 차트에 넣어서 배포 가능한 오브젝트를 만들 때 사용할 수 있는 설정.release: 특정 config를 이용해 실행 중인 차트의 인스턴스. 헬름 클라이언트와 틸러 서버헬름은 커맨드라인 인터페이스인 헬름 클라이언트와 헬름 클라이..
Kubernetes-Cluster쿠버네티스 클러스터는 두 종류의 서버로 구성된다.클러스터를 관리하는 마스터, 실제 컨테이러를 실행시키는 노드 마스터etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker 등의 컴포넌트가 실행된다.etcd고가용성을 제공하는 키-값 저장소.필요한 모든 데이터를 저장하는 데이터베이스 역할.etcd에 있는 데이터를 백업하여 안정적으로 운영한다.서버 하나당 프로세스 1개만 사용 가능.kube-apiserverAPI를 사용할 수 있도록 하는 컴포넌트.쿠버네티스는 마이크로서비스 아키텍처이므로 서로 분리된 컴포넌트 여러 개로 구성되어 있다. 쿠버네티스에서 보내는 모든 요청은 ku..
Volume에 대한 자세한 설명은 이전 포스팅 참고VolumeVolue은 Pod의 구성요소로 Pod Spec에서 정의된다.파드가 시작되면 볼륨이 생성되고, 파드가 삭제되면 볼륨이 삭제된다.볼륨은 파드의 모든 컨테이너에서 사용 가능하고 접근하려는 컨테이너에서 각각 마운트 되어야 한다. EmptyDir아무 데이터도 없는 빈 디렉토리를 제공해준다.파드의 컨테이너 간에 Volume을 공유하기 위해 사용하며 컨테이너 간 파일을 공유할 때 유용하다.파드가 실행되는 도중 컨테이너가 함께 사용할 수 있도록 임시 저장 공간을 생성한다. spec: container: - volumeMounts: - name: [마운트할 볼륨 이름] mountPath: [경로] volumes: - name: [볼..
Volume파드의 컴포넌트이다.파드 내에 정의되며 사용하고자하는 스토리지를 가리키는 포인터, 인터페이스와 같은 역할을 한다.파드에 종속적이기 때문에 파드가 종료되면 볼륨들 또한 모두 종료된다.여러 컨테이너가 하나의 볼륨을 마운트하고 있다면 마운트된 위치에 데이터를 저장함으로 쉽게 데이터를 공유할 수 있다. Volume의 한계데이터의 지속 보존 문제이다.이를 해결하기 위해서는? => 볼륨이 외부 저장소를 가리킨다.외부에 저장소가 있기 때문에 파드가 종료되더라도 데이터는 유지된다. 즉, 지속 보존 문제를 해결할 수 있다. But그러나, 이런 방식은 쿠버네티스 인프라를 애플리케이션 개발자에게 공개해야 한다는 문제가 있다. 쿠버네티스 인프라의 규모가 크다면 파드를 생성할 때 어떤 외부 스토리지가 있는지를 하나..
노드쿠버네티스는 컨테이너를 파드내에 배치하고 노드에서 실행함으로 워크로드를 구동한다.노드의 컴포넌트에는 kubelet, 컨테이너 런타임, kube-proxy가 있다. 관리API 서버에 노드를 추가하는 두가지 방법노드의 kubelet으로 컨트롤 플레인에 자체 등록사용자가 노드 오브젝트를 수동으로 추가{ "kind": "Node", "apiVersion": "v1", "metadata": { "name": "10.240.79.157", "labels": { "name": "my-first-k8s-node" } }}쿠버네티스는 내부적으로 노드 오브젝트를 생성한다.kubelet이 노드의 metadata.name 필드와 일치하는지 API 서버에 등록 되어 있는지 확인한다.노드가 정..
쿠버네티스 내부에서 사용하는 네트워크가 외부와 격리되어 있기 때문에 쿠버네티스 내부에서 실행한 컨테이너를 외부에서 접근하려면 Service를 사용해야 한다.즉, Pod를 외부에서 접속할 수 있도록 만드려면 service란 개념에 대해서 알아야 한다.Service외부에서 쿠버네티스 클러스터에 접속하는 방법을 서비스라고 한다.여러 개의 파드에 고유한 도메인 이름을 부여.여러 개의 파드 접근 시 요청을 로드밸런싱클라우드 플랫폼의 로드 밸런서, 클러스터 노드의 파드등을 통해 파드 외부에 노출종류Cluster Ip: 내부에서만 파드들을 접근할 때 사용.NodePort: 파드에 접근할 수 있는 포트를 클러스터의 모든 노드에 동일하게 개방.LoadBalancer: aws, gcp와 같은 클라우드 플랫폼 환경에서만 가..
Deployment란???ReplicaSet의 선언적 업데이트를 제공하는 워크로드.Deployment Controller는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경한다.Deployment가 ReplicaSet을 만들고, ReplicaSet이 Pod를 만든다.즉 Deployment를 선언하면 ReplicaSet부터 파드까지 만든다. 그렇기 때문에 ReplicaSet을 직접 생성하는 것보다는 일반적으로 Deployment를 많이 사용한다. apiVersion: apps/v1kind: Deploymentmetadata: name: test-deployment labels: tier: orange app: nginxspec: selector: matchLabels: ap..