備忘録
下記のような簡単なCI/CD環境を構築する。
Deploymentを作成するマニフェストをCodeCommitにpushするとCodeBuildでEKSクラスタにDeploymentを作成する。試しにDeploymentのreplicas: 2 → replicas: 3
に変更後、CodePiplineが起動してPod数が更新されることを確認
ハマるポイント:下記CodeBuildのaws-authの設定
CodeCommit
-
リポジトリ名を
eks-cicd-test
で作成 -
リポジトリ準備
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
pip install git-remote-codecommit
git clone codecommit::ap-northeast-1://eks-cicd-test
cd eks-cicd-test
vim .git/config
.git/config
[user]
name = xxxxxx
email = xxxxxx@example.com
- マニフェスト準備
vim nginx-deployment.yml
git add .
git commit -m "msg"
git push
nginx-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx-app
replicas: 2
template:
metadata:
labels:
app: nginx-app
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
CodeBuild
-
buildspec.yml
の準備
vim buildspec.yml
git add .
git commit -m "msg"
git push
buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
java: corretto17
docker: 20
pre_build:
commands:
- curl -o kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.23.7/2022-06-29/bin/linux/amd64/kubectl
- chmod +x ./kubectl
- mv kubectl /usr/local/bin
- aws --region ap-northeast-1 eks update-kubeconfig --name $EKS_CLUSTER_NAME
build:
commands:
- kubectl apply -f nginx-deployment.yml
- kubectl get all
- ビルドプロジェクト作成
項目 | 設定値 | 備考 |
---|---|---|
プロジェクト名 | eks-cicd-test | |
ソースプロバイダ | AWS CodeCommit | |
リポジトリ | eks-cicd-test | |
リファレンスタイプ | ブランチ | |
ブランチ | main | |
環境イメージ | マネージド型イメージ | |
オペレーティングシステム | Amazon Linux 2 | |
ランタイム | Standard | |
イメージ | standard:4.0 | |
イメージのバージョン | 最新 | |
環境タイプ | Linux | |
特権付与 | チェック | |
サービスロール | 新しいサービスロール | |
ロール名 | codebuild-eks-cicd-test-service-role | |
環境変数 | 名前:EKS_CLUSTER_NAME / 値:eks-clu2 | |
アーティファクトはなし |
- eksアクセス用のポリシー作成
eks-test
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "eks:DescribeCluster",
"Resource": "arn:aws:eks:*:*:cluster/*"
}
]
}
-
codebuild-eks-cicd-test-service-role
にポリシー追加
上記で作成したeks-test
を追加 -
aws-authの設定
kubectl edit configmap aws-auth --namespace kube-system
/service-role
を削除してrolearnを指定する。
data:
mapRoles: |
- groups:
- system:masters
rolearn: arn:aws:iam::{AWS_ACCOUNT_ID}:role/codebuild-eks-cicd-test-service-role
username: codebuild-eks-cicd-test-service-role
- マッピング情報が設定されていることを確認
eksctl get iamidentitymapping --cluster eks-clu2 --region=ap-northeast-1
CodePipline
- パイプライン作成
項目 | 設定値 | 備考 |
---|---|---|
パイプライン名 | eks-cicd-test-pl | Step1 |
サービスロール | 新しいサービスロール | Step1 |
ロール名 | デフォルト | Step1 |
ソースプロバイダー | AWS CodeCommit | Step2 |
リポジトリ名 | eks-cicd-test | Step2 |
ブランチ名 | main | Step2 |
プロバイダーを構築する | AWS CodeBuild | Step3 |
プロジェクト名 | eks-cicd-test | Step3 |
デプロイステージはスキップ | Step4 |
動作確認
- CodeBuild手動で実行
Podが作成されていることを確認
kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-5c577ccdf7-kxlx9 1/1 Running 0 26s
nginx-deployment-5c577ccdf7-nrtlm 1/1 Running 0 26s
- マニフェストを変更してCodeCommitにPush
nginx-deployment.yml
replicas: 2 → replicas: 3
git add .
git commit -m "msg"
git push
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-5c577ccdf7-hk27l 1/1 Running 0 2m47s
nginx-deployment-5c577ccdf7-kxlx9 1/1 Running 0 8m20s
nginx-deployment-5c577ccdf7-nrtlm 1/1 Running 0 8m20s
関連記事