diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index 4fd9d09c7..111853dd4 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -378,22 +378,9 @@ func createMizuApiServerPod(ctx context.Context, kubernetesProvider *kubernetes. func createMizuApiServerDeployment(ctx context.Context, kubernetesProvider *kubernetes.Provider, opts *kubernetes.ApiServerOptions) error { volumeClaimCreated := false if !config.Config.Tap.NoPersistentVolumeClaim { - isDefaultStorageClassAvailable, err := kubernetesProvider.IsDefaultStorageProviderAvailable(ctx) - if err != nil { - return err - } - if isDefaultStorageClassAvailable { - if _, err = kubernetesProvider.CreatePersistentVolumeClaim(ctx, config.Config.MizuResourcesNamespace, kubernetes.PersistentVolumeClaimName, config.Config.Tap.MaxEntriesDBSizeBytes()+mizu.DaemonModePersistentVolumeSizeBufferBytes); err != nil { - logger.Log.Warningf(uiUtils.Yellow, "An error has occured while creating a persistent volume claim for mizu, this will mean that mizu's data will be lost on pod restart") - logger.Log.Debugf("error creating persistent volume claim: %v", err) - } else { - volumeClaimCreated = true - } - } else { - logger.Log.Warningf(uiUtils.Yellow, "Could not find default volume provider in this cluster, this will mean that mizu's data will be lost on pod restart") - } - + volumeClaimCreated = TryToCreatePersistentVolumeClaim(ctx, kubernetesProvider) } + pod, err := kubernetesProvider.GetMizuApiServerPodObject(opts, volumeClaimCreated, kubernetes.PersistentVolumeClaimName) if err != nil { return err @@ -406,6 +393,26 @@ func createMizuApiServerDeployment(ctx context.Context, kubernetesProvider *kube return nil } +func TryToCreatePersistentVolumeClaim(ctx context.Context, kubernetesProvider *kubernetes.Provider) bool { + isDefaultStorageClassAvailable, err := kubernetesProvider.IsDefaultStorageProviderAvailable(ctx) + if err != nil { + logger.Log.Warningf(uiUtils.Yellow, "An error occured when checking if a default storage provider exists in this cluster, this means mizu data will be lost on mizu-api-server pod restart") + logger.Log.Debugf("error checking if default storage class exists: %v", err) + return false + } else if !isDefaultStorageClassAvailable { + logger.Log.Warningf(uiUtils.Yellow, "Could not find default storage provider in this cluster, this means mizu data will be lost on mizu-api-server pod restart") + return false + } + + if _, err = kubernetesProvider.CreatePersistentVolumeClaim(ctx, config.Config.MizuResourcesNamespace, kubernetes.PersistentVolumeClaimName, config.Config.Tap.MaxEntriesDBSizeBytes()+mizu.DaemonModePersistentVolumeSizeBufferBytes); err != nil { + logger.Log.Warningf(uiUtils.Yellow, "An error has occured while creating a persistent volume claim for mizu, this means mizu data will be lost on mizu-api-server pod restart") + logger.Log.Debugf("error creating persistent volume claim: %v", err) + return false + } + + return true +} + func getMizuApiFilteringOptions() (*api.TrafficFilteringOptions, error) { var compiledRegexSlice []*api.SerializableRegexp diff --git a/examples/roles/permissions-all-namespaces-daemon.yaml b/examples/roles/permissions-all-namespaces-daemon.yaml index 5a32eaaf5..3cbc16a13 100644 --- a/examples/roles/permissions-all-namespaces-daemon.yaml +++ b/examples/roles/permissions-all-namespaces-daemon.yaml @@ -7,15 +7,15 @@ rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch", "delete"] - - apiGroups: [ "" ] + - apiGroups: [ "apps" ] resources: [ "deployments" ] - verbs: [ "create", "delete" ] + verbs: [ "get", "create", "delete" ] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: ["apps"] resources: ["daemonsets"] - verbs: ["create", "patch", "delete"] + verbs: ["get", "create", "patch", "delete", "list"] - apiGroups: [""] resources: ["namespaces"] verbs: ["get", "list", "watch", "create", "delete"] diff --git a/examples/roles/permissions-ns-daemon.yaml b/examples/roles/permissions-ns-daemon.yaml index c73513e8c..589470678 100644 --- a/examples/roles/permissions-ns-daemon.yaml +++ b/examples/roles/permissions-ns-daemon.yaml @@ -8,7 +8,7 @@ rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch", "delete"] -- apiGroups: [ "" ] +- apiGroups: [ "apps" ] resources: [ "deployments" ] verbs: [ "get", "create", "delete" ] - apiGroups: [""] @@ -16,7 +16,7 @@ rules: verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: ["apps"] resources: ["daemonsets"] - verbs: ["get", "create", "patch", "delete"] + verbs: ["get", "create", "patch", "delete", "list"] - apiGroups: [""] resources: ["services/proxy"] verbs: ["get"] @@ -32,7 +32,7 @@ rules: - apiGroups: ["rbac.authorization.k8s.io"] resources: ["rolebindings"] verbs: ["get", "create", "delete"] -- apiGroups: ["apps", "extensions"] +- apiGroups: ["apps", "extensions", ""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: ["apps", "extensions"] diff --git a/shared/kubernetes/provider.go b/shared/kubernetes/provider.go index d18ad34bc..be7b29834 100644 --- a/shared/kubernetes/provider.go +++ b/shared/kubernetes/provider.go @@ -579,6 +579,11 @@ func (provider *Provider) RemoveDaemonSet(ctx context.Context, namespace string, return provider.handleRemovalError(err) } +func (provider *Provider) RemovePersistentVolumeClaim(ctx context.Context, namespace string, volumeClaimName string) error { + err := provider.clientSet.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, volumeClaimName, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) +} + func (provider *Provider) handleRemovalError(err error) error { // Ignore NotFound - There is nothing to delete. // Ignore Forbidden - Assume that a user could not have created the resource in the first place. @@ -859,10 +864,6 @@ func (provider *Provider) CreatePersistentVolumeClaim(ctx context.Context, names return provider.clientSet.CoreV1().PersistentVolumeClaims(namespace).Create(ctx, volumeClaim, metav1.CreateOptions{}) } -func (provider *Provider) RemovePersistentVolumeClaim(ctx context.Context, namespace string, volumeClaimName string) error { - return provider.clientSet.CoreV1().PersistentVolumeClaims(namespace).Delete(ctx, volumeClaimName, metav1.DeleteOptions{}) -} - func getClientSet(config *restclient.Config) (*kubernetes.Clientset, error) { clientSet, err := kubernetes.NewForConfig(config) if err != nil {