Kubernetes 이야기

KubeVela 본문

Kubernetes/일반

KubeVela

kmaster 2023. 1. 26. 22:15
반응형

KubeVela는 최신 소프트웨어 제공 및 관리 컨트롤 플레인으로 목표는 오늘날의 하이브리드, 다중 클라우드 환경에서 애플리케이션을 보다 쉽고 빠르고 안정적으로 배포하고 운영하는 것이다.

 

https://kubevela.io/docs/

 

주요기능

 

  • 코드로 배포
    배포 계획을 yaml로 선언 하고, CI/CD 또는 GitOps 시스템에서 자동으로 실행하며, CUE로 워크플로 단계를 확장할 수 있다.
  • 기본 제공 보안, 규정 준수 및 관찰 가능성 구성 요소
     기본 제공되는 광범위한 LDAP 통합 중에서 선택하고, 향상된 다중 클러스터 권한 부여 및 인증을 사용하고 , 세분화된 RBAC 모듈을 선택 및 적용하고, 자체 공급망 요구 사항에 따라 사용자 정의할 수 있다.
  • 다중 클라우드/하이브리드 환경 앱 딜리버리를 최우선으로
     자동화된 클라우드 환경 프로비저닝과 함께 테스트/스테이징/프로덕션 환경 전반에 걸친 점진적 롤아웃, 자동 카나리아, 블루-그린 및 지속적인 검증, 클러스터 및 클라우드 전반에 걸친 풍부한 배치 전략과 같은 다중 클러스터/하이브리드 클라우드 시나리오를 기본적으로 지원한다.

 

아키텍처

KubeVela의 전체 아키텍처는 다음과 같다.

https://kubevela.io/docs/getting-started/architecture

 

설치

 

Kubevela는 Kubernetes 설치 모드와 독립형 모드로 설치가 가능하다. 독립형 모드는 K3S를 활용하여 Kubernetes를 자동으로 관리한다.

 

이번에는 독립형 모드로 설치해 보자.

 

다운로드

# curl -fsSl https://static.kubevela.net/script/install-velad.sh | bash
VelaD installed into /usr/local/bin/velad successfully.

Core Version: v1.7.0
VelaD Version: v1.7.0

For more information on how to started, please visit:
  https://kubevela.io

설치

velad install

[설치 확인]

export KUBECONFIG=$(velad kubeconfig --host)
vela comp

* 실행결과

# vela comp
NAME            DEFINITION                      DESCRIPTION
raw             autodetects.core.oam.dev        Raw allow users to specify raw K8s object in properties.
                                                This definition is DEPRECATED, please use 'k8s-objects'
                                                instead.
ref-objects     autodetects.core.oam.dev        Ref-objects allow users to specify ref objects to use.
                                                Notice that this component type have special handle logic.
k8s-objects     autodetects.core.oam.dev        K8s-objects allow users to specify raw K8s objects in
                                                properties
worker          deployments.apps                Describes long-running, scalable, containerized services
                                                that running at backend. They do NOT have network endpoint
                                                to receive external network traffic.
webservice      deployments.apps                Describes long-running, scalable, containerized services
                                                that have a stable network endpoint to receive external
                                                network traffic from customers.
cron-task       cronjobs.batch                  Describes cron jobs that run code or a script to completion.
daemon          daemonsets.apps                 Describes daemonset services in Kubernetes.
task            jobs.batch                      Describes jobs that run code or a script to completion.
[root@p-thlee-worker1 ~]#

 

VelaUX 설치

 

VelaUX는 KubeVela용 대시보드이다.

vela addon enable ~/.vela/addons/velaux serviceType=NodePort

대시보드는 30000 Port 접속가능하다. (초기 ID/Password : admin / VelaUX12345 )

 

어플리케이션 배포

