DevOps

최근에 주변 지인이 진행하는 프로젝트의 배포를 돕는 과정에서 Docker의 환경 변수를 주입하는 방법을 이것저것 설명해 주었다. 주된 내용은 빌드 타임의 환경 변수 주입과 런타임의 환경 변수 주입이 다르다는 이야기였는데, 결과적으로는 잘 해결이 되었으나 설명하면서도 살짝 애매한 부분이 있었다. 환경 변수라는 것을 넣어줄 수 있는 부분은 굉장히 많다. (1)Dockerfile에 정의해 줄 수도 있다. ENV나 ARG가 이에 해당한다. 그리고 (2). env 파일을 만들어서 dotenv를 사용해 애플리케이션에서 환경 변수를 끌어다 쓸 수 있게 해 줄 수 있다. 그리고 마지막으로는 (3) 바깥쪽의 오케스트레이션 툴(Kubernetes, docker-compose)도 환경 변수를 주입해 줄 수 있는데, 만약 ..
갑자기 동료 개발자에게 docker에 심각한 버그가 있다는 말을 들었다. 멀웨어 관련 이야기가 나오고 있길래, 우리 도커가 그럴 일이 없다고 생각했지만... 전 세계적인 어뷰징이 발생하고 있었다. 아래와 같은 팝업이 지속적으로 뜨며 개발자를 괴롭힌다. 악성 코드가 차단됨, 'com.docker.vmnetd'에 악성 코드가 포함되어 있어서 열리지 않았습니다. 이 소프트웨어는 악성 코드를 포함하고 있을 수 있습니다. 이 소프트웨어는 다운로드된 후 수정되었을 수 있습니다. 이 소프트웨어를 실행하면 컴퓨터에 손상을 줄 수 있습니다.악성 코드가 차단됨  'com.docker.socket'에 악성 코드가 포함되어 있어서 열리지 않았습니다. 이 소프트웨어는 악성 코드를 포함하고 있을 수 있습니다. 이 소프트웨어는 ..
CKA 시험을 보면서 기출 문제가 굉장히 중요하다는 것을 알게 되었다. 인터넷에서 살펴본 기출 문제들에서 다 고만고만하게 나오는 느낌이 있었고 살펴본 결과 약 1~2년 전부터 쓰인 블로그들을 통해서 기출 문제들을 분석했는데, 실제 시험과 비슷하게 나왔다. 나 또한 CKA 시험을 보고 난 후에 기출 문제를 정리함으로써 CKA를 준비하는 사람들에게 많은 도움이 되고자 내용을 정리했다. 본론CKA의 시험 환경은 생각보다 많이 친절하다. 아마도 killer.sh나 Kodekloud를 통해서 mock exam을 본 사람들이 많을텐데, 이에 비해서 엄청나게 친절하다. 키워드들(pod name, path) 등에 복사를 편리하게 해줄 수 있게 클릭으로 복사를 지원하거나, 관련된 문제의 레퍼런스를 직접 달아두어 바로 접..
예전에 선언형과 명령형에 대한 이야기를 한 적이 있다. Kustomize는 선언형으로 쿠버네티스 오브젝트를 사용자가 원하는 대로 변경할 수 있게 도와주는 도구이다. 쿠버네티스의 버전 1.14 이후로, kubetctl에서 kustomize 명령어를 지원하게 되었다. 가장 큰 특징은 overlay 구조로 기본이 되는 구조에 추가적인 오브젝트 설정들을 오버라이딩하여, 다양한 스테이지에 배포할 수 있다는 점이다. base 디렉토리에 기본이 되는 쿠버네티스 리소스를 정의하고, overley를 통해서 환경별(dev, prod, alpha 등) 차이점을 정의하여 여러 가지 환경에 맞게 사용할 수 있게 도와주는 역할을 한다. 이러한 Kustomize가 없다면, 직접 하나하나씩 kubectl apply -f 명령어를 통..
쿠버네티스의 다양한 리소스들에 대해서 다뤄보면 ETCD라는 중요한 요소에 대해서 알 수 있다. ETCD는 키-값으로 데이터를 저장하는 스토리지로 쿠버네티스에서 모든 상태 정보(메타데이터)를 영구적으로 저장하는 역할을 한다. 마스터 노드에 있는 kube-apiserver는 이 ETCD를 참고하여 클러스터 전체의 최신 상태를 일관성 있게 유지하는 역할을 한다.  간단하게 쿠버네티스의 마스터 노드의 컴포넌트에 대한 그림을 그려보면 위와 같다. 여기서 ETCD에 접근할 수 있는 쿠버네티스의 컴포넌트는 kube-apiserver 뿐으로써 etcd는 쿠버네티스 클러스터에 있어 심장과도 같은 중요한 존재이다. 쿠버네티스는 이런 심장과도 같은 etcd를 어떻게 오케스트레이션하는 것인가? 간단하게 스포일러를 하면 etc..
쿠버네티스를 공부하다 보면 아마 처음으로 접하게 되는 것 트래픽 관련 리소스가 Service라고 하는 것일텐데, 이는 우리가 생각하는 대로 특정한 Pod에 대하여 IP를 뚫어주어 전략(ClusterIP, NodePort, LoadBalancer)에 따라서 직접 접근할 수 있게 된다. 그다음으로는 Ingress라는 리소스도 있는데, 이 또한 Port를 이용하여 IP 계층에서 직접 트래픽을 조작해 준다. 대체 어떠한 차이점이 있을까? 쿠버네티스에 대해서 단순하게 이해하고 있을 때에는 Ingress는 프론트엔드 페이지 보여줄 때, Service는 그 외라고 알고 있었지만, 좀 더 공부해 보면 사실 굉장히 이야기할 거리가 많은 주제이고 복잡하기도 했다. 재미있는 사실은 결국에는 Ingress는 웹을 보여줄 때,..
쿠버네티스 클러스터를 통해 다양한 시도를 하기 전 직접 로컬에서 테스트해 볼 수 있는 환경이 있어야 한다. 그 과정에서 사람들이 가장 많이 찾는 툴은 minikube라고 하는 툴이다. minikube는 로컬 쿠버네티스 클러스터를 생성하고 관리하기 위한 경량화된 도구로, 로컬에서 쿠버네티스 애플리케이션을 개발, 테스트 학습할 수 있도록 설계되어 있다.  이번 포스팅에서는 미니쿠베의 세팅 방법과 함께, 꿀같은 터미널 세팅에 대해서 다뤄보려고 한다. 이 외에도 vscode 세팅이나 lens 등 로컬에서 직접 쿠버네티스를 테스트하기 좋은 환경을 구축하기 위한 내용들을 포스팅한다. 먼저, 준비물들이 꽤나 있는데 다음과 같다. 이 포스팅의 내용은 macOS에 특화되어 있다. homebrewdockeroh-my-zs..
최근에 쿠버네티스 자격증을 공부하고 있는데, CMD와 ENTRYPOINT의 차이점에 대한 내용이 나왔다. 강의를 듣다 보니까 세상에, 이런 사실을 자세히 모르고 있었다니... 대충 ENTRYPOINT를 사용할 때에는 런타임에 주입하는 경우라고만 알고 있었는데, 자세히 알고 보니까 생각보다 중요한 내용이었다. 그리고 생각해 보니 예전에 재미있는 일이 있었다. 한 2년 전쯤의 일이다. node.js 프로그램을 docker container로 띄우기 위해서 아래와 같이 CMD를 입력했는데 안 됐다.CMD ["tsc", "main.ts", "&&", "node", "main.js"] ts를 통해서 타입스크립트를 빌드하고, 빌드된 js를 실행하는 명령어를 CMD로 나타냈는 데, 안 되는 것이다. 도저히 안되어 n..
marsboy
'DevOps' 카테고리의 글 목록