클라우드/DevOps

Kubevirt with ansible, Octopus deploy란?

dayeonsheep 2024. 10. 9. 21:58

 

이 글을 보고 kubevirt가 왜 ansible이랑 잘 쓰이는지 궁금해짐

 

https://thenewstack.io/now-nvidia-scaled-its-cloud-services-with-kubevirt/

 

How Nvidia Scaled Its Cloud Services With KubeVirt

KubeVirt enabled Nvidia to scale out its cloud gaming platform with Kubernetes-orchestrated containers — without abandoning its VM investments.

thenewstack.io

 

kubevirt

  • 쿠버네티스로 가상머신까지 관리할 수 있는 VM managment add-on
  • 컨테이너와 VM을 동시에 관리할 수 있는 확장 가능한 플랫폼
  • 가상화 API 및 런타임이 있는 K8s 오퍼레이터
  • kubevirt를 통해 K8s에서 가상 머신을 실행할 수 있음

 

출처 : https://youtu.be/uusM5SyK-vc?feature=shared

 

예시로 이런 식의 상황에서 kubevirt를 이용하면 다같이 관리할 수 있음

 

  • 다른 가상화 플랫폼에서 KubeVirt로 워크로드를 이전할 수 있는 유용한 대안
  • Konveyor 같은 도구로 마이그레이션을 시작하고, 이후 Ansible이나 GitOps로 자동화 및 관리

(konveyor 도구 마이그 도와준다는데 cd툴도 아닌 것 같은게 cncf에 있긴하지만 아직 뭔지 잘 모르겠다. konveyor forklift 프로젝트가 대표인가보다.)

 

https://www.redhat.com/en/blog/welcoming-kubevirt-v1.0

 

Welcoming KubeVirt v1.0

KubeVirt is the foundation of OpenShift Virtualization and enables data center owners to modernize their infrastructure, converge on one platform, and unify their operations.

www.redhat.com

 

+ 동일한 플랫폼에 VM과 컨테이너가 있으면 운영이 간소화되고 사용자에게 높은 자유도가 제공되며 자동화가 증가하고 전반적인 효율성이 향상된다...

+ KubeVirt는 VM을 리눅스 컨테이너 내에 배치하여 컨테이너 기반 자산처럼 VM을 관리할 수 있게 한다

+ OpenShift 또는 DIY Kubernetes 환경에서도 동일하게 사용할 수 있다~

 

 

그런데 왜 ansible이랑?

https://kubevirt.io/2023/Managing-KubeVirt-VMs-with-Ansible.html

 

Managing KubeVirt VMs with Ansible | KubeVirt.io

This post explains how to manage KubeVirt VMs with the kubevirt.core Ansible collection.

kubevirt.io

  • 동적 인벤토리 기능을 사용하면 레이블과 같은 추가 필터링 옵션과 함께 주어진 네임스페이스 또는 네임스페이스에서 사용 가능한 VM에 대해 쿠버네티스 API를 쿼리할 수 있습니다.
  • Ansible이 VM에 대한 올바른 연결 매개 변수를 찾을 수 있도록 보조 인터페이스의 네트워크 이름도 지정할 수 있습니다.

인프라 팀과 VM의 최종 사용자들이 많이 사용하는 도구 중 하나는 엔터프라이즈 자동화 도구인 Ansible입니다. (오 VM사용자들이 많이 쓰는지 몰랐음)

 

KubeVirt 커뮤니티는 KubeVirt의 채택과 사용을 간소화하고 기존 워크플로에 원활하게 통합하기 위해 Ansible 컬렉션 'kubevirt.core'의 첫 번째 버전을 발표했습니다.  -> 이 컬렉션에는 다양한 도구가 포함되어 있어 VM 관리에 유용합니다.

KubeVirt와 Kubernetes를 도입하면 VM 관리 워크플로가 변경될 수 있지만, 다음과 같은 이유로 Ansible이 적합한 도구로 소개되었습니다:
- Kubernetes와 KubeVirt 리소스는 선언적으로 표현 가능.
- KubeVirt VM과의 통신은 기존 VM 환경에서 사용하는 프로토콜과 유사.
- VM 관리는 여전히 어렵기에. (??)

