Skip to content
Beside the Wheel
Search
Cancel
GitHub
LinkedIn
Select theme
Dark
Light
Auto
글
(57)
공부
(4)
코드 까보기, 오픈소스 기여해보기
데브옵스(네트워크) 스터디 후기
eBPF로 서버 성능 Profiling하는 법: Pyroscope의 구현 살펴보기
Downtime 없는 Spot Instance 클러스터 구축 과정
독후감
(33)
과학
(1)
니콜라 테슬라 평전
사회
(2)
능력주의와 불평등
그의 운명에 대한 아주 개인적인 생각
산문
(3)
보통의 존재
새는 날아가면서 뒤돌아보지 않는다.
시지프 신화 – 부조리에 관한 시론
소설
(11)
수레바퀴 아래서
멋진 신세계
데미안
말테의 수기
구토
인간실격
젊은 베르테르의 슬픔
노르웨이의 숲
삼국지
황야의 이리
고래
인문
(5)
지성적 회심
담론
효율성
미쳤다는 것은 정체성이 될 수 있을까?
영향에 대한 불안
자기계발
(5)
홀로 성장하는 시대는 끝났다
C의 유전자
네 명의 완벽주의자
세상에서 가장 긴 행복 탐구 보고서
학습하는 조직
전공
(3)
IT 엔지니어를 위한 네트워크 입문
코드로 인프라 관리하기 2판
데브옵스 엔지니어를 위한 실전 관찰가능성 엔지니어링
철학
(3)
지극히 인간적인 삶에 대하여
아리스토텔레스 수사학
사마의 평전
발표
(4)
Git hook으로 Repository README에 파일트리 넣기
2023 DSM 컨퍼런스 - 좋은 프로젝트에 대한 고찰
DSM DevOps 분야 설명회
Xquare 관련 컨테이너 기술 설명회
생각들
(7)
2023년에 쓴 일기장
변화에 대하여
비구조적인 회고에 대하여
의식의 영역에 대하여
국카스텐
짧은 생각들
소유냐 존재냐
회고
(9)
2022.03-04 대덕소마고 입학소감/다짐
2022.05-08 프로젝트와 인간관계
2022.09-2023.02 불안과 판단
2023.03-07 DMS 리더 회고
2023.08-11 나는 누구인가?
2023.12 더 많은 걸 배우기 위한 경험
2024.03-04 3학년으로서 근황
2024.05-07 나름 알찬 3학년
2024.08-12 첫 회사
TIL
(810)
DevOps
(272)
AWS
(77)
Analytics
(5)
Athena
EMR
Glue
Kinesis
Lake Formation
Computing
(15)
Auto Scaling
(5)
ASG Lifecycle Hook
Auto Scaling
Auto Scaling termination policies
Scaling cooldowns
State Change Event
EC2
(6)
EC2
EC2 Fleet
Elastic Fabric Adapter
Instance Store
RI와 Saving plan
Spot Instance
ECS
Elastic Beanstalk
Fargate
Lambda
Database
(6)
Aurora
DynamoDB
EFS
RDS
RDS proxy
Redshift
Management and governance
(4)
CloudFormation
CloudTrail
CloudWatch
LogGroup
Netwoking
(20)
elb
(3)
Application LoadBalancer components
Connection Draining
ELB
security
(3)
NACLs
Security Groups
WAF
Bastion Host
CloudFront
Direct Connect Gateway
EC2 Instance Connect Endpoint
ENI
Global Accelerator
NAT gateway & NAT instance
Route53
Transit Gateway
VPC
VPC endpoint
VPC Mapping Service
VPN
VPN Options
Security
(9)
AWS Managed Microsoft AD
Cognito
Conformance Packs & Security Hub
IAM
KMS
KMS Datakey
MalformedPolicyDocument
Microsoft Active Directory
WAF & Firewall Manager & Shield Advanced
Storage
(11)
EBS
(3)
EBS
EBS gp2 vs gp3
EBS vs Instance Store
AppSync
DayaSync
EFS
FSx
S3
S3 Glacier Vault Lock
Snow Famliy
Storage Gateway
API Gateway
AWS cloud computing
AWS Organization
Region과 Zone
SAA 오답노트
SAA 요약
Well Architected
Container
(22)
CNI
(3)
Calico
CNI
Install Calico
Docker
(15)
Docker Image Layer
dockersock 권한에러
DockerSwarm
exec user process caused exec format error
Overlay Network
Private registry 구축
Prune
README
가상화와 컨테이너
도커 네트워크
도커 네트워크 명령어
도커 명령어
도커 스토리지
도커 아키텍처
도커 안에서 도커 사용하기
cAdvisor
Container Orchestration
ContainerRuntime
Docker와 PID1
DR
(2)
DR strategies
Fail over와 서버 이중화
IaC
(12)
Terraform
(7)
aws 서버 네트워크 구축
Terraform
Terraform import와 Terraforming
Terraform taint
Terraform with AWS
Terraform 키워드
Terratest
Ansible
Cobbler
Configuration Drift
Phoenix Server
Understanding Ansible, Terraform, Puppet, Chef, and Salt
Kubernetes
(102)
EKS
(13)
Add IAM to RBAC
Amazon VPC CNI
AWS Load Balancer Controller
EBS CSI driver
EKS ALB
EKS Control Plane
EKS kubecofig
EKS Network BestPractice
EKS Spot Instances with Karpenter
EKS 인증과정
IP addresse prefix
NLB IP mode
Node not Ready
Network
(11)
DNS
(4)
CoreDNS
DNS in k8s
External DNS
ServiceDNS
Debugging DNS Resolution
eBPF
HTTPProxy
IPVS
NetworkPolicy
Network Troubleshooting
Node and Pod Network Layout
Service Mesh
(9)
istio
(9)
Dry run
gateway log debug 하는 법
Istio Arcitecture
Istio authorization
Istio Configuration Profiles
Istioctl
Istio RBAC
Resource Annotations & Labels
ServiceEntry
tools
(19)
ArgoCD
(5)
ApplicationSets
Apps of Apps
ArgoCD 설치
Config Management Plugins
Health Check
helm
(3)
Chart Development Tips
Helm
Values Files
Karpenter
(2)
Karpenter
Karpenter best practices
Kyverno
(2)
Kyverno
Usecases
GoCD
Install Cilium
K8s Metric API
MetalLB
node shell
Node Termination Handler
OPA Gatekeeper
개념
(31)
Node Scheduling
(3)
Assigning Pods to Nodes
cordon, drain
Taints and Tolerations
object
(15)
Annotation
CRD
Deployments
Deployment Status
Deployment Strategy
Events
ingress
Labels and Selectors
Pod
Pod Readiness and Probes
Pod 생성과정
PV & PVC
RollingUpdate
Service와 port
StatefulSets
Volume
(2)
attachdetach controller
CSIDriver
CNI Specification
Disruption Budget
Endpoints
etcd
HPA와 VPA
K8s의 도커런타임 사용중단
Kubeproxy
NodePort와 ServicePort와 targetPort
Workloads
가상 IP와 서비스 프록시
사이드카 패턴
실습
(15)
Auth
(5)
Authenticating
k8s 클러스터 root CA를 통한 사용자 인증
OIDC Authentication with Dex
Security Context for a Pod or Container
Token Webhook with Guard
10 most common mistakes using kubernetes
Cert manager
End user RBAC
K8s를 위한 SpringBoot 개발
kubectl context
minukube 시작하기
NetworkPolicy Cilium example
Pulling images from ECR on Kubernetes
SpringBoot 서비스를 위한 Kubernetes 설정
환경변수 설정
K8s Architecture
Kubernetes
Kubernetes Overview Diagrams
MetalLB
Monitoring
(24)
datadog
(5)
datadog
DatadogAnomalydetectionAlgorithms
datadog APM 기능 사용하기
datadog 아키텍처
helmChart로 Agent 설치
elk
(4)
Elastic Search
ElasticSearch 검색 명령어
ELK Stack
Logstash
grafana
(2)
Granafa agent
Pyroscope Distributor and Ingester
loki
(1)
Loki Canary
prometheus
(5)
kiali with prometheus
prometheus
prometheus agent mode
prometheus glossary
prometheus storage
thanos
(2)
Rule
Thanos
DeepFlow
DeepFlow 논문 요약
Grok exporter
SLO, SLI, SLA
telemetry
Proxy
(15)
envoy
(3)
Envoy
LDS
xDS configuration
nginx
(9)
location block
nginx certbot
nginx docker
NGINX Ingress Basic Auth
nginx 명령어
nginx 설정
sites available
SSL passthrough
리버스 프록시
Contour
Contour CRD 설치
Reverse Proxy vs. Ingress Controller vs. API Gateway
tools
(14)
Clium
CUE
Dex
Dex K8s Authenticator
GPG
jenkins
Keycloak
minio
Mortar
OpenHistorian
openssl로 pemKey 만들고 접속하기
Packer
tar
Vault
CI/CD파이프라인
Cloud Agnostic Design
Platform Engineering
데브옵스
Network
(59)
error
(1)
Context deadline exceeded
L1 network access layer
(8)
CRC
Ethernet과 TokenRing
L2 스위치와 STP
MTU
NIC
데이터링크 제어(DLC)
매체 접근 제어(MAC)
아날로그, 디지털 신호와 전송
L2 internet layer
(15)
라우터
(4)
ECMP
라우터
라우팅 알고리즘
멀티캐스트 라우팅
CIDR
ICMP
IP
IPAM
IPSec
IP 데이터그램과 단편화
NAT
PacketTracer 네트워크 구성
secondary IP
서브넷
정보기기운용기능사 실기
L3 transport layer
(6)
4계층 장비
SO_REUSEADDR
SSH config
Sticky Session과 Session Clustering
TCP와 UDP
전송계층 프로토콜
L4 appplication layer
(13)
http
(3)
HTTP
HTTP Options
keep alive
tls
(3)
SNI
TLS
TLS 인증서 발급 절차를 이해해보자
ACME
CDN
DHCP
DNS 레코드유형
FTP Active, Passive mode
java로 간단한 socket 프로그램만들기
SMTP의 보안 시스템
VPN
(3)
firezone
VPN
Wireguard와 Firezone
개념
(5)
가상화 기술
네트워크
네트워크 보안
네트워크 침해
이중화
bandwidth
Exponential Backoff And Jitter
OSI 7Layer
Switch
vTAP
WebRTC
로드밸런서
브라우저에 url을 입력하면 어떤일이 생길까?
OS
(127)
Embedded
(6)
Audio Codec
Cramfs
I2C
시리얼 통신
임베디드 리눅스 프로그래밍 수업 정리
임베디드 시스템
linux
(102)
Authority
(3)
chattr과 chown
chmod
사용자 관리
BPF
(12)
BCC
BPF
BPF communicates with userspace
BPF ring buffer
BPF System Call
BPF 프로그램 타입
BTF
libbpf
libbpf helper 함수
XDP
메모리 로딩
서브프로그램
Disk & Dir
(9)
Linux 디렉토리 구조
LVM
od
RAID
Symbolic Link
백업
파일 관리 명령어
파일 시스템
파일 종류
ELF
(2)
ELF
SEC()
ETC
(10)
linux 표준 에러 코드
mail
man
Perf
PMU
Redirection와 FD
Runlevel
set
X window
명령어들
Kernel
(19)
Block I/O
CPU Load Average
entropy
vmlinux
동기화와 lock
디버깅
메모리 관리와 캐시
모듈과 장치 관리
스케줄러 소스 분석
시스템 콜과 인터럽트
유저모드와 커널모드
이식성
커널 개념
커널 모듈
타이머
파일시스템
프로세스 관리
프로세스 스케줄러
프로세스 주소 공간
Memory
(2)
Swap메모리
VSS, RSS, PSS, USS
Network
(17)
DNS
(2)
bind로 DNS 서버 정의하기
DNS 서버
주요명령어
(4)
arp
ifconfig
ping과 netstat
route로 라우팅 테이블 확인하기
DERP
Domain-based Split Tunnels
ip_forward와 rp_filter
IP masquerading
iptables
iptables 방화벽 설정
namespace와 cgroup
Netfilter
network namespaces
ufw
Virtual Networking Interface
Process
(8)
cgroup
Deamon process
httpd
pipe
signal
top
프로세스 관리
환경변수와 프로세스
Shell
(3)
bash_profile과 bashrc
shell
zshrc
System call
(10)
epoll
file 관련 systemcall
fork와 exec
ioctl
mmap
perf event
rlimit
thread 관련 systemcall
wait과 waitpid
리눅스 시스템 프로그래밍 프로젝트
kprobe와 kretprobe
Linux Package
Linux 배포판
Linux 부팅 과정
Linux 특징 및 관련용어
Stack trace와 kallsyms
쉘 단축키
memory
(2)
Memory Mapping
페이지 교체 알고리즘
process
(6)
TAS
교착상태와 스케줄링
생산자 소비자 문제
임계영역과 상호배제
프로세스의 개념
프로세스의 관리
VM
(2)
VMware Fusion NAT config
VMware Fusion Ubuntu 디스크 용량 늘리기
window
(1)
Active Directory Domain Services
보안
(1)
엑세스 제어
CPU 아키텍처
c언어 컴파일과정
디스크 시스템
반도체 8대 공정
운영체제 유형
유저, 커널레벨 스레드
파일 시스템
개발
(55)
AI
(18)
Vector Search
(3)
Distance Metrics
Index-realated chians
Vector Search
실습
(3)
CNN, RNN
MNIST 숫자 판별
배, 자동차, 비행기 분류하기
자연어 처리
(1)
BERT
CNN
Document Question Answering
DropOut
Keras
Optimizer
RAG
RNN
선형회귀
임베딩
퍼셉트론
활성화함수
App
(2)
React Native
(2)
New Architecture
React Native
SEO
(2)
sitemap
Web Vitals
Tools
(20)
Git
(9)
Flow
(2)
GitFlow
GithubFlow
hooks
(3)
githook을 위한 perl command
GitHub hooks
파일트리 자동생성
GitLab
git reflog
Selfhosted Runner
자동커밋
vi
(3)
vim
vim 단축키
vi 단축키
Airflow
Firefox 상단 탭 없애는 법
GTM
Intellij Profiling tools
Makefile
mermaid 문법
Spark
Tridactyl
암호화
(5)
AES&IV
Certificate formats
Cipher
DB 암호화
Keytool
테스팅
(1)
테스팅 용어
authn과 authz
FineGrained와 CoarseGrained
Nightly build
turborepo
소프트웨어 공학
압축 알고리즘
자막 파일 포맷
데이터베이스
(60)
DB설계
(8)
DBMS와 RDBMS
데이터모델링
무결성 제약조건
분산데이터베이스
스키마
정규화와 반정규화
테이블분할
트랜잭션 ACID와 격리수준
MQ
(4)
Docker로 Kafka 실행
RabbitMQ
Spring with Kafka
메시지큐
NoSQL
(16)
MongoDB
(8)
Atlas Search
BinData
MongoDB
MongoDB Aggregation
MongoDB Document로 POJO 상속받기
MongoDB 스키마설계 고려사항
MongoDB 유저관리
MongoDB 쿼리
PostgreSQL
(2)
PostgreSQL
PostgreSQL명령어
redis
(2)
Redis
Spring Redis Phantomkey
Cassandra
Memcached VS Redis
NoSQL 데이터유형
NoSQL에는 ACID가 없다고?
SQL 쿼리
(23)
최적화
(3)
DB 커넥션 풀
옵티마이저
조인 수행원리
쿼리종류
(5)
DCL
DDL
DML
Procedural/Nonprocedural DML
TCL
Alias
FK옵션
GROUP BY와 HAVING절
GROUPING SETS와 GROUPING
INNER JOIN과 OUTER JOIN
ON절
ORDER BY절
ROLLUP과 CUBE
SELECT쿼리 실행순서
계층형 질의
서브쿼리
윈도우 함수
제약조건
집계함수
집합연산자
Change Date Capture
ClickHouse
Column, Row기반 DB
Data Lake와 Warehouse
MySQL Replication
OLAP
pgbouncer
Postgresql Transaction Wraparound
Two Phase commit
서버
(72)
netty
(5)
HashedWheelTimer
netty server 예제
netty 메시지 전송 흐름
netty의 thread 모델
webFlux와 netty
node.js
(3)
module.exports와 exports
puppeteer
v8과 libuv
Spring
(62)
AOP
(8)
트랜잭션
(3)
TransactionAttributeSource
트랜잭션
트랜잭션 전파
AdviceAnnotation
Pointcut
ProxyFactoryBean
Spring AOP
Spring에서 aspectj weaving사용하기
Event
(2)
ApplicationEventPublisher
@TransactionalEventListener
JPA
(27)
JPQL
(2)
FetchJoin
경로표현식
QuerydslJpa
(8)
fetchResults가 deprecated된 이유
Paging
Projection
QuerydslJpa와 QClass
QuerydslPredicateExecutor
기본문법
동적쿼리
벌크연산
캐싱
(3)
1차캐시
2차캐시
영속성 컨텍스트
Cascade
@GeneratedValue 코드보기
GenerateValue Column에 값을 넣는다면
Hibernate dialect
Hibernate 쿼리실행순서
Id로 연관관계 객체 저장
JDBC Object Mapping Fundamentalsentity
JPA
N+1 문제
OrphanRemoval
Persistable
ReadOnlyQuery 최적화
벌크연산
트랜잭션 전파 설정
SpringSecurity
(2)
CORS
CSRF
Validation
(2)
@GroupSequence
@Valid와 @Validated
Web MVC
(2)
Request 처리과정
SpringServletContainerInitializer
WebFlux
(7)
R2DBC
(2)
R2DBC
R2DBC 사용
@Controller
RouterFunctions
WebClient
WebFilter
WebFlux
기본원리
(9)
@Autowired 빈 주입 스캔 원리
@ComponentScan
Ioc와 DI
Programmatic과 Declarative
Reflection과 직렬화
등록된 빈 목록 출력하기
빈
선점 잠금과 비선점 잠금
싱글톤
AOT
@Cacheable
Spring 6.0과 Spring Boot 3.0
WAS
(2)
tomcat 구성요소
웹서버와 WAS
아키텍처 및 방법론
(46)
API 아키텍처
(4)
GraphQL
REST
RPC
SOAP
DDD
(5)
DDD
DDD의 아키텍처
도메인영역
이벤트 스토밍
컨트랙트
MSA
(8)
MSA의 장단점
메시지 브로커
사가 패턴
사가 편성
시맨틱 버저닝
통신
트랜잭션 격리
트랜잭션 로그 테일링 패턴
객체지향
(2)
SOLID
응집도와 결합도
디자인패턴
(25)
1. 생성패턴
(5)
빌더 패턴
싱글톤 패턴
추상팩토리 패턴
팩토리메소드 패턴
프로토타입 패턴
2. 구조패턴
(7)
데코레이터 패턴
브릿지 패턴
어댑터 패턴
컴포짓 패턴
퍼사드 패턴
프록시 패턴
플라이웨이트 패턴
3. 행위패턴
(11)
메멘토 패턴
방문자 패턴
상태 패턴
옵저버 패턴
이터레이터 패턴
인터프리터 패턴
전략 패턴
중재자 패턴
책임연쇄 패턴
커맨드 패턴
템플릿메소드 패턴
디자인패턴
위임 패턴(Delegate Pattern)
CQRS
HexagonalArchitecture
알고리즘
(15)
자료구조
(3)
LSM Tree
Trie
세그먼트트리
2020 중등부 정올 2차
N Queen
Range GCD
가장 가까운 두 점
담금질 기법
볼록 껍질과 회전하는 캘리퍼스
오일러 경로 테크닉
왜판원순회
외판원순회
직사각형 스위핑
최소외접원
코드포스 문제모음
언어
(80)
Go
(11)
BSON
Command line argument, flag
defer와 panic
GC
gomod와 gosum
Go에서 하기 쉬운 실수
pprof
slice
toolchain
고루틴 스케줄링
메모리 관리
Java
(20)
JVM
(8)
Heap 영역 구조와 GC
Java Bytecode
jcmd
JVM 구성요소
Permanent to Metaspace
Runtime Data Area
TLAB과 PLAB
메모리누수
Thread
(4)
Thread 상태
@Volatile
wait()과 notifyAll()
가상스레드
Inner static class
JAR과 WAR
JAVA
JDKProxy와 CGLibProxy
JLink & JDeps
record
예외와 에러
제네릭과 variance
JavaScript
(7)
Iterator
Lexical Scope와 Closure
Promise
useEffect 안에서 setInterval 사용하기
절대경로 설정
프로토타입
화살표 함수
Kotlin
(20)
변수
(3)
List와 MutableList
Nullable
val과 var
클래스
(8)
@JvmField
@JvmStatic
Object
Sealed Class, interface
생성자
코틀린에서의 Static
클래스 상속
필드와 접근자 메서드
함수
(1)
기본인자
Collections
field 상속
InlineFuntion과 Reified
Label
Sequences
람다 표현식
범위 지정 함수
제네릭과 variance
Rust
(19)
ffi
(3)
extern
FFI
repr
메모리 참조
(5)
Rc 타입과 Weak 타입
temporary value is freed
Unwrap
소유권과 Lifetime
스마트 포인터 활용
스레드
(3)
Condvar
동시성
멀티 스레드 웹 서버 만들기
예외처리
(1)
Anyhow
String
Trait
구조체 impl
조건문과 반복문
클로저
타입과 변수
함수와 메서드
CustomAnnotation
자바<?>와 코틀린<*>
직렬화 serialVersionUID
코드
(24)
TestCode
(5)
Kotlin
(4)
Kotest
Kotest Assertions
Kotest Specs
Mockk
Mock과 Spy
비동기
(15)
coroutine
(8)
thread
(1)
공유객체 스레드 동기화
Channel
Coroutine CPS
Coroutine Delay
Coroutine Dispatcher
Coroutine Scope, Context
Integration
코루틴
reactor
(3)
Callback과 Futures
Reactor
Reactor Pattern과 event loop
cold stream과 hot stream
Coroutine vs Reactor
Flow
netty 사례연구
빌드
(4)
Gradle
(4)
DependencyHandler
Git action gradle caching
Gradle LifeCycle
멀티모듈
GitHub
LinkedIn
Select theme
Dark
Light
Auto
태그: 개념
총 36개의 글이 있습니다.
CNI Specification
개념
2024. 3. 13.
The CNI specification itself is quite simple. According to the specification, there are four operations that a CNI plugin must support: ADD: Add a container to the network. DEL: Delete a container from the network. CHECK: Return an error if there is a problem with the container’s network. VERSION: Report version information about the plugin. The full CNI spec is available on GitHub In above
Disruption Budget
개념
2024. 3. 13.
Let’s explore to limit the number of concurrent disruptions that your application experiences, allowing for higher availability while permitting the cluster administrator to manage the clusters nodes. The most common use case when you want to protect an application specified by one of the build-in Kubernetes controllers: Deployment ReplicationController ReplicaSet StatefulSet In this case, make
Endpoints
개념
2024. 3. 13.
쿠버네티스의 Services는 뒷단에 있는 Pod의 label 정보를 바탕으로한 selector로 그 대상이 되는 Pod를 매칭한다. 만약 해당 Label을 단 새로운 Pod이 생겼다면, Service는 자동으로 그 Pod과 연결되어 트래픽을 보낸다. 이러한 일이 가능한 것은 service가 트래픽을 보낼 오브젝트를 추적해주는 EndPoint가 있기 때문이다. 매칭된 Pod의 IP 주소는 그 service의 endpoint가 되어 연결된다. service는 endpoints를 통해 트래픽을 보내는 주소의 목록을 관리한다. endpoints는 labels와 selectors를 통해 자동으로 업데이트 될 수 있다. 그리고 경우에 따라 수동으로 endpoints를 설정할 수 있다. service selec
HPA와 VPA
개념
2024. 3. 13.
HPA(Horizontal Pod Autoscaler) Horizontal Pod Autoscaler는 metric server를 통해 파드의 리소스를 감시하여 리소스가 부족한 경우 Controller의 replicas를 증가시켜 파드의 수를 늘린다. 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 한다. Pod를 증가시키기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 된다. Replica의 수와 상관 없이 돌아갈 수 있는 Stateless 서비스에 적합하다. 트래픽이 급증하여 spike가 생기는 경우에 대응할 수 있다. 사용하는 매트릭과, 목표하는 매트릭을 계산하여 desire repli
K8s의 도커런타임 사용중단
개념
2024. 3. 13.
Source : 쿠버네티스는 버전 v1.20 이후 Docker를 컨테이너 런타임으로서 사용하지 않겠다고 알렸다.(2020.12.02) GKE 및 EKS 등의 관리 Kubernetes 서비스를 사용하는 경우 오퍼레이터에서 지원되는 버전의 런타임을 사용하는 것을 확인하고 쿠버네티스 릴리스에서 도커 지원이 만료되기 전에 변경 해야한다. 자세한 내용은 아래와 같다. DeprecationDocker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a modul
Kubeproxy
개념
2024. 3. 13.
Networking is a crucial part of Kubernetes. Behind the Kubernetes network, there is a component that work under the hood. It trandlates your Services into some usable networkign rules. This componenet is called Kube-Proxy. kube-proxy is another per-node daemon in Kubernetes, like Kubelet. kube-proxy provides basic load balancing functionality within the cluster. It implements services and relies o
NodePort와 ServicePort와 targetPort
개념
2024. 3. 13.
K8s의 포트는 노드와 서비스, 컨테이너별로 나뉘어있다. 이 개념에 대해 확실히 알아보자. 만약에 하나의 서비스에 2개의 노드가 있고, 그 노드에 각각 하나의 포드가 있다고 하면 아래 그림과 같은 모양이 된다. NodePort는 각 노드의 클러스터 레벨에서 노출되는 포트, (그림에서 30001) Port는 서비스의 포트, (80) targetPort는 포드에서 컨테이너로 가는 앱 컨테이너 포트를 말한다. 아래와 같이 설정할 수 있다. ports: protocol: TCP port: 80 targetPort: 8080 nodePort: 30000
Assigning Pods to Nodes
nodescheduling
2024. 3. 13.
You can constrain a Pod so that it is restricted to run on particular node(s), or to prefer to run on particular nodes. There are several ways to do this and the recommended approaches all use label selectors to facilitate the selection. Often, you do not need to set any such constraints; the scheduler will automatically do a reasonable placement (for example, spreading your Pods across nodes so a
Taints and Tolerations
nodescheduling
2024. 3. 13.
Node affinity is a property of Pods that attracts them to a set of nodes (either as a preference or a hard requirement) Taints are the opposite — they allow a node to repel a set of pods. Tolerations are applied to pods. Tolerations allow the scheduler to schedule pods with matching taints. Tolerations allow scheduling but don’t guarantee scheduling: the scheduler also evaluates other parameters a
cordon, drain
nodescheduling
2024. 3. 13.
쿠버네티스 클러스터를 사용하다 보면 특정 노드에 있는 포드들을 모두 다른 곳으로 옮기거나 아니면 특정 노드에는 포드들이 스케쥴링 되지 않도록 제한을 걸어야 할 때가 있다. 이러한 기능들을 제공하는 kubectl 명령어가 cordon, drain, taint 등이다. cordon kubectl cordon은 지정된 노드에 더이상 포드들이 스케쥴링되서 실행되지 않도록 한다. kubectl get nodes로 노드 이름을 확인한 다음에 cordon을 해보자. cordon을 한 다음에 다시 노드를 확인해 보면 노드의 status에 SchedulingDisabled라는 STATUS가 추가된 걸 확인할 수 있다. Terminal window$ kubectl get nodesNAME STAT
CSIDriver
volume
2024. 3. 13.
CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced. The CSIDriver Kubernetes API object serves two purposes: Simplif
attachdetach controller
volume
2024. 3. 13.
Objective Make volume attachment and detachment independent of any single node’s availability If a node or kubelet goes down, the volumes attached to that node should be detached so that they are free to be attached to other nodes. Secure Cloud Provider Credentials Because each kubelet is responsible for triggering attach/detach logic, every node currently needs (often broad) permissions. The
Workloads
개념
2024. 3. 13.
A workload is an application running on Kubernetes. Whether your workload is a single component or several that work together, on Kubernetes you run it inside a set of pods. In Kubernetes, a Pod represents a set of running containers on your cluster. Kubernetes pods have a defined lifecycle. For example, once a pod is running in your cluster then a critical fault on the node where that pod is runn
etcd
개념
2024. 3. 13.
etcd는 key:value 형태의 데이터를 저장하는 스토리지이다. Kubernetes는 기반 스토리지(backing storage)로 etcd를 사용하고 있고, 모든 데이터를 etcd에 보관한다. 클러스터에 어떤 노드가 몇 개나 있고 어떤 파드가 어떤 노드에서 동작하고 있는지 등의 정보가 etcd에 저장되는 것이다. RSM(Replicated state machine) etcd는 분산 컴퓨팅 환경에서 서버가 몇 개 다운되더라도 정상적으로 동작하는 Replicated state machine(RSM)방식으로 구현되었다. RSM은 위 그림과 같이 command가 들어있는 log 단위로 데이터를 처리한다. 데이터를 write하는 것을 log append라고 부르고, 머신은 받은 log를 순서대로 처리하는
Annotation
object
2024. 3. 13.
You can use Kubernetes annotations to attach arbitrary non-identifying metadata to objects. Clients such as tools and libraries can retrieve this metadata. You can use either labels or annotations to attach metadata to Kubernetes objects. Labels can be used to select objects and to find collections of objects that satisfy certain conditions. In contrast, annotations are not used to identify
CRD
object
2024. 3. 13.
Custom resources are extensions of the Kubernetes API. This page discusses when to add a custom resource to your Kubernetes cluster and when to use a standalone service. It describes the two methods for adding custom resources and how to choose between them. Custom resources A resource is an endpoint in the Kubernetes API that stores a collection of API objects of a certain kind; for example, the
Deployments
object
2024. 3. 13.
Deplotment는 Pod와 ReplicaSets를 위한 선언적 업데이트를 제공한다. Deployment는 k8s의 핵심 개념중 하나인 desired state(목표 상태)를 설명하는 요소이다. Deployment에서 desired state를 정의하면 배포 컨트롤러가 원하는 상태로 복구한다. Deploy를 만들어 실습해보자! 더 자세하고 정확한 설명은 공식 를 참고하자. Creating a Deployment apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template:
Deployment Status
object
2024. 3. 13.
A Deployment enters various states during its lifecycle. It can be progressing while rolling out a new ReplicaSet, it can be complate, or it can fail to progress. Progressing Deployment Kubernetes marks a Deployment as progressing when one of the follwing tasks is performed: The Deployment creates a new ReplicaSet. The Deployment is scaling up its newest ReplicaSet. The Deployment is scaling down
Deployment Strategy
object
2024. 3. 13.
Deployment’s .spec.strategy specifies the strategy used to replace old Pods by new ones. .spec.strategy.type can be “Recreate” or “RollingUpdate”. “RollingUpdate” is the default value. Recreate Deployment All existing Pods are killed before new ones are created when .spec.strategy.type==Recreate. Note: This will only guarantee Pod termination previous to creation for upgrades. If you upgrade a D
Events
object
2024. 3. 13.
Kubernetes Events는 하나의 Kubernetes 리소스 타입으로서 Kubernetes 리소스들의 state 변화, 에러 또는 시스템에 특정 메세지를 전파해야할 때 자동으로 만들어진다. 이러한 Kubernetes Events 리소스는 Kubernetes 개발 및 운영하며 디버깅시에 매우 유용하게 사용된다. Events 조회 kubectl describe pod pod-name를 사용하면 아랫부분에 Events 항목을 볼 수 있다. 이것이 바로 해당 Pod와 관련된 Kubernetes Events들의 정보를 나타낸다. 특정 Pod 뿐 아니라 현재 namespace 에 발생하는 모든 Events를 조회하고 싶다면 kubectl get events 를 통해 조회할 수 있다. 하지만 모든 리소스들의 E
Labels and Selectors
object
2024. 3. 13.
Labels are key/value pairs that are attached to objects such as Pods. Labels are intended to be used to specify identifying attributes of objects that are meaningful and relevant to users, but do not directly imply semantics to the core system. Labels can be used to organize and to select subsets of objects. Labels can be attached to objects at creation time and subsequently added and modi
PV & PVC
object
2024. 3. 13.
k8s에서 Volume을 사용하는 구조는 PV라고 하는 퍼시스턴트 볼륨(PersistentVolume)과 PVC라고 하는 퍼시스턴트 볼륨 클레임(PersistentVolumeClaim) 2개로 분리되어 있다. PV/PVC PV는 Persistent Volume의 약자이다. pod와는 별개로 관리되며 별도의 생명 주기가 있다. PVC는 사용자가 PV에 하는 요청이다. 사용하고 싶은 용량은 얼마인지, 읽기/쓰기는 어떤 모드로 설정하고 싶은지 등을 정해서 요청한다. k8s 볼륨을 pod에 직접 할당하는 방식이 아니라 중간에 PVC를 두어 pod와 pod가 사용할 스토리지를 분리할 수 있다. 이런 구조는 pod 각각의 상황에 맞게 다양한 스토리지를 사용할 수 있게 한다. 클라우드 서비스를 사용할 때는 본인이 사용
Pod
object
2024. 3. 13.
Pod는 동일한 실행환경에서 실행되는 애플리케이션 컨테이너와 볼륨으로 구성된 집합체다. 포드는 쿠버네티스 클러스터에서 배포 가능한 가장 작은 아티팩트(artipact)다. 즉, 포드에 있는 모든 컨테이너가 동일한 머신에 있음을 뜻한다. Pod에 있는 각 컨테이너는 각자의 cgroup을 운영하지만 몇가지 Linux 네임스페이스는 공유한다. Pod의 각 컨테이너는 각자의 cgroup 을 운영하지만 몇가지 리눅스 네임스페이스를 공유하며, 서로 다른 파드는 각 애플리케이션이 격리되어 있고 각기 다른 IP주소와 호스트네임을 갖는다. 또한 System V IPC나 POSIX 메시지 큐(IPC 네임스페이스)를 통해 기본 프로세스 간 통신 채널을 사용해 서로 통신할 수 있다. 동일한 노드에서 동작하는 서로 다른 Pod의
Pod Readiness and Probes
object
2024. 3. 13.
Pord readiness is and additional indication of whether the pod is ready to serve traffic. Pod readiness determines whether the pod address shows up in the Endpoints object from an external source. Other Kubernetes resources that manage pods, like depolyments, take pod readiness into account for decision-making, such as advancing during a rolling update. During rolling deployment, a new pod becomes
Pod 생성과정
object
2024. 3. 13.
관리자가 애플리케이션을 배포하기 위해 ReplicaSet을 생성하면 다음과 같은 과정을 거쳐 Pod을 생성한다. 흐름을 보면 각 모듈은 서로 통신하지 않고 오직 API Server와만 통신하는 것을 알 수 있다. API Server를 통해 etcd에 저장된 상태를 체크하고 현재 상태와 원하는 상태가 다르면 필요한 작업을 수행한다. 각 모듈이 하는 일을 보면 다음과 같다. kubectl ReplicaSet 명세를 yml파일로 정의하고 kubectl 도구를 이용하여 API Server에 명령을 전달 API Server는 새로운 ReplicaSet Object를 etcd에 저장 Kube Controller Kube Controller에 포함된 ReplicaSet Controller가 Replica
RollingUpdate
object
2024. 3. 13.
Rolling Update는 k8s의 업데이트 방법 중 하나로, 새로운 버전의 애플리케이션을 배포하고 기존 버전을 점진적으로 대체하는 과정으로 진행된다. 새로운 버전의 Pod로 트래픽이 전달되기 전까지 기존 버전이 유지되므로 무중단으로 애플리케이션을 업데이트 가능한 장점이 있다. 그러나 새로운 버전의 Pod와 기존 Pod가 함께 유지되는 기간이 존재하기 때문에 업데이트 중에 리소스를 더 사용할 수 있다. 기본적으로 Rolling Update는 다음과 같은 단계로 이뤄진다. 새로운 버전의 애플리케이션을 배포한다. 이때 기존 버전은 유지된 상태로 새로운 버전의 Pod가 함께 생성된다. 새로운 버전의 Pod가 정상적으로 동작하고, 준비 상태가 되면, 이전 버전의 Pod을 하나씩 종료한다. 이때 제거되는 Pod
Service와 port
object
2024. 3. 13.
쿠버네티스 환경에서 Service는 Pod들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출(expose)시키는 가상의 컴포넌트다. 쿠버네티스 내부의 다양한 객체들이 애플리케이션과, 그리고 애플리케이션이 다른 외부의 애플리케이션이나 사용자와 연결될 수 있도록 도와주는 역할을 한다. 쿠버네티스에 Service가 있는 이유는, Pod들이 반영속적인 특성을 가지고 있기 때문이다. 쿠버네티스에서의 Pod는 무언가가 구동 중인 상태를 유지하기 위해 동원되는 일회성 자원으로 언제든 다른 노드로 옮겨지거나 삭제될 수 있다. 또한 Pod는 생성될 때마다 새로운 내부 IP를 받게 되므로, 이것만으로 클러스터 내/외부와의 통신을 계속 유지하기 어렵다. 따라서 쿠버네티스는 Pod가 외부와 통신할 수 있도록 클러스터 내부에서
StatefulSets
object
2024. 3. 13.
StatefulSets are a workload abstraction in Kubernetes to manage pods like you would a deployment. Unlike a deployment, StatefulSets add the following features for applications that require them: Stable, unique network identifiers Stable, persistent storage Ordered, graceful deployment and scaling Ordered, automated rolling updates The deployment resource is better suited for applications that d
ingress
object
2024. 3. 13.
인그레스(ingress)는 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리한다. 인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공할 수 있다. 인그레스는 클러스터 외부에서 클러스터 내부 서비스로 HTTP와 HTTPS 경로를 노출한다. 트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤된다. 인그레스는 외부에서 서비스로 접속이 가능한 URL, 로드 밸런스 트래픽, SSL / TLS 종료 그리고 이름-기반의 가상 호스팅을 제공하도록 구성할 수 있다. 인그레스 컨트롤러는 일반적으로 로드 밸런서를 사용해서 인그레스를 수행할 책임이 있으며, 트래픽을 처리하는데 도움이 되도록 에지 라우터 또는 추가 프런트 엔드를 구성할 수도 있다. 인그레
가상 IP와 서비스 프록시
개념
2024. 3. 13.
쿠버네티스 클러스터의 모든 노드는 kube-proxy를 실행한다. kube-proxy는 ExternalName 이외의 유형의 서비스에 대한 “가상 IP”의 역할을 한다. service를 조회했을때 나오는 cluster IP가 바로 k8s의 프록시로 만들어진 가상 IP이다. 이 IP는 k8s 내부에서만 접근할 수 있다. 쿠버네티스에서 가상 IP를 사용하는 이유 쿠버네티스가 프록시를 통해 가상 IP를 만드는 이유는, 실제 IP와 DNS를 사용하기 부적절하기 때문이다. k8s의 서비스 객체는 IP를 할당할 수 있는 기기가 아니고 잠시 생겼다가 사라질 수 있는 유한한 존재이다. 하지만 서비스를 식별하고 호출할 수 있는 무언가가 필요하기 때문에 그 방법으로서 프록시로 만든 가상 IP를 사용하는 것이다. ku
사이드카 패턴
개념
2024. 3. 13.
사이드카 패턴이란 쿠버네티스와 같이 컨테이너 오케스트레이션 툴에서 구성할 수 있는 컨테이너 배치 패턴으로, 마치 오토바이 옆에 붙어 있는 사이드카와 비슷한 형태이다. 장점 1. 기존 로직의 변경 없이 기능 추가 사이드카 컨테이너를 통해 기존의 로직은 그대로 놔둔체 새로운 기능을 덧붙일 수 있다. 예를 들어 기존 http 프로토콜에 대해서만 서비스를 하는 웹서버에 tls layer를 추가하고 싶은 경우, 메인 컨테이너인 기존의 legacy 웹서버는 그대로 놔둔체 사이드카 컨테이너를 통해 https 서비스를 클라이언트에게 제공할 수 있다. 2. 컨테이너 재사용성 사이드카 컨테이너를 단일한 기능을 하게 모듈화하면 다른 곳에서 재사용하기 수월해진다. 대부분의 app에서는 로깅, 실행 프로세스 정보 확인 등의
가상화 기술
개념
2024. 3. 13.
가상화는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어이다. “물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호 작용하는 방식으로부터 감추는 기술”로 정의할 수 있다. 이것은 다중 논리 리소스로서의 기능을 하는 것처럼 보이는 서버, 운영 체제, 응용 프로그램, 또는 저장 장치와 같은 하나의 단일 물리 리소스를 만들어 낸다. 아니면 단일 논리 리소스처럼 보이는 저장 장치나 서버와 같은 여러 개의 물리적 리소스를 만들어 낼 수 있다. 출처: 위키백과 네트워크에서는 다양한 가상화 기술이 사용되고 있다. 가상화 기술을 이용하면 리소스를 더 효율적으로 사용할 수 있고 운영 비용이나 도입 비용을 줄일 수 있다. 기존 레거시 환경의 문제점을 해결할 수도
네트워크
개념
2024. 3. 13.
네트워크 네트워크: 서로 다른 컴퓨터끼리 데이터 주고 받기 프로토콜: 네트워크 통신을 하기 위한 규칙 데이터를 주는 사람과 받는 사람은 서로 약속해놓은 방식(프로토콜)으로 통신 MAC: 기기 주소 (장치별로 다 다름, 장비 식별용) IP: 어느 네트워크의 어느 컴퓨터인지를 식별하는 주소 네트워크 번호(Network Part)와 컴퓨터 번호(Host Part)를 조합하여 만들어짐 네트워크가 바뀌면 IP도 바뀌기 때문에 동적이다 MAC이 고유한 주소면 IP를 또 사용할 필요가 없는 것 아닌가? IP는 라우팅 하기에 적합하게 설계된 형태로, 주로 Area code를 포함하고 있음 ex) 만약에 편지를 주소가 아닌 주민등록번호로 보낸다면 어떻게 될까? ARP: 보통 network 통신에서는 IP를 목적지로
네트워크 보안
개념
2024. 3. 13.
정보 보안 IT에서 다루는 정보 보안은 “다양한 위협으로부터 보안을 보호하는 것”을 뜻한다. 3대 보안 정의는 다음과 같다. 기밀성(Confidentiality) 인가되지 않은 사용자가 정보를 보지 못하게 하는 작업이다. 대표적인 기밀성은 암호화 작업이다. 무결성(Integriality) 정확하고 완전한 정보 유지에 필요한 모든 작업을 말한다. 누군가가 정보를 고의로 훼손하거나 중간에 특정 이유로 변경이 가해졌을 때, 그것을 파악해 잘못된 정보가 전달되거나 유지되지 못하게 하는 것이 무결성이다. IT의 대표적인 무결성 기술은 MD5, SHA와 같은 Hash 함수를 이용해 변경 여부를 파악하는 것이다. 가용성(Availability) 정보가 필요할 때, 접근을 허락하는 일련의 작업이다. 우리가
네트워크 침해
개념
2024. 3. 13.
스니핑 한 서브 네트워크 내에서 전송되는 패킷의 내용을 임의로 확인하는 공격 중요한 데이터는 SSL와 같은 암호화 통신 방식을 사용함으로써 대응한다. 스푸핑 네트워크 서비스 혹은 패킷 정보를 임의로 변경하여 공격에 사용하는 기법 IP 주소, DNS 주소, MAC 주소 등의 정보를 변조하여 공격의 탐지 및 역추적이 어렵다. IP 스푸핑 TCP/IP 구조의 취약점을 악용, 공격자가 자신의 IP를 변조해 IP 기반 인증 등의 서비스를 무력화한다. IP 기반 인증을 최소화하고 TCP 시퀀스 번호를 랜덤으로 지정해 대응한다. ARP 스푸핑 ARP 프로토콜의 취약점을 이용, IP-MAC 매핑 정보를 브로드캐스트해 ARP 테이블의 정보를 변조한다. arp -s ip mac 명령어로 정적 ARP 매핑을 등록한다.
이중화
개념
2024. 3. 13.
이중화의 목적 장애가 발생하더라도, 이중화 된 다른 인프라를 통해서 서비스가 지속되도록 해준다. (SPoF 방지) 액티브-스탠바이가 아닌, 액티브-액티브로 구성할 때는, 이중화 된 인프라에서 서비스 요청을 동시에 처리할 수 있기에, 처리 가능 용량이 늘어난다. 다만, 이렇게 증가된 인프라를 기준으로 서비스를 운영하다보면, 특정 지점에 장애가 발생했을 때 인프라 용량이 절반으로 떨어져 정상적인 서비스 운영이 어렵다. 따라서 인프라 이중화를 구성할 때는, 이중화 된 인프라 중 일부에서 장애가 발생하더라도 정상적인 서비스에 문제가 없도록 용량을 산정해 설계해야 한다. LACP 두 개의 물리 인터페이스가 논리 인터페이스를 구성하는 프로토콜 1990 년대 중반까지는 각 벤더별로 장비 간 대역폭을 늘리기 위