uni farm

kubernetesでAWS ecrのdocker imageを使ってコンテナ作成

privateなdockerレジストリからdocker image pullする時に困ったので手順を書き残しておく

AWS ecr上にあるimageをpullする時、当然だが普通にpullすると認証ではじかれる

kubernetesにsecretとかいうものを設定しなければならない

環境

  • macOS: 10.12.6
  • minikube: v0.19.1
  • kubernetes: v1.6.4

1. kubernetesのsecret作成

概ね下のコマンドを参考にした https://github.com/whereisaaron/kubernetes-aws-scripts/blob/master/create-ecr-imagepullsecret.sh

create-ecr-imagepullsecret.sh
#
# Fetch token (which will expire in 12 hours)
#

TOKEN=`aws ecr --region=$REGION --profile $PROFILE get-authorization-token --registry-ids $ACCOUNT --output text --query authorizationData[].authorizationToken | base64 -D | cut -d: -f2`

#
# Create or repleace registry secret
#

kubectl delete secret --ignore-not-found $SECRET_NAME
kubectl create secret docker-registry $SECRET_NAME \
 --docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
 --docker-username=AWS \
 --docker-password="${TOKEN}" \
 --docker-email="${EMAIL}"

12時間でtokenが期限切れになるので 毎回secretを削除&作成しなければならない・・・

もうちょっとうまいやり方がありそうだけど・・・

2. kubernetesのconfigでimagePullSecrets設定する

1.で作成したsecretを書いておく

pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: from-ecr
spec:
  imagePullSecrets:
  - name: $SECRET_NAME
  containers:
  - name: from-ecr
    image: $ACCOUNT.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:$TAG
    imagePullPolicy: Always

3. podの作成

各変数を設定し、

  1. 2.で作成したファイルを使って
chmod +x create-ecr-imagepullsecret.sh
./create-ecr-imagepullsecret.sh
kubectl create -f pod.yml

を実行すればpodが作成される

おまけ(設定する変数の説明)

  • PROFILE:awscliで使用するプロファイル。ercからdocker image pullする権限があるprofileを指定する
  • ACCOUNT:ecrのurl先頭にある数値列。おそらくレジストリに対して固有のもの
  • REGION:awsのregion。ap-northeast-1など
  • SECRET_NAME:kubernetesに登録するsecretの名前(任意の文字列)
  • EMAIL:eメールアドレス(なんでもいいのかな?試してない)
  • TAG:ecrに登録しているdocker imageのtag名
2022, Built with Gatsby. This site uses Google Analytics.