Ansible은 KubeVirt 및 Kubernetes 리소스(예: VirtualMachines)를 관리하고, Ansible의 생태계를 활용해 게스트 구성 관리도 가능하게 합니다.

ansible에서의 설정


1. 인벤토리
   KubeVirt VM을 Ansible 인벤토리에 추가하려면, Kubernetes API를 통해 동적으로 VM을 검색할 수 있습니다. 이는 Ansible이 Kubernetes API를 사용하여 해당 네임스페이스에서 사용할 수 있는 VM을 쿼리하고, 추가 필터링 옵션(예: 레이블)을 적용할 수 있게 해줍니다.

2. VM 관리
   `kubevirt_vm` 모듈을 통해 Ansible에서 KubeVirt VirtualMachines의 전체 수명 주기를 관리할 수 있습니다. 이 모듈은 Kubernetes의 기본 모듈 위에서 작동하며, VM이 생성되거나 업데이트될 때까지 기다리는 기능도 제공합니다.


 

근데 거의 공식문서밖에 없고

둘이 실제로 같이 쓴 경우가 아직 많지 않다 

챗지피티한테밖에 물어볼 수 밖에 없는...


Kubevirt 참고 개요

 

  • KubeVirt는 가상화를 위해 KVM(커널 기반 가상 머신) 하이퍼바이저를 사용합니다. KubeVirt는 KVM을 Kubernetes와 통합하여 컨테이너와 동일한 워크플로우, 도구, 정책으로 VM을 오케스트레이션할 수 있게 합니다.

 

KubeVirt가 Ansible과 호환되는 이유

1. Ansible은 VM 관리를 포함한 IT 인프라 자동화에 널리 사용됩니다. KubeVirt는 VM을 Kubernetes 프레임워크로 가져와, Ansible을 사용한 IaC 파이프라인에서 VM을 프로비저닝, 구성 관리 및 오케스트레이션할 수 있도록 합니다.

2. Ansible은 Kubernetes와의 상호작용을 지원하며, `k8s`, `k8s_facts` 같은 모듈을 통해 Kubernetes API와 상호작용할 수 있습니다. KubeVirt는 Kubernetes에 가상 머신을 관리하는 커스텀 리소스(CRD)를 추가하므로, Ansible은 Kubernetes 모듈을 사용하여 이 리소스들과 쉽게 상호작용하고 VM을 관리할 수 있습니다.

3. Ansible은 반복적인 작업과 인프라 전반에 걸친 구성 작업을 자동화하는 데 탁월합니다. KubeVirt에서는 VM이 Kubernetes의 YAML 정의로 관리되므로, Ansible은 이러한 Kubernetes 매니페스트를 적용하여 VM의 생성, 업데이트, 확장 등의 작업을 자동화할 수 있습니다.

4. Ansible과 KubeVirt는 모두 선언적 방식으로 인프라를 관리합니다. Ansible 플레이북은 인프라의 원하는 상태를 기술하고, KubeVirt는 Kubernetes 매니페스트를 사용하여 VM의 원하는 상태를 정의합니다. Ansible은 이 매니페스트를 적용하여 KubeVirt가 실행되는 Kubernetes 클러스터에 원하는 구성을 달성할 수 있습니다.

5. 많은 조직은 VM과 컨테이너를 모두 필요로 하는 하이브리드 환경을 운영합니다. Ansible은 기존 VM 환경(예: VMware, OpenStack 또는 베어 메탈)과 컨테이너화된 환경을 모두 관리할 수 있으며, KubeVirt는 이를 자연스럽게 통합하여 Ansible을 사용해 VM과 컨테이너를 일관되게 관리할 수 있습니다.

==> Ansible이 VM사용자들에게 적합한 IaC도구라서 그런거였음

그런데 이전에 ansible, terraform, pulumi이러한 IaC 도구들만 생각했는데

