config

package
v0.26.1 Latest Latest
Warning

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

Go to latest
Published: Jan 17, 2025 License: Apache-2.0 Imports: 27 Imported by: 0

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
	AccessToKubelet        = false            // access kubelet or not

	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 ApplySettingWithMountPod added in v0.26.0

func ApplySettingWithMountPod(mountPod *corev1.Pod, pvc *corev1.PersistentVolumeClaim, pv *corev1.PersistentVolume, custSecret *corev1.Secret, setting *JfsSetting) error

func CreateUpgradeConfig added in v0.26.0

func CreateUpgradeConfig(ctx context.Context, client *k8s.K8sClient, configName string, config *BatchConfig) (*corev1.ConfigMap, error)

func GenAuthCmd added in v0.26.0

func GenAuthCmd(secrets map[string]string, setting *JfsSetting) (args []string, cmdArgs []string, err error)

args: the real args running in csi cmdArgs: the args in mount pod which using stripped value with env

func GenCacheDirs added in v0.25.2

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

func GenFormatCmd added in v0.26.0

func GenFormatCmd(secrets map[string]string, noUpdate bool, setting *JfsSetting) (args []string, cmdArgs []string, err error)

func GenHashOfSetting added in v0.26.0

func GenHashOfSetting(log klog.Logger, setting JfsSetting) string

func GenPodAttrWithCfg added in v0.24.0

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

func GetDiff added in v0.26.0

func GetDiff(mountPod *corev1.Pod, pvc *corev1.PersistentVolumeClaim, pv *corev1.PersistentVolume, secret, custSecret *corev1.Secret) (old *MountPodPatch, oldSetting *JfsSetting, new *MountPodPatch, newSetting *JfsSetting, err error)

func GetPodLock

func GetPodLock(podHashVal string) *sync.Mutex

func GetPodLockKey added in v0.25.1

func GetPodLockKey(pod *corev1.Pod, newHash string) 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, defaultResources corev1.ResourceRequirements) (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

func UpdateUpgradeConfig added in v0.26.0

func UpdateUpgradeConfig(ctx context.Context, client *k8s.K8sClient, configName string, config *BatchConfig) (*corev1.ConfigMap, error)

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 BatchConfig added in v0.26.0

type BatchConfig struct {
	Parallel    int                 `json:"parallel"`
	IgnoreError bool                `json:"ignoreError"`
	NoRecreate  bool                `json:"norecreate,omitempty"`
	Node        string              `json:"node,omitempty"`
	UniqueId    string              `json:"uniqueId,omitempty"`
	Batches     [][]MountPodUpgrade `json:"batches"`
	Status      UpgradeStatus       `json:"status"`
}

func LoadBatchConfig added in v0.26.0

func LoadBatchConfig(cm *corev1.ConfigMap) (*BatchConfig, error)

func LoadUpgradeConfig added in v0.26.0

func LoadUpgradeConfig(ctx context.Context, client *k8s.K8sClient, configName string) (*BatchConfig, error)

func NewBatchConfig added in v0.26.0

func NewBatchConfig(pods []corev1.Pod, parallel int, ignoreError bool, recreate bool, nodeName string, uniqueId string, csiNodes []corev1.Pod) *BatchConfig

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:"-"`
	UpgradeUUID    string         `json:"-"`
	JuiceFSSecret  *corev1.Secret `json:"-"`
	CustomerSecret *corev1.Secret `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 GenSetting added in v0.26.0

func GenSetting(mountPod *corev1.Pod, pvc *corev1.PersistentVolumeClaim, pv *corev1.PersistentVolume, secret *corev1.Secret) (*JfsSetting, error)

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 GenSettingWithConfig added in v0.26.0

func GenSettingWithConfig(mountPod *corev1.Pod, pvc *corev1.PersistentVolumeClaim, pv *corev1.PersistentVolume, secret, custSecret *corev1.Secret) (*JfsSetting, error)

func ParseSetting

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

func (*JfsSetting) Load added in v0.26.0

func (s *JfsSetting) Load(str string) 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) Safe added in v0.26.0

func (s *JfsSetting) Safe() *JfsSetting

func (*JfsSetting) SafeString added in v0.26.0

func (s *JfsSetting) SafeString() string

func (*JfsSetting) String added in v0.26.0

func (s *JfsSetting) 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 MountPodUpgrade added in v0.26.0

type MountPodUpgrade struct {
	Name       string        `json:"name"`
	Node       string        `json:"node"`
	CSINodePod string        `json:"csiNodePod"`
	Status     UpgradeStatus `json:"status"`
}

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
}

type UpgradeStatus added in v0.26.0

type UpgradeStatus string
const (
	Pending UpgradeStatus = "pending"
	Running UpgradeStatus = "running"
	Success UpgradeStatus = "success"
	Fail    UpgradeStatus = "fail"
	Stop    UpgradeStatus = "stop"
	Pause   UpgradeStatus = "pause"
)

Jump to

Keyboard shortcuts

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