AWS EKS 에서 fargate 를 사용하기 위해서는 몇가지의 설정이 필요하다

 

1. faragte profile

2. aws-log comfigmap

 


 

1번 내용인 fargate profile 은 fargate 를 사용하기 위한 IAM Role 을 생성하는 부분으로 아래내용 참고하시면 됩니다

  • fargate profile 생성시 name space 나 lable 를지정할 수 있는대 pod를 생성할때 지정한 name space 나 lable 이 지정되어 있으면 해당 pod 는 fargate 로 생성 된다

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate-profile.html

 

AWS Fargate 프로파일 - Amazon EKS

Amazon EKS가 있는 AWS Fargate은 AWS GovCloud(미국 동부) 및 AWSGovCloud(미국 서부)를 제외한 모든 Amazon EKS 지역에서 사용할 수 있습니다.

docs.aws.amazon.com

 


2번 내용인 aws-log comfigmap 은 fargate 를 cloudwatch 와 연계하기 위한 방법으로 해당 내용이 있어야 EKS 안에서 pod가 정상적으로실행 된다

 - cloudwatch 가 아닌 AWS OpenSearch Service 혹은 Kinesis Data Firehose 로 데이터를 수집 할 수도 있다

 - 제일 간단한 부분은 cloudwatch  로의 통합이라 아래 내용을 주로 사용 한다

 

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate-logging.html

 

Fargate 로깅 - Amazon EKS

일반적인 Fluent Conf에 포함된 주요 단원은 Service, Input, Filter, Output입니다. 하지만 Fargate 로그 라우터는 다음 부분만 수락합니다. Filter 및Output 부분입니다. Parser 부분. 기타 부분을 제공하는 경우

docs.aws.amazon.com

 

  • aws-log 를 사용하기 위해서는 아래 yaml 파일을 EKS 에 배포해야 정상적으로 사용이 가능하다
kind: Namespace
apiVersion: v1
metadata:
  name: aws-observability
  labels:
    aws-observability: enabled

 

kind: ConfigMap
apiVersion: v1
metadata:
  name: aws-logging
  namespace: aws-observability
data:
  flb_log_cw: "false"  # Set to true to ship Fluent Bit process logs to CloudWatch.
  filters.conf: |
    [FILTER]
        Name parser
        Match *
        Key_name log
        Parser crio
    [FILTER]
        Name kubernetes
        Match kube.*
        Merge_Log On
        Keep_Log Off
        Buffer_Size 0
        Kube_Meta_Cache_TTL 300s
  output.conf: |
    [OUTPUT]
        Name cloudwatch_logs
        Match   kube.*
        region region-code
        log_group_name my-logs
        log_stream_prefix from-fluent-bit-
        log_retention_days 60
        auto_create_group true
  parsers.conf: |
    [PARSER]
        Name crio
        Format Regex
        Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$
        Time_Key    time
        Time_Format %Y-%m-%dT%H:%M:%S.%L%z

 

'AWS' 카테고리의 다른 글

Docker Oracle Image Build  (3) 2024.07.14
RDS 이벤트 구독을 통한 RDS 관리  (1) 2024.01.07
AWS EC2 종료 Lambda with EventBridge  (0) 2023.11.28
AWS EKS LB Controller Install  (0) 2023.09.29
AWS EC2/RDS Instance 정보 조회 Lambda 코드  (0) 2023.09.24

조건

Secret Name : my-secret

Secret Key : MySecret

Secret Value : SecretValue

 

Pod Name : env-secret-pod

Pod Image : Nginx

 


 

1. Secret 생성

kubectl create secret generic my-secret --from-literal=MySecret=SecretValue

 

 

2. Pod 생성

apiVersion: v1
kind: Pod
metadata:
  name: env-secret-pod
spec:
  containers:
  - name: envars-secret-container
    image: nginx
    env:
    - name: SECRET_NAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: MySecret

 

 

3. 결과 확인

kubectl exec env-secret-pod -- env

 

 

참고자료

https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/

 

Distribute Credentials Securely Using Secrets

This page shows how to securely inject sensitive data, such as passwords and encryption keys, into Pods. Before you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is re

kubernetes.io

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-secret-generic-em-

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD]k8s Job / CronJob  (0) 2023.09.10
[CKAD]Docker image build  (0) 2023.09.09

Grafana를 사용 중 Grafana에 설정이 점점 많아져서 DB를 RDS로 옮겨야 할 필요성을 느꼈다.


Grafana는 grafana.ini 에 [database] 설정을 하지 않았을 경우 기본 DB 인 sqlite3을 사용하게 된다

