概要
EKSの使用開始 に従ってセットアップすると、以下の3つをローカルにインストールすることになります。
- kubectl
- heptio-authenticator-aws
- AWS CLI
PCを変えるたびにこれらをセットアップをしないで済むよう、コンテナ化しました。
構築
Dockerイメージ作成
以下のDockerfileを作成します。
FROM alpine:3.8
RUN apk add --no-cache curl python
RUN curl -o /usr/local/bin/kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/linux/amd64/kubectl \
&& chmod +x /usr/local/bin/kubectl
RUN curl -o /usr/local/bin/heptio-authenticator-aws https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/linux/amd64/heptio-authenticator-aws \
&& chmod +x /usr/local/bin/heptio-authenticator-aws
RUN curl https://bootstrap.pypa.io/get-pip.py | python \
&& pip install awscli
ENTRYPOINT ["kubectl"]
Dockerイメージをビルドします。
docker build -t eks-kubectl .
コンテナ実行のシェルスクリプト化
eks-kubectl.shというシェルスクリプトを作成します。
#!/bin/bash -eu
IMAGE_NAME=eks-kubectl
HOST_AWS_DIR=`pwd`/.aws
CONTAINER_AWS_DIR=/root/.aws
HOST_KUBE_DIR=`pwd`/.kube
CONTAINER_KUBE_DIR=/root/.kube
docker run \
--rm \
-v $HOST_AWS_DIR:$CONTAINER_AWS_DIR \
-v $HOST_KUBE_DIR:$CONTAINER_KUBE_DIR \
$IMAGE_NAME \
$@
パーミッションを変更します。
chmod +x eks-kubectl.sh
動作確認
EKSの使用開始 に従って、EKSを起動します。
任意のディレクトリに .aws/config、.aws/credentials、.kube/config を配置し、そのディレクトリで eks-kubectl.sh を実行します。
例えば、以下のようになります。
$ ./eks-kubectl.sh get node
NAME STATUS ROLES AGE VERSION
ip-192-168-182-25.us-west-2.compute.internal Ready <none> 5m v1.10.3
ip-192-168-231-64.us-west-2.compute.internal Ready <none> 5m v1.10.3
ip-192-168-76-116.us-west-2.compute.internal Ready <none> 5m v1.10.3
まとめ
EKSの操作に必要なコマンドをコンテナ化することができました。
コマンドをコンテナ化することで、ポータビリティが非常に高くなります。
また、.awsや.kubeをボリュームとすることで、今どの環境を操作しているのかも分かりやすくなります。
ソースコードは以下です。
https://github.com/os1ma/eks-sample/tree/master/eks-kubectl