개발/Cloud

[네이버 클라우드] 멀티클라우드를 여행하는 개발자를 위한 안내서 (3)

김키쿠 2024. 5. 31. 23:21

https://kiku99.tistory.com/27

 

[네이버 클라우드] 멀티클라우드를 여행하는 개발자를 위한 안내서 (2)

https://kiku99.tistory.com/18 [네이버 클라우드] 멀티클라우드를 여행하는 개발자를 위한 안내서 (1) 클라우드 컴퓨팅은 참 매력적인 기술이다. 발전하는 IT 생태계에서 강력한 인프라를 제공할 수 있는

kiku99.tistory.com

 

지난 글에서는 네이버 클라우드의 리소스를 수집하는 플러그인을 개발했다. 그동안 Server 말고도 Autoscaling, VPC, CDN 같은 서비스들을 추가하는 작업을 진행했다.

 

이제부터 해야 할 일은 spaceone에 개발한 플러그인을 등록하고 실제 콘솔에서 작동하는지 확인하는 일이다. 그렇다면 플러그인은 어떻게 등록할까?

 

spaceone에 플러그인을 등록하려면 쿠버네티스 spacectl pod에 접속해서 여러 작업들을 해줘야 한다. 시작해보자!

 

1. Spacectl 환경 세팅하기

본격적으로 spacectl을 사용하려면 콘솔에서 api key를 발급받아 pod에 등록해줘야 한다. 아직 spaceone 콘솔 설치가 안되었다면 해당 글 참고.

https://kiku99.tistory.com/18

 

[네이버 클라우드] 멀티클라우드를 여행하는 개발자를 위한 안내서 (1)

클라우드 컴퓨팅은 참 매력적인 기술이다. 발전하는 IT 생태계에서 강력한 인프라를 제공할 수 있는 방법으로 이미 많은 회사들이 클라우드를 도입하고 있다. 물론 온프레미스 환경과 클라우드

kiku99.tistory.com

 

 

spaceone console

 

우선 spaceone 콘솔에서 api key를 발급받아 로컬에 저장해주자. 저기 보이는 API Key 생성 버튼을 누르면 된다.

 

Cloudforet MSA

 

현재 pod를 확인하면 spacectl pod가 떠있는 모습을 볼 수 있다. 해당 pod에 접속해서 로컬에 저장한 api key를 등록해주면 된다. 자세한 가이드는 콘솔에 있는 핸드북을 참고하면 된다.

 

 

console handbook / spacectl_config.yaml example

 

설정파일이 대충 위 사진처럼 생겼다. api_key 부분에 발급한 키를 넣어주고 spacectl config init 명령어를 통해 등록해주면 끝. 설정이 잘 되었다면 spacectl api-resources 명령어를 통해 확인할 수 있다.

 

이렇게 api를 확인할 수 있어야 함.

 

api들이 잘 뜬다면 spacectl을 사용할 준비가 되었다는 뜻이다. 이제 api들을 사용하여 플러그인을 등록해보자.

 

2. Plugin 등록하기

일단 단순히 플러그인만 등록해주면 되는게 아니다. 플러그인을 등록하기 전에 여러 리소스들을 등록해줘야 한다.

 

Plugin 등록 과정

 

 

등록해줘야 하는 리소스는 다음과 같다.

 

1. Repository - 플러그인이 존재하는 저장소. 타입으로는 managed와 local이 존재하며 managed는 spaceone팀에서 관리하는 저장소이고 우리가 개발한 플러그인은 local 저장소에 등록될 예정이다.

2. Schema - Credential를 입력할 때 필요한 템플릿. 플러그인을 사용하려면 클라우드 계정의 credential이 필요하며 credential 관리를 도와준다.

3. Provider - spaceone에서 관리하는 CSP. AWS, Google Cloud, Azure 등이 등록되어있고, 이제 네이버 클라우드가 추가될 예정이다.

4. Plugin - spaceone에서 관리하는 플러그인. Collector, Datasource, Webhook, Log 등 여러 타입이 있으며 이번 과정에선 클라우드 리소스를 수집하는 Collector가 등록될 예정이다.

 

순서에 따라 리소스를 만들어보자.

 

2-1. Repository 등록

spacectl api-resources 명령어를 통해 api를 확인해보면 repository에 대한 api를 확인할 수 있다.

 

spacectl api-resources

 

우리가 등록해야할 리소스는 repository.Repository이며 register 동사를 가지고 있는걸 볼 수 있다. 따라서 register 명령어를 통해 repository를 등록하면 된다.

 

spacectl exec register repository.Repository -p name="My Private Repo" -p repository_type=local

 

위와 같이 명령어를 치고 spaceone list repo 명령어를 통해 repository 목록을 확인할 수 있다.

 

repository 목록 확인

 

나는 local repo라는 이름으로 등록해줬다. 이제 우리가 개발한 플러그인이 해당 repository에 등록될 예정이다.

 

2-2. Schema 등록

spacectl api-resources 명령어를 통해 api를 확인해보면 schema에 대한 api를 확인할 수 있다.

 

spacectl api-resources

 

repository.Schema의 create 동사를 통해 리소스를 등록해주면 된다. 위의 repository처럼  -p 옵션을 통해 파라미터 형식으로 등록할 수도 있지만 작성해야할 내용이 많은 경우 yaml 파일을 만들어서 등록하는 편이 훨씬 편하다.

 

labels:
  - Naver Cloud
name: ncloud_certificate
schema:
  order:
    - ncloud_access_key_id
    - ncloud_secret_key
  properties:
    ncloud_access_key_id:
      type: string
      minLength: 4
      title: Access Key Id
    ncloud_secret_key:
      format: password
      type: string
      minLength: 4
      title: Secret Key
  required:
    - ncloud_access_key_id
    - ncloud_secret_key
