서비스 메시 (Service Mesh)? Mesh ? 이름 그대로의 역할 네트워크 전체에서 흩뿌려져 내부 동작을 손쉽게 제어 서비스 라우팅, 로드밸런싱, 텔레메트리에 대한 아이디어를 재구성 Kubernetes 이전? 관련된 기능을 특정 언어의 라이브러리로 제공했음 (물론 지금도 사용하는 곳도 많음) 무엇이 있었나? Scala - finagle Java - Netflix OSS (hystrix, ribbon), Spring cloud 만약 다른 언어에서 사용하고 싶다면? 사용할 수 없다. 해당 언어에서만 사용이 가능함. 해당 언어 애플리케이션에서 사용할 땐 의존성이 생기는 문제 단순히 import dependency가 아닌 애플리케이션 비즈니스 코드 내부로 깊게 침투해져 있는 경우가 많았다. 만약 이걸 때..
개요 서비스 (East-West) 파드 집합을 단일 유닛 또는 네트워크 서비스로 취급 로드밸런싱/라우팅. 서비스 검색 매커니즘. 레이어 3/4 매커니즘 인그레스 (North-South) 클러스터에서 실행되는 워크로드에 대한 진입점 세분화 된 트래픽 라우팅. 레이어7 로드밸런싱. 서비스 메시 더 진보된 라우팅, 보안, Observability 제공 East-West, North-South 지원 애플리케이션 소스코드 변경없이 Proxy/Sidecar를 이용한 통신 Kubernetes Service 여러 파드에서 걸쳐 트래픽을 로드밸런싱 하는 쿠버네티스의 핵심 API L3/L4 Layer load balancing -> TCP/IP, Port/IP 워크로드/파드는 대체 가능한 특성이기에 IP 대신 서비스를 이..
Kubernetes Secret 은 base64로 인코딩된 값을 data로 갖는다. data 필드의 모든 키(key)에 해당하는 값(value)은 base64로 인코딩된 문자열이어야 한다. https://kubernetes.io/ko/docs/concepts/configuration/secret/#시크릿-개요 그럼 일반적인 string을 base64로 어떻게 인코딩할까? 아주 간단하다. echo, base64 를 사용하면 된다. $ echo 'want-to-encode-this' | base64 d2FudC10by1lbmNvZGUtdGhpcwo= 근데 위와 같이 하는 경우, base64 인코딩 된 값을 비교하거나 할 때 문제가 생길 수 있다. 왜냐하면 echo 는 마지막에 무조건 newline(\n) 을..
Spring boot 웹 서버를 개발하고 Kubernetes에 배포할 때, Profile(local, dev, prd, ...)을 설정하는 법을 알아보자. Dockerfile을 사용해 컨테이너 이미지 빌드 Dockerfile을 통해 이미지 빌드 시, ENTRYPOINT에서 Jar 파일을 실행하며 Dspring.profiles.active 옵션을 통해 설정할 수 있다. ... ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "some.jar"] 해당 컨테이너 이미지를 실행시키면, dev profile로 설정되어 Spring boot 웹 서버가 실행된다. Buildpacks(ex. gradle bootBuildImage)를 통해 컨테이너 이미지 빌드..
Kubernetes를 CLI 상에서 활용하다보면 특정 리소스의 uid를 출력할 일이 생긴다. 그럴 때 마다 `kubectl edit`을 통해 uid 값을 확인하거나, `kubectl get kind/resource -o yaml`로 확인하곤 했다. 근데 이게 한 두 번이면 상관이 없는데, Operator를 개발하며 계속적으로 확인해야 했고 이 귀찮음을 이겨내고자 리눅스 커맨드라인을 사용하기로 했다. 그래서 결국 아래와 같이 하면 uid를 뽑아낼 수 있다. kubectl get pod request-pod -o yaml | grep uid | cut -d ":" -f 2 cut 대신 awk를 통해서도 뽑아낼 수 있다. kubectl get pod request-pod -o yaml | grep uid | ..
Operator에서 Controller를 만들 때, 해당 리소스의 status, spec 을 명시해주어야만 한다. spec 은 말 그대로 해당 리소스의 스펙을 의미해서 별로 헷갈리는게 없었는데, status 는 뭐지 하는 생각과 동시에 spec 도 해당 리소스의 스펙이라지만 어떻게 되는거지 라는 생각이 겹쳐져 전체가 헷갈리게 되버렸다. TL;DR spec: 원하는 상태(desired state)를 의미 status: 현재 상태(current state)를 의미 spec, status 가 다르다면, 쿠버네티스 시스템/Operator 등을 통해 status를 spec에 맞게 변경해나가게 된다. 단순히 보면 spec과 status가 같은 값을 가지고 status를 spec으로 맞춰주겠구나 할 수 있지만, 꼭 ..
Kubernetes Events는 하나의 Kubernetes 리소스 타입으로서 Kubernetes 리소스들의 state 변화, 에러 또는 시스템에 특정 메세지를 전파해야할 때 자동으로 만들어집니다. 이러한 Kubernetes Events 리소스는 Kubernetes 개발 및 운영하며 디버깅시에 매우 유용하게 사용됩니다 (공식문서에서도 디버깅 시에 Event를 활용하고 있습니다). Events 조회 Kubernetes Event는 어떻게 조회할 수 있을까요? 사실 Kubernetes를 다뤄보았다면 한번 쯤은 Events 리소스를 본 적이 있을겁니다. 가장 흔한 예로 이미지 Pull 실패 가 있겠네요. 잘못된 컨테이너 이미지를 입력해서 Deployment 또는 Pod를 생성해서 조회하면 아래와 같은 오류가 ..
helm 차트 생성 helm create template, test, values.yaml, Chart.yaml, README.md 등 파일들이 chart-name 디렉토리에 생성된다. helm 차트에 대한 조회 helm show 해당 차트에 대한 리소스를 조회할 수 있다. 근데, 사실 직접 파일 찾아서 cat으로 조회하는 것과 큰 차이가 없어서 별로 사용하지 않는다고 한다. cat 과의 차이라면 cat은 주석을 포함해 보여주지만, show를 사용하면 주석은 포함되지 않고 보여준다고 함. helm template에 values 넣어서 출력해보기 helm template helm chart 설치 전에 values가 들어간 상태로 결과를 출력해보고 싶을 때 사용한다. 설치 전, values가 제대로 들어가는..
- Total
- Today
- Yesterday
- Istio
- container
- 하루
- 비동기
- Intellij
- c++
- Spring boot
- 클린 아키텍처
- hexagonal architecture
- boj
- Clean Architecture
- python
- Kubernetes
- gradle
- docker
- jasync
- Algorithm
- MySQL
- Spring
- tag
- WebFlux
- HTTP
- 쿠버네티스
- 백준
- java
- 일상
- 로그
- 알고리즘
- Log
- k8s
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |