[k8s] StatefulSet ㅡ 이해하기
·
Kubernetes
StatefulSet왜 StatefulSet이 필요한가Deployment는 Pod를 재생성할 때마다 이름이 바뀐다.# Deployment로 만든 Pod — 이름에 랜덤 해시가 붙음nginx-b8b844b6c-5kb69 (삭제)nginx-b8b844b6c-x9kqw (재생성 — 이름 바뀜)nginx 같은 웹 서버는 이름이 바뀌어도 상관없다. 어느 Pod든 똑같은 역할을 하기 때문이다.하지만 MySQL 같은 DB는 다르다. DB 복제(replication)를 구성하면 "0번이 마스터, 1번이 슬레이브"처럼 역할이 고정되어야 한다. Pod 이름이 바뀌면 이 설정이 깨진다.StatefulSet은 이 문제를 해결한다. Pod에 순서 번호를 부여하고, 재생성해도 이름을 유지한다.# StatefulSet으로 ..
[k8s] DaemonSet ㅡ 이해하기
·
Kubernetes
DaemonSet모든 노드에 Pod를 1개씩 자동 배포하는 방법DaemonSet이란?Deployment는 원하는 수(replicas)만큼 Pod를 배포한다. 어느 노드에 올라갈지는 스케줄러가 결정한다. DaemonSet은 다르다. 클러스터의 모든 노드에 Pod를 반드시 1개씩 배포한다. 노드가 새로 추가되면 거기에도 자동으로 Pod가 생기고, 노드가 삭제되면 Pod도 함께 사라진다.모든 서버에서 동일한 작업이 필요할 때 쓴다.용도대표 서비스설명메트릭 수집node-exporter노드별 CPU/메모리/디스크 수집로그 수집fluentd, filebeat노드별 로그 수집 후 중앙 저장소로 전송네트워크 처리kube-proxy, flannel노드 네트워크 트래픽 라우팅 및 CNI보안 에이전트falco, datado..
[k8s] namespace ㅡ 이해하기
·
Kubernetes
Namespace같은 클러스터 안에서 리소스를 논리적으로 분리하는 방법Namespace란?-하나의 k8s 클러스터를 여러 팀이나 환경이 함께 사용할 때 리소스가 뒤섞이는 문제가 생긴다.-Namespace는 클러스터를 논리적으로 나누는 경계선이다. -같은 서버(클러스터)를 쓰면서도 개발 환경과 운영 환경을 분리할 수 있고, 팀별로 독립적인 공간을 가질 수 있다.- Namespace는 리소스 이름의 범위를 한정한다.- default에 nginx라는 Pod가 있어도, dev 네임스페이스에도 nginx라는 Pod를 만들 수 있다. 서로 다른 공간에 있기 때문에 이름이 충돌하지 않는다.k8s 기본 Namespacek8s를 설치하면 아래 네임스페이스가 자동으로 생성된다.kubectl get namespaceName..
[k8s] pv/pvc ㅡ 이해하기
·
Kubernetes
PV와 PVCPod가 재시작되어도 데이터를 유지하는 방법- 컨테이너는 기본적으로 상태를 저장하지 않는다. - Pod 안에서 파일을 만들어도 Pod가 재시작되면 전부 사라진다. - DB나 로그처럼 데이터를 보존해야 하는 경우, 외부 스토리지를 연결해야 한다. - 쿠버네티스는 이 문제를 PersistentVolume과 PersistentVolumeClaim으로 해결한다.PV와 PVC의 관계두 오브젝트의 역할을 먼저 구분해야 한다.오브젝트역할비유PV (PersistentVolume)실제 저장공간하드디스크PVC (PersistentVolumeClaim)저장공간 요청서"나 1GB 필요해"Pod는 PV에 직접 연결하지 않는다. PVC를 통해서 연결한다. PVC가 조건에 맞는 PV를 찾아서 연결(Bound)시켜주는 ..
[k8s] ConfigMap / Secret 이해하기
·
Kubernetes
ConfigMap과 Secret 이해하기설정값을 코드에서 분리하는 방법- 애플리케이션을 컨테이너로 실행하다 보면 환경마다 달라지는 값들이 생긴다. - DB 주소, 포트, 비밀번호 같은 것들. 이걸 이미지 안에 하드코딩하면 값이 바뀔 때마다 이미지를 새로 빌드해야 한다.- 쿠버네티스는 이 문제를 ConfigMap과 Secret으로 해결한다. - 설정값을 별도 오브젝트에 저장하고, Pod가 시작될 때 환경변수로 주입하는 방식이다.ConfigMap — 일반 설정값 보관함ConfigMap은 평문으로 값을 저장한다. DB 호스트, 포트, 설정 경로 같이 민감하지 않은 정보에 쓴다.만드는 방법은 두 가지다. 명령어로 직접 만들거나, yaml 파일로 선언하거나.# 명령어로 생성kubectl create configm..
[k8s] 오브젝트 이해하기 — Ingress
·
Kubernetes
k8s 핵심 오브젝트 — Ingresskubernetes 개념 심화 2파트NodePort만 쓰다 보면 서비스마다 포트를 하나씩 열어야 해서 관리가 복잡해진다. Ingress는 포트 하나로 URL 경로에 따라 다른 서비스로 라우팅해준다.NodePort의 한계서비스가 늘어날수록 포트도 계속 늘어난다.mysite.com:30080 → 웹앱mysite.com:30090 → API 서버mysite.com:30100 → 관리자 페이지mysite.com:30200 → 결제 서비스사용자가 포트번호를 외워야 한다. 실제 서비스에선 말이 안 되는 구조다.Ingress가 하는 것포트 하나로 URL 경로에 따라 다른 서비스로 라우팅해준다.mysite.com/ → 웹앱mysite.com/api →..
[k8s] 오브젝트 이해하기 — Pod, Deployment, Service
·
Kubernetes
k8s 핵심 오브젝트 — Pod, Deployment, Servicekubernetes 개념 심화 1파트k8s를 직접 구축하고 나서, 핵심 오브젝트들을 직접 만들어보면서 이해해봤다. 개념만 읽는 것보다 직접 죽이고 살려보는 게 훨씬 빠르게 이해됐다.Podk8s에서 컨테이너가 실제로 돌아가는 최소 배포 단위다.kubectl run nginx-1-27 --image=nginx:1.27kubectl get pods14:02:11 [root@k8s-worker-jwc:/k8s]$ kubectl get podsNAME READY STATUS RESTARTS AGEnginx-1-26-b8b844b6c-8p2ng 1/1 Running 0 ..
[Prometheus + Grafana] k8s + k3s 멀티 클러스터 모니터링 구축
·
성능 모니터링
Prometheus + Grafana로 k8s 멀티 클러스터 모니터링 구축하기📝 사내에 k8s 클러스터랑 k3s 클러스터가 있는데, 모니터링을 제대로 해본 적이 없었다. 그냥 서버 살아있나 확인하는 정도. 이번에 Prometheus랑 Grafana로 제대로 한번 해보기로 했다. 결론부터 말하면 생각보다 삽질을 많이 했다. 방화벽이랑 CNI 문제가 겹치면서 꽤 오래 헤맸다.🖥️ 환경서버IP역할k8s 마스터192.168.0.110컨트롤 플레인k8s 워커192.168.0.57Prometheus, Grafanak3s192.168.0.48별도 경량 클러스터1. 네임스페이스 생성모니터링 관련 리소스는 monitoring 네임스페이스로 묶었다.kubectl create namespace monitoring2. P..
[Grafana] FastAPI Proxy를 이용한 데이터 연동 (docker 로 구축)
·
성능 모니터링/Grafana & Prometheus
현재 내가 사용하는 시스템성능 모니터링 솔루션의 수집 데이터를 Grafana 로 시각화하기 위해 Proxy API를 구축하여 중간 브릿지 역할을 하도록 구성했다. [ Data Flow ]Client (Grafana) → Proxy API (FastAPI) → onTuneV5 API그래서 왜 Proxy API 를 통해서 Grafana 와 연동을 진행한 이유를 더 자세하게 덧붙이자면....해당 솔루션의 API 를 Grafana 가 직접 호출하기에는 좀 제약이 있었다. 1. 토큰 인증 구조 -> 솔루션 API 는 별도의 ID 와 PW 를 통한 Token 발급 프로세스가 필요했다. 2. 토큰 만료-> 발급된 Token 의 유효 기간이 1시간이기 때문에, 만료시마다 수동 갱신이 어려웠다.그래서 Token 자동 갱..
[PostgreSQL] Windows 환경에서 PostgreSQL 서비스가 ‘백그라운드로 뜨는 것처럼 보이는’ 이유
·
DB_postgreSQL
Windows 환경에서 PostgreSQL 서비스가 ‘백그라운드로 뜨는 것처럼 보이는’ 이유– pg_ctl runservice, SCM 타임아웃, 그리고 느린 OS 부팅의 상관관계1. 문제 현상onTune V4 (Windows Server 환경)에서 다음과 같은 현상이 발생했다.서버 재부팅 후services.msc 에서 onTune_DB 서비스는 정상적으로 올라오지 않았는데Task Manager 에는 postgres.exe 프로세스만 다수 실행 중서비스 Stop 버튼은 동작하지 않음결국 수동으로 다음 명령을 실행해야만 DB 종료 가능 pg_ctl stop -D "DATA_DIR" 겉으로 보면 마치“PostgreSQL이 pg_ctl 없이 백그라운드로 혼자 올라온 것처럼”보이는 상황이다.2. 결론부터 말하면..
[Network] SNMP 란? + 구축 테스트
·
OS_Network
SNMP는 Simple Network Management Protocol의 약자로,네트워크 장비나 서버의 상태를 원격에서 모니터링하거나 관리할 때 사용하는 프로토콜임.(스위치, 라우터, 방화벽 어플라이언스 장비에 구축해서 리소스 사용량, 메모리, 트래픽I/O 등 모니터링 가능함)알람도 가능한데,알람에서 두 기능으로 나뉨.SNMP Trap / SNMP Polling Trap 은 단어 그대로 싸그리 트랩해서 알람 받는 거임 (단방향 통신, 즉 클라이언트쪽에서 일방적으로 SNMP 서버로 알림을 보냄)한번에 보내는 게 아니라 이벤트?가 발생할 때마다 관리콘솔(Manager)에게 송신한다.Poll 은 SNMP Client 와 Master 가 양방향 통신 하는 건데, 즉 Master 가 Client 한테 '뭐 없냐..
[VMware] "Virtualized Intel VT-x/EPT is not supported on this platform" 오류 해결법 (VMware Workstation에서 ESXi 설치 시)
·
Vir_VMware
VMware Workstation pro 에 ESXi 설치하려다가Virtualized Intel VT-x/EPT is not supported on this platform오류 뜨는 경우 있음.해당 에러는 대부분 Nested Virtualization 설정 문제거나 Hyper-V(Window 하이퍼바지어)랑 충돌 때문임. 몇가지 원인들,Hyper-V 활성화됨→ Windows에서 Hyper-V가 켜져 있으면 VMware에서 Nested Virtualization이 막힘VT-x / EPT 꺼져 있음→ BIOS 또는 CPU 설정에서 비활성화된 경우보통 중첩가상화 기능 켜는 걸로 해결됨~1) workstation 에서 ,ESXi VM 설정 → CPU 항목Enable Virtualized Intel VT-x/EP..
[VMware] ESXi 8.0 설치 (workstation pro 설치)
·
Vir_VMware
0. VMware workstation pro 설치1. ESXi iso 이미지 올려서 설치 진행 대충 찍어놓은 스크린샷을 보면 alert 창이 나타나면서 시키는 대로 or 원하는 대로 설정을 해주면 된다.어려운 것은 없다.마지막에 reboot 을 시켜준 뒤에 정상적으로 부팅이 되면 설치가 진행된 거다.정말 어려운 것은 없다. reboot 이 완료되면 F11 을 눌러서 DHCP 로 설정된 네트웤을 수정해준다.-> Static 으로 설정하라는 말.IPv4 address 에는 각자의 라우팅 현황에 맞는 게이트웨이를 통해 통신할 IP를 설정해주면 된다.subnet mask 는... 이진법으로 나타내는 건데... 잘 모른다. 255.255.255.0 이면 2^8-1/2^8-1/2^8-1/0 인데, 마지막 자리가 ..
Xen Storage 추가 (ISO 스토리지 추가)
·
Vir_Xen
1. 디렉토리 생성#mkdir -p /ISO_Store 2. 파일시스템 마운트#mount /dev/sda1 /ISO_Store 3. 부팅 시 자동으로 마운트 되도록 설정#echo '/dev/sda1 /ISO_Store ext4 defaults 0 0' >> /etc/fstab 4. 마운트 된 거 확인해보니 / 파일시스템에 마운트 해놓음…. 이상황이면 부트 안됨[root@xenserver8jwc ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsr0 ..
[Linux] Local Repository 사용 및 환경 구축
·
OS_Linux&Unix
Local repositoryLocal repository 란?보통 repository란 인터넷을 통해서 접근할 수 있는 저장소를 뜻한다Local repository는 폐쇄망. 즉, 로컬 환경(폐쇄망)에서만 접근이 가능한 저장소를 뜻한다1. scp를 사용하여 iso 파일을 외부 서버에서 내부 서버로 가져 온다 2. iso 파일을 지정된 디렉토리에 mount 한다3. 정상적으로 마운트 된 것을 확인 한다. 5. /etc/yum.repo.d/local.repo 파일에 레포지토리 설정name : 레포지토리의 이름 baseurl : 레포지토리의 경로gpgcheck : GPG(GUN Privacy Guard) 키가 들어있는 저장소의 URL을 적는다.GPG 키는 rpm 패키지를 인증하는데 사용하는 암호화 서명..
최선을 다하자!
기록