Documentation ¶
Index ¶
- Constants
- Variables
- func GenPodAttrWithCfg(setting *JfsSetting, volCtx map[string]string) error
- func GetPodLock(podName string) *sync.Mutex
- func IsCEMountPod(pod *corev1.Pod) bool
- func LoadConfig(configPath string) 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 ¶
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 IsCEMountPod ¶ added in v0.24.3
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 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 { 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
Click to show internal directories.
Click to hide internal directories.