LoginSignup
2
1

More than 3 years have passed since last update.

EKSでMattermostを構築した話:2. EKSクラスター作成編

Last updated at Posted at 2020-10-11

今回、作成するもの

イメージしている構成

  • 赤枠で囲んだEC2、2台で構成するEKSを作っていきます。 vpc01.png

構築方法

  • 踏み台サーバからeksctlを使って以下のyamlを適用します。
    • create-eks-cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: ver-Mattermost-eks
  region: ap-northeast-1

vpc:
  id: "vpc-xxxxxxxxxxxxxx" # 前段階で作成したVPCのIDを入力
  cidr: "10.0.0.0/16"
  clusterEndpoints:
    privateAccess: true
    publicAccess: true
  publicAccessCIDRs:
    - "xx.xx.xx.xx/32" # ここは踏み台サーバのグローバルIPを指定する(と良いと思われる、今回はそれをしなくて後で設定追加をした)
  subnets:
    public:
      ap-northeast-1a:
        id: "subnet-xxxxxxxxxxxxxx" # 前段階で作成したsubnetのIDを入力
        cidr: "10.0.10.0/24"
      ap-northeast-1c:
        id: "subnet-xxxxxxxxxxxxxx"
        cidr: "10.0.11.0/24"
      ap-northeast-1d:
        id: "subnet-xxxxxxxxxxxxxx"
        cidr: "10.0.12.0/24"
    private:
      ap-northeast-1a: 
        id: "subnet-xxxxxxxxxxxxxx"
        cidr: "10.0.20.0/24"
      ap-northeast-1c: 
        id: "subnet-xxxxxxxxxxxxxx"
        cidr: "10.0.21.0/24"
      ap-northeast-1d: 
        id: "subnet-xxxxxxxxxxxxxx"
        cidr: "10.0.22.0/24"

nodeGroups:
  - name: Mattermost-eks-node
    instanceType: t3.medium
    volumeSize: 50
    desiredCapacity: 2
    privateNetworking: true # ここをtrueにするとプライベートサブネットにEKSクラスターが作成される
    minSize: 2
    maxSize: 4
    iam:
      withAddonPolicies:
        autoScaler: true
  • これでプライベートサブネットにEC2が2台作られてEKSクラスターとして設定されます。
    image.png
    eks001.png

  • 今回のcreate-eks-cluster.yamlではvpcnodegroupを同時に定義していますが、nodegroupは随時更新がかかる可能性が高いので別のテンプレートにすることも考慮した方がいいかもしれません。

  • あとはEC2にsshするためのキーペアの設定も今回はしていないですが、その辺りも考慮が必要な点かと思っています。

確認:作成したEKSクラスターに接続できるか

  • では確認ということで、踏み台サーバにアクセスして、kubectlが利用できるかを確認してみます。
    • ここで、つまづきました、、、kubectlコマンドを打っても反応がないのです、、、
$ kubectl get svc
Unable to connect to the server: dial tcp 10.0.20.12:443: i/o timeout
  • 上記の現象はcreate-eks-cluster.yamlの中でもコメントに書いたのですが、publicAccessCIDRsの値を踏み台サーバのグローバルIPに指定しなかったことから来る通信不通の状況かと思われます。
  • ということで、手作業でセキュリティグループに踏み台サーバからのアクセスを許可する設定を入れて解決しました。
    • 具体的には以下にまとめたセキュリティグループの項番:4に、踏み台サーバのセキュリティグループからのhttpsのインバウンド通信を許可することで対応を行いました。

補足:eksctlで作られたセキュリティグループ

項番 セキュリティグループ名 説明
1 eks-cluster-sg-ver-Mattermost-eks-xxxxxxx 管理されていないノードがコントロールプレーン(全ポート)と通信できるようにする
2 eksctl-ver-Mattermost-eks-cluster/ClusterSharedNodeSecurityGroup 管理ノードと非管理ノードが相互に通信できるようにする(すべてのポート) ノード同士の通信を許可する(すべてのポート)
3 eksctl-ver-Mattermost-eks-nodegroup-Mattermost-eks-node/SG ワーカーノードがコントロールプレーン(kubeletとワークロードのTCPポート)と通信できるようにします。ワーカーノードがコントロールプレーンと通信することを許可します(HTTPSポートを使用するワークロード、拡張APIサーバで一般的に使用されます)
4 eksctl-ver-Mattermost-eks-cluster/ControlPlaneSecurityGroup コントロールプレーンがワーカーノードからAPIリクエストを受信できるようにします。
  • このセキュリティグループの1つずつがどことどこを接続しているかを考察してみましたが、まだ項番:1がどこの接続が理解できていません。(誰か教えてください:sob:)

    • 現時点で分かる範囲で言うと、以下のような接続になっているのかなと考えています。 image.png
  • 解決後のアクセス

    • kubectlでsvcが見えました。
$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   6d2h

Nodeの確認

  • つづけてNodeの確認をしようとすると、次はNodeが見えません。
$ kubectl get nodes
No resources found.
  • 実はここに行き着くまでパブリックサブネットにワーカーノードを建てていた時期があり、そのときはこの時点で問題なくNodeが見えていました。
    • プライベートサブネットにNodeを配置したことによってなにか変わった?でも解決方法はサブネットとは関係のないIAM関連の設定でした。
  • 解決方法
    • AWS authenticator configuration mapファイルをダウンロードし、そのファイル内にNodeInstanceRoleを入れ込みます。
$ curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/aws-auth-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: ★NodeInstanceRole★
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

kubectlでConfigMapを適用します。

$ kubectl apply -f aws-auth-cm.yaml
configmap "aws-auth" created
$ kubectl get node
NAME                                             STATUS   ROLES    AGE    VERSION
ip-10-0-21-171.ap-northeast-1.compute.internal   Ready    <none>   6d1h   v1.16.13-eks-ec92d4
ip-10-0-22-50.ap-northeast-1.compute.internal    Ready    <none>   6d1h   v1.16.13-eks-ec92d4

まとめ

  • ということでようやくEKSクラスターが作成できました。ここからEKSクラスター上にMattermostを展開していくのですが、いきなり展開ではなく、前準備をしていこうと思います。

関連記事

2
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
2
1