공부한 내용, 잊으면 안되는 내용을 적는 블로그. jekyll-now에서 kiko-now로 바꿈
- 당일 알게 된 내용을 정리한다.
- 정리를 하기 힘들다면 나는 무엇을 했는지는 쓰자
- TIL 내용을 바탕으로 Post를 준비하기
- 완성되지 않은 내용은 이슈에 적는다.
- 제대로 정리된 내용을 포스팅
- 다른 사람이 이해하기 좋은 형태로 포스팅
- 바로 올리기 힘들다면 draft부터 시작하기
TIL TIL TIL
License: MIT License
공부한 내용, 잊으면 안되는 내용을 적는 블로그. jekyll-now에서 kiko-now로 바꿈
helm은 k8s의 패키지 매니저 역할
helm은 차트라고 불리는 포맷을 패키징에 사용한다.
{{ }}
사이에 오는 값들을 치환한다. {{ .Release.Name }} 에서 .
은 네임스페이스에 있는 요소를 구분한다.
기본적으로 values.yaml
파일에 있는 값이 사용 됨. -f file.yaml
옵션으로 install시에 넘길 수 있음. --set a=a
으로 value 전달 가능 --set
으로 준게 기존 걸 덮어쓰기함.
60개 이상의 함수가 있고 Go template language로 정의할 수 있다.
{{ quote .Values.favorite.food }}
: quote라는 함수를 적용한다. 이는 값에 쌍따옴표를 붙인다.
{{ Values.favorite.food | upper | quote }}
: upper라는 함수 적용(대문자로 변경) 후 quote 적용
drink: {{ .Values.favorite.drink | default "tea" | quote }}
: 값이 없으면 "tea"를 사용
위에서 아래로. 각 컬러 컴포넌트는 싱글 스캔으로 인코딩 됨.
다중 스캔(2~896)으로 인코딩 됨. 디코드 되면서 보임. 스캔 수가 증가할 수록 뚜렷해짐 (최종 사진에 가까워짐).네트워크 다운로드에 유리.
부분이미지인 프레임으로 다운 샘플링한다. 전송률이 낮은 네트워크에서 유리하지만, 매우 복잡하다.
원본이미지 손상이 가지 않게 한다. 대신에 압축률이 적을 수 밖에 없다.
JPEG-LS라는 새로운 것이 나왔다.
JPEG에서는 Big endian이다.
샘플링된 상대적인 주파수. 아날로그에서 디지털로 표현될때 주파수이다. 높을 수록 구체적인 정보를 포함한다. YCbCr에서는 Y에 비해서 CbCr이 사람이 볼때 덜 민감하게 느끼므로 이 부분을 줄여서 압축이 가능하다.
데이터의 블록
특정 사이즈의 픽셀 블록(ex : 8*8)
Interleving된 Scan이 Data unit의 그룹으로 인코딩된 것을 의미
교차로 같이 보여줌
ex) YCbCr 은 휘도와 색차를 Interleaving한다.
하나의 프로그램에 웹서버와 서블릿 컨테이너가 같이 있음 ex) tomcat만 띄운경우
웹서버와 서블릿 컨테이너가다른 프로그램으로 분리되어 있음. 플러그인 형태로
연결 됨 ex) Jboss안에 tomcat
웹서버와 서블릿 컨테이너가다른 프로그램으로 분리되어 있음
컨트롤 플레인은 시스템 내 모든 쿠버네티스 오브젝트의 레코드를 유지하면서 오브젝트의 상태를 관리하는 제어루프를 지속적으로 구동시킨다.
클러스터에 대해 바라는 상태를 유지할 책임. kubectl로 상호작용하면 마스터와 통신하는 것
VM, 물리 서버 등이다. 마스터는 각 노드를 관리한다.
클러스터에 관한 전반 적인 결정(스케줄링 같은거) 과 이벤트에 감지하고 반응
k8s api를 노출하는컨포넌트. k8s 컨트롤 플레인의 프론트 엔드, 수평확장.
모든 클러스터 데이터를 담는 key-value store
노드가 배정되지 않는 새로생성된 pod를 감지하고 그것이 구동될 노드를 선택하는 컴포넌트
다양한 요소가 결정을 위해서 고려됨
컨트롤러를 구동하는 마스터 상의 컴포넌트
논리적으로는컨트롤러는 개별 프로세스 이미지만, 복잡성을 낮추기 위해 단일 바이너리로 컴파일되고 단을 프로세스상에 실행된다.
클라우드 제공 사업자와 상호 작용하는 컨트롤러를 작동. 다음 컨트롤러는 클라우드 제공사업자의 의존성을 갖는다.
동작 중인 Pod 유지, 쿠버네티스 런타임 환경 제공, 모든 노드 상에서 동작
에이전트로 파드에서 컨테이너가 확실하게 동작하도록 관리한다. PodSpec에 맞게 동작하는지 보장한다.
네트워크 프록시, 쿠버네티스 Service 개념의 구현, 노드의 네트워크 규칙을 관리한다.
컨테이너 실행을 담당
쿠버네티스 리소스(데몬 셋, 디플로이먼트)를 통한 클러스터 기능 구현
모든 쿠버네티스 클러스터는 DNS가 존재, DNS를 제공한다.
대시보드 클러스터를 위한 범용의 웹기반 UI
시계열 매트릭스, 조회를 위한 UI
중앙로그 저장소에 컨테이너 로그를 저장. 검색과 열람 인터페이스 제공
https://kubernetes.io/docs/concepts/cluster-administration/addons/
쿠버네티스에서 영속성을 가지는 개체, 클러스터의 상태를 나타냄. 의도를 담은 레코드
쿠버네티스 시스템은 Status를 Spec에 맞도록 능동적으로 관리한다.
의도한 상태를 기술
오브젝트의 실제 상태를 기술, 쿠버네티스에 의해 제공되고 업데이트
보통은 .yaml파일로 기술하고 kubectl에 정보를 제공해준다.
kubectl을 이용해서 직접 동작시키는 방식. 간단하지만 관리가 어려움
YAML 파일을 이용한 방법. 관리하기 좋지만, 문법이해가 필요. 많이 사용하는 방식
(이해 안됨)
파일에서 수행할 작업을 정의하지 않고 로컬 오브젝트 구성파일을 대상으로 동작함, kubectl에 의해 생성, 업데이트, 삭제가 감지된다. 보통 디렉토리를 대상으로 동작.
예측이 불가능한 상황에서 디버깅의 어려움, 복잡해짐
클러스터의 각 오브젝트는 해당 유형의 리소스에 대해 고유한 이름과 UID을 가지고 있다.
동일한 물리 클러스터에서 다중의 가상클러스터를 지원하기 위해 사용하는 추상화
오브젝트를 중복없이 식별하기 위해 쿠버네티스 시스템이 생성하는 문자열
동일 물리 클러스터를 기반으로 하는 복수의 가상 클러스터, 이름의 범위를 제공
노드, 퍼시스턴트 볼륨등의 저수준 리소스, 네임스페이스 자체
파드와 같은 오브젝트의 첨부 된 키와 값의 쌍, 사용자에 오브젝트의 특성을 식별하는 데 사용 된다. 레이블은 언제가 수정이 가능하다.
레이블은 고유하지 않다. 많은 오브젝트에 같은 레이블을 가질 수 있다. 레이블 셀렉터를 통해 오브젝트를 식별할 수 있다.
//accelerator=nvidia-tesla-p100인 레이블을 가진 노드를 선택하는 경우
apiVersion: v1
kind: Pod
metadata:
name: cuda-test
spec:
containers:
- name: cuda-test
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1
nodeSelector:
accelerator: nvidia-tesla-p100
쿠버네티스 어노테이션을 사용하여 임의의 비식별 메타데이터를 오브젝트에 첨부 할 수 있다.
레이블과 달리 식별하는데 사용하지 않는다.
한 개 이상의 리소스 필드 값에 따라 쿠버네티스 리소스를 선택하기 위해 사용한다.
서버에 요청이 몰려서 기다리다가 타임 아웃 되는 경우
커넥션이 맺어졌으나 I/O 때문에 타임아웃 되는 경우
Ack가 안와서 타임아웃
https://tools.ietf.org/id/draft-thomson-hybi-http-timeout-00.html#rfc.section.1.1
Pull based - 가지고 와서 상태를 보여줌?
커맨드 패턴기반
DispatcherServlet - FrameworkServlet(ApplicationContextAware) - HttpServletBean(EnvironmentCapable, EnvironmentAware) - HttpServlet - GenericServlet(Servlet, ServletConfig, Serializable)
설정을 컨테이너와 분리하기 위해서 사용
apiVersion: v1
kind: ConfigMap
metadata:
name: [원하는 이름]
...
data:
key:value
key:value
......
key:value
kubectl apply -f [파일명]
spec:
containers:
...
env:
- name: [환경 변수로 사용될 이름]
valueFrom:
configMapKeyRef:
name: [선언한 configMap 이름]
key: [configMap에서 정한 값]
Pod에 들어가서 확인 가능
echo $[환경변수로 사용될 이름]
spec:
containers:
...
envFrom:
- configMapRef:
name: [선언한 configMap 이름]
spec:
containers:
...
volumes:
- name: config-volume
configMap:
name: [선언한 configMap 이름]
복잡한 클러스터를 관리해주는 서비스 매쉬, Pod들을 관리함(트래픽, 보안, 모니터, 확장). side car 형태로 envoy 프록시를 주입해서 연결됨
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.