EKS構築手順 完結編
前提
前編のつづきとなっていますので、そちらを閲覧されてからどうぞ
https://qiita.com/lapolapo/items/99bda7f4c8cf1b517448
やりたいこと
- 既存PrivateVPCでEKSを使いたい
- ALBも使いたい
- EFSも使うんだ
- Apache + PHP7.4 のいわゆるWEBサーバを作る(CacheやDBはElasticacheやらRDSを使う)
- HTTPSも使いたい
- AutoScalingを考えるとコンテンツはNASに置いておきたい
作業の流れ
- [前回] Cluster作成
- [前回] aws-load-balancer-controllerのインストール
- [前回] EFSドライバーのインストール
- [今回] 各種設定ファイルの作成
- [今回] サービスの起動
- [今回] DNS登録と動作確認
各種サービス用の設定ファイルを作成する
-
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.yamlapiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: php74h-sc provisioner: efs.csi.aws.com
php74h-pv.yamlapiVersion: 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.yamlapiVersion: v1 kind: PersistentVolumeClaim metadata: name: php74h-claim spec: accessModes: - ReadWriteMany storageClassName: php74h-sc resources: requests: storage: 5Gi
-
ALB用の設定ファイルを作成
$ vi php74h-ingress.yaml \ php74h-service.yaml ## php74h-ingress.yaml は、ALBとターゲットグループの設定 ## php74h-service.yaml は、PodとALBを外部と接続する設定
php74h-ingress.yamlapiVersion: 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.yamlapiVersion: v1 kind: Service metadata: name: php74h-service labels: app: php74h spec: ports: - port: 80 protocol: TCP type: NodePort selector: app: php74h
-
Pod用の設定ファイルを作成
$ vi php74h-pod.yaml ## php74h-pod.yaml は、Podの設定 ## volumes:のセクションにEFSをマウントする設定が入っているので要注目
php74h-pod.yamlapiVersion: 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
サービスの起動
-
起動させる
$ 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
ドメインまわりの設定
-
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
管理コンソールでもCLIでもいいので設定
→ eks.taterole.jp に dualstack.k8s-default-php74hin-aaaaaaaa5a-681111114.ap-northeast-1.elb.amazonaws.com を結びつける
注意:初期設定でphp74h-ingress.yaml 内で指定したドメインとパス以外は404に飛ばすようになっているので、DNS設定しないとコンテンツが見えません適当にコンテンツを配置する
→ EFSにphpinfo的なものを置いておくといいかもフザウザで確認する
→ HTTPでもHTTPSでもアクセスできることを確認しておく
おつかれさまでした。