: name: examplespec: containers: - name: container-1 image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: container-2 image: busybox volumeMounts: - name: shared-data command: ["/bin/sh", "-c", "echo 'Hello from container-2' > /data/index.html"] volumes: - name: shared-data emptyDir: {}在上面的示例中,我们创建了一个名为 shared-data 的 EmptyDir,并分别将其挂载到了两个容器中。 : name: examplespec: containers: - name: container-1 image: nginx volumeMounts: - name: shared-data
command: [ "/bin/sh", "-c", "echo hello > /data/hello.txt; sleep 600" ] volumeMounts: - name: shared-data busybox command: [ "/bin/sh", "-c", "cat /data/hello.txt; sleep 600" ] volumeMounts: - name: shared-data mountPath: /data volumes: - name: shared-data emptyDir: {}在这个示例中,定义了一个名为example-pod的Pod,其中包含两个容器 它们都使用了共享卷shared-data,将其挂载到了容器中的/data目录下。
: name: examplespec: containers: - name: container-1 image: nginx volumeMounts: - name: shared-data usr/share/nginx/html/index.html"] - name: container-2 image: busybox volumeMounts: - name: shared-data mountPath: /data command: ["/bin/sh", "-c", "cat /data/index.html"] volumes: - name: shared-data
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data containers: - name: c1 image: quay.io/songleo/busybox:latest volumeMounts: - name: shared-data sleep 10000"] - name: sidecar image: quay.io/songleo/busybox:latest volumeMounts: - name: shared-data
kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data data containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data Hello from the debian container > /pod-data/index.html"] 在这个配置中,声明了共享的 Volume Namespace:位于宿主机 /data 路径的 shared-data
: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data emptyDir: {} containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data : /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data
v1beta1 kind: Pipeline metadata: name: devops-hello-world-pipeline spec: workspaces: - name: shared-data taskRef: name: git-clone workspaces: - name: output workspace: shared-data kaniko runAfter: - clone workspaces: - name: source workspace: shared-data - name: kubectl_image value: 'docker.io/bitnami/kubectl:latest' workspaces: - name: shared-data shared-data workspace #用于在不同任务之间共享数据,PipelineRun中定义了volumeClaimTemplate类型的workspaces,能够动态申请所需的持久卷,使用
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data path: /data containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data echo Hello from the debian container > /pod-data/index.html"] debian-container和nginx-container都声明挂载了shared-data 而shared-data是hostPath类型。所以,它对应在宿主机上的目录就是:/data。该目录就被同时绑定挂载进上述两个容器。
vault-agent-config.hcl name: example-vault-agent-config name: config - emptyDir: {} name: shared-data volumeMounts: - mountPath: /etc/vault name: config - mountPath: /etc/secrets name: shared-data ports: - containerPort: 80 volumeMounts: - mountPath: /usr/share/nginx/html name: shared-data
apiVersion: v1 kind: Pod metadata: name: hello-storage spec: restartPolicy: Never volumes: - name: shared-data emptyDir: {} containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data
alovaInstance.Get('/detail/123')); } 请求共享: // 多个组件共享同一个请求 const { data } = useRequest(alovaInstance.Get('/shared-data
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data path: /data containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data from the debian container > /pod-data/index.html"] 在这个例子中,debian-container 和 nginx-container 都声明挂载了 shared-data 而 shared-data 是 hostPath 类型。所以,它对应在宿主机上的 目录就是:/data。而这个目录,其实就被同时绑定挂载进了上述两个容器当中。
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data path: /data containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data from the debian container > /pod-data/index.html"] 在这个例子中,debian-container 和 nginx-container 都声明挂载了 shared-data 而 shared-data 是 hostPath 类型。所以,它对应在宿主机上的目录就是:/data。而这个目录,其实就被同时绑定挂载进了上述两个容器当中。
多年前 Snowflake 凭借 shared-data 架构与云原生模式取得成功,但那时的先进技术现在已经成熟了。 同时,我们选择了 Shared-Everything 系统架构替代 shared-data,我们认为这样的一套技术可以实现一体化的基础目标。 整体的系统架构上我们选择了 Shared-Everything 架构,比 shared-data 又进一步。我们认为这样的一套技术可以实现一体化的技术目标。
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data path: /data containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data path: /data containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data from the debian container > /pod-data/index.html"] 在这个例子中,debian-container 和 nginx-container 都声明挂载了 shared-data 而 shared-data 是 hostPath 类型。所以,它对应在宿主机上的目录就是:/data。而这个目录,其实就被同时绑定挂载进了上述两个容器当中。
在下图的案例中,这个 volume 叫做 shared-data,是属于 Pod level 的,在每一个容器里可以直接声明:挂载 shared-data 这个 volume。
我们转向了基于阿里巴巴OSS(类似于AWS S3的对象存储)的统一数据湖解决方案,以遵循多集群、共享数据架构(Multi-cluster,Shared-data Architecture)的设计原则提供集中位置来存储结构化和非结构化数据
整个引擎的架构,可以分成三种体系:Shared-Nothing(MPP)、Shared-Data、Shared-Everything。 但因其数据和计算的绑定,会带来扩展性和弹性问题,整体在转向 Shared-Data 架构。 第二种 Shared-Data 架构是 MPP 架构的演进,通过计算与存储系统解耦(即存储计算分离),存储完全做成一个独立的池化形态,不仅做到了存储器的分离,还做到存储的共享。
比如说上图的例子,这个 volume 叫做 shared-data,它是属于 Pod level 的,所以在每一个容器里可以直接声明:要挂载 shared-data 这个 volume,只要你声明了你挂载这个