GitOps and Kubernetes
GitOps 스타일의 지속적 배포
GitOps 스타일의 지속적 배포
소개글 쿠버네티스 클러스터를 자주 사용하는 사람이라면, 반복적으로 명령을 입력하는데 불편함을 느낄것입니다. 이러한 불편함을 줄이기 위한 방법은 kubectl에 CLI 도구들을 사용하는것입니다. 이 문서에서는 kubectl의 사용을 도와줄 몇가지 도구들을 소개하겠습니다.
Ingress status에 값이 없다. argocd를 이용해서, 리소스들을 동기화 했는데, ingress 부분 계속 Processing이라고 나오이고 끝날 생각을 안한다. ingress 의 상태를 보니 다음과 같았다. $ kubectl get ingresses dobby -o y...
kube-proxy 모니터링 하기 kube-proxy도 /metrics라는 매트릭 엔드 포인트를 제공한다. 하지만 기본 설정값이 127.0.0.1:10249이기 때문에, 외부에서 접근이 안된다.
etcd 모니터링 하기 etcd는 /metrics 라는, 프로메테우스가 수집할 수 있는 매트릭 엔드 포인트를 제공한다. 하지만, Secure Etcd 클러스터인 경우에는 해당 엔드 포인트에 접근하기 위해서는 인증서가 필요하다.
파이썬 환경에서 자신이 사용하고자 하는 파이썬 패키지를 일일히 설치해주는것은 불편한 일이다. requirements.txt을 사용하면 손쉽게 패키지를 설치할 수 있다.
문제 가끔식 문제가 발생하여, 네임스페이스(namespace)를 삭제할때, 상태만 Terminating으로 변하고, 계속 기다려도 삭제가 되지 않는 경우가 있다.
Helm Helm은 쿠버네티스 패키지 관리 툴이다. chart라고 부르는, 이미 만들어 놓은 패키지 명세서를 이용해서 손쉽게 애플리케이션을 배포하고 관리할 수 있다.
Node의 GPU 모니터링 하기 prometheus를 사용해서 노드들의 매트틱을 수집하고 있다면, 아마 node-exporter를 사용하고 있을 것이다. NVIDIA에서는 dcgm-exporter라는 GPU 매트릭 출력용 이미지를 제공하고 있다. 이 dcgm-exporter과 no...
Install
서비스계정(ServiceAccount) 생성 kubectl create serviceaccount super-man
쿠버네티스(kubernetes) 위에서 GPU 4개를 할당한 Jupyter를 사용하고 있다. Jupyter Notebook 에서 텐서플로-케라스를 사용하고 있는데, 노트북을 1개 더 생성해서 작업 할 경우 OOM 에러가 발생하였다. ResourceExhaustedError (see...
리눅스(linux)에서 top이나 free 명령어로 메모리 상태를 확인할 수 있다. 버퍼와 캐시는 자주 사용하는 파일등의 정보를 저장하여 성능을 빠르게 유지할 수 있는 장점이 있지만, 너무 많아지면 가용 메모리의 부족으로 다른 문제를 야기시킬 수 있다. 그래서 버퍼/캐시의 사용량이...
시작하기전에.. 애플리케이션에서 Istio CR(Custom Resources)을 생성해야 하는데, 공식적으로 제공하는 라이브러리가 없다.
Install the Operator SDK CLI
경고 메시지 텐서플로(TensorFlow) 라이브러리를 사용해서, 머신러닝 코드를 실행하다 보면 아래와 같은 경고 메시지가 출력되는 경우가 있다.
넋두리 한동안 버려두었던 쿠버네티스 클러스터를 사용할이 생겨, kubectl를 이용해서 명령어를 날렸다. 그런데 작동하지 않는다. 그동안 소외받았던 서러움을 이해하지 못하는것은 아니지만, 왜 갑자기 안되는 것일까? -v=8 파라메터를 추가해서 명령어를 실행해 보았지만, 결과는 난...
쿠버네티스 v1.11.x에서 metrics-server를 설치하였으나, 한개의 마스터 서버에서만 정상적으로 작동하는 문제가 발생하였습니다. (3개의 마스터 서버로 HA 구성 상태)
flannel을 설치하였으나, 아이피를 찾을 수 없다는 에러가 발생하고 작동하지 않는 문제가 발생하였습니다.
쿠버네티스 v1.11부터 heapster가 deprecated 되었습니다 (자세한 내용은 문서를 참고 바랍니다.) 그래서 HPA(horizontal pod autoscaler)나 kubectl top 명령어를 사용하라면 metrics-server를 사용해야 합니다.
상황 쿠버네티스 v1.11.x에서 HPA를 사용하려고 했으나, 에러가 발생하였습니다. 에러 메시지 Warning FailedGetResourceMetric 3m (x21 over 13m) horizontal-pod-autoscaler unable to get met...
프로메테우스(Prometheus)에서 시계열(Time series) 데이터를 삭제하는 방법에 대해서 알아보겠습니다.
MathJax를 사용하면, 수학식을 표현할 수 있습니다. 물론 Jekyll에서 에서도 사용이 가능합니다.
상황 쿠버네티스 1.13 버전을 kubeadm을 이용해서 설치하려고 했으나, IP를 찾을 수 없어서 에러가 발생하였습니다. $ kubeadm init --config=kubeadm-config.yaml unable to select an IP from default routes. ...
Go 언어의 초창기에는 의존성 관리를 위한 마땅한 도구가 없었습니다. 하지만 프로젝트를 진행함에 있어 의존성 관리는 꼭 필요한 기능입니다. 그래서, 시간이 지남에 따라 다양한 써드파트 도구가 등장하기 시작했습니다. 대표적으로 vgo, dep, glide 등이 있습니다. 이렇게 표...
References A reason for unexplained connection timeouts on Kubernetes/Docker kubecost How to monitor Golden signals in Kubernetes Kiali: Observabili...
상황 ceph의 물리적 저장 용량이 부족해서, 쿠버네티스의 PV를 삭제하였습니다. PV 를 삭제하면 용량을 확보할 수 있을 줄 알았는데, 그렇지 않았습니다. (PV의 설정을 잘못한건가???)
기본적인 docker를 이용하면, GPU 자원을 사용할 수 없습니다. 쿠버네티스 환경에서 NVIDIA GPU를 사용하기 위해서는 nvidia-docker를 이용해야 합니다.
Ingress NginX : Custom max body size ingress-nginx를 사용하는 중, 파일 업로드 중 413 에러가 발생하였습니다. 이 경우는 nginx가 허용하는 것보다, 큰 파일이 업로드 되어 에러가 발생한 것이었습니다.
도커 이미지 관련 명령어 docker login [repository] : 저장소(repository)에 로그인한다. 저장소 주소를 적지 않으면 Docker Hub repository 로 로그인한다. docker create [image] : 해당 이미지로부터 새로운 컨테...
Supervised Learning(지도 학습) 지도 학습은 학습할 때 데이터에 대한 정답을 알려줘서, 정답값을 구하기 위한 모델을 구하는 학습 방법이다. 데이터를 훈련을 위한 트레이닝 데이터셋(training data-set)과 검증을 위한 테스트 데이터셋(test data-se...
도커(docker)는 로깅 드라이버(logging driver) 통해, 로그를 남기게 되어 있습니다. 로깅 드라이버의 기본 값을 json-file입니다. 즉, 로그를 json 형식으로 파일로 저장하게 됩니다.
SpringBoot 실행 예제를 보면 -Djava.security.egd=file:/dev/./urandom 플래그를 간혹 볼 수 있습니다. 이 플래그가 왜 필요한지에 대해서 간단히 설명해 보겠습니다. 스프링 부트를 이용해서 웹 애플리케이션을 만들 때, 기본적으로 톰캣을 이용하게...
주요 명령어 systemd를 위한 주요 명령어는 다음과 같습니다. systemctl systemd-analyze systemd-cgls systemd-cgtop systemd-loginctl
df : 디스크의 용량 확인 디스크의 용량을 보기 좋게 출력해 준다. $ df -h Filesystem Size Used Avail Use% Mounted on /dev/vda2 100G 6.6G 94G 7% / devtmpfs 16G ...
etcd 명령어 인증서 기반 TLS 인증서 기반으로 etcd를 설치한 경우, etcdctl을 사용하려면 인증서 정보를 플래그로 넘겨줘야합니다. 그리고 3 버전의 API를 사용하려면 ETCDCTL_API=3를 선언해줘야 합니다. ETCDCTL_API=3 etcdctl --endpo...
etcd 모니터링 하기
Python 3 documentation matplotlib