Infra

    k8s service webhook issue 해결

    오늘은 k8s를 활용하면서 겪었던 webhook issue에 대해 적어보려구 합니다 !! 일단 제가 k8s에 대한 경험이 많이 없어서 이 문제를 조금 오랫동안 해결하려고 노력했던 것 같고 진짜 허무하게도 CNI 플러그인 이슈였더라구요 ㅎ,,, 😂 저는 처음에 DNS 문제이거나 k8s apiserver가 webhook svc에 대한 ca를 제대로 읽지 못하는 문제, 아니면 저의 token이 잘못됐다는 생각을 했던 것 같아요.. 하지만 configmap과 secrets을 봤을 때 모두 다 정상적으로 되어 있었구 처음에는 DNS 오류가 있긴 했지만 이후에 해결해도 문제가 나더라구요 ㅎ,, cert-manager는 certificate를 관리해주는 일종의 컴포넌트라고 생각하시면 될 것 같구 저는 flink가 c..

    Deployment

    9.1 파드에서 실행 중인 애플리케이션 업데이트 파드를 업데이트하는 방법에는 두가지가 존재. 하나는 기존 파드를 모두 삭제한 다음 새 파드를 시작하는 방법, 다른 방법은 새로운 파드를 시작하고 기동하면 기존 파드를 삭제하는 방법이 존재. 첫번째 방법은 블루-그린 디플로이먼트라고 부르고 두번째 방법은 롤링업데이트 방식이라고 불림. 첫 번째 방법의 단점은 기존 파드에서 새 파드로 교체되는 시간 동안에는 애플리케이션을 사용할 수 없다는 단점이 있고 두 번째 방법의 단점으로는 애플리케이션이 동시에 두가지 버전이 존재하게 된다는 단점이 있음. 블루-그린 디플로이먼트 방식은 잠시 동안 두배의 파드가 존재하게 되므로 더 많은 리소스를 필요하게 되지만 동시에 두가지 버전이 존재하지는 않음. 그리고 두 방식 보두 또 다..

    쿠버네티스 소개

    쿠버네티스 소개 1.1 쿠버네티스와 같은 시스템이 필요한 이유 1.1.1 모놀리식 구조에서 마이크로서비스 구조로 전환 옛날에는 소프트웨어 애플리케이션이 monolithic 구조였음. 현재도 레거시 시스템은 이런 경우가 많음. 현대에 와서는 이런 구조가 마이크로서비스라는 독립적으로 실행되는 더 작은 구성 요소로 세분화됨. 그래서 급변하는 비즈니스 요구사항에 맞춰서 서비스를 개발할 수 있게 됨. 하지만 서비스의 규모가 커지고 점점 늘어나면서 이걸 수동적으로 관리하는 것을 어려운일. 그래서 배포나 구성, 관리, 스케쥴링, 장애 처리를 해줄 수 있는 자동화 과정이 필요 -> 이 역할을 수행하는게 쿠버네티스 모놀리식 애플리케이션은 서로 강하게 결합되어 있고 전체가 하나의 운영체제 프로세스로 실행되기 때문에 하나의..

    ConfigMap과 Secret

    컨피그맵과 시크릿: 애플리케이션 설정 7.1 컨테이너화된 애플리케이션 설정 컨피그맵은 설정 데이터를 최상위 레벨의 쿠버네티스 리소스에 저장하는 방법을 말함. 시크릿은 컨피그맵과 비슷한 설정 데이터를 저장하지만 암호화 키 값은 보안과 관련된 정보를 저장한다는 차이가 존재. 7.2 컨테이너에 명령줄 인자 전달 7.2.1 도커에서 명령어와 인자 정의 dockerfile에서 ENTRYPOINT는 컨테이너가 시작될 때 호출될 명령어를 정의하고 CMD는 ENTRYPOINT에 전달되는 인자를 정의. ENTRYPOINT를 전달하는 형식은 shell과 exec형식이 있는 shell은 ex) ENTRYPOINT node app.js 방식이고 exec 방식은 ex) ENTRYPOINT ["node","app.js"] 방식이..

    Kafka consumer API

    컨슈머 API package com.example.kafkastudy.consumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory;..

    kafka producer API

    카프카 클라이언트 카프카 클라이언트 라이브러리를 사용하면 프로듀서 컨슈머 어드민 클라이언트로 카프카 클러스터에 명령을 내리거나 데이터를 송수신할 수 있다. 프로듀서 API 프로듀서 어플리케이션은 카프카에 필요한 데이터를 선언하고 브로커의 특정 토픽의 파티션에 직접 전송(직접 통신)한다. 프로듀서는 데이터를 직렬화하여 카프카 브로커로 보내기 때문에 자바에서 선언 가능한 모든 형태를 브로커로 전송할 수 있다. 💡 여기서 직렬화란 자바 또는 외부 시스템에서 사용 가능하도록 바이트 형태로 데이터를 변환하는 기술을 말한다. 인텔리제이에서 개발하기 위해선 일단 카프카 클라이언트 라이브러리를 gradle에 추가해야한다. plugins { id 'org.springframework.boot' version '2.7.3..

    kafka의 기본 개념 정리

    카프카의 기본 개념 카프카 브로커란? 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자, 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 어플리케이션 보통 하나의 서버에 한 개의 카프카 브로커 프로세스가 실행되며 데이터를 안전하게 보관하기 위해 3대 이상의 브로커 서버를 1개의 클러스터로 묶어서 운영 데이터 저장, 전송 카프카 브로커는 프로듀서가 요청한 토픽의 파티션에 데이터를 저장하고 컨슈머가 요청하면 파티션에 저장된 데이터를 전달하는데 데이터는 파일 시스템에 저장된다. 파일 시스템으로 저장하다보면 다루기 편하긴 하지만 지속적으로 입출력할 경우 메모리에 올려 사용하는 것보다 속도가 현저히 느린데 카프카는 여기서 페이지 캐시를 사용하여 디스크 입출력 속도를 높여 ..

    Kafka mac에서 설치 및 테스트

    들어가기 압서 mac에서 쉽게 homebrew를 이용해서 설치할 수 있는데 계속 zookeeper 오류가 뜨고 그래서 저는 공식 문서에 있는 quick start 를 참고하면서 진행했습니다! 그리고 참고로 이후 최신 버전에는 zookeeper가 deprecated된다고 합니다! https://www.infoworld.com/article/3660073/why-apache-kafka-is-dropping-zookeeper-for-kraft.html Why Apache Kafka is dropping ZooKeeper Replacing ZooKeeper with internally managed metadata will improve scalability and management, according to ..

    Kafka의 등장 배경 및 특징

    카프카의 등장 배경 링크드인에서 초기에 파편화된 데이터 수집 및 분배를 처리하기 위해 데이터를 생성하는 source application과 데이터가 최종 적재되는 target application을 단방향 연결을 함 ⬇️ 시간이 갈수록 애플리케이션의 개수가 늘어나고 데이터 전송 파이프라인이 늘어나기 시작하면서 아키텍쳐가 복잡해짐 ⬇️ 이는 서비스를 운영하는데 치명적이므로 링크드인 데이터팀은 다양한 데이터프레임워크와 오픈소스를 아키텍쳐에 녹여내어 개선하기 시작하지만 데이터 파이프라인의 복잡도를 개선하기엔 어려움을 겪음 ⬇️ 중앙집중화 시스템인 카프카라는 신규 시스템을 만들어내고 카프카는 기업의 대용량 데이터를 수집하고 사용자들이 이를 실시간 스트림으로 소비할 수 있게 해줌 카프카의 등장 카프카는 이렇게 소..