4 min read

AWS) Jira EC2 to EKS 마이그레이션 전략

본 가이드는 기존 AWS에 존재하는 EC2 Jira 인스턴스를 EKS로 마이그레이션 하는 방법에 대해 다룹니다.

Atlassian official helm chart를 사용하여 Jira pods를 배포합니다.

Terraform으로 AWS 리소스(EKS, EC2 등등) 배포했으며 아래 Github 코드를 참고하시면됩니다.

GitHub - rolestack/jira-ec2-to-eks
Contribute to rolestack/jira-ec2-to-eks development by creating an account on GitHub.

Architecture

AWS

Kubernetes

Migration plan

0:00
/0:09

마이그레이션 진행

기존 아키텍처에 큰 변화없이 마이그레이션 하는 방법입니다.

  1. EFS에 EKS pv path를 정의합니다.
    예를들어, /eks, /eks-jira
    기존 EFS를 사용해도되고 신규 EFS를 사용해도 괜찮습니다.
    (저는 기존 EC2 Jira에서 사용하는 EFS에 subpath를 추가했습니다.)
  2. RDS에 Database를 추가합니다.
    기존 Jira DB 이름이 jiradb라면 eks-jira-tmp-db이렇게 임의대로 db를 하나 추가해줍니다.
  3. Helm chart 배포를 위한 기존 설정들을 배포합니다.
    아래 리소스들을 참고하여 본인의 환경에 맞게 배포합니다.
jira-ec2-to-eks/kubernetes/jira/base_resource at main · rolestack/jira-ec2-to-eks
Contribute to rolestack/jira-ec2-to-eks development by creating an account on GitHub.
  1. Helm chart로 Jira를 배포합니다.
    values.yaml 값은 아래 Github 리소스를 참고해주시면 되겠습니다.
    • replicaCount : 기존 EC2 Jira 노드 수 만큼 설정하시면 됩니다.
    • ingress.host : 기존 도메인과 중복되면 안되니 별도의 DNS 레코드를 생성해서 해당 host로 설정해줍니다.)
jira-ec2-to-eks/kubernetes/jira/README.md at main · rolestack/jira-ec2-to-eks
Contribute to rolestack/jira-ec2-to-eks development by creating an account on GitHub.
  1. Jira 배포가 완료되면 Helm chart 삭제를 합니다.
    이때 PV 및 PVC의 Retain 정책으로 EBS 볼륨은 삭제되지 않고 유지됩니다.
  2. 기존 EC2 Jira 노드에 EKS에서 생성된 EBS 볼륨을 마운트 해줍니다.
    (저는 AZ가 달라 별도의 EC2 인스턴스를 생성하고 마운트 했습니다.)
⚠️
이때 EBS AZ와 EC2 인스턴스의 AZ가 동일해야하며, EKS에서 생성한 EBS 볼륨이 암호화 되어있다면 EC2 인스턴스 또한 EBS 암호화를 지원해야 연결할 수 있습니다.
  1. 기존 EC2 Jira local home 데이터를 EKS를 통해 생성된 EBS에 데이터를 복사해줍니다.
    (이때, cluster.properties파일은 jira pod가 배포된 상태 그대로 기존 파일로 유지합니다.)
  2. 데이터 복사가 완료된 후 EKS에서 생성한 EBS 볼륨을 마운트 해제합니다.
  3. 기존 EC2 Jira shared home 데이터 위치를 재정의합니다.
    efs-pv.yaml 파일에 정의한대로 유지하고 싶으면 해당 디렉토리에 기존 Jira shared home 파일들을 복사해주던가,
    efs-pv.yaml 파일에 volumeHandle 부분을 수정하여 기존 Jira shared home위치로 정의합니다.
  4. values.yaml 파일 중 아래 내용을 수정합니다.
    • database.url : 변경된 기존 DB를 지정해야합니다.
      (아니면 새로운 Jira pod 생성 시 이전 url을 따라가 오류가 발생합니다.)
    • ingress.host : 기존 Host로 다시 바꿔줍니다.
  1. 데이터가 잘 넘어왔는지 사용에 문제없는지 테스트 및 데이터를 검증합니다.
  2. 기존 리소스를 정리하고 마이그레이션을 마무리합니다.