Kubernetes 이야기

Ketpn (설치) 본문

Kubernetes/devops

Ketpn (설치)

kmaster 2022. 7. 28. 13:15
반응형

Keptn은 클라우드 네이티브 앱을 위한 이벤트 기반 오케스트레이션 엔진이다. 2018년에 시작하여 선언적 접근 방식을 사용하여 네이티브 애플리케이션을 위한 지속적인 배포 및 운영을 자동화하여 많은 서비스로 확장할 수 있다. Keptn은 SLO(서비스 수준 지표) 를 평가 하고 이에 대한 대시보드, 경고 및 자동 수정을 제공한다. 또한 Prometheus , ArgoCD , CloudEvents, Backstage 및 기타 여러 클라우드 네이티브 프로젝트를 포함한 클라우드 네이티브 에코시스템과의 통합을 제공한다.

 

아키텍처

 

Keptn은 Kubernetes에서 실행되는 지속적 전달 및 자동화된 작업을 위한 이벤트 기반 제어 평면이다. Keptn 자체는 느슨하게 결합된 구성 요소의 이점과 다른 구성 요소 및 서비스를 쉽게 통합할 수 있는 유연한 설계를 통해 이벤트 중심 접근 방식을 따른다. Keptn이 이해하는 이벤트는 여기 에 지정되며 CloudEvents 사양 v2 를 따른다.

 

출처 : https://keptn.sh/docs/concepts/architecture/

 

Keptn에는 이미 직접 연결할 수 있는서비스 목록이 많이 있다. 원하는 도구가 없는 경우 Webhook을 사용하여 서비스를 생성하는 옵션도 있다.

이 접근 방식을 이용하면 도구를 쉽게 추가 (이벤트 구독) 및 제거 (이벤트 구독 취소) 할 수 있다. 파이프라인에는 하드 코딩이 필요없다.

주요기능

  • 자동화된 배포
  • 코드 서비스로서의 품질 게이트
  • 자동화된 테스트
  • 전체 스택 모니터링

 

다단계 배포 선언

 

 Keptn는 shipyard라는 선언적 Manifest 파일을 통해 배포를 위한 task 를 정의한다. 여기에는 단계, 테스트, 배포전략 ( 예를들어 Blue/Green 배포), 단계 간 테스트, 품질 게이트, 진행을 위한 수동 또는 자동 승인 등과 같은 세부 정보가 포함될 수 있다.

stages:
  - name: "dev"
    deployment_strategy: "direct"
    test_strategy: "functional"
  - name: "hardening"
    deployment_strategy: "blue_green_service"
    test_strategy: "performance"
  - name: "production"
    deployment_strategy: "blue_green_service"
    remediation_strategy: "automated"

출처 : https://keptn.sh/docs/concepts/delivery/

 

품질 게이트

 

Keptn 품질 게이트는 서비스의 품질 기준을 정의 하는 선언적 방법을 제공한다. Keptn은 이러한 품질 기준을 수집, 평가 및 채점하여 새 릴리스를 다음 단계로 승격할 수 있는지 또는 보류해야 하는지를 결정한다.

출처 : https://keptn.sh/docs/concepts/quality_gates/

자동화된 테스트

 

Keptn은 Keptn이 테스트 실행을 트리거하고 이러한 성능 테스트의 결과를 평가하도록 하여 테스트를 자동화하는 데 도움이 된다.  그런 다음 결과는 자동으로 처리되거나 Keptn Bridge에 표시되어 추가 결정을 내릴 수 있다.

출처 : https://keptn.sh/docs/concepts/performance_validation/

 

모니터링 및 경고

 

구성된 SLI를 기반으로 Keptn은 메트릭 수집을 위한 스크래핑 엔드포인트를 구성한다. 또한 구성된 SLO를 기반으로 평가가 실패할 경우 경고를 구성할 수 있다.

설치

 

CLI 설치

# curl -sL https://get.keptn.sh | bash
The newest version of Keptn is 0.18.1 and will be used automatically
Determined target architecture x86_64
Downloading keptn 0.18.1 for OS linux with architecture amd64 from GitHub: https://github.com/keptn/keptn/releases/download/0.18.1/keptn-0.18.1-linux-amd64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 20.8M  100 20.8M    0     0  6016k      0  0:00:03  0:00:03 --:--:-- 8026k
Unpacking archive keptn-0.18.1-linux-amd64.tar.gz in current directory ...
keptn-0.18.1-linux-amd64
-rwxr-xr-x. 1 1001 121 50326679 Aug  1 21:04 keptn-0.18.1-linux-amd64
Moving keptn binary to /usr/local/bin