Kubevela에서는 Application 이라는 CR을 이용하여 앱을 배포한다. Application에는 배포할 앱의 정보를 기술하는 Component, 배포 정책을 기술하는 Policy, 배포 절차를 기술하는 Workflow 단계가 있다.

 

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: first-vela-app
spec:
  components:
    - name: express-server
      type: webservice
      properties:
        image: nginx
        ports:
         - port: 80
           expose: true
      traits:
        - type: scaler
          properties:
            replicas: 1
  policies:
    - name: target-default
      type: topology
      properties:
        # The cluster with name local is installed the KubeVela.
        clusters: ["local"]
        namespace: "default"
    - name: target-dev
      type: topology
      properties:
        clusters: ["dev-cluster"]
        # This namespace must be created before deploying.
        namespace: "demo"
    - name: deploy-ha
      type: override
      properties:
        components:
          - type: webservice
            traits:
              - type: scaler
                properties:
                  replicas: 2
  workflow:
    steps:
      - name: deploy2default
        type: deploy
        properties:
          policies: ["target-default"]
      - name: manual-approval
        type: suspend
      - name: deploy2dev
        type: deploy
        properties:
          policies: ["target-dev", "deploy-ha"]

 

위의 yaml은 workflow에 따라 Local에 nginx image를 배포하고 승인을 거친 후 dev cluster에 배포 한 다음, replicas를 2로 변경하는 예제이다.

 

먼저 dev cluster를 한 개 등록해 보자.

생성이 완료되면 다음과 같이 local과 dev-cluster가 조회된다.

 

이제 앱을 배포해 보자.

# vela up -f first-app.yaml
Applying an application in vela K8s object format...
I0126 21:50:45.471646  627203 apply.go:121] "creating object" name="first-vela-app" resource="core.oam.dev/v1beta1, Kind=Application"
✅ App has been deployed 🚀🚀🚀
    Port forward: vela port-forward first-vela-app
             SSH: vela exec first-vela-app
         Logging: vela logs first-vela-app
      App status: vela status first-vela-app
        Endpoint: vela status first-vela-app --endpoint
Application /first-vela-app applied.

[상태 조회]

# vela status first-vela-app
About:

  Name:         first-vela-app
  Namespace:    default
  Created at:   2023-01-26 21:50:45 +0900 KST
  Status:       workflowSuspending

Workflow:

  mode: StepByStep-DAG
  finished: false
  Suspend: true
  Terminated: false
  Steps
  - id: k6vbh9thrs
    name: deploy2default
    type: deploy
    phase: succeeded
  - id: jtptv97nzt
    name: manual-approval
    type: suspend
    phase: running

Services:

  - Name: express-server
    Cluster: local  Namespace: default
    Type: webservice
    Healthy Ready:1/1
    Traits:
      ✅ scaler

어플리케이션 상태는 "workflowSuspending" 이다. 워크플로가 처음 두 단계를 완료하고 지정된 단계에 따라 수동 승인을 기다리고 있음을 의미한다.

 

[워크플로 승인]

# vela workflow resume first-vela-app
Successfully resume workflow: first-vela-app

 

UI에서 배포된 내역을 보면 다음과 같이 조회된다.

 

배포할때 마다 변경된 정보를 비교할 수 있고, Rollback도 바로 가능하다.

 

배포된 Container들의 로그도 한곳에서 조회가 가능하다.

 

Kubevela를 사용하면 정말 손쉽게 멀티클러스터에 배포를 할 수 있다. 또한 Yaml 이 아닌 UI에서 Workflow 및 파이프라인을 손쉽게 작성할 수 있다.

 

 

Helm Chart를 손쉽게 멀티클러스터에 배포할 수 있는 기능도 존재한다.

Definition 에는 배포에 필요한 요소들을 사전에 정의할 수 있다.

또한 UI를 사용자가 정의한 대로 표현할 수 있는 UI Schema 기능을 제공한다.

 

참고

https://kubevela.io/docs/

반응형

'Kubernetes > 일반' 카테고리의 다른 글

OAuth2 Proxy와 Keycloak 연동  (0) 2023.02.11
Chaos Mesh 에서 Physical Machines 카오스 엔지니어링  (0) 2023.02.08
Impersonation (Kubernetes Authentication)  (0) 2023.01.26
GitOps의 장단점  (0) 2023.01.10
Ingress vs Service Mesh  (0) 2022.12.28
Comments