공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지 196

DevNation Day 2020 - Knative Backstage (how autoscaler actually works)

Knative BackStage - how autoscaler Actually works https://youtu.be/sh9mfUExX9o Paul Morie. Serverless Engineering team at RedHat 일반적으로 Serverless 하면 Function as a Service나 AWS Lambda를 떠올린다. 그 정도 full experience를 다루는 건 아니고 Enabling core technology / concept를 다룬다고 보면 됨. Knative Serving: Scaling Application on-demand. Knative Eventing: working with events that are emitted by different sources. Knat..

if kakao 2021 - k8s Cluster 확장, 어디까지 알아보고 오셨어요?

https://if.kakao.com/session/119 if(kakao)2021함께 나아가는 더 나은 세상if.kakao.com Multi-IDC 구축하면서 SLA 확보하기 위한 시도들.  카카오페이는 현재 800여 개 이상의 microservice를 k8s에서 운영중.장애가 날 만한 상황은 예방하기 + 안정적으로 운영 가능한 아키텍처 구축이 필요함.  k8s 운영 시 발생할 수 있는 위험요소들을 정리한 영역k8s cpu 관련 이슈 : limit / 쓰로틀링리눅스 커널 업데이트, pod 개수와 성능 보장 등istio 관련 이슈 - 카카오페이는 service mesh로 istio 쓰는가 보다프로토콜 선택 관련 이슈citadel 인증서 기한 만료envoy의 hot restart fail 이슈hot res..

Writing Beautiful Package in Go

Golang UK Conference 2017 발표. https://youtu.be/cmkKxNN7cs4 go로 개발한 오픈소스 패키지가 여러 사람들에게 유용하고 쉽게 쓰이려면 어떻게 해야 하는지를 설명한 강연 package는 go파일 (_test.go 포함) 로 구성된 하나의 디렉토리. 다른 프로젝트에서 import해서 사용할 수 있음 exported / internal 두 종류가 있음 main 패키지 말고. main 패키지는 command를 의미함 user-centred Design 결국 사람이 쓰는 거니까, 개발하려는 프로덕트의 최종 사용자의 요구사항, 제한조건을 고려해서 설계해야 한다. 따라서 고민해야 할 점 누가 쓸 건지 하려는 건 무엇인지 왜 하려는 건지 굳이 내 패키지를 쓰려는 이유는 뭔지 ..

Go - Context 정리

Context Package https://youtu.be/mgJMIZsWfB4 go의 다양한 패키지에서 사용되고 있는 Context Context의 기능은 크게 세 가지. Deadlines Concellation Signals Request-scoped values Deadline - withTimeout, withDeadline WithDeadline: 시작 시간과 끝 시간을 정하고, 그 시간동안만 실행되도록 (endtime) WithTimeout: 시작 시간을 정하고, 얼마의 시간이 지난 뒤 종료되도록. (Duration) const shortDuration = 1 * time.Millisecond func main() { ctx, cancel := context.WithTimeout(context..

Complete Jenkins Pipeline Tutorial | Jenkinsfile explained 정리

https://youtu.be/7KCS70sCoK0?si=9hFFX18UXpCPfres Jenkinsfile Jenkins 파이프라인의 종류는 크게 두 가지. script : groovy engine으로 직접 실행. node {} 명령어를 사용하며, groovy를 알아야 쓸 수 있음 declarative : 간단하게 파이프라인을 생성할 수 있지만 script에 비해 제약이 있는 편. post 명령어 파이프라인 맨 끝에서 실행할 수 있도록 하는 명령어. always: 성공 실패여부 관계없이 반드시 실행 success : 성공했을 경우 실행 failure : 실패했을 경우 실행 Define Conditional / When, Environment Variable when { expression { }} 형태..

빠르게 정리하는 데이터베이스 (3) Normalization

Database Normalization DB 정규화: 목적저장되는 데이터의 중복을 줄이고불필요한 데이터 변경을 최소화하며단순한 쿼리로 원하는 데이터를 얻기 위함. 예컨대 위와 같은 테이블 구조에서university 이름과 주소는 서로 의존적임. (일반적으로) 이름이 바뀌면 주소도 같이 바뀌어야 함.정규화 관점에서는 이런 형태의 데이터를 Redundancy로 취급한다.따라서, 서로 의존성을 띄고 있는 university 이름 / 주소 정보는 별도의 테이블로 만든 뒤, primary key를 Student 테이블에 매핑한다.제1정규화 (1NF) 확장하기 쉬운 DB 테이블 구조여야 한다.모든 DB 테이블의 value는 atomic해야 한다하나의 컬럼에는 하나의 데이터 타입만 허용한다.컬럼명은 unique해야..

CKA 대비 kubernetes 스터디 - 8. Networking (2)

Networking Cluster Nodes k8s cluster는 여러 개의 노드 - 마스터 노드, 워커 노드 - 가 network interface로 연결되어 있는 형태. 각각의 노드에는 ip address가 매핑되어 있어야 하고, unique hostName이 있어야 하며, 고유한 Mac Address 값이 있어야 한다. 기존 VM을 복사해서 노드를 생성할 때 특히 유의할 부분임. kubernetes 컴포넌트를 실행하고, 컴포넌트 간 통신을 위해 열려 있어야 하는 포트들. https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/#steps-for-the-first-control-plane-node ..

CKA 대비 kubernetes 스터디 - 8. Networking (1)

알아둬야 할 Linux Networking Prerequisite 내용. Basics : Linux Networking A가 B에게 통신하려면? Switch에 연결한다. -> switch는 두 개의 시스템을 연결하는 네트워크를 생성한다. switch에 연결하기 위해서는, 각 호스트가 사용해야 할 인터페이스가 있다. ip link 명령어로 해당 PM / VM의 인터페이스를 확인할 수 있다. 예컨대 예시의 경우 eth0 이라는 이름의 인터페이스가 확인됨. switch 내부의 네트워크가 192.168.1.0 이라고 가정한다면, 두 개의 컴퓨터 A와 B는 아래의 명령어를 사용해서 switch 내부의 네트워크에 자신의 정보를 등록할 수 있다. ip addr add 192.168.1.10/24 dev eth0 ip..

CKA 대비 kubernetes 스터디 - 7. Storage

Docker Storage 크게 두 가지 개념이 있다. Storage Driver docker는 데이터를 어디에 저장하는지, container에서 fileSystem을 어떻게 관리하는지. docker image를 실행하면, /var/lib/docker 라는 경로를 컨테이너 내부에 생성한다. aufs, containers, image, volumes 등 하위 경로도 같이 만들어진다. 여기까지가 docker에서 흔히 말하는 'data' 필드. Docker의 Layered Architecture dockerfile의 맨 윗줄부터 하나씩 레이어를 쌓아가면서 이미지를 생성한다. 각 레이어는 이전 레이어에서 추가된 내용만을 저장하며, 로컬에 캐시된다. 따라서, 비슷한 dockerfile을 빌드하게 될..

CKA 대비 kubernetes 스터디 - 6. Security (2)

API Group - prerequisite for Authorization version: 클러스터 버전 확인용. health / monitor: checking health를 위해 사용함. logs : 3rd party 프로덕트와 통신할 목적으로 사용함 API - cluster functionality를 위한 API라서 좀더 상세히 다룬다. api : Core Group. k8s 자체의 핵심 기능을 주로 담당한다. Namespace, node, Persistent Volumes 등등 apis : Named Group. more organized / newer features are available. 특정 리소스를 docs에서 선택하면, 어떤 API에서 호출할 수 있는지 확인해준다. 아니면 클러스터에..