Gitlab의 CI/CD 파이프라인은 Jobs와 Stages로 구성됩니다. Jobs는 수행할 작업을 정의하며 Stages는 jobs를 실행할 시기를 정의합니다. Stage가 성공적으로 끝난다면 다음 Stage로 넘어가게 됩니다. 금번 포스팅에서는 .gitlab-ci.yml 파일을 활용하여 Kubernetes에 Application을 배포하는 방법을 공유하고자 합니다. CD는 Gitlab-Runner를 활용합니다. 간단한 프로세스는 다음과 같습니다. gitlab pipeline을 돌릴때는 Triggering pipelines API를 사용하여 돌려보겠습니다. □ kubectl 명령어를 쓸수있는 서버 즉, kubernetes api 서버와 통신할수있는 서버에 Gitlab-Runner를 설치 □ gitlab-..
□ Service Mesh 란? 서비스 메시는 기존의 모놀리식 워크로드를 현대화하고 서비스 간의 통신을 제어하고 관리할 수 있도록 하는 데 특화된 마이크로서비스를 위한 인프라 계층입니다. 기존의 서비스 아키텍처의 호출이 직접 호출 방식이었다면, 서비스 메시에서의 호출은 자체 인프라 계층의 Proxy를 통해 이뤄지게 됩니다. 서비스 메시를 구성하는 개별 proxy는 서비스 내부가 아니라 각 서비스와 함께 실행되므로 'sidecar'라고도 합니다. 각 서비스에서 분리된 이러한 sidecar proxy들이 모여서 Mesh Network를 형성합니다. □ Service Mesh 왜 필요한가? 컨테이너 오케스트레이터 지금 많이 쓰고 있는 Kubernetes가 이미 존재합니다. 하지만 또 다른 인프라스트럭처 계층이..
먼저 해당 기능을 사용하게 된 이유는 master node에 pod가 스케줄링 되지 않게 NodeAffinity 옵션을 사용하였는데도 계속 master node에 pod가 스케줄링 되는 상황을 직면하였습니다. 사용한 NodeAffinity 속성은 다음과 같습니다. 아래의 속성에 관련된 Affinity 속성을 간단하게 정리해보았습니다. □ Affinity 라벨링 기반의 스케줄링은 단순히 키 값이 같은지만을 비교해서 노드를 할당하기 때문에 활용 방법이 비교적 제한되어 있습니다. nodeSelector 대비 더 유연한 표현식으로 Node를 지정하고 싶을때 affinity나 inter pod affinity를 이용하면 됩니다. 위의 Taints가 Pod가 배포되지 못하도록 하는 정책이라면, affinity는 P..
이번 포스팅은 Kubernetes를 운영하면서 어플리케이션에 HTTPS 이슈가 발생하여 해결한 내용을 공유하고자 합니다.. 어떻게 보면 정말 간단하고 Kubernetes networking을 잘 알면 바로 해결할 수 있는 부분이지만, 누군가에게는 도움이 되고자 하는마음에,, 먼저 외부에서 Kubernetes안에서 실행되는 Pod 즉 어플리케이션에 접속하려면 Ingress가 필요합니다. 클라이언트가 HTTP / HTTPS 요청을 Ingress에 보낼 때, 요청한 호스트와 경로에 따라 요청을 전달할 서비스가 결정됩니다. Ingress는 네트워크 스택의 어플리케이션 계층(HTTP Layer Control) 7에서 작동하며 서비스가 할 수 없는 쿠키 기반 세션 어피니티 등과 같은 기능을 제공합니다. hskim...
몇 년 전만 하더라도 대부분의 소프트웨어 애플리케이션은 하나의 프로세스 또는 몇 개의 서버에 분산된 프로세스로 실행되는 거대한 모놀리스(monolith)였습니다. 이런 레거시 시스템은 릴리스 주기가 느리고 비교적 업데이트가 자주 되지 않습니다. 요즘은 점차 마이크로서비스라는 독립적으로 실행되는 더 작은 구성 요소로 세분화되고 있습니다. 마이크로서비스는 개별적으로 개발, 배포, 업데이트를 확장할 수 있고 오늘날 급변하는 비즈니스 요구 사항을 충족시킬 만큼 신속하게 자주 구성 요소를 변경할 수 있습니다. 모놀리스 애플리케이션 모든 것이 서로 강하게 결합돼 있고, 전체가 하나의 운영체제 프로세스로 실행되기 때문에 하나의 개체로 개발, 배포, 관리돼야 합니다. 애플리케이션의 한 부분을 변경하더라도 전체 애플리케..
□ superset 오픈소스 BI (비지니스 인텔리전스 Business Intelligence) Tool인 Apache Superset 자체 개발없이 빠르게 외부에 시각화 대시보드를 제공할 수 있습니다. 또한, 대부분의 DB 커넥터 연결을 지원하며 유저 권환 관리 지원도 가능합니다. OAuth, LDAP 도 지원합니다... □ DB 구성 superset에 연결할 DB를 구성합니다. 외부 DB를 사용해도 되지만 간단하게 테스트용도로 사용할 것이므로 Docker Container로 DB를 올리고 해당 DB에 연결을 해보겠습니다. ○ 해당 명령어로 mysql container를 실행합니다. root password는 환경변수로 넘겨줬습니다. 편하게~ docker run -d -p 3306:3306 -e MYS..
□ NextCloud NextCloud란 파일관리 서비스를 사용자의 컴퓨터나 모바일등에 설치해서 사용할 수 있게 해주는 클라우드 파일서버용 오픈소스 소프트웨어 입니다. 실질적으로 NBP Object Storage에 연결해서 사용하려고 구성합니다. source level로 설치하는것이 아닌 docker container 기반으로 구성하며, DB도 container 로 올립니다. 앞에 traefik(Reverse Proxy)가 있어 label를 추가하여 구성합니다. □ DB 구성 NextCloud는 내장 sqllite db를 default로 하고있지만 성능 문제로 인해 새로 DB를 구성합니다. mysql 3306포트로 --net 옵션에 network는 추후에 NextCloud Container에도 동일한 n..
□ PV(Persistent Volume) 스토리지 볼륨을 마운트 하여 사용할때 Kubernetes에서는 PV라고 명칭하고 있습니다. 관리자가 PV를 생성하면 PVC는 사용자가 볼륨을 사용하기 위해 PV에 요청을 하게 됩니다. □ PVC(PersistentVolumeClaim) 사용자는 Pod를 생성할때 볼륨을 정의하는데 PVC를 지정하여 위에서 관리자가 생성한 PV와 연결하게 됩니다. 위와 같이 Storage를 PV형태로 추가하고 PVC로 Service에 할당해 주는 방식으로 구성됩니다. 또한, PVC는 Namespace Object이기 때문에 Namespace에 디펜던시가 걸리지만 PV는 Cluster Role과 비슷하게 클러스터에서 공용으로 사용할 수 있는 객체입니다. □ PV는 4가지 상태 종류가..
□ GCP 클라우드 환경에도 익숙해질겸 GCP에서 K8S를 구성해보겠습니다. bastion 서버 1대 / master 1대 / worker 2대 VM을 생성하여 구성하고, 앞서 NBP에서 구성한것처럼 kubespary로 K8S를 구성해보겠습니다. ● 먼저 아래와 같이 서버를 생성해 줍니다. ● bastion 서버에서 hosts에 master노드와 worker노드들의 내부 IP를 추가해줍니다. sudo vi /etc/hosts 10.179.0.0 k8s-master001 node1 10.129.0.0 k8s-worker001 node2 10.179.0.0 k8s-worker002 node3 ● GCP의 경우 GCE의 메타데이터를 이용하여 SSH 키를 자동으로 배포해줄 수 있습니다. bastion 서버의 S..
□ GCP SSH 접속하실때 쉽게 관리콘솔에서 클릭하는 형태로 바로 접속을 많이 합니다. GCP에서 메타데이터에서 SSH키 관리를 통해 흔히 사용하는 SSH 툴(putty, xhell...)로 서버를 접속할 수 있습니다. mac os 기준으로 GCP 인스턴스에 접속해 보겠습니다. 먼저 mac os 터미널에 접속해 아래 명령어로 ssh-keygen을 생성합니다. ssh-keygen -t rsa 아래처럼 .ssh 경로로 들어가게 되면 id_rsa.pub가 보입니다. 위의 SSH Public key를 GCP 메타데이터 > SSH 키에 등록해줍니다. 아래 처럼 키를 정상적으로 키를 등록하게 되면 접속이 가능합니다. 정상적으로 접속이 가능합니다.