全部产品
Search
文档中心

云原生数据库 PolarDB:SidecarSet挂载

更新时间:Jul 21, 2026

本文介绍如何基于SidecarSet向虚拟节点中的Pod注入Sidecar容器,实现PolarDB Agent LakeBase的挂载。

适用范围

ACS官方支持基于SidecarSet向虚拟节点中的Pod注入Sidecar容器方式挂载。更多信息,请参见向虚拟节点中的Pod注入Sidecar容器。

  • SidecarSet:请根据上文SidecarSet文档在您的集群中安装SidecarSet相关依赖。您ACK/ACS集群开启了允许特权容器。

  • 镜像:将镜像拉取到自己的 ACR 仓库。请将PolarDB Agent LakeBase镜像拉取到您自己的ACR仓库,生成您自己的镜像地址,并将下文中的<YOUR_LAKEBASE_IMAGE>替换为您的地址。

    docker pull lakebase-registry.cn-beijing.cr.aliyuncs.com/lakebase/lakebase-client:latest

参数占位符说明

以下为本文YAML配置中使用的占位符,请根据实际情况替换。

占位符

说明

示例

<LAKEBASE_ID>

您的PolarDB Agent LakeBase实例 ID 。

pfs-abcde12345

<YOUR_NAMESPACE>

您的应用Pod所在的命名空间。

default

<YOUR_LAKEBASE_IMAGE>

您的镜像链接。

lakebase-registry.cn-beijing.cr.aliyuncs.com/lakebase/xxx

<META_URL>

您可以在PolarDB Agent LakeBase实例的基本信息页面中获取MetaUrl信息。

1998357e5xxxx

<MOUNT_POINT>

挂载点目录。

/lakebase-data

<SUB_DIR>

可选。填写LakeBase根目录下的子目录相对路径,例如a/b/c,表示挂载此子目录到<MOUNT_POINT>。若不指定子目录,需删除下述YAML文件中的subPath: <SUB_DIR>挂载至LakeBase根目录,此时LakeBase根目录下所有目录和文件会对该Pod可见。

说明

<SUB_DIR>仅支持相对路径,不支持绝对路径。

a/b/c

(可选)开启SSL模式

如果您在沙箱类环境使用PolarDB Agent LakeBase,建议开启SSL增强安全性,防止网络注入等问题。

说明

SSL切换会重启后台服务,请在业务低峰期执行。

  1. 在PolarDB控制台目标集群详情页,单击AI缓存页签,单击目标PolarDB Agent LakeBase实例进入实例详情页,单击SSL配置页签。

    1. 分别在主地址和集群地址卡片中打开SSL状态开关,将SSL状态由未开通调整为已开通。两个地址的证书是一致的。

    2. 等待SSL状态变为已开通。

  2. 单击下载证书。

    1. 解压下载的证书压缩包。

    2. 将pem文件重命名为ca.pem。

  3. 使用如下Dockerfile封装镜像,生成您自己的<YOUR_LAKEBASE_IMAGE>并推送到您的ACR仓库中。

    FROM lakebase-registry.cn-beijing.cr.aliyuncs.com/lakebase/lakebase-client:latest
    
    COPY ca.pem /usr/local/bin/ca.pem
    docker build -t <YOUR_LAKEBASE_IMAGE> .
    说明

    当PolarDB Agent LakeBase挂载时使用了ca.pem时,请确保已在控制台开启SSL模式。

生成Secret

创建如下YAML文件(例如secret.yaml),并将占位符替换为实际值。

说明

如果您有多个业务namespace ,请参考OpenKruise社区ResourceDistribution功能,将Secret分发到所需的命名空间下,或namespace不多时可手动维护。

apiVersion: v1
kind: Secret
metadata:
  name: <LAKEBASE_ID>
  namespace: <YOUR_NAMESPACE>
type: Opaque
stringData:
  name: "<LAKEBASE_ID>"
  metaurl: "<META_URL>"

执行以下命令创建 Secret。

kubectl apply -f secret.yaml

配置SidecarSet

请根据集群的Kubernetes版本选择对应的配置(YAML文件)方式。

Kubernetes 版本 >= 1.29(社区原生Sidecar)

当Kubernetes 版本 >= 1.29时,使用initContainers并设置restartPolicy: Always来声明原生Sidecar容器。

说明

请将下述<YOUR_LAKEBASE_IMAGE>和<LAKEBASE_ID>占位符替换为实际值。

# ============================================================
# 方式一:K8s >= 1.29 社区原生 Sidecar 声明
# SidecarSet 通过 initContainers 注入,配合 restartPolicy: Always
# K8s 原生保证 Sidecar 在应用容器之前启动完成
# ============================================================
apiVersion: apps.kruise.io/v1alpha1
kind: SidecarSet
metadata:
  name: lakebase-sidecarset
