config

package
v0.24.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 17, 2024 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DriverName to be registered
	CSINodeLabelKey      = "app"
	CSINodeLabelValue    = "juicefs-csi-node"
	PodTypeKey           = "app.kubernetes.io/name"
	PodTypeValue         = "juicefs-mount"
	PodUniqueIdLabelKey  = "volume-id"
	PodJuiceHashLabelKey = "juicefs-hash"
	Finalizer            = "juicefs.com/finalizer"
	JuiceFSUUID          = "juicefs-uuid"
	UniqueId             = "juicefs-uniqueid"
	CleanCache           = "juicefs-clean-cache"
	MountContainerName   = "jfs-mount"
	JobTypeValue         = "juicefs-job"
	JfsInsideContainer   = "JFS_INSIDE_CONTAINER"

	// CSI Secret
	ProvisionerSecretName           = "csi.storage.k8s.io/provisioner-secret-name"
	ProvisionerSecretNamespace      = "csi.storage.k8s.io/provisioner-secret-namespace"
	PublishSecretName               = "csi.storage.k8s.io/node-publish-secret-name"
	PublishSecretNamespace          = "csi.storage.k8s.io/node-publish-secret-namespace"
	ControllerExpandSecretName      = "csi.storage.k8s.io/controller-expand-secret-name"
	ControllerExpandSecretNamespace = "csi.storage.k8s.io/controller-expand-secret-namespace"

	// webhook
	WebhookName = "juicefs-admission-webhook"
	True        = "true"
	False       = "false"

	InjectSidecarDone    = "done" + injectSidecar
	InjectSidecarDisable = "disable" + injectSidecar

	// config in pv
	MountPodCpuLimitKey   = "juicefs/mount-cpu-limit"
	MountPodMemLimitKey   = "juicefs/mount-memory-limit"
	MountPodCpuRequestKey = "juicefs/mount-cpu-request"
	MountPodMemRequestKey = "juicefs/mount-memory-request"

	// DeleteDelayTimeKey mount pod annotation
	DeleteDelayTimeKey = "juicefs-delete-delay"
	DeleteDelayAtKey   = "juicefs-delete-at"

	// default value
	DefaultMountPodCpuLimit   = "2000m"
	DefaultMountPodMemLimit   = "5Gi"
	DefaultMountPodCpuRequest = "1000m"
	DefaultMountPodMemRequest = "1Gi"

	// pv labels
	PVSubpathKey = "juicefs/sub-path"
)

Variables

View Source
var (
	WebPort           = MustGetWebPort() // web port used by metrics
	ByProcess         = false            // csi driver runs juicefs in process or not
	FormatInPod       = false            // put format/auth in pod (only in k8s)
	Provisioner       = false            // provisioner in controller
	CacheClientConf   = false            // cache client config files and use directly in mount containers
	MountManager      = false            // manage mount pod in controller (only in k8s)
	Webhook           = false            // inject juicefs client as sidecar in pod (only in k8s)
	ValidatingWebhook = false            // start validating webhook, applicable to ee only
	Immutable         = false            // csi driver is running in an immutable environment

	DriverName               = "csi.juicefs.com"
	NodeName                 = ""
	Namespace                = ""
	PodName                  = ""
	HostIp                   = ""
	KubeletPort              = ""
	ReconcileTimeout         = 5 * time.Minute
	ReconcilerInterval       = 5
	SecretReconcilerInterval = 1 * time.Hour

	CSIPod = corev1.Pod{}

	MountPointPath           = "/var/lib/juicefs/volume"
	JFSConfigPath            = "/var/lib/juicefs/config"
	JFSMountPriorityName     = "system-node-critical"
	JFSMountPreemptionPolicy = ""

	TmpPodMountBase       = "/tmp"
	PodMountBase          = "/jfs"
	MountBase             = "/var/lib/jfs"
	FsType                = "juicefs"
	CliPath               = "/usr/bin/juicefs"
	CeCliPath             = "/usr/local/bin/juicefs"
	CeMountPath           = "/bin/mount.juicefs"
	JfsMountPath          = "/sbin/mount.juicefs"
	DefaultClientConfPath = "/root/.juicefs"
	ROConfPath            = "/etc/juicefs"

	DefaultCEMountImage = "juicedata/mount:ce-nightly" // mount pod ce image, override by ENV
	DefaultEEMountImage = "juicedata/mount:ee-nightly" // mount pod ee image, override by ENV
)
View Source
var GlobalConfig = newCfg()
View Source
var PodLocks [1024]sync.Mutex

