LoginSignup
6
2

More than 5 years have passed since last update.

StatufulSet volumeClaimTemplates をIKSで動作させる方法

Last updated at Posted at 2018-06-09

Kubernetes StatfulSetのチュートリアル https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#creating-a-statefulset にある YAMLファイルをIKS (IBM Cloud Kubernetes Service)で動作させるためのメモです。

問題

このリンク先のYAMLをGKEに適用すると動作するが、IKSに適用すると、StatefulSetのポッドを起動することができない。

$ kubectl apply -f web.yml
service "nginx" created
statefulset "web" created

$ kubectl get sts
NAME      DESIRED   CURRENT   AGE
web       2         1         3m

原因は、ストレージクラスの指定が無く、Persistent Volume が無いメッセージが表示されペンディングとなる。(no persistent volumes available for this claim and no storage class is set)

$ kubectl get pvc
NAME        STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
www-web-0   Pending                                                      3m

$ kubectl describe pvc www-web-0
Name:          www-web-0
Namespace:     default
StorageClass:  
Status:        Pending
Volume:        
Labels:        app=nginx
Annotations:   <none>
Finalizers:    []
Capacity:      
Access Modes:  
Events:
  Type    Reason         Age               From                         Message
  ----    ------         ----              ----                         -------
  Normal  FailedBinding  1s (x5 over 55s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

対策

storageClassName: ibmc-file-bronzeを追加すること、および、ストレージサイズを20Giを設定する。

$ diff -c web-gke.yml web-iks.yml 
*** web.yml 2018-06-09 20:11:20.000000000 +0900
--- web.yml 2018-06-09 20:20:55.000000000 +0900
***************
*** 41,46 ****
        name: www
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
!           storage: 1Gi
--- 41,47 ----
        name: www
      spec:
        accessModes: [ "ReadWriteOnce" ]
+       storageClassName: ibmc-file-bronze
        resources:
          requests:
!           storage: 20Gi

IKSの永続ボリュームのストレージクラスは、以下があります。

$ kubectl get storageclasses
NAME                      PROVISIONER        AGE
default                   ibm.io/ibmc-file   118d
ibmc-file-bronze          ibm.io/ibmc-file   39d
ibmc-file-custom          ibm.io/ibmc-file   39d
ibmc-file-gold            ibm.io/ibmc-file   39d
ibmc-file-retain-bronze   ibm.io/ibmc-file   39d
ibmc-file-retain-custom   ibm.io/ibmc-file   39d
ibmc-file-retain-gold     ibm.io/ibmc-file   39d
ibmc-file-retain-silver   ibm.io/ibmc-file   39d
ibmc-file-silver          ibm.io/ibmc-file   39d

一方、GKEのストレージクラスをリストすると次の様になります。

$ kubectl config use-context gke-cluster-1
Switched to context "gke-cluster-1".

$ kubectl get storageclasses
NAME                 PROVISIONER            AGE
standard (default)   kubernetes.io/gce-pd   2d

IKSは選択肢が多いので、指定する必要があるようです。

それから、IKSの永続ストレージは、20Gi〜1200Giとなっており、最小量が20Giでした。

$ kubectl describe storageclasses ibmc-file-bronze
Name:            ibmc-file-bronze
IsDefaultClass:  No
Annotations:     kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile","kubernetes.io/cluster-service":"true"},"name":"ibmc-file-bronze","namespace":""},"parameters":{"classVersion":"2","iopsPerGB":"2","reclaimPolicy":"Delete","sizeRange":"[20-12000]Gi","type":"Endurance"},"provisioner":"ibm.io/ibmc-file"}
,storageclass.beta.kubernetes.io/is-default-class=
Provisioner:    ibm.io/ibmc-file
Parameters:     classVersion=2,iopsPerGB=2,reclaimPolicy=Delete,sizeRange=[20-12000]Gi,type=Endurance
ReclaimPolicy:  Delete
Events:         <none>

ということで、YAMLを少し修正すると、次のように動作しました。

IKSでのStatefulSetの動作状態

$ kubectl get sts 
NAME      DESIRED   CURRENT   AGE
web       2         2         2m

$ kubectl get pvc
NAME        STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
www-web-0   Bound     pvc-7f2ecd31-6bd4-11e8-b027-ee19c07a9ac9   20Gi       RWO            ibmc-file-bronze   3m
www-web-1   Bound     pvc-c4de5ffb-6bd4-11e8-b027-ee19c07a9ac9   20Gi       RWO            ibmc-file-bronze   1m

GKEでのStatefulSetの動作状態

$ kubectl get sts
NAME      DESIRED   CURRENT   AGE
web       2         2         2m

$ kubectl get pvc
NAME        STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
www-web-0   Bound     pvc-c442bc4e-6ba6-11e8-83ef-42010a92012c   2G         RWO            standard       2m
www-web-1   Bound     pvc-f4d21239-6ba6-11e8-83ef-42010a92012c   2G         RWO            standard       1m
6
2
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
6
2