
TF 기본 명령어테라폼을 사용하기 위한 기본 명령어, 플로우를 알아보자.나의 환경의 경우 terraform을 tf로 줄여서 사용하고 있다.tf init테라폼을 사용하기 위해서 가장 먼저 tf init이 선행되어야 한다.tf init이란 현재 작성된 파일을 기준으로다양한 프로바이더의 플러그인 등을 설정하고, 디렉토리 초기화, 백엔드 설정, 모듈 초기화 등의 작업을 수행한다.resource "local_file" "abc" { content = "abc!" filename = "${path.module}/abc.txt"}위와 같은 파일이 있을 때, 다른 명령어를 선행해보자.에러 메세지를 출력하며, tf init 명령어를 제안하고 있다.tf init 명령어를 수행 시main.tf 파일에서 local_fi..

이번에는 서비스라는 쿠버네티스 리소스가 어떤 식으로 네트워크를 돕는지 알아보자. 쿠버네티스 공식문서에서 서비스에 대한 내용을 살펴보자 서비스 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법 쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할 필요가 없다. 쿠버네티스는 파드에게 고유한 IP 주소와 파드 집합에 대한 단일 DNS 명을 부여하고, 그것들 간에 로드-밸런스를 수행할 수 있다. 동기 쿠버네티스 파드는 클러스터 목표 상태(desired state)와 일치하도록 생성되고 삭제된다. 파드는 비영구적 리소스이다. 만약 앱을 실행하기 위해 디플로이먼트를 사용한다면, 동적으로 파드를 생성하고 제거할 수 있다. 각 파드는 고유한 IP..

쿠버네티스의 네트워크는 클러스터 내부 요소들에 대해서 물리적인 위치에 구애받지 않고 통신할 수 있다. 하지만 이러한 네트워킹 요소에는 Pod 네트워크, Service, Cluster IP, container ports, host ports, node ports 등 고려해야 할 요소가 너무 많다. 그래서 쿠버네티스의 네트워킹 방식에 대해 알아보자. 도커 네트워크 일단 쿠버네티스를 알아보기 위해서는 항상 먼저 도커를 이해하는 것이 도움이 되는 것 같다. 도커를 통해 컨테이너와 도커 호스트는 어떻게 통신하는 지 알아보자. 도커를 설치하면 docker0라는 인터페이스가 생긴 것을 볼 수 있다. 이 인터페이스는 가상 인터페이스이며, 특별한 설정 없이는 디폴트 대역대를 부여 받는다. 이 docker0는 컨테이너가 ..

분산 추적 체계 & 로그 중심으로 Observability 확보하기 세션 링크 많은 기업들이 기업 소프트웨어 경쟁력을 향상시키기 위해 애플리케이션을 현대화하기 위해 많은 투자를 하고있다. 현대 소프트웨어 개발에서 필수로 채택되어야 하는 것들로 여겨지는 MSA와 같은 기술은 장점만 있을까? 이러한 기술들이 가상화 및 추상화를 기반으로하고 있어 문제 발생시 추적하기 더 힘들어지고 있다. 동적으로 변경되는 인프라, 단일 요청을 처리함에도 여러 개의 네트워크 홉을 통과해야 하는 구조, 높은 카디널리티를 가진 지표 등은 기존의 모니터링 기반의 문제 탐색을 어렵게 한다. 그래서 겪어보지 못한 새로운 현상에 대한 가시성을 제공하고, 원인에 대한 질문을 답할 수 있는 시스템이 필요하다. 이를 Observability ..

고객 불안을 0으로 만드는 토스의 Istio Zero Trust 세션 링크 Zero Trust란? 유저나 기기가 신뢰할 수 있는 내부망에 있더라도, 절대 믿지 않는 원칙 기본적으로 신뢰하지 않고 올바른 권한을 가진 요청인지 검증하는 것이 제로 트러스트의 핵심 제로 트러스트를 달성하기 위해 고려해야할 요소로서는 아래와 같다. 네트워크 암호화 : 중간에 트래픽을 가로채 민감 정보들을 확인할 수 없도록 암호화. mTLS 접근 정책과 제어 : 인증을 통과한 사용자가 시스템 상에서 어떤 행위를 할 수 있는지 권한을 부여하거나 회수 mTLS, Istio 로깅과 모니터링 : 부인방지를 위한 로깅과 권한을 넘어선 행위에 대한 모니터링 Prometheus, Grafana, Elasticsearch, Kibana ... ..
유연하고 안전하게 배포 Pipeline 운영하기 세션 링크 Pipeline 반복하는 일을 자동화하는 시스템 서비스 빌드, 배포 라이브러리 업로드 작업 자동화 이 외에도 여러 운영 작업을 자동화하는 데에도 많이 활용 된다. 토스 뱅크의 Devops 토스 뱅크의 Devops는 Server Platform Team에 속해있다. 위 팀은 생산성, 안정성, 보안, Compliance, 서비스, 라이브러리 구현, 서비스 플랫폼 운영하는 팀 팀의 관점에서 Pipeline이란 아래와 같은 목표를 달성해야 한다. 생산성 : Pipeline을 빠르게 만들고 수정한다. 안정성 : Pipeline이 예상한대로 동작한다. 보안, Compliance : 모든 Pipeline에서 반드시 지켜야하는 요건이 있다. Complicanc..

세션 링크 컨테이너를 왜 쓸까? 다양한 서버 환경. 서버의 사양, OS 종류, 설치 환경 운영 비용 증가. 애플리케이션이 동작하는 환경 별로 대응이 어려움 서버 환경에 구애받지 않는 환경을 만들기 위해서 앱 전용 환경을 만든다. 이를 위해 필요한 것은 아래와 같다. 올인원 패키징 : 실행에 필요한 모든 것을 담는다 (코드, 라이브러리, 설정, 실행 파일) 격리 : 프로세스 주변 영향을 차단한다. 자원 할당 : 부여된 자원의 사용을 보장한다. 이를 위해 필요한 것은 컨테이너의 사용 요건 리눅스 기술 런타임(컨테이너 관리 도구) 윈도우에서 도커를 사용할 수 있었던 것은 도커가 백그라운드로 리눅스 VM을 기동해주기 때문이다. 이렇게 리눅스와 런타임이 있다면 컨테이너를 사용할 수 있지만, 여러 대의 컨테이너를 ..

I/O 작업은 블록 디바이스로 전달되기 전에 I/O 스케줄러를 거치게 된다. I/O 스케줄러는 접근 속도가 상대적으로 느린 디스크에 대한 성능을 최대화하기 위해 구현된 커널의 일부분이며, 모든 I/O 작업은 I/O 스케줄러를 통해서 블록 디바이스에 전달된다. I/O 스케줄러의 필요성 I/O 스케줄러 이 전에 디스크에 대해 살펴보자. 디스크는 크게 기계식 부품으로 이루어진 HDD와 플래시 메모리를 기반으로 이루어진 SSD가 있다. HDD는 디스크 헤드가 플래터 위를 움직이면서 읽고 쓰는 작업을 한다. 그래서 저장된 데이터를 읽기 위해서 디스크 헤드를 특정 플래터 위치로 움직이게 해야 한다. 헤드는 물리적으로 이동하는 데 시간이 걸리고 HDD에서 가장 많은 시간을 소모한다. 그래서 헤드의 움직임을 최소하고 ..