service_type: secret.credentials

 

네이버 클라우드의 credential은 access key id와 secret key가 있으며 각각 필드를 만들어주었다.

 

spacectl exec create schema -f ncloud_schema.yaml

 

schema를 만들 때 -f 옵션을 통해 작성한 파일을 사용할 수 있다.

 

2-3. Provider 등록

 

spacectl api-resources 명령어를 통해 api를 확인해보면 provider에 대한 api를 확인할 수 있다.

 

spacectl api-resources

 

provider는 idenetity 서비스에 있으며 identity.Provider의 create 동사를 통해 등록할 수 있다. 마찬가지로 yaml 파일을 작성해서 등록할 예정이다.

 

name: Naver Cloud
order: 4
provider: naver_cloud
capability:
   supported_schema:
    - ncloud_certificate
tags:
  color: '#2DB400'
  external_link_template: https://www.ncloud.com
  icon: < icon 주소 >
  label: Naver
template:
  service_account:
    schema:
      properties:
        account_id:
          minLength: 4.0
          title: Account ID
          type: string
      required:
      - account_id
      type: object

 

서비스 어카운트 추가

 

생성한 yaml 파일을 -f 옵션을 통해 등록해주면 콘솔에서 해당 서비스 어카운트를 생성할 수 있다.

 

참고로 capability의 supported_schema 필드를 보면 전 단계에서 생성한 schema가 들어가 있는 모습을 볼 수 있다. 네이버 클라우드 서비스 어카운트를 생성할 때 schema가 필요하기 때문인데, 콘솔 화면을 보면 암호화 키와 schema가 일치하는 모습을 볼 수 있다. 

 

생성한 서비스 어카운트

 

이제 해당 서비스 어카운트를 통해 네이버 클라우드 서비스에 접근해 api를 호출할 수 있다. 남은 단계는 플러그인을 등록해서 서비스 어카운트별로 리소스를 수집하는 일이다.

 

2-4. Plugin 등록

spacectl api-resources 명령어를 통해 api를 확인해보면 plugin에 대한 api를 확인할 수 있다. 플러그인은 register 동사를 통해 등록할 수 있다.

 

 

capability:
  supported_schema:
  - ncloud_certificate
image: < docker image 주소 >
labels:
- Server
- Autoscaling
- VPC
- Load Balancer
- Cloud DB
- Object Storage
- Archive Storage
- Global CDN
name: Naver Cloud Collector
provider: naver_cloud
registry_config: {}
registry_type: DOCKER_HUB
service_type: inventory.Collector 
tags:
  description: Naver Cloud Collector
  icon: < 아이콘 이미지 주소 >
    Naver Cloud provides a variety of services that allow users to build and manage
    their infrastructure. That plugin collects various services from Naver Cloud.
template: {}

 

작성한 yaml 파일 중 image 필드에 개발한 플러그인의 도커 허브 주소를 넣어주면 된다. 

spacectl exec register plugin -f ncloud_inven_collector.yaml

 

명령어를 통해 플러그인을 등록하고 플러그인 리스트를 조회해보면 잘 등록된 모습을 볼 수 있다.

 

spacectl list plugin -m

 

이제 콘솔에서 플러그인을 통해 데이터 수집이 잘 되는지 확인하면 끝.

 

3. 콘솔에서 데이터 수집하기

spaceone 콘솔에서 데이터 수집을 해보자. 우선 로그인을 한 다음

 

서비스 어카운트 생성

 

네이버 클라우드 서비스 어카운드를 생성해준다. 암호키에는 계정의 api key id와 secret key를 넣어주면 된다.

 

프로젝트 생성

 

다음은 프로젝트를 만들어주자. spaceone 서비스는 프로젝트 단위로 구분된다.

 

컬렉터 생성

 

다음은 컬렉터를 만들어주자. 생성 화면에서 Repository 종류를 보면 아까 등록한 local repo가 있고 네이버 클라우드 컬렉터가 잘 등록된 모습을 볼 수 있다.

 

컬렉터 데이터 수집

 

이제 생성한 컬렉터를 통해 데이터 수집을 하면 된다. 각 서비스 어카운트마다 데이터 수집을 실행할 수 있다.

 

수집된 클라우드 서비스

 

클라우드 서비스 화면을 보면 수집된 데이터가 클라우드 서비스 타입 단위로 생성된 모습을 볼 수 있다. 

 

수집된 클라우드 서비스

 

Compute 서비스 타입을 확인해보면 각 서비스에 해당하는 리소스들이 잘 수집된 모습을 볼 수 있다. gala-node 서버가 중복되는 버그가 있긴 한데 현재는 해결되었다.

 

상세 정보

 

서버를 하나 골라서 상세정보를 확인할 수 있다. 이런 레이아웃 구성은 플러그인의 metadata를 잘 만져주면 된다.

 

이렇게 spaceone에서 네이버 클라우드의 리소스를 성공적으로 수집할 수 있게 되었다. 아직 보완해야 할 점이 많이만 일단 동작은 한다는점이 고무적이다. 프론트쪽 레이아웃이나 구현 못한 기능들을 개발하면서 남은 시간을 보내면 될거 같다.

 

그리고 현재 cloudforet 공식 repository contribute에 긍정적인 신호들이 있다. 아직 확정은 아니지만 cloudforet 측에서 이 프로젝트를 긍정적으로 봐주시고 여러 모로 도와주신 부분이 있어서 조만간 좋은 소식이 있을지도 모르겠다.

 

최종 기여까지 달려봅시다!