목록2024/09 (10)
후니의 IT인프라 사전
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmBrFu/btsJuXyzG9H/syvNmXQQL0UFLR86Qr7Ldk/img.png)
다음은 가시다님의 KANS 3기의 포스팅으로 2주차 K8S Flannel CNI & PAUSE 내용을 정리합니다. 이번 포스팅은 pod와 pause 컨테이너의 내용에 대해서 알아보고자 합니다.pod란?pod는 쿠버네티스에서 가장 작은 단위로 리소스 제약이 있는 격리된 환경(네임스페이스)의 1개 이상의 컨테이너로 이루어진 컨테이너의 집합입니다. 또한 추가적으로 1개의 ip를 가지고 여러 컨테이너가 공유합니다. pod의 특징- 1개 이상의 컨테이너를 가질 수 있습니다 (sidecar 패턴 등)sidecar 패턴은 datadog 등을 사용하신다면 쉽게 볼 수 있는데, 하나의 pod 내에서 애플리케이션 컨테이너의 로그를 감시, 전송 등을 하기 위해 추적하는 컨테이너를 별도로 넣는 방식으로 주로 사용합니다. -..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/V0pmi/btsJrRerKpo/emzFg9kRGY1qX7rCaqkAqk/img.png)
kubeskoop이란 무엇인가?- CNI 플러그인이나 IAAS 공급자를 위한 쿠버네티스 네트워킹 진단 도구이다.- pod의 네트워크 트래픽 그래프를 자동으로 구성하고 eBPF로 커널 모니터링을 실시한다.- 네트워크 진단, 이벤트 모니터링, 패킷 캡처, 지연 감지 등이 가능하다. 관련 페이지https://kubeskoop.io/https://github.com/alibaba/kubeskoop" data-og-host="kubeskoop.io" data-og-source-url="https://kubeskoop.io/" data-og-url="https://kubeskoop.io/" data-og-image="https://scrap.kakaocdn.net/dn/oQQWf/hyWZgEbflj/7Y5wCLiP..
umount어떠한 장치가 마운트 된 디렉터리에 해당 장치를 제거(마운트 해제)하는데 사용하는 명령입니다. 사용법umount / 발생가능한 에러 umount: Mounted: target is busy 원인 해당 문제는 특정 사용자나 프로세스가 해당 디렉터리를 사용하고 있을 때 발생합니다. df -h해당 명령어를 사용하면 디스크 사용량을 볼 수 있어서 확인해보는 것도 좋습니다. 해결 1대표적으로 해당 디렉터리 내에서 umount 명령을 사용할 경우 현재 접근중인 디렉터리기 때문에 발생할 수 있습니다. 그래서 해당 디렉터리를 나와서 umount를 실행하면 됩니다. 해결2해결 1이 되지 않을 경우 마운트 해제 옵션을 줍니다.umount -f -l /옵션-f, --force : 강제 마운트 해제-l, --..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9Vr0m/btsJoXrLwuy/AlXvpoANKb25hHAhHVjE81/img.png)
필요성대부분 서버를 처음 만들면 UTC 시간을 기준으로 하고 있습니다.한국은 KST로 UTC+9의 시간을 가지고 있습니다.따라서 운영간 시차로 인해 로그 등을 식별하는데 어려움이 있고, 애플리케이션을 구동할 경우도 계속 계산해야하는 문제가 생깁니다.또한 단순히 계산을 넘어서 서버 간의 시간이 다르게 되면 이 또한 큰 문제가 되므로 이는 추후 NTP 서버를 통해 보정하도록 하겠습니다. 현재 타임존 확인리눅스 파일시스템에 의해서 타임존도 관리됩니다. 즉 /etc/localtime에서 확인할 수 있습니다.cat /etc/localtime 아마 이 곳에는 UTC라는 말이 보일 것입니다. 또한, 간단하게 명령어를 통해서 현재시간을 알 수 있습니다.$ dateTue Sep 3 01:15:49 UTC 2024 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IawDd/btsJngZcGiv/qUN8VjYWXhiZbqG1rf5gl1/img.gif)
동시입력- 기능 : 터미널을 여러개 동시에 띄워놓고 동시에 입력할 수 있도록 합니다. 여러 대의 서버를 한꺼번에 컨트롤 하기 좋습니다.- 단축키 : ⌥+⌘+iShell > Broadcast Input > Broadcast Input to All Panes in Current TabShell > Broadcast Input > Broadcast Input to All Panes in All Tab
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RsDkW/btsJmMYuOl6/zIMZyEUiF22Z86eAlVInf0/img.png)
해당 내용은 https://medium.com/@odyssey.unheard/setup-vagrant-in-apple-silicon-mac-9f3cc5c3345b를 참조해서 작성하였습니다. M1으로 넘어오면서 현재 arm 아키텍처에 대한 virtualbox 지원이 안되고 있습니다. 다양한 우회방법이 있겠지만 제가 사용하는 방법을 공유합니다. 1. vagrant 설치먼저 hashicorp에서는 실리콘 맥에 대한 vagrant 설치를 지원합니다. 손쉽게 brew로 설치할 수 있습니다.https://developer.hashicorp.com/vagrant/install에서도 설치가 가능합니다.brew tap hashicorp/tapbrew install hashicorp/tap/hashicorp-vagran..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsFELC/btsJn0anXpS/UlDyGud7ixMKN3zMLk9dWK/img.png)
문제점전용파일시스템이 있더라도 추가적인 문제들이 있었다. 여전히 컨테이너에서 호스트의 다른 프로세스들이 보이고, 호스트의 네트워크를 공유한다. 여전히 루트 권한을 사용하고 있었다. 이를 개선하기 위해 네임스페이스 개념이 등장한다. 네임스페이스의 특징앞서 사실 격리를 설명하면서 마운트 네임스페이스를 먼저 살펴보았다.- 모든 프로세스는 타입별로 네임스페이스에 속한다.- 자식 프로세스는 부모의 네임스페이스를 상속한다. 네임스페이스 사용방법unshare [옵션] 프로그램 [[arguments ...]] 옵션-m(mount)-u(uts)-i(ipc)-p(pid)-n(net)-U(user) 실습실습 전 먼저 네임스페이스를 확인하는 방법을 알아보자.네임스페이스 확인 방법 #1proc에서 확인하는 방법이 있다. []..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2lyDo/btsJmJOftVI/h11WLWke0r9B1E0AsTd4Ek/img.png)
패키징의 문제 (중복, 그로 인한 비용 등)패키징으로 잘 모으긴 했지만 우리가 서버를 사용할 때 단순히 운영체제만 사용하는 것이 아니고, nginx, mysql 등 다양한 프로그램을 올려서 사용하고 있다. 이 경우 운영체제 + nginx, 운영체제 nginx+mysql 등 추가될 때마다 이미지를 만들어야하고, 개개인 별로 이미지를 만들게 되면서 중복이 많이 발생하게 된다. 이 경우 점점 불필요한 비용과 비효율이 발생하게 되므로 이러한 중복문제를 해결하고자 한다. 오버레이 파일 시스템 (Overlay Filesystem)그래서 이러한 중복 문제를 해결하기 위해 다음과 같은 생각을 한다. 이를 오버레이 파일시스템이라고 한다.- 여러 이미지 레이어를 하나로 마운트- Lower 레이어(이미지 레이어)는 Re..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/crRdv1/btsJn80rD21/C5b0ZDUQhAQPyucWals2Uk/img.png)
chroot의 문제점앞서 chroot를 통해서 컨테이너의 격리를 학습할 수 있었다. 그런데 chroot의 단점은 탈옥이 가능하다는 것이다. 탈옥 코드#include #include int main(void){ mkdir(".out", 0755); chroot(".out"); chdir("../../../../../"); chroot("."); return execl("/bin/sh", "-i", NULL);} 해당 코드를 간단하게 분석하면 일단 현재 디렉터리에 .out 폴더를 755권한으로 생성한다. 그리고 프로세스의 루트 디렉터리를 .out 디렉터리로 변경해, 프로세스가 그 디렉터리 안에서만 파일 시스템에 접근할 수 있도록 한다. 새로운 루트 디렉터리 내에서 가능한 최상위 디렉터리로 이동한다. 현재 디..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yYSgc/btsJonC93fK/EaUiOaqjJsKJYIlBdKXFI1/img.png)
가시다 님의 KANS 스터디 내용 중 컨테이너의 격리 부분을 잘 설명한 유명한 동영상 '이게 돼요? 도커 없이 컨테이너 만들기' 영상을 정리한 내용을 공유합니다. 해당 내용은 동영상 https://www.youtube.com/watch?v=mSD88FuST80 에 매우 잘 나와있으며,https://github.com/sam0kim/container-internal 깃허브에서 자료를 다운받으실 수 있습니다. 컨테이너의 기원 (일종의 최초 격리)컨테이너의 기원은 1979년 chroot로 보는 견해가 많다.서버에는 다양한 유저들이 접속하므로 악의적인 사용자(해커)도 접근할 수가 있다. 따라서 이를 막기 위해 사용자 프로세스를 가두는 방법을 고안했다. chroot는 루트 디렉토리 밖으로는 프로세스가 나갈 수..