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用の設定ファイルを作成
```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
```
- 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
```
- 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
```
サービスの起動
- 起動させる
```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
```
ドメインまわりの設定
- 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
```
-
管理コンソールでも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でもアクセスできることを確認しておく
おつかれさまでした。