데이터가 적을 때는 상관 없지만 많은 데이터소스, 대시보드, 알람등이 설정되다 보니 쿼리 속도가 늦어지고 pod restart 가 자주 발생 하게 되었다. pod의 cpu/ memory를 확인해 봤지만 설정해 놓은 limit까지 사용되지 않았고, DB 문제인 것으로 보여 AWS RDS mysql로 이관하기로 결졍 하였다.


준비사항 : sqlite3, mysql, RDS mysql - grafana database


개념 설명 : Grafana 에 Database를 설정하지 않으면 위에서 설명한 것과 같이 sqlite3을 사용하게 되고, /var/lib/grafana/grafana.db 안에 내용이 저장 되게 된다

  • Grafana 생성시 k8s pvc를 생성했으면 pvc 볼륨 안에 데이터가 저장된다(path는 동일)

grafana db

 


Migration Flow

  1. k8s grafana pod 안의 grafana.db 를 작업하기 편한 곳으로 이동
  2. mysql / sqlite3 명령어 설치
  3. git clone or shell script 복사
  4. grafana.db 덤프 생성
  5. RDS mysql 에 grafana DB 사용을 위한 초기 설정
  6. grafana pod 의 database를 RDS mysql과 연결
  7. 생성한 grafana 덤프를 RDS mysql 에 inport
  8. 결과 확인

상세 작업 설명

 

1. grafana.db 를 작업하기 편한 곳으로 이동

  • 필자의 경우 k8s 로 grafana를 사용 중이므로 k8s contrill vm에서 작업하였음
  • grafana pod의 db를 kubectl cp 명령어를 사용하여 VM으로 이동

2. mysql / sqlite3 설치

  • grafana.db 에서 덤프 생성을 위해서는 sqlite3 필요
  • RDS mysql에 import 하기 위해서는 mysql 명령어 필요
sudo apt-get install mysql-client
sudo apt-get install sqlite3

 

3. git clone or shell script 

  • grafana 덤프 생성을 위한 스크립트로 git에서 다운 / copy 가능
  • url : https://github.com/grafana/database-migrator
  • git clone을 해도 되고, 해당 git 안에 있는 sqlitedump.sh / escape.awk 만 복사해도 사용 가능
  • 생성 후 chmod 755로 실행 권한 부여
 

GitHub - grafana/database-migrator: Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of G

Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of Grafana data to MySQL-compatible DB. - GitHub - grafana/database-migrator: Code to export grafana.db (sqli...

github.com

4. grafana.db 덤프 생성

./sqlitedump.sh ./grafana.db > ./grafana.sql

★이 과정에서 에러가 발생하는 경우가 있는데 grafana.sql 이름을 변경해서 db_dumb.sql 등 다른 이름으로 시도 추천
무슨 차이인지는 모르겠으나 grafana.sql 로했을때 error 가 종종 발생함

5. RDS mysql에 grafana DB 사용을 위한 초기 설정

  • grafana 이름으로 database 생성
  • grafana database를 사용할 grafana 계정 생성
  • grafana 계정에 권한 부여

 

DB 접속 방법

mysql -u {username} -P {port} -h {endpoint/host 주소} -p

ex)
mysql -u abdc -P 3306 -h database001.ap-northeast-2.rds.amazonaws.com -p

 

접속 후 DB 설정

CREATE DATABASE grafana ;
CREATE USER 'grafana'@'%' IDENTIFIED BY 'grafana';
GRANT ALL PRIVILEGES ON grafana.* TO 'grafana'@'%';
FLUSH PRIVILEGES;

 

6. grafana pod의 database를 RDS mysql과 연결

  • grafana에서 RDS mysql - grafana database를 사용하기 위한 기본 틀을 잡는 과정
  • k8s comfigmap에서 grafana를 수정하면 됨

  • config 수정은 grafana pod를 삭제해야 적용되므로, grafana pod 삭제 후 log 확인
  • pod 가 정상적으로 running 되는지 확인 후 k logs {podname}으로 HTTP Listen까지 정상적으로 나왔는지 확인

 

7. 생성한 grafana 덤프를 RDS mysql에 import

  • mysql 명령어를 이용하여 생성해 놓았던 grafana.sql을 import 하면 됨

★ import 시 에러가 발생한다면 해당 에러메시지를 보고 구문을 수정하면 됨

★ grafana.sql 에서 몇 번째 줄에 syntax error인데 다른 줄과 비교해서 이상한 부분을 제거하고 다시 import 하면 됨

 

 

참고문서 : https://github.com/grafana/database-migrator

                 https://iceburn.medium.com/grafana-database-migration-from-sqlite3-to-mysql-301b6a01e249

 

Grafana — Database migration from Sqlite3 to MySQL

Shouldn’t it be Sqlite3?

iceburn.medium.com

 

GitHub - grafana/database-migrator: Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of G

Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of Grafana data to MySQL-compatible DB. - GitHub - grafana/database-migrator: Code to export grafana.db (sqli...

github.com

 

+ Recent posts