config

package
v0.25.2 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 2024 License: Apache-2.0 Imports: 22 Imported by: 2

Documentation

Index

Constants

This section is empty.

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
	StorageClassShareMount = false            // share mount pod for the same storage class

	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"
	ShutdownSockPath      = "/tmp/juicefs-csi-shutdown.sock"
	JfsFuseFdPathName     = "jfs-fuse-fd"

	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 CSISetEnvMap = map[string]interface{}{
	"_JFS_META_SID":                     nil,
	"JFS_NO_UMOUNT":                     nil,
	"JFS_NO_UPDATE":                     nil,
	"JFS_FOREGROUND":                    nil,
	"JFS_SUPER_COMM":                    nil,
	"JFS_INSIDE_CONTAINER":              nil,
	"JUICEFS_CLIENT_PATH":               nil,
	"JUICEFS_CLIENT_SIDERCAR_CONTAINER": nil,
	"JFS_NO_CHECK_OBJECT_STORAGE":       nil,
}

env auto set by the csi side

View Source
var CSISetOptsMap = map[string]interface{}{
	"no-update":  nil,
	"foreground": nil,
	"metrics":    nil,
	"rsa-key":    nil,
}

opts auto set by the csi side

View Source
var GlobalConfig = newCfg()
View Source
var PodLocks [1024]sync.Mutex

Functions

func GenCacheDirs added in v0.25.2

func GenCacheDirs(jfsSetting *JfsSetting, volCtx map[string]string) error

func GenPodAttrWithCfg added in v0.24.0

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

func GetPodLock

func GetPodLock(podHashVal string) *sync.Mutex

func GetPodLockKey added in v0.25.1

func GetPodLockKey(pod *corev1.Pod) string

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 IsInterVolume added in v0.24.5

func IsInterVolume(name string) bool

func LoadConfig added in v0.24.0

func LoadConfig(configPath string) error

func LoadFromConfigMap added in v0.25.0

func LoadFromConfigMap(ctx context.Context, client *k8s.K8sClient) 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 {
	HashVal string `json:"-"`
	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 GenSettingAttrWithMountPod added in v0.25.2

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

GenSettingAttrWithMountPod 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

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 MountPatchCacheDir added in v0.25.1

type MountPatchCacheDir struct {
	Type MountPatchCacheDirType `json:"type,omitempty"`

	// required for HostPath type
	Path string `json:"path,omitempty"`

	// required for PVC type
	Name string `json:"name,omitempty"`
}

type MountPatchCacheDirType added in v0.25.1

type MountPatchCacheDirType string
var (
	MountPatchCacheDirTypeHostPath MountPatchCacheDirType = "HostPath"
	MountPatchCacheDirTypePVC      MountPatchCacheDirType = "PVC"
)

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"`
	CacheDirs    []MountPatchCacheDir `json:"cacheDirs,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"`
	Volumes                       []corev1.Volume              `json:"volumes,omitempty"`
	VolumeDevices                 []corev1.VolumeDevice        `json:"volumeDevices,omitempty"`
	VolumeMounts                  []corev1.VolumeMount         `json:"volumeMounts,omitempty"`
	Env                           []corev1.EnvVar              `json:"env,omitempty"`
	MountOptions                  []string                     `json:"mountOptions,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"`
	Volumes                       []corev1.Volume       `json:"volumes,omitempty"`
	VolumeDevices                 []corev1.VolumeDevice `json:"volumeDevices,omitempty"`
	VolumeMounts                  []corev1.VolumeMount  `json:"volumeMounts,omitempty"`
	Env                           []corev1.EnvVar       `json:"env,omitempty"`
	CacheDirs                     []MountPatchCacheDir  `json:"cacheDirs,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
}

Jump to

Keyboard shortcuts

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