Keptn CLI installation completed successfully!
You can check the Keptn CLI installation by running:

keptn --help

To install Keptn in your cluster, please follow the documentation at https://keptn.sh/docs/ or execute:

keptn install

Learn more on how to use Keptn in our tutorials at https://tutorials.keptn.sh/

Welcome aboard!

keptn 실행을 하면 도움말이 나타난다.

# keptn
The CLI allows interaction with a Keptn installation to manage Keptn, to trigger workflows, and to get details.

Usage:
  keptn [command]

Available Commands:
  abort        Aborts the execution of a sequence
  add-resource Adds a local resource to a service within your project in the specified stage
  auth         Authenticates the Keptn CLI against a Keptn installation
  completion   Generate completion script
  configure    Configures one of the specified parts of Keptn
  create       Creates a new project, service or secret
  delete       Deletes a project
  generate     Generates the markdown CLI documentation or a support archive
  get          Displays an event or Keptn entities such as project, stage, or service
  help         Help about any command
  pause        Pauses the execution of a sequence
  resume       Resumes the execution of a sequence
  send         Sends an event to Keptn
  set          Sets flags of the CLI configuration
  status       Checks the status of the CLI
  trigger      Triggers the execution of an action in keptn
  update       Updates an existing Keptn project
  version      Shows the version of Keptn and Keptn CLI

Flags:
      --config-file string   Specify custom Keptn Config file path (default: ~/.keptn/config)
  -h, --help                 help
      --mock                 Disables communication to a Keptn endpoint
  -n, --namespace string     Specify the namespace where Keptn should be installed, used and uninstalled (default "keptn")
  -q, --quiet                Suppresses debug and info messages
  -v, --verbose              Enables verbose logging to print debug messages
  -y, --yes                  Assume yes for all user prompts

Use "keptn [command] --help" for more information about a command.

 

Helm을 사용하여 Keptn 설치

 

설치 전 nats와 mongodb를 위한 persistent volume을 생성한다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nats-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  local:
    path: /data/nats
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-pv
spec:
  capacity:
    storage: 8Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  local:
    path: /data/mongo
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1

이제 helm 으로 설치를 진행해 보자.

# helm repo add keptn https://charts.keptn.sh && helm repo update
# helm install keptn keptn/keptn \
-n keptn --create-namespace \
--set=apiGatewayNginx.type=LoadBalancer \
--set=continuousDelivery.enabled=true

설치가 완료되면 아래와 같이 resource들이 생성된다.

# k get all -n keptn
NAME                                       READY   STATUS    RESTARTS        AGE
pod/api-gateway-nginx-86c574b447-rxhms     1/1     Running   0               3m7s
pod/api-service-96d68787d-fs5sl            1/1     Running   0               3m7s
pod/approval-service-67bfdc6855-j2bfp      1/1     Running   4 (2m8s ago)    3m7s
pod/bridge-9d85fcff8-pc5sb                 1/1     Running   0               3m7s
pod/keptn-mongo-869677f549-ktlkx           1/1     Running   0               3m6s
pod/keptn-nats-0                           2/2     Running   0               3m7s
pod/lighthouse-service-8674fb9dc-rsxgr     1/1     Running   4 (2m10s ago)   3m7s
pod/mongodb-datastore-7b6bd7c6df-pklfb     1/1     Running   3 (2m43s ago)   3m7s
pod/remediation-service-686ccbdb4c-xjrmc   1/1     Running   4 (109s ago)    3m7s
pod/resource-service-7446df78d-8s8sv       1/1     Running   0               3m7s
pod/secret-service-57775f4446-ll2dc        1/1     Running   0               3m6s
pod/shipyard-controller-769f4664c9-6dqrb   1/1     Running   3 (2m41s ago)   3m7s
pod/statistics-service-7c54c98bfc-cdpgh    2/2     Running   3 (2m44s ago)   3m7s
pod/webhook-service-5ccbd47456-xc5mw       1/1     Running   3 (2m24s ago)   3m6s