Functions

func GenPodAttrWithCfg added in v0.24.0

func GenPodAttrWithCfg(setting *JfsSetting, volCtx map[string]string) error

func GetPodLock

func GetPodLock(podName string) *sync.Mutex

func IsCEMountPod added in v0.24.3

func IsCEMountPod(pod *corev1.Pod) bool

IsCEMountPod check if the pod is a mount pod of CE check mountpod command's has metaurl

func LoadConfig added in v0.24.0

func LoadConfig(configPath string) error

func MustGetWebPort added in v0.23.4

func MustGetWebPort() int

func ParsePodResources added in v0.23.4

func ParsePodResources(cpuLimit, memoryLimit, cpuRequest, memoryRequest string) (corev1.ResourceRequirements, error)

func ParseYamlOrJson added in v0.23.4

func ParseYamlOrJson(source string, dst interface{}) error

func StartConfigReloader added in v0.24.0

func StartConfigReloader(configPath string) error

ConfigReloader reloads config file when it is updated

Types

type AppInfo added in v0.21.0

type AppInfo struct {
	Name      string
	Namespace string
}

info of app pod

func ParseAppInfo added in v0.21.0

func ParseAppInfo(volCtx map[string]string) (*AppInfo, error)

type CacheEmptyDir added in v0.23.1

type CacheEmptyDir struct {
	Medium    string
	SizeLimit resource.Quantity
	Path      string
}

type CacheInlineVolume added in v0.23.1

type CacheInlineVolume struct {
	CSI  *corev1.CSIVolumeSource
	Path string
}

type CachePVC added in v0.15.1

type CachePVC struct {
	PVCName string
	Path    string
}

type Config added in v0.24.0

type Config struct {
	// arrange mount pod to node with node selector instead nodeName
	EnableNodeSelector bool            `json:"enableNodeSelector,omitempty"`
	MountPodPatch      []MountPodPatch `json:"mountPodPatch"`
}

TODO: migrate more config for here

func (*Config) GenMountPodPatch added in v0.24.0

func (c *Config) GenMountPodPatch(setting JfsSetting) MountPodPatch

GenMountPodPatch generate mount pod patch from jfsSettting 1. match pv selector 2. parse template value 3. return the merged mount pod patch

func (*Config) Reset added in v0.24.0

func (c *Config) Reset()

reset to default value used to unit tests

func (*Config) Unmarshal added in v0.24.0

func (c *Config) Unmarshal(data []byte) error

type JfsSetting

type JfsSetting struct {
	IsCe   bool
	UsePod bool

	UUID               string
	Name               string               `json:"name"`
	MetaUrl            string               `json:"metaurl"`
	Source             string               `json:"source"`
	Storage            string               `json:"storage"`
	FormatOptions      string               `json:"format-options"`
	CachePVCs          []CachePVC           // PVC using by mount pod
	CacheEmptyDir      *CacheEmptyDir       // EmptyDir using by mount pod
	CacheInlineVolumes []*CacheInlineVolume // InlineVolume using by mount pod
	CacheDirs          []string             // hostPath using by mount pod
	ClientConfPath     string               `json:"-"`

	// put in secret
	SecretKey     string            `json:"secret-key,omitempty"`
	SecretKey2    string            `json:"secret-key2,omitempty"`
	Token         string            `json:"token,omitempty"`
	Passphrase    string            `json:"passphrase,omitempty"`
	Envs          map[string]string `json:"envs_map,omitempty"`
	EncryptRsaKey string            `json:"encrypt_rsa_key,omitempty"`
	InitConfig    string            `json:"initconfig,omitempty"`
	Configs       map[string]string `json:"configs_map,omitempty"`

	// put in volCtx
	DeletedDelay string   `json:"deleted_delay"`
	CleanCache   bool     `json:"clean_cache"`
	HostPath     []string `json:"host_path"`

	// mount
	VolumeId   string   // volumeHandle of PV
	UniqueId   string   // mount pod name is generated by uniqueId
	MountPath  string   // mountPath of mount pod or process mount
	TargetPath string   // which bind to container path
	Options    []string // mount options
	FormatCmd  string   // format or auth
	SubPath    string   // subPath which is to be created or deleted
	SecretName string   // secret with JuiceFS volume credentials

	Attr *PodAttr

	PV  *corev1.PersistentVolume      `json:"-"`
	PVC *corev1.PersistentVolumeClaim `json:"-"`
}

