問題名
Nginxが展開されない
概要
大学でパソコン部に入部したあなたは、部内インフラ基盤を整えることになった。
先輩がハンズオンに参加してきたそうで、ハンズオンで教えられたマニフェストをそのまま部のサーバーに構築されたkubernetesで動かそうとしたが動かなかったらしい。
先輩はこれからレポートで忙しいそうなのであなたがハンズオンで教えられたマニフェストであるnginx.yaml
に記載されたリソースを動くようにしてほしい。
NginxにつけたいIPは192.168.24.10もしくは192.168.24.11のいずれかでよい。
masterのホームディレクトリにクラスタのアクセス情報があるため、masterからk8sクラスタは操作できる。
前提条件
- nginx.yamlの変更不可
初期状態
- NginxのPodがPending
終了状態
- nginx.yamlで定義したNginxのPodがrunningになっていること。
- Nginxに定められたIPでアクセスできること
- nginx.yamlに記載されたリソースが動作していること
構成情報
kubernetes Master x1, Node x1
問題状況
以下が nginx.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cephfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-cephfs --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nginx-data mountPath: /usr/share/nginx/html volumes: - name: nginx-data persistentVolumeClaim: claimName: cephfs-pvc readOnly: false --- apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
Pod,PVC、LoadBalancerがPendingになっている。
解説
今回のkubernetesクラスタはKubeadmによって構築されている。
Type:LoadBalancerを用意するだけでアドレスは降ってこないことと、 PVがないことが原因である。
MetalLB
LoadBalancerはMetalLBを利用することで解決する。
https://metallb.universe.tf/installation/ より
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml
metallb-config.yamlを作る
apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 addresses: - 192.168.24.10-192.168.24.11
適用してあげる
kubectl apply -f metallb-config.yaml
ストレージ
hostPath
を利用することで永続ストレージを用意してあげることができる。
hostPathでデータを保存するディレクトリを用意する。今回は/data
とする。
sudo mkdir /data
ストレージの種類・プロファイルを設定するStorageClass、永続化ボリュームのオブジェクトであるPersistentVolumeを作成すると解決する。
sc.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-cephfs provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: test-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Delete storageClassName: csi-cephfs hostPath: path: /data/test type: DirectoryOrCreate
その他の回答
- アドレス
- パッチで LBに
externalIPs
を使ってIPをつける
- パッチで LBに
- ストレージ
- hostPathではなくNFSを利用
採点基準
- 指定したIPでNginxのType:LoadBalancerが利用できるようになっている:50%
- StorageClass,PersistentVolumeを用意して、NginxがRunningになっている:50%