NAME                            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                 AGE
service/api-gateway-nginx       LoadBalancer   10.109.83.135    <pending>     80:30511/TCP                                            3m7s
service/api-service             ClusterIP      10.104.25.213    <none>        8080/TCP                                                3m7s
service/approval-service        ClusterIP      10.96.141.27     <none>        8080/TCP                                                3m7s
service/bridge                  ClusterIP      10.102.228.102   <none>        8080/TCP                                                3m7s
service/configuration-service   ClusterIP      10.110.81.80     <none>        8080/TCP                                                3m7s
service/keptn-mongo             ClusterIP      10.107.215.169   <none>        27017/TCP                                               3m7s
service/keptn-nats              ClusterIP      None             <none>        4222/TCP,6222/TCP,8222/TCP,7777/TCP,7422/TCP,7522/TCP   3m7s
service/lighthouse-service      ClusterIP      10.102.41.192    <none>        8080/TCP                                                3m7s
service/mongodb-datastore       ClusterIP      10.110.197.160   <none>        8080/TCP                                                3m7s
service/remediation-service     ClusterIP      10.110.246.155   <none>        8080/TCP                                                3m7s
service/secret-service          ClusterIP      10.101.79.79     <none>        8080/TCP                                                3m7s
service/shipyard-controller     ClusterIP      10.108.82.161    <none>        8080/TCP                                                3m7s
service/statistics-service      ClusterIP      10.104.59.47     <none>        8080/TCP                                                3m7s
service/webhook-service         ClusterIP      10.104.143.172   <none>        8080/TCP                                                3m7s

NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/api-gateway-nginx     1/1     1            1           3m7s
deployment.apps/api-service           1/1     1            1           3m7s
deployment.apps/approval-service      1/1     1            1           3m7s
deployment.apps/bridge                1/1     1            1           3m7s
deployment.apps/keptn-mongo           1/1     1            1           3m7s
deployment.apps/lighthouse-service    1/1     1            1           3m7s
deployment.apps/mongodb-datastore     1/1     1            1           3m7s
deployment.apps/remediation-service   1/1     1            1           3m7s
deployment.apps/resource-service      1/1     1            1           3m7s
deployment.apps/secret-service        1/1     1            1           3m7s
deployment.apps/shipyard-controller   1/1     1            1           3m7s
deployment.apps/statistics-service    1/1     1            1           3m7s
deployment.apps/webhook-service       1/1     1            1           3m7s

NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/api-gateway-nginx-86c574b447     1         1         1       3m7s
replicaset.apps/api-service-96d68787d            1         1         1       3m7s
replicaset.apps/approval-service-67bfdc6855      1         1         1       3m7s
replicaset.apps/bridge-9d85fcff8                 1         1         1       3m7s
replicaset.apps/keptn-mongo-869677f549           1         1         1       3m7s
replicaset.apps/lighthouse-service-8674fb9dc     1         1         1       3m7s
replicaset.apps/mongodb-datastore-7b6bd7c6df     1         1         1       3m7s
replicaset.apps/remediation-service-686ccbdb4c   1         1         1       3m7s
replicaset.apps/resource-service-7446df78d       1         1         1       3m7s
replicaset.apps/secret-service-57775f4446        1         1         1       3m7s
replicaset.apps/shipyard-controller-769f4664c9   1         1         1       3m7s
replicaset.apps/statistics-service-7c54c98bfc    1         1         1       3m7s
replicaset.apps/webhook-service-5ccbd47456       1         1         1       3m7s

NAME                          READY   AGE
statefulset.apps/keptn-nats   1/1     3m7s

 

다음은 특정 작업을 처리하는 추가 마이크로서비스이다. 

# helm install jmeter-service keptn/jmeter-service -n keptn
# helm install helm-service keptn/helm-service -n keptn

 

이제 Keptn console에 접속해 보자.

 

ID와 Password는 "bridge-credentials" 라는 secret에 저장되어 있다.

 

로그인 후에 [Create a new project] 를 생성할 수 있는 화면이 나타난다.

 

반응형

'Kubernetes > devops' 카테고리의 다른 글

Nginx Ingress를 통해 Canary 배포 설정  (0) 2022.09.04
Keptn (활용)  (0) 2022.08.04
argo CD Image Updater  (1) 2022.05.20
argocd (활용 - helm chart 및 Kustomize 배포)  (0) 2022.05.18
argocd (활용 - Git 연동)  (0) 2022.05.17
Comments