Documentation
¶
Index ¶
- Variables
- func GenPodAttrWithCfg(setting *JfsSetting, volCtx map[string]string) error
- func GetPodLock(podHashVal string) *sync.Mutex
- func IsCEMountPod(pod *corev1.Pod) bool
- func IsInterVolume(name string) bool
- func LoadConfig(configPath string) error
- func LoadFromConfigMap(ctx context.Context, client *k8s.K8sClient) error
- func MustGetWebPort() int
- func ParsePodResources(cpuLimit, memoryLimit, cpuRequest, memoryRequest string) (corev1.ResourceRequirements, error)
- func ParseYamlOrJson(source string, dst interface{}) error
- func StartConfigReloader(configPath string) error
- type AppInfo
- type CacheEmptyDir
- type CacheInlineVolume
- type CachePVC
- type Config
- type JfsSetting
- type MountPodPatch
- type PVCSelector
- type PodAttr
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 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 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 IsCEMountPod ¶ added in v0.24.3
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 LoadConfig ¶ added in v0.24.0
func LoadFromConfigMap ¶ added in v0.25.0
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 StartConfigReloader ¶ added in v0.24.0
ConfigReloader reloads config file when it is updated
Types ¶
type CacheEmptyDir ¶ added in v0.23.1
type CacheInlineVolume ¶ added in v0.23.1
type CacheInlineVolume struct {
CSI *corev1.CSIVolumeSource
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
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 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"`
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"`
// 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
Click to show internal directories.
Click to hide internal directories.