일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- blue/green
- Argo
- Kopf
- Kubeflow
- knative
- operator
- opentelemetry
- mlops
- CI/CD
- CANARY
- serving
- opensearch
- argocd
- gitops
- gitea
- keda
- argo rollout
- Litmus
- Kubernetes
- Kubernetes 인증
- Pulumi
- 오퍼레이터
- nginx ingress
- Continuous Deployment
- seldon core
- tekton
- kubernetes operator
- Model Serving
- 카오스 엔지니어링
- MLflow
- Today
- Total
Kubernetes 이야기
Ketpn (설치) 본문
Keptn은 클라우드 네이티브 앱을 위한 이벤트 기반 오케스트레이션 엔진이다. 2018년에 시작하여 선언적 접근 방식을 사용하여 네이티브 애플리케이션을 위한 지속적인 배포 및 운영을 자동화하여 많은 서비스로 확장할 수 있다. Keptn은 SLO(서비스 수준 지표) 를 평가 하고 이에 대한 대시보드, 경고 및 자동 수정을 제공한다. 또한 Prometheus , ArgoCD , CloudEvents, Backstage 및 기타 여러 클라우드 네이티브 프로젝트를 포함한 클라우드 네이티브 에코시스템과의 통합을 제공한다.
아키텍처
Keptn은 Kubernetes에서 실행되는 지속적 전달 및 자동화된 작업을 위한 이벤트 기반 제어 평면이다. Keptn 자체는 느슨하게 결합된 구성 요소의 이점과 다른 구성 요소 및 서비스를 쉽게 통합할 수 있는 유연한 설계를 통해 이벤트 중심 접근 방식을 따른다. Keptn이 이해하는 이벤트는 여기 에 지정되며 CloudEvents 사양 v2 를 따른다.
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"
품질 게이트
Keptn 품질 게이트는 서비스의 품질 기준을 정의 하는 선언적 방법을 제공한다. Keptn은 이러한 품질 기준을 수집, 평가 및 채점하여 새 릴리스를 다음 단계로 승격할 수 있는지 또는 보류해야 하는지를 결정한다.
자동화된 테스트
Keptn은 Keptn이 테스트 실행을 트리거하고 이러한 성능 테스트의 결과를 평가하도록 하여 테스트를 자동화하는 데 도움이 된다. 그런 다음 결과는 자동으로 처리되거나 Keptn Bridge에 표시되어 추가 결정을 내릴 수 있다.
모니터링 및 경고
구성된 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 (0) | 2022.05.20 |
argocd (활용 - helm chart 및 Kustomize 배포) (0) | 2022.05.18 |
argocd (활용 - Git 연동) (0) | 2022.05.17 |