Uncloud는 여러 대의 Docker 호스트를 하나의 클러스터처럼 묶어주는 경량 컨테이너 오케스트레이션 도구입니다. 복잡한 쿠버네티스 대신, 익숙한 Docker & Docker Compose 경험을 유지하면서도 멀티 서버 운영, HTTPS, 로드밸런싱까지 한 번에 해결할 수 있도록 설계되었습니다. 

 

주요 특징은 다음과 같습니다. 

 

  • 멀티 환경 지원: 클라우드 VM, 온프레미스 서버, 집에 있는 맥미니 등 위치나 제공자에 상관없이 하나의 클러스터로 묶어서 사용 가능
  • Docker Compose 기반: 새로운 DSL을 배울 필요 없이 기존 compose.yaml로 서비스 정의
  • 무중단 배포: 롤링 업데이트로 서비스 중단 없이 새 버전 배포 (실패 시 롤백 기능도 준비 중)
  • Unregistry 연동: 외부 레지스트리 없이 직접 서버에 이미지를 빌드/푸시하고, 부족한 레이어만 전송해 빠르고 효율적인 배포
  • 서비스 디스커버리 & 로드밸런싱: 내장 DNS로 컨테이너 간 통신을 단순화하고, 트래픽을 여러 서버에 분산
  • 자동 WireGuard 메쉬 네트워크: 서버 간에 자동으로 안전한 프라이빗 네트워크를 구성해 컨테이너가 서로의 IP로 직접 통신
  • 중앙 컨트롤 플레인 없음: 완전 분산 구조로, 일부 서버가 다운되어도 클러스터 운영 지속
  • Managed DNS + 자동 HTTPS: *.cluster.uncloud.run 형태의 도메인과 Let’s Encrypt 기반 TLS 발급/갱신, Caddy 리버스 프록시가 내장

 

사용 방법도 단순합니다. 로컬에 Uncloud CLI를 설치한 뒤, SSH로 서버에 접속해 uc machine init으로 첫 머신을 초기화하고, uc run 명령어로 이미지를 배포하면 지정한 도메인으로 HTTPS 서비스가 바로 올라옵니다. DNS A 레코드만 서버 IP로 연결해주면 됩니다. 

 

내부적으로는 각 머신에 uncloudd 데몬과 CRDT 기반 분산 SQLite DB인 corrosion을 설치해, 별도의 중앙 서버 없이도 클러스터 상태를 서로 동기화합니다. WireGuard 서브넷을 자동으로 할당하고, Docker 브리지 네트워크와 연결해 컨테이너 네트워킹을 구성합니다. 새로운 머신을 추가하면 자동으로 새 서브넷과 키 교환까지 처리됩니다. 

 

정리하자면,

 

  • “쿠버네티스는 너무 무겁고 운영이 부담스럽다”
  • “그래도 여러 대 서버를 묶어서 HTTPS, 로드밸런싱, 배포 자동화는 하고 싶다”

 

이런 개발자에게 Uncloud는 딱 중간 지점에 있는 실용적인 선택지입니다. 단일 서버 PaaS의 편리함과 자가 호스팅 인프라의 자유도를 함께 가져가고 싶은 분들이 한 번 살펴볼 만한 오픈소스 프로젝트입니다.

https://github.com/psviderski/uncloud

 

GitHub - psviderski/uncloud: A lightweight tool for deploying and managing containerised applications across a network of Docker

A lightweight tool for deploying and managing containerised applications across a network of Docker hosts. Bridging the gap between Docker and Kubernetes ✨ - psviderski/uncloud

github.com

 

반응형

네이버 클라우드의 K8s는 디스크 용량이 50G제한으로 늘릴 수 없게 되어있다.

기본적으로 용량이 큰 팟은 사용할 수 없는 상태이다.

 

먼저 스토리지를 생성하여 해당 노드에 연결시킨다.

https://guide.ncloud-docs.com/docs/server-storage-use-vpc

 

스토리지 사용

 

guide.ncloud-docs.com

 

 

해당 노드의 쉘로 접속 후

/etc/containerd/config.toml 파일을 수정하여 아래와 같이 컨테이너 경로를 수정한다.

root = "/마운트경로/var/lib/containerd"
state = "/마운트경로/run/containerd"

 

재부팅후 팟을 올리면 새 마운트경로에 저장되는 것을 볼 수 있다.

반응형

보통 AWS에 도메인을 연결하려면 Route53을 통해 aaa.com, bbb.net 과 같이 전체를 이용해야 합니다.

하지만 원하는 *.abc.helllo.com 만 사용하는 방법을 정리해 보았습니다.

 

먼저 Certificate Manager 에 접속하여 *.abc.hello.com 이나 원하는 서브 도메인을 입력합니다.

이메일 인증과 cname인증을 지원하며 원하는 방식으로 인증을 할 수 있습니다.

 

인증에 성공시 인증서 리소스에서 아래와 같은 코드를 복사해둡니다.

arn:aws:elasticloadbalancing:********************

 

사용하던 Deployment 와 Service를 띄워주고 

아래와 같이 인그레스(Ingress)를 작성하여 적용해줍니다.

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "이름"
  namespace: test
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    kubernetes.io/ingress.class: alb    
    external-dns.alpha.kubernetes.io/hostname: test.abc.hello.com
    # AWS Certificate Manager certificate's ARN
    alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:*************"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    # http접속시 https로 리다이렉트
    alb.ingress.kubernetes.io/ssl-redirect: "443"

spec:
  ingressClassName: alb
  rules:    
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "서비스명"
                port:
                  number: 80

 

kubectl apply -f 파일명

 

현재 인그레스에 보이는 ADDRESS를 사용하는 DNS업체에서 CNAME을 통해 연결하시면 됩니다.

kubectl get ingress --all-namespaces

NAMESPACE   NAME       CLASS   HOSTS   ADDRESS                   PORTS   AGE
test     test-ingress   alb     *       abcdef.elb.amazonaws.com   80      176m

DNS업체별로 등록방식은 다르지만 CNAME명 *.abc.hello.com CNAME값 abcdef.elb.amazonaws.com 식으로 적어주시면 됩니다.

 

이제 지정한 도메인 test.abc.hello.com 로 접속하면 https로 잘 나오게 됩니다.

 

반응형

+ Recent posts