전체 글 794

calico-kube-controllers pod pending오류 해결

오류 쿠버네티스 클러스터를 처음 설치하고 calico CNI를 설치한 과정에서, calico-kube-controllers pod가 pending상태로 있었습니다. kubectl describe pod로 확인하면 untolerated taint 메세지가 있었습니다. 원인 쿠버네티스 클러스터 설치 순서를 잘못해서 오류가 발생했습니다. 아래 순서대로 실행했어야 했는데, 1 -> 3 -> 2로 실행해서 오류가 발생했습니다. 1. kubeadm init 2. CNI 설치 3. worker node join 쿠버네티스 control plane node에는 pod가 스케쥴링 되지 않도록 taint가 설정되어 있습니다. 하지만, calico-kube-controllers pod는 contrl plane node에 설..

정자역 인테리어가 좋은 식당

정자역 "미담" 식당이 23년 2월에 오픈했나봐요. 직접 들어가보니 인테리어가 매우 좋았습니다 미담은 2층에 있습니다. 1층은 아래처럼 꽃으로 디자인되어 있어요. 입구에 들어가면 자연이 마중하는 느낌이 납니다. 자연소리와 꽃, 징검다리 등의 숲속 인테리어로 되어 있어요. 입구에 가까운 자리에 앉았습니다. 좌석은 징검다리가 안내해주고 있네요

일상생활 2023.02.23

백준 1062 가르침

문제 분석 a~z까지 알파벳을 공부하고 입력단어를 만들 수 있는지 확인하는 문제입니다. 알파벳 공부개수를 제한시키는 제약이 있습니다. 그리고 제약조건에 단어는 "anta"로 시작하고 "tica"끝난다고 되어 있으니, "a", "c", "i", "n", "t" 총 5개 알파벳은 무조건 공부 해야 합니다. 첫 번째 예제를 분석해볼게요. 3 6 antarctica antahellotica antacartica K가 6개이므로 미리 학습해야 하는 5개를 제외하면 1개 알파벳만 추가공부할 수 있습니다. 따라서 1, 3번째 단어만 공부할 수 있습니다. anta rc tica -> r 추가 공부 anta hello tica -> h, e, l, o 추가 공부 anta car tica -> r 추가 공부 푸는 방향 1..

Argocd kustomize --enable-helm 옵션 활성화

문제 Argocd에서 kustomize로 helm을 사용할 경우 에러가 발생합니다. default설정으로 kustomize --enable-helm이 설정되어 있지 않기 때문입니다. 해결 참고자료: https://argo-cd.readthedocs.io/en/stable/user-guide/kustomize/#kustomizing-helm-charts kubernetes configmap에서 argocd-cm에서 kustomize옵션에 --enable-helm을 추가합니다. helm으로 Arogcd를 설치한 경우, values.yaml을 오버라이딩하면 됩니다. configs: cm: kustomize.buildOptions: --enable-helm

python logging모듈 잘못된 설정

문제 아래 예제는 단순히 logging모듈을 이용하여 "hello world"를 출력하는 예제입니다. 예제 코드: https://github.com/sungwook-practice/python_logging_logger.git # log.py def getLogger(): """로거 생성""" logger = logging.getLogger() logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') stream_handler = logging.StreamHandler(sys.stdout) stream_handler.setFormatter(formatte..

클래스 상속을 이용하여 if~else문 리팩토링

개요 쿠버네티스 API를 이용하여 pod를 조회하는 로직이 있는데, 예외 라벨규칙이 계속 추가되면서 if~else가 많아졌습니다. if~else를 어떻게 하면 덜 사용할 수 있을까를 고민하다가 클래스 상속을 사용해보기로 했습니다. 개선 방법 pod조회시 사용하는 라벨을 오버라이딩 하는 방법을 선택했습니다. 기본 클래스는 pod조회할 때 사용할 라벨을 함수를 사용하여 생성합니다. 예외 규칙이 필요한 pod는 클래스를 상속하여 라벨생성 함수만 오버라이딩하여 if~else를 제거 했습니다. class Parent: def serach_pods(self): labels = self.generate_labels() pod 조회(labels) def generate_labels(self): return "a=b" ..

회고모음 2023.02.14

python logger설정

파이썬에서는 logging이라는 모듈을 기본 제공합니다. 사용방법은 로거를 로드하고 핸들러를 추가하는 방향으로 되어 있습니다 .핸들러는 로깅할 때 어떻게 로그를 출력할것인가를 설정하는 부분입니다. sys.stdout을 많이 사용합니다. import logging logger = logging.getLogger() logger.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') stream_handler = logging.StreamHandler(sys.stdout) stream_handler.setFormatter(formatter) logger.addHandle..

conatinerd insecure설정

continaerd가 self signed인증서를 사용하는 doeckre registry 이미지를 pull하는 방법을 소개합니다. /etc/containerd/config.toml파일을 수정합니다. plugins."io.containerd.grpc.v1.cri".registry.configs필드에 "insecure_skip_verify = true"를 설정합니다. [plugins] [plugins."io.containerd.grpc.v1.cri"] ... [plugins."io.containerd.grpc.v1.cri".registry] ... [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri..

백준 17471 게리맨더링

백준 17471 게리맨더링 문제에서 배웠던 점은 인접한 노드를 코드로 어떻게 구현할 것인가입니다. 그림으로 봤을 때는, A Group과 B group을 구분하는게 쉽지만 코드로 구현하기에는 매우 어려웠습니다. 여러 방법이 있겠지만 저는 BFS로 풀었습니다. visited라는 임시 배열을 만들고 BFS로 방문한 노드를 visited에 체크(True)했습니다. 그리고 group의 노드 갯수와 visited배열에 True로 체크된 노드 갯수가 같으면 인접하다고 판단했습니다. 수도코드는 아래와 같습니다. def bfs(nodes: list): ... visited = [0,] * (N+1) while queue: ... for i in range(1, N+1): 예외규칙 ... visited[i] = True ..

주말에 오픈소스 업그레이드 지원을 가면서 ...

2.11(토) 21:00 ~ 2.12(일) 08:00에 작업을 하면서 느꼈던 점을 정리합니다. 간단히 지원작업을 설명하면, 쿠버네티스와 오픈소스를 업그레이드 중 장애가 발생할 경우 장애조치 지원을 맡았습니다. 역시 팀원과 일하는게 즐겁다! 거의 2년 동안 정자역에 파견을 가면서 거의 혼자 일했던 것 같습니다. 어려운 문제를 만나면 혼자 고민하고 올바른 방향으로 하는건지 매우 힘들었었습니다. 하지만, 이번 작업은 저를 포함하여 5명 팀원이 갔습니다. 각자 맡은 일을 하며 장애를 마주치면, 각자 이야기를 나눠 장애를 해결하는 과정이 재밌었습니다. 대기업 서버납품회사의 실망감 제가 작업을 지원한 곳은 워크스테이션 서버를 납품하는 회사의 서버를 구매한 상황입니다. 그지고 서버 엔지니어, 인프라 엔지니어 등등 역..

회고모음 2023.02.12