func ParseSetting

func ParseSetting(secrets, volCtx map[string]string, options []string, usePod bool, pv *corev1.PersistentVolume, pvc *corev1.PersistentVolumeClaim) (*JfsSetting, error)

func (*JfsSetting) ParseFormatOptions added in v0.17.1

func (s *JfsSetting) ParseFormatOptions() ([][]string, error)

func (*JfsSetting) RepresentFormatOptions added in v0.17.1

func (s *JfsSetting) RepresentFormatOptions(parsedOptions [][]string) []string

func (*JfsSetting) StripFormatOptions added in v0.17.1

func (s *JfsSetting) StripFormatOptions(parsedOptions [][]string, strippedKeys []string) []string

type MountPodPatch added in v0.24.0

type MountPodPatch struct {
	// used to specify the selector for the PVC that will be patched
	// omit will patch for all PVC
	PVCSelector *PVCSelector `json:"pvcSelector,omitempty"`

	CEMountImage string `json:"ceMountImage,omitempty"`
	EEMountImage string `json:"eeMountImage,omitempty"`

	Image                         string                       `json:"-"`
	Labels                        map[string]string            `json:"labels,omitempty"`
	Annotations                   map[string]string            `json:"annotations,omitempty"`
	HostNetwork                   *bool                        `json:"hostNetwork,omitempty" `
	HostPID                       *bool                        `json:"hostPID,omitempty" `
	LivenessProbe                 *corev1.Probe                `json:"livenessProbe,omitempty"`
	ReadinessProbe                *corev1.Probe                `json:"readinessProbe,omitempty"`
	StartupProbe                  *corev1.Probe                `json:"startupProbe,omitempty"`
	Lifecycle                     *corev1.Lifecycle            `json:"lifecycle,omitempty"`
	Resources                     *corev1.ResourceRequirements `json:"resources,omitempty"`
	TerminationGracePeriodSeconds *int64                       `json:"terminationGracePeriodSeconds,omitempty"`
}

type PVCSelector added in v0.24.3

type PVCSelector struct {
	metav1.LabelSelector
	MatchStorageClassName string `json:"matchStorageClassName,omitempty"`
	MatchName             string `json:"matchName,omitempty"`
}

type PodAttr added in v0.16.0

type PodAttr struct {
	Namespace            string
	MountPointPath       string
	JFSConfigPath        string
	JFSMountPriorityName string
	ServiceAccountName   string

	Resources corev1.ResourceRequirements

	Labels                        map[string]string `json:"labels,omitempty"`
	Annotations                   map[string]string `json:"annotations,omitempty"`
	LivenessProbe                 *corev1.Probe     `json:"livenessProbe,omitempty"`
	ReadinessProbe                *corev1.Probe     `json:"readinessProbe,omitempty"`
	StartupProbe                  *corev1.Probe     `json:"startupProbe,omitempty"`
	Lifecycle                     *corev1.Lifecycle `json:"lifecycle,omitempty"`
	TerminationGracePeriodSeconds *int64            `json:"terminationGracePeriodSeconds,omitempty"`

	// inherit from csi
	Image            string
	HostNetwork      bool
	HostAliases      []corev1.HostAlias
	HostPID          bool
	HostIPC          bool
	DNSConfig        *corev1.PodDNSConfig
	DNSPolicy        corev1.DNSPolicy
	ImagePullSecrets []corev1.LocalObjectReference
	PreemptionPolicy *corev1.PreemptionPolicy
	Tolerations      []corev1.Toleration
}

func GenPodAttrWithMountPod added in v0.24.1

func GenPodAttrWithMountPod(ctx context.Context, client *k8sclient.K8sClient, mountPod *corev1.Pod) (*PodAttr, error)

GenPodAttrWithMountPod generate pod attr with mount pod Return the latest pod attributes following the priorities below:

1. original mount pod 2. pvc annotations 3. global config

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL