전체 글 88

트러블슈팅

1.  ImagePullBackOff1.1  철자 오류 또는 이미지 태그 오류이미지 이름 또는 이미지 태그를 잘못 기입해서 컨테이너 이미지를 찾을 수 없는 경우, 이미지 철자를 고쳐서 *.yaml 파일을 재작성하면 파드를 정상적으로 동작시킬 수 있습니다. 파드의 경우 파드를 삭제한 후 다시 파드를 재생성 해주어야 합니다. 1.2  권한 오류 사설 저장소에서 이미지를 가져와야 할 때 해당 저장소에 접근 권한이 없는 경우 오류가 발생할 수 있습니다. 이를 해결할 수 있는 여러가지 방법이 있는데 가장 간단한 해결 방법에 대해 알아보겠습니다. 그것은 ImagePullSecret을 생성하여 파드에 할당하는 것입니다. ImagePullSecret을 사용하면 파드가 이미지를 가져올 때 필요한 인증 정보를 제공할 수 ..

DevOps/Kubernetes 2024.11.06

Pull-based 접근 방식이 멀티 테넌트를 지원하는 방법

Pull-based 접근 방식이 멀티 테넌트를 지원하는 방법각 테넌트의 독립적 배포:Pull-based 배포 방식에서는 각 테넌트가 자신의 설정과 리소스를 Git 리포지토리에 선언적으로 정의해 두고, 각 테넌트의 네임스페이스에만 적용할 수 있습니다. 예를 들어, Flux나 ArgoCD 같은 도구를 사용하면, 각 네임스페이스는 자체 Git 리포지토리를 통해서만 업데이트되도록 설정할 수 있습니다.이러한 방식으로 각 테넌트가 독립적으로 배포를 관리하고, 하나의 테넌트가 다른 테넌트의 리소스에 영향을 주지 않게 할 수 있습니다.Git 리포지토리를 통한 명확한 액세스 제어:Pull-based 접근 방식에서는 각 테넌트가 자신에게 할당된 Git 리포지토리만 관리하도록 설정할 수 있습니다. 이를 통해 액세스 제어가 ..

DevOps/GitOps 2024.10.30

GitOps 원칙

0. 개념GitOps 원칙은 애플리케이션과 인프라 배포를 보다 안전하고 일관되게 관리하기 위해 Git 리포지토리를 중심으로 운영을 자동화하는 방법론입니다. GitOps의 주요 원칙을 이해하려면 다음 네 가지 핵심 원칙을 알고 있어야 합니다.1. 선언적 인프라 (Declarative Infrastructure)설명: 인프라와 애플리케이션의 상태를 선언적으로 정의합니다. Kubernetes의 YAML 파일처럼 모든 상태와 구성을 명확하게 기술해두면, 현재 상태와 원하는 상태 간의 차이를 쉽게 관리할 수 있습니다.장점: 선언적 파일을 사용하면 구성 변경의 추적과 버전 관리가 쉬워지며, 상태의 일관성이 높아집니다.2. Git을 단일 진실 소스로 사용 (Git as a Single Source of Truth)설..

DevOps/GitOps 2024.10.30

서비스 메시

서비스 메시란 서비스 메시는 마이크로 아키텍처 환경에서 코드의 변경 없이 서비스 간 통신을 담당하는 레이어이다. 여기서 서비스란 마이크로서비스 아키텍처에서 특정 기능을 제공하는 독립적인 소프트웨어 컴포넌트를 의미한다. 주로 담당하는 기능은 아래와 같다. - Traffic Management (트래픽 관리)- Security (보안)- Observability (모니터링 + 로깅)- Service Discovery (서비스 간 통신) 서비스 메시 구성요소서비스 메시의 구성 요소로 컨트롤 플레인과 데이터 플레인이 있으며 각기 다른 역할과 기능을 갖고 있다. 컨트롤 플레인 (Control Plane): 관리 및 조정: 네트워크, 서비스, 또는 클러스터의 구성, 정책, 및 규칙을 정의하고 관리합니다.메타데이터 ..

DevOps/Kubernetes 2024.10.30

인그레스 컨트롤러

서비스가 파드로 접근하는데 진입 지점을 제공해준다면 인그레스는 네트워크 7계층에서 여러 서비스로 진입하는데 진입지점을 제공해주고 이를 쿠버네티스 클러스터 안에서 구성할 수 있도록 도와준다. 인그레스를 구성하기 위해선 쿠버네티스 클러스터에 Nginx, HAPROXY, traefik 과 같은 솔루션 중 하나를 선택해서 배포해야 한다. 이와 같은 솔루션을 Ingress controller라고 한다. 그리고 설정 규칙을 Ingress resources라고 한다. 쿠버네티스 클러스터는 Ingress controller가 내장되어 있지 않다. 그래서 인그레스 리소스를 생성해서 적용하기 위해선 인그레스 컨트롤러를 구성해야한다. 인그레스 컨트롤러에는 여러 종류가 있다. 이중에서 GCE와 Nginx가 쿠버네티스 프로젝트..

DevOps/Kubernetes 2024.10.30

쿠버네티스 클러스터와 네트워크

쿠버네티스 네트워크가 구성되는 과정 - 브릿지 네트워크 인터페이스로CNI(Container Network Inteface) 없이 쿠버네티스 클러스터의 네트워크를 설정하기 위해선 어떻게 해야할까? 우선 노드 별로 브릿지 유형의 v-net-0 이름으로 네트워크 인터페이스를 생성한다. 노드 별 브릿지 네트워크를 사용하면 여러 네트워크 인터페이스를 묶어 같은 네트워크 내에서 데이터 패킷을 전달할 수 있도록 해준다. ip link add v-net-0 type bridge  인터페이스를 생성한 후 네트워크 인터페이스를 활성화하기 위한 과정이 필요하다. 활성화 해야지 패킷을 송수신 할 수 있는 상태가 된다. ip link set dev v-net-0 up  네트워크 인터페이스를 활성화 한 후 노드별로 서브넷 마스크..

DevOps/Kubernetes 2024.10.29

Kubernetes Image

파드를 생성할 때 이미지란을 적어주는 부분이 있다. 위 그림을 통해 이미지를 적는 형식을 알 수 있다. 위 예시에서 docker.io는 Docker Hub를 가리킵니다. library의 경우 공식 이미지들이 저장되는 네임스페이스를 나타냅니다. nginx는 이미지의 이름입니다. 정리하면 Dokuber Hub, library 네임스페이스에서 nginx 이미지를 가지고 오는 것입니다.프라이빗 레지스트리에서 이미지를 가지고 오는 경우도 있습니다. 이럴 때에는 Pod를 생성하는 yaml 파일에 imagePullSecrets에 docker-registry 유형의 secret을 만들어 추가해주면 해당 secret 정보를 바탕으로 프라이빗 레지스트리에서 이미지를 가지고 올 수 있습니다.

DevOps/Kubernetes 2024.10.29

Service Account 관련 주요 사항

개념서비스어카운트는 쿠버네티스나 프로메테우스와 같은 애플리케이션이 쿠버네티스 클러스터에 요청을 할 때 필요한 인증 및 인가를 위해 도입되는 개념이다. 이번 시간에는 해당 개념을 알고있는 사람을 대상으로 관련 내용을 정리해보는 시간을 가졌다.부가 내용- 파드 생성시 서비스 어카운트를 지정하지 않으면 쿠버네티스 기본 서비스 어카운트가 설정된다. 따라서 파드 생성시 서비스 어카운트를 지정하고 싶지 않으면 아래 그림처럼 authomountServiceAccountToken: false를 지정해야한다. - 현재 러닝 중인 파드에 새로운 서비스 어카운트를 지정하고 싶다면 yaml 파일 수정 후 파드를 삭제하고 다시 생성해야한다. kubectl edit pod my-kubernetes-dashboard 명령어로는 새..

DevOps/Kubernetes 2024.10.29

Kubernetes Authorization / 쿠버네티스가 인가를 처리하는 방법

1. 쿠버네티스의 인가이번 글은 쿠버네티스 클러스터가 api-server로 요청이 왔을 때 인가를 처리하는 방법에 대한  글입니다. 인증 과정 뒤에 해당 요청의 주체가 권한이 있는지 확인하는 작업으로 인증을 통과한 주체를 대상으로 권한을 확인하는 프로세스입니다. 인증과정이 궁금하시다면 아래 링크를 클릭해주세요. 쿠버네티스에서 인증을 처리하는 과정이 궁금하다면? 쿠버네티스가 인가를 처리하는 방법에는 크게 4가지 유형이 있습니다. 우선 Node Authorizer 부터 살펴보겠습니다. 1.1 Node Authorizer kubelet이 kube-apiserver를 대상으로 읽기와 쓰기 작업을 요청한다고 했을 때 kubelet에게 부여한 인증서를 기반으로 인가를 처리하는 예시를 살펴보겠습니다. 위 그림의 인증..

DevOps/Kubernetes 2024.10.28

Kubernetes API에 대해 알아보자

1. Kubernetes API 쿠버네티스 API는 목적에 따라 그룹화 되어 있다. version은 쿠버네티스의 버전을 보여주는 기능을 담당한다. metrics와 healthz는 클러스터의 상태를 모니터하는데 기능을 담당한다. logs는 써드파티 앱과 쓰여 로그와 관련된 기능을 담당한다. api와 apis에 대해 조금더 자세히 살펴보자.  api는 코어그룹이라고해서 위 그림에서 보시다 시피 쿠버네티스의 기본적인 리소스를 포함한다. 경로에 그룹 이름이 따로 붙지 않아 /api/v1/pods 와 같은 방식으로 접근한다. curl 명령어를 통해 kube-apiserver를 조회해서 조회할 수 있는 api목록을 확인할 수 있다.. apis는 Non-Core API Grouops이라고 해서 Core API 외에 ..

DevOps/Kubernetes 2024.10.28