왜 terraform은 적합하지 않을까? 를 생각해보면 당연한 게 

 

  • Terraform으로 KubeVirt에서 VM을 관리하려면 KubeVirt의 특정 CRD(예: VirtualMachine, VirtualMachineInstance 등)를 이해하는 VM 중심의 제공자 대신 Kubernetes 매니페스트를 사용해야 함.
  • Kubernetes 제공자를 사용하여 Kubernetes 리소스를 정의해야 하며, KubeVirt와 관련된 Kubernetes 매니페스트와의 관계를 다 정의해 줘야 함. 

=> 이렇게 좀 더 설정해 줘야 할 것도 많고

테라폼은 초기 세팅에만 적합하고 이후 지속관리가 어려운 단점이 VM 설정에서도 단점으로 꼽힐 것임

테라폼은 인프라 리소스에 중점을 두니까 KubeVirt에서 VM에 대한 세부적인 제어(예: 스냅샷, 마이그레이션 또는 VM 성능 설정 미세 조정) 기능을 설정하기도 어려움.

 


 

Octopus deploy

출처 : cncf landscape

 

CI/CD 툴이다.

고런데 당근 argoCD, Jenkins 다른 cicd툴킷을 많이 쓰는데...

 

 

https://thenewstack.io/codefresh-and-octopus-gitops-k8s-and-vms-under-one-roof/

 

Codefresh and Octopus: GitOps, K8s and VMs Under One Roof

Codefresh and Octopus Deploy will go a long way in unifying the deployments of cloud native architectures, particularly for large enterprises.

thenewstack.io

 

Codefresh와 Octopus Deploy의 합병이 있었다네

 

  • 이 합병은 특히 대기업이 클라우드 네이티브 아키텍처를 배포할 때 큰 도움을 주는 동시에 기존의 레거시 아키텍처도 함께 관리하는 문제를 해결하려고 한다.
  • 많은 기업들이 GitOps(Argo CD)와 Kubernetes를 필요로 하면서도, 여전히 많은 가상머신(VM)을 관리해야 하는 상황에서 이 합병이 큰 이점을 제공한다.

대부분의 기업들은 여전히 복잡하고 이질적인 환경을 가지고 있으며, 이를 CI/CD와 GitOps로 통합해야 한다는 문제가 있다.

이는 2016년 Puppet이 Kubernetes가 확산되기 시작할 때 제기한 문제와 유사하다.

당시 Puppet은 CI/CD와 GitOps가 기저의 인프라에 의존하지 않고 일관된 배포 경로를 제공해야 한다고 주장했으며, 결국 그 생각이 옳았다는 것이다.

 

그래서~


Codefresh의 공동 창립자인 Dan Garfield는, Codefresh는 GitOps 관점에서 이 문제를 해결할 수 있으며, Octopus는 전통적인 CD 관점에서 이 문제를 해결해왔다고 설명했다. 특히 5,000개의 VM 및 Kubernetes 클러스터와 같은 대규모 이질적 환경을 관리하는 문제를 해결하는 데 두 회사가 큰 도움을 줄 수 있다고 강조했다.

 

-> 얘도 VM 및 k8s 클러스터 cd 관점에서 문제 해결할 수 있다고 함

 

Octopus의 제품 관리자 Nikita Dergilev도 Argo CD가 클러스터 부트스트래핑에는 좋지만, 여러 환경이나 클러스터에 애플리케이션을 배포할 때 Git 리포지토리나 브랜치, 폴더를 관리하는 일이 복잡해질 수 있다고 지적했다.

(이러한 단점을 해결하고자 ... 도입하는 것)

Octopus는 Codefresh의 기술과 전문성을 원했고, 특히 Argo와 Kubernetes 관련 역량을 강화하고 싶어 했다. 합병 후에도 Codefresh는 계속해서 Argo에 투자하고, VMs와 같은 레거시 배포 문제를 해결할 수 있는 솔루션을 제공하는 방향으로 나아갈 계획이다.

그렇다고 함.

 

근데 어떻게 동작하길래 저걸 해결할 수 있는거지?