0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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用の設定ファイルを作成
```bash
$ 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
```
  1. ALB用の設定ファイルを作成
```bash
$ 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
```
  1. Pod用の設定ファイルを作成
```bash
$ 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. 起動させる
```bash
$ 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を確認する
```bash
$ 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
```
  1. 管理コンソールでもCLIでもいいので設定
    → eks.taterole.jp に dualstack.k8s-default-php74hin-aaaaaaaa5a-681111114.ap-northeast-1.elb.amazonaws.com を結びつける
    注意:初期設定でphp74h-ingress.yaml 内で指定したドメインとパス以外は404に飛ばすようになっているので、DNS設定しないとコンテンツが見えません

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

  3. フザウザで確認する
    → 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?