사전 준비

1. 사전 환경 구성

Weave Flux를 설치하기 위해서 Helm Chart가 설치되어 있어야 합니다.

helm version

AWS CodePipeline 및 AWS CodeBuild 모두 도커 이미지 빌드 파이프라인을 만들려면 AWS IAM(액세스 관리)의 service role 이 필요합니다.

이 단계에서는 IAM 역할을 생성하고 CodeBuild 단계에서 Kubectl을 통해 EKS 클러스터와 상호 작용하는 인라인 정책을 추가할 것입니다.

버킷 및 역할을 만듭니다.

mkdir ~/environment/gitops_flux
cd ~/environment/gitops_flux

# Use your account number below
ACCOUNT_ID=$(aws sts get-caller-identity | jq -r '.Account')
aws s3 mb s3://eksworkshop-${ACCOUNT_ID}-codepipeline-artifacts

wget https://eksworkshop.com/intermediate/260_weave_flux/iam.files/cpAssumeRolePolicyDocument.json

aws iam create-role --role-name eksworkshop-CodePipelineServiceRole --assume-role-policy-document file://cpAssumeRolePolicyDocument.json 

wget https://eksworkshop.com/intermediate/260_weave_flux/iam.files/cpPolicyDocument.json

aws iam put-role-policy --role-name eksworkshop-CodePipelineServiceRole --policy-name codepipeline-access --policy-document file://cpPolicyDocument.json

wget https://eksworkshop.com/intermediate/260_weave_flux/iam.files/cbAssumeRolePolicyDocument.json

aws iam create-role --role-name eksworkshop-CodeBuildServiceRole --assume-role-policy-document file://cbAssumeRolePolicyDocument.json 

wget https://eksworkshop.com/intermediate/260_weave_flux/iam.files/cbPolicyDocument.json

aws iam put-role-policy --role-name eksworkshop-CodeBuildServiceRole --policy-name codebuild-access --policy-document file://cbPolicyDocument.json

2. Github 구성

2개의 GitHub repository를 만들 것입니다. 하나는 도커 이미지 빌드를 트리거하는 샘플 애플리케이션에 사용됩니다. 또 다른 방법은 Weave Flux가 클러스터에 배포하는 쿠버네티스 매니페스트를 보관하는 데 사용됩니다. 이는 Kubernetes에 push하는 다른 연속 전개 툴에 비해 pull 기반 방법입니다.

here를 클릭하여 샘플 응용 프로그램 저장소를 만듭니다.

Repository name 과 Description을 작성하고 아래와 같이 README로 리포지토리 초기화를 확인하고 리포지토리 만들기를 클릭합니다.

다시한번 위 절차를 반복하여 Kubernetes mainfasts repositories 를 생성합니다.

이 CodePipeline이 GitHub에서 callback 받을 수 있는 Personal access token을 만들 것입니다. Access token을 만든 후에는 재사용할 수 있으므로 안전한 곳에 저장합니다. 이 단계는 처음 실행할 때나 새 키를 생성해야 할 때만 수행할 수 있습니다.

Github에서 New personal access page 를 오픈합니다. passwork를 입력하고 login 후 Personal access tokens 를 클릭합니다. Generate new token 을 클릭합니다.

아래와 같이 정보를 입력하고 Generate token 을 클릭합니다.

발생된 access token을 저장합니다.

3. Weave Flux 설치

이제 Helm을 사용하여 Weave Flux를 클러스터에 설치하고 Kubernetes 구성 GitHub repo와 상호 작용할 수 있도록 합니다.

먼저, Flux 사용자 정의 리소스 정의를 설치합니다.

kubectl apply -f https://raw.githubusercontent.com/fluxcd/helm-operator/master/deploy/crds.yaml

다음 단계에서는 Git 사용자 이름이 필요합니다. 이 정보가 없으면 결과 파이프라인이 예상대로 작동하지 않습니다. 이 값을 다음 명령로 환경 변수로 설정합니다.

YOURUSER=<git username>

flux 네임스페이스를 생성합니다.

kubectl create namespace flux

Flux chart repo 를 helm에 추가한 후 설치합니다. 아래 ${YOURUSER} 를 git user name으로 변경합니다.

helm repo add fluxcd https://charts.fluxcd.io

helm upgrade -i flux fluxcd/flux \
--set git.url=git@github.com:${YOURUSER}/k8s-config \
--set git.branch=main \
--set registry.pollInterval=1m \
--set git.pollInterval=1m \
--namespace flux

helm upgrade -i helm-operator fluxcd/helm-operator \
--set helm.versions=v3 \
--set git.ssh.secretName=flux-git-deploy \
--set git.pollInterval=1m \
--set chartsSyncInterval=1m \
--set git.branch=main \
--namespace flux

필요한 Pod 3개가 설치되어 있는지 확인합니다.

kubectl get pods -n flux

GitHub 쓰기 액세스를 허용하는 SSH 키를 얻으려면 fluxctl을 설치해야 합니다. 이를 통해 Flux는 GitHub의 구성이 클러스터에 배포된 구성과 동기화되도록 유지할 수 있습니다.

sudo wget -O /usr/local/bin/fluxctl $(curl https://api.github.com/repos/fluxcd/flux/releases/latest | jq -r ".assets[] | select(.name | test(\"linux_amd64\")) | .browser_download_url")
sudo chmod 755 /usr/local/bin/fluxctl

fluxctl version
fluxctl identity --k8s-fwd-ns flux

kubectl get secret flux-git-deploy -n flux --template={{.data.identity}} | base64 -d > ~/.ssh/id_rsa

chmod 600 ~/.ssh/id_rsa

제공되는 ssh key 값을 복사하여 Github repo에 배포합니다.

  1. URL : github.com/<username>/settings/profile

  2. SSH &GPG Key 클릭 > New SSH

  3. Name : Flux Deploy Key

  4. ssh key 붙어넣기

  5. Allow Write Access 클릭 <- Flux를 통해서 repo가 cluster의 현재 상태를 동기화 하는 것을 허용합니다.

  6. Add Key 클릭

Last updated