LoginSignup
0
0

More than 3 years have passed since last update.

AWS EKS 盛り盛り構成インストールガイド  ~完結編~

Posted at

EKS構築手順 完結編

前提

前編のつづきとなっていますので、そちらを閲覧されてからどうぞ
https://qiita.com/lapolapo/items/99bda7f4c8cf1b517448

やりたいこと

  1. 既存PrivateVPCでEKSを使いたい
  2. ALBも使いたい
  3. EFSも使うんだ
  4. Apache + PHP7.4 のいわゆるWEBサーバを作る(CacheやDBはElasticacheやらRDSを使う)
  5. HTTPSも使いたい
  6. AutoScalingを考えるとコンテンツはNASに置いておきたい

作業の流れ

  1. [前回] Cluster作成
  2. [前回] aws-load-balancer-controllerのインストール
  3. [前回] EFSドライバーのインストール
  4. [今回] 各種設定ファイルの作成
  5. [今回] サービスの起動
  6. [今回] DNS登録と動作確認

各種サービス用の設定ファイルを作成する

  1. EFS用の設定ファイルを作成

    $ mkdir php74-apache && cd php74-apache
    $ vi php74h-storageclass.yaml \
         php74h-pv.yaml \
         php74h-claim.yaml
    
    ## php74h-storageclass.yaml は、クラスターに割り当てるストレージの定義
    ## php74h-pv.yaml は、永続化ボリュームの設定
    ## php74h-claim.yaml は、上記で設定したもののを使用するための請求
    
    php74h-storageclass.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: php74h-sc
    provisioner: efs.csi.aws.com
    
    php74h-pv.yaml
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: php74h-pv
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: php74h-sc
      csi:
        driver: efs.csi.aws.com
        volumeHandle: fs-5b708f7b
    
    php74h-claim.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: php74h-claim
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: php74h-sc
      resources:
        requests:
          storage: 5Gi
    
  2. ALB用の設定ファイルを作成

    $ vi php74h-ingress.yaml \
         php74h-service.yaml
    
    ## php74h-ingress.yaml は、ALBとターゲットグループの設定
    ## php74h-service.yaml は、PodとALBを外部と接続する設定
    
    php74h-ingress.yaml
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: php74h-ingress
      annotations:
        kubernetes.io/ingress.class: alb
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/tags: CmBillingGroup=Solution
        alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-1:687521589547:certificate/d049801f-89b5-4062-8156-dcaaaaaaaaae ## 証明書のARN
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
        alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    
    spec:
      rules:
        - host: eks.taterole.jp ## 自分の設定したいドメインを設定する
          http:
            paths:
              - path: /*
                backend:
                  serviceName: php74h-http
                  servicePort: 80
              - path: /*
                backend:
                  serviceName: php74h-https
                  servicePort: 443
    
    php74h-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: php74h-service
      labels:
        app: php74h
    spec:
      ports:
        - port: 80
          protocol: TCP
      type: NodePort
      selector:
        app: php74h
    
  3. Pod用の設定ファイルを作成

    $ vi php74h-pod.yaml
    
    ## php74h-pod.yaml は、Podの設定
    ## volumes:のセクションにEFSをマウントする設定が入っているので要注目
    
    php74h-pod.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: php74h
    spec:
      selector:
        matchLabels:
          app: php74h
      replicas: 1
      template:
        metadata:
          labels:
            app: php74h
        spec:
          containers:
            - name: php74h-container
              image: php:7.4-apache
              ports:
                - name: php74h-port
                  containerPort: 80
              volumeMounts:
                - name: documentroot
                  mountPath: /var/www/htm
          volumes:
            - name: documentroot
              persistentVolumeClaim:
                claimName: php74h-claim
    

サービスの起動

  1. 起動させる

    $ cd ..
    $ kubectl apply -f ./php74h-apache
    persistentvolumeclaim/php74h-claim created
    ingress.extensions/php74h-ingress created
    deployment.apps/php74h created
    persistentvolume/php74h-pv created
    service/php74h-service created
    storageclass.storage.k8s.io/php74h-sc created
    customresourcedefinition.apiextensions.k8s.io/targetgroupbindings.elbv2.k8s.aws configured
    mutatingwebhookconfiguration.admissionregistration.k8s.io/aws-load-balancer-webhook configured
    role.rbac.authorization.k8s.io/aws-load-balancer-controller-leader-election-role unchanged
    clusterrole.rbac.authorization.k8s.io/aws-load-balancer-controller-role configured
    rolebinding.rbac.authorization.k8s.io/aws-load-balancer-controller-leader-election-rolebinding uncha
    clusterrolebinding.rbac.authorization.k8s.io/aws-load-balancer-controller-rolebinding unchanged
    service/aws-load-balancer-webhook-service unchanged
    deployment.apps/aws-load-balancer-controller unchanged
    certificate.cert-manager.io/aws-load-balancer-serving-cert unchanged
    issuer.cert-manager.io/aws-load-balancer-selfsigned-issuer unchanged
    validatingwebhookconfiguration.admissionregistration.k8s.io/aws-load-balancer-webhook configured
    

ドメインまわりの設定

  1. ALBのhostnameを確認する

    $ kubectl get ingress
    NAME             CLASS    HOSTS              ADDRESS                                                                      PORTS   AGE
    php74h-ingress   <none>   eks.taterole.jp   k8s-default-php74hin-bdcfd7b35a-687748344.ap-northeast-1.elb.amazonaws.com   80      121m
    
  2. 管理コンソールでもCLIでもいいので設定
    → eks.taterole.jp に dualstack.k8s-default-php74hin-aaaaaaaa5a-681111114.ap-northeast-1.elb.amazonaws.com を結びつける
    注意:初期設定でphp74h-ingress.yaml 内で指定したドメインとパス以外は404に飛ばすようになっているので、DNS設定しないとコンテンツが見えません

  3. 適当にコンテンツを配置する
    → EFSにphpinfo的なものを置いておくといいかも

  4. フザウザで確認する
    → HTTPでもHTTPSでもアクセスできることを確認しておく


おつかれさまでした。

0
0
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
0
0