4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】Amazon EKSでcorednsノードを起動させる

Last updated at Posted at 2024-05-07

はじめに

 こんにちは。今までコンテナ関係の業務に携わったこともなければ、kubectlコマンドもほとんど実行したことがない「コンテナ初心者」でした。
 最近、コンテナサービスであるAmazon EKSを触る機会が増え、そこで、EKS構築からEKSアドオンのcorednsノードを起動させる作業を何回も繰り返してきました。最初は、うまくノードが起動せず、環境を作るまでに時間がかかりましたが、回数をこなしていくうちに、スムーズに構築できるようになりました。
 個人的な備忘録に近いかもしれませんが、EKSでEKSアドオンのcorednsを起動するまでの手順や注意ポイントを記載いたします。

構成図

 今回の構成図は下図のようになります。
image.png
 踏み台はEKSへkubectlコマンドを実行するためのサーバです。もし、EKSのクラスターエンドポイントアクセスで接続許可すれば、ローカルのWSLから接続もできますので、踏み台は必要に応じて構築してください。
※NWの各リソース作成方法についてはここでは割愛させていただきます。
※sgは、ポート443、ソース0.0.0.0/0を許可、ACLはデフォルトのままです。検証のためかなり緩いルールにしてます。
※ルートテーブルについて、Publicサブネットはigwで外部通信(送信先:0.0.0.0/0、ターゲット:igw)、PrivateサブネットはNatGateway経由で外部通信(送信先:0.0.0.0/0、ターゲット:nat)できるようになっていれば問題ありません。

EKS構築

基本的にコンソール画面に従って設定を入れていけば問題ありません。

設定画面①

image.png
 IAMロールは「AmazonEKSClusterPolicy」が付与されたrolesを作成して選択しましょう。
 クラスターアクセスの部分は、1度「EKS API」を許可した場合、後から「ConfigMap」のみに変更できないため注意しましょう。

設定画面②

image.png
 クラスタエンドポイントアクセスは、EKSへの接続許可に関わる部分です。ここを「プライベート」に設定していることに気づかず、ずっとVPC外から接続しようとしてエラーになった経験があります。。。

設定画面③

image.png
 ここはログ、メトリクス関係の設定です。今回は検証なので不要とします。

設定画面④

image.png
 EKSアドオンの部分です。今回は検証なので、デフォルトでインストールされるもののみ選択します。EKSアドオンは、EKS構築後から削除、追加することはできます。

設定画面⑤

image.png
 EKSアドオンのバージョン設定です。今回は検証なので、デフォルトとします。
 最後に各設定一覧が表示されますので、問題なければ作成します。作成が完了するまで10分ほどかかります。

Fargateプロファイル作成

 続いてFargateプロファイルを作成します。まだFargateプロファイルが作られていないため、corednsのノードは起動しようとしてますが、Pendingになっていると思います。

root@test:~# kubectl get pod -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-676bf68468-8zkql   0/1     Pending   0          117s
kube-system   coredns-676bf68468-skzpv   0/1     Pending   0          117s
root@test:~#

設定画面①

image.png
 IAMロールは「AmazonEKSFargatePodExecutionRolePolicy」が付与されたrolesを作成して選択しましょう。

設定画面②

image.png
 corednsの名前空間は「kube-system」なのでkube-systemの名前空間を指定します。

pod確認

 ここまで行ったら設定は完了です。kubectlコマンドを実行してpodのステータスを見てみましょう。

root@test:~# kubectl get pod -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-84bdd59474-6nlfb   1/1     Running   0          7m47s
kube-system   coredns-84bdd59474-z4wmk   1/1     Running   0          7m47s
root@test:~#

以上で作業は完了です。もし、引き続きPending状態だった場合、rolloutを実行してpodを再配備してみてください。

podがRunningになっていないときの原因

 ここまで作業を実施したがpodがRunningになっていないときの原因(私もやってしまったうっかりミス)について記載します。

  • rolloutしてpodを再配備する。
# kubectl rollout restart coredns -n kube-system
  • 外部通信ができるようにルートテーブルが設定されていない。
  • Fargateプロファイルが作成されていない。
  • 作成したFargateプロファイルの名前空間が間違っている。

おまけ

ここからはEKS構築でよく使ったコマンドを紹介します。

  • .kube/configの更新
# aws eks update-kubeconfig --name [EKS名]
  • リソースの一覧
# kubectl get [リソース名] -A

リソース名:pod、deployment、node、namespaceなど

  • リソースの詳細確認
# kubectl describe [リソース名] -A

リソース名:pod、deployment、node、namespaceなど

  • リソースの削除
# kubectl delete [リソース名] -A

リソース名:pod、deployment、node、namespaceなど

  • deploymentの再起動(rollout)
# kubectl rollout restart deployment [deployment名] -n [namespace]
# kubectl rollout status deployment [deployment名] -n [namespace]

最後に

 いかがでしたでしょうか。今回は検証なので、sgやEKSのアクセスなど厳密なものにしておりません。当たり前ですが、実業務でEKSを構築する場合は、EKSの各設定、NW要件、通信要件など設計した上で構築しましょう。
 やはり実際に手を動かして作業をするのが、記憶に残りやすいですね。私と同じようにEKSを最近触り始めた方の参考になれば幸いです。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?