【AWS】EKSにおけるテスト用簡易Pod起動手順

今回はAWS EKSから例えばRDSやElasticacheといったリソースへの疎通をテストしたいときに、対象のPodにPSQLコマンドなど疎通を確認するためのコマンドが存在しないときの暫定対処として、テスト用のPodを立ち上げる手順を記す。

前提条件は以下のとおりである。

・EKS Clusterが構築されている。
・AWS-CLI,Kubectlコマンドを使用できる環境がある。(踏み台サーバ、ローカル環境)
・Podを起動したり、Pod内に入るための踏み台サーバがある(EC2/ECSなど)
・ECRにリポジトリが作成されていること。
・ECRのためのVPCエンドポイントの穴あけが踏み台サーバにされていること。

細かい権限や環境の整備については今回割愛する。
あくまで既にEKSを使ってアプリPodを構築する環境が整備されていることを前提とする。

①DockerFlieを作成する。


疎通テストに必要なコマンドのインストールを記載する。

PSQL疎通を確認したい場合↓
dockerfile

FROM public.ecr.aws/amazonlinux/amazonlinux:2023.3.20240131.0

# 必要なパッケージのインストールと更新
RUN yum update -y && \
    yum install -y \
    tar unzip gzip sudo openssl less vi git lsof procps iproute postgresql15.x86_64 && \
    yum clean all

# kubectlのインストール
RUN curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.29.0/2024--01-04/bin/linux/amd64/kubectl && \
    openssl sha256 kubectl && \
    chmod +x ./kubectl && \
    mkdir -p $HOME/bin && \
    cp ./kubectl $HOME/bin/kubectl && \
    echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc

# AWS CLI v2のインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    sudo ./aws/install && \
    rm -rf awscliv2.zip aws

# シェルエイリアスの設定
RUN echo 'alias ll="ls -l"' >> ~/.bashrc && \
    echo 'alias k="kubectl"' >> ~/.bashrc

# デフォルトのエントリーポイント
ENTRYPOINT ["tail", "-F", "/dev/null"]


②ECRにdockerfileをpushする。


※任意のプライベートリポジトリを作成する。

AWSコンソールより
ECR>リポジトリ>プッシュコマンドを表示
コマンドをdockerfileがあるディレクトリで実行する。(コピペでOK)

例:

①dockerfileを踏み台サーバの任意のディレクトリに配置する。
②踏み台サーバからECRに接続する。

# aws ecr get-login-password から始まるコマンドを実行する。

③ビルドする。

# docker bulid -t {リポジトリ名}

④イメージタグを付与する。

# docker tagから始まるコマンドを実行する。

⑤DockerイメージをECRにPushする。

# docker push から始まるコマンドを実行する。


③deployment.yamlを作成する。


次にPodを起動するためのdeployment.yamlを作成し、先ほどPushしたDockerイメージを指定する。(以下参考)

AWSコンソールより
ECR>リポジトリ>先ほどプッシュしたイメージ>URIをコピペする。

例: 

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-pod
  namespace: default
spec: 
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  selector:
    matchLabels:
      app: test-pod
  template:
    metadata:
      labels:
        app: test-pod
        az: ap-northeast-1a
    spec:
      containers:
        - name: test-pod-1a
          image: <ECRのURI>  # ここにECRのURIを直接記入してください
          resources:
            requests:
              memory: "4G"
              cpu: "1" 

④Podを起動する。


踏み台サーバに接続して、任意のディレクトリに作成したdeployment.yamlを配置する。
配置したディレクトリにcdし、以下のコマンドを実行してPodを起動する。

# kubectl -f apply ./deployment.yaml

以下のコマンドで正常起動を確認する。

# kubectl get pod -n default

ステータスが"Running"で1/1になっていればOK

⑤Podに接続して、疎通確認を行う。

先ほど確認したPod名をコピーしておく。
以下のコマンドを実行してPodに接続する。

# kubectl exec -it {Pod名をコピペ} -n default /bin/bash

Podに接続した後、疎通確認用のコマンドを実行してテストする。



最後に

今回はテスト用のPodの起動手順を説明した。
DockerFileの内容を修正すれば、telnetコマンドであったり、そのほかの疎通確認用のコマンドをインストールしたPodを起動することが可能である。
Podにはそもそも必要最低限なコマンドしかインストールされてないことが多く、いつも使っているコマンドが使えない、といったことはよく起きる。
デバッグのため、早急にテスト用のPodを起動しなくてはいけないときの参考になれば幸いである。


この記事が気に入ったらサポートをしてみませんか?