spec:
  selector:
    matchLabels:
      inject-lakebase: "true"
      serverless.alibabacloud.com/virtual-node: "true"
  updateStrategy:
    type: NotUpdate

  initContainers:
    - name: lakebase-mount
      image: <YOUR_LAKEBASE_IMAGE>
      imagePullPolicy: Always
      restartPolicy: Always
      command:
        - sh
        - -c
        - |-
          /usr/local/bin/lakebase-client mount ${metaurl} /lakebase-data
      env:
        - name: JFS_FOREGROUND
          value: "1"
      envFrom:
        - secretRef:
            name: <LAKEBASE_ID>
      ports:
        - containerPort: 9567
          name: metrics
          protocol: TCP
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "2"
          memory: 4Gi
      securityContext:
        privileged: true
        runAsUser: 0
      lifecycle:
        preStop:
          exec:
            command:
              - sh
              - -c
              - 'fusermount -u /lakebase-data 2>/dev/null || umount /lakebase-data 2>/dev/null || umount -l /lakebase-data || true'
      startupProbe:
        exec:
          command:
            - sh
            - -c
            - "mount | grep /lakebase-data | grep PolarFS"
        initialDelaySeconds: 5
        periodSeconds: 3
        failureThreshold: 50
        successThreshold: 1
      volumeMounts:
        - name: lakebase-dir
          mountPath: /lakebase-data
          mountPropagation: Bidirectional

  volumes:
    - name: lakebase-dir
      emptyDir: {}

Kubernetes 版本 < 1.29(ACS定制方式)

当Kubernetes 版本 < 1.29时,使用containers并通过__IS_SIDECAR__环境变量和podInjectPolicy: BeforeAppContainer来声明Sidecar容器。更多信息,请参见配置Sidecar容器启停顺序。

说明

请将下述<YOUR_LAKEBASE_IMAGE>和<LAKEBASE_ID>占位符替换为实际值。

# ============================================================
# 方式二:K8s < 1.29 ACS 定制 Sidecar 声明
# SidecarSet 通过 containers 注入,配合 __IS_SIDECAR__ 环境变量
# ACS 识别该标记后确保 Sidecar 先于其他普通容器启动
# ============================================================
apiVersion: apps.kruise.io/v1alpha1
kind: SidecarSet
metadata:
  name: lakebase-sidecarset
spec:
  selector:
    matchLabels:
      inject-lakebase: "true"
      serverless.alibabacloud.com/virtual-node: "true"
  updateStrategy:
    type: NotUpdate

  containers:
    - name: lakebase-mount
      image: <YOUR_LAKEBASE_IMAGE>
      imagePullPolicy: Always
      podInjectPolicy: BeforeAppContainer
      upgradeStrategy:
        upgradeType: ColdUpgrade
      shareVolumePolicy:
        type: disabled
      command:
        - sh
        - -c
        - |-
          /usr/local/bin/lakebase-client mount ${metaurl} /lakebase-data
      env:
        - name: JFS_FOREGROUND
          value: "1"
        - name: __IS_SIDECAR__
          value: "true"
      envFrom:
        - secretRef:
            name: <LAKEBASE_ID>
      ports:
        - containerPort: 9567
          name: metrics
          protocol: TCP
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "2"
          memory: 4Gi
      securityContext:
        privileged: true
        runAsUser: 0
      lifecycle:
        preStop:
          exec:
            command:
              - sh
              - -c
              - 'fusermount -u /lakebase-data 2>/dev/null || umount /lakebase-data 2>/dev/null || umount -l /lakebase-data || true'
      startupProbe:
        exec:
          command:
            - sh
            - -c
            - "mount | grep /lakebase-data | grep PolarFS"
        initialDelaySeconds: 5
        periodSeconds: 3
        failureThreshold: 50
        successThreshold: 1
      terminationMessagePath: /dev/termination-log
      terminationMessagePolicy: File
      volumeMounts:
        - name: lakebase-dir
          mountPath: /lakebase-data
          mountPropagation: Bidirectional

  volumes:
    - name: lakebase-dir
      emptyDir: {}

执行以下命令创建SidecarSet。

kubectl apply -f lakebase-sidecarset.yaml

(可选)配置忽略Sidecar容器资源

为了避免在使用Sidecar模式时增加Pod的资源消耗, 同时保证Sidecar容器和业务容器合理共享资源,您可以通过配置调度策略来忽略Sidecar容器的资源占用。忽略容器资源的环境变量名为__IGNORE_RESOURCE__,设置取值为true时则表示忽略该容器的资源声明。如需设置,可在lakebase-sidecarset.yaml的容器env中添加如下配置。更多信息,请参见配置调度忽略特定容器资源。

    - name: __IGNORE_RESOURCE__
      value: "true"

创建应用Pod

完成SidecarSet配置后,创建应用Pod。以下为使用Nginx作为应用容器的示例。

说明

请将下述<YOUR_NAMESPACE>、<MOUNT_POINT>和<SUB_DIR>占位符替换为实际值。

apiVersion: v1
kind: Pod
metadata:
  name: lakebase-sidecarset-app
  namespace: <YOUR_NAMESPACE>
  labels:
    inject-lakebase: "true" # 必填,声明允许注入lakebase sidecar容器
    serverless.alibabacloud.com/virtual-node: "true" # 如使用eci或vnode必填
spec:
  containers:
    - name: nginx
      image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      imagePullPolicy: IfNotPresent
      command:
        - sh
        - -c
        - exec nginx -g 'daemon off;'
      ports:
        - containerPort: 80
          protocol: TCP
      resources:
        limits:
          cpu: "1"
          memory: 1Gi
        requests:
          cpu: "1"
          memory: 1Gi
      volumeMounts:
        - name: lakebase-dir
          mountPath: <MOUNT_POINT>
          subPath:  <SUB_DIR>
          mountPropagation: HostToContainer
  volumes:
    - name: lakebase-dir
      emptyDir: {}
  nodeSelector:
    type: virtual-kubelet
  tolerations:
    - key: virtual-kubelet.io/provider
      operator: Equal
      value: alibabacloud
      effect: NoSchedule

执行以下命令创建应用Pod,待业务Pod拉起后,进入容器访问您指定的<MOUNT_POINT>目录即可使用PolarDB Agent LakeBase。

kubectl apply -f app.yaml

附录:手动注入Sidecar(不推荐)

如您无意使用SidecarSet能力或是想自行控制Sidecar容器的生命周期和行为,您可参照如下示例编写您的Pod来手动将PolarDB Agent LakeBase挂载容器注入到Pod中。建议您生产环境优先使用上文的SidecarSet来进行挂载,手动注入可能带来冗余的维护成本。

说明

请将下述<YOUR_NAMESPACE>、<MOUNT_POINT>、<SUB_DIR>、<YOUR_LAKEBASE_IMAGE>和<LAKEBASE_ID>占位符替换为实际值。

apiVersion: v1
kind: Pod
metadata:
  annotations: {}
  name: lakebase-sidecar-manual-app
  namespace: <YOUR_NAMESPACE>
spec:
  initContainers:
  - name: lakebase-mount
    image: <YOUR_LAKEBASE_IMAGE>
    imagePullPolicy: Always
    restartPolicy: Always
    command:
    - sh
    - -c
    - |-
      /usr/local/bin/lakebase-client mount ${metaurl} /lakebase-data
    env:
    - name: JFS_FOREGROUND
      value: "1"
    envFrom:
    - secretRef:
        name: <LAKEBASE_ID>
    ports:
    - containerPort: 9567
      name: metrics
      protocol: TCP
    resources:
      limits:
        cpu: "2"   
        memory: 4Gi
      requests:
        cpu: "2"
        memory: 4Gi
    securityContext:
      privileged: true
      runAsUser: 0
    lifecycle:
      preStop:
        exec:
          command:
            - sh
            - -c
            - 'fusermount -u /lakebase-data 2>/dev/null || umount /lakebase-data 2>/dev/null || umount -l /lakebase-data || true'
    startupProbe:
      exec:
        command:
        - sh
        - -c
        - "mount | grep /lakebase-data | grep PolarFS"
      initialDelaySeconds: 5
      periodSeconds: 3
      failureThreshold: 50
      successThreshold: 1
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts: # volumeMounts申明, 在业务pod中也需要声明
    - name: lakebase-dir
      mountPath: /lakebase-data
      mountPropagation: Bidirectional

  # 这是您的业务容器示例
  containers:
  - name: nginx
    image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      protocol: TCP
    resources:
      limits:
        cpu: "1"
        memory: 1Gi
      requests:
        cpu: "1"
        memory: 1Gi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts: # 业务pod的volumeMounts声明方式
    - name: lakebase-dir
      mountPath: <MOUNT_POINT>
      subPath: <SUB_DIR>
      mountPropagation: HostToContainer
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoSchedule
    key: virtual-kubelet.io/provider
    operator: Equal
    value: alibabacloud
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: lakebase-dir
    emptyDir: {}