国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在Kubernetes上部署和管理容器化存儲系統(tǒng)

這篇具有很好參考價值的文章主要介紹了在Kubernetes上部署和管理容器化存儲系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、概述

1.1 Kubernetes與容器化存儲的關(guān)系

Kubernetes是一款容器編排系統(tǒng),它可以幫助用戶快速部署、擴(kuò)展和管理復(fù)雜的容器化應(yīng)用。容器化存儲系統(tǒng)則是一種存儲方式,它將數(shù)據(jù)存儲在容器中,并可以在容器之間進(jìn)行移動和共享。Kubernetes可以通過容器化存儲系統(tǒng)來實現(xiàn)數(shù)據(jù)的持久化,從而保證應(yīng)用的可靠性和高可用性。

1.2 容器化存儲系統(tǒng)的基本架構(gòu)概述

容器化存儲系統(tǒng)的基本架構(gòu)包括以下幾個組件:

  • 存儲控制器:用于控制存儲系統(tǒng)的行為和狀態(tài),負(fù)責(zé)與Kubernetes進(jìn)行交互。
  • 存儲節(jié)點:將存儲設(shè)備暴露給Kubernetes集群,并提供文件系統(tǒng)和卷管理等功能。
  • 存儲卷插件:用于提供不同類型的存儲卷,如塊設(shè)備、文件系統(tǒng)和對象存儲等。

1.3 在Kubernetes上部署和管理容器化存儲系統(tǒng)的必要性

在Kubernetes上部署容器化存儲系統(tǒng)可以幫助用戶實現(xiàn)數(shù)據(jù)的持久化和共享。與傳統(tǒng)的存儲系統(tǒng)相比,容器化存儲系統(tǒng)具有更好的靈活性和可擴(kuò)展性,可以滿足Kubernetes集群中不同應(yīng)用的存儲需求。

二、在Kubernetes上部署容器化存儲系統(tǒng)

2.1 容器化存儲系統(tǒng)的Kubernetes Operator實現(xiàn)

2.1.1 Operator基本原理

Kubernetes Operator是一種控制器它可以將Kubernetes集群中的自定義資源與自定義控制器進(jìn)行綁定,從而自動化應(yīng)用程序的部署和管理。對于容器化存儲系統(tǒng)來說,Kubernetes Operator可以將存儲系統(tǒng)的各個組件進(jìn)行封裝,并提供相應(yīng)的API,使得用戶可以方便地通過Kubernetes來創(chuàng)建、刪除和管理存儲系統(tǒng)。

2.1.2 Operator實現(xiàn)過程

Operator的實現(xiàn)過程需要以下幾個步驟:

  1. 創(chuàng)建自定義資源:使用Kubernetes API來定義新的自定義資源Kind,用于描述容器化存儲系統(tǒng)的組件和狀態(tài)。
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: storage.example.com
spec:
  group: example.com
  names:
    kind: Storage
    plural: storages
    singular: storage
  scope: Namespaced
  subresources:
    status: {}
  version: v1alpha1
  1. 定義自定義控制器:創(chuàng)建一個自定義控制器,它將監(jiān)視自定義資源的更改,并在需要時對存儲系統(tǒng)進(jìn)行操作。在這個控制器中,可以定義一些自定義的行為,如卷的創(chuàng)建、刪除和擴(kuò)容。
type StorageController struct {
    KubeClient *kubeclient.Clientset
}
 
func (sc *StorageController) Run() error {
    // 獲取 Storage 自定義資源
    storageList, err := sc.KubeClient.ExampleClientset.StorageV1alpha1().Storages().List(metav1.ListOptions{})
    if err != nil {
        log.Fatal("Failed to list Storages: ", err)
    }
    for _, storage := range storageList.Items {
        // 處理 Storage 自定義資源
        sc.handle(storage)
    }
}
 
func (sc *StorageController) handle(storage examplev1alpha1.Storage) {
    // 處理 Storage 自定義資源相關(guān)的邏輯
}
  1. 綁定自定義資源和自定義控制器:使用Kubernetes API將自定義控制器與自定義資源進(jìn)行綁定,并創(chuàng)建相應(yīng)的API服務(wù)。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: storage-controller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: storage-controller
    spec:
      containers:
        - name: storage-controller
          image: my-registry/storage-controller
          args: ["--kubeconfig=/etc/kubernetes/kubeconfig", "--master=https://my-kubernetes-cluster.com:443"]
      volumes:
        - name: kubeconfig
          configMap:
            name: kubeconfig

2.2 容器化存儲系統(tǒng)的Kubernetes CSI Driver實現(xiàn)

2.2.1 CSI Driver基本原理

Kubernetes CSI Driver是一種插件模型它可以將存儲系統(tǒng)的功能暴露給Kubernetes,從而實現(xiàn)對存儲資源的管理和調(diào)度。對于容器化存儲系統(tǒng)來說,可以通過Kubernetes CSI Driver實現(xiàn)存儲卷的創(chuàng)建、掛載和卸載等操作。

2.2.2 CSI Driver實現(xiàn)過程

CSI Driver的實現(xiàn)過程需要以下幾個步驟:

  1. 編寫CSI插件:編寫一個CSI插件,它實現(xiàn)了Kubernetes CSI規(guī)范中定義的GRPC接口,使得該插件可以被Kubernetes調(diào)用。
// 插件實現(xiàn) kubelet 接口,接收來自 kubelet 上的 CSI 請求,根據(jù)請求參數(shù)執(zhí)行相應(yīng)的操作。
type ExampleStoragePlugin struct {}
 
func (sp *ExampleStoragePlugin) NodeGetInfo(ctx context.Context, req *csi.NodeGetInfoRequest) (*csi.NodeGetInfoResponse, error) {
    // 獲取節(jié)點信息,例如節(jié)點名稱和節(jié)點ID
    // 可以在這里實現(xiàn)自定義的節(jié)點信息邏輯
 
    return &csi.NodeGetInfoResponse{
        NodeId: "node-id",
        MaxVolumesPerNode: 10,
    }, nil
}
  1. 注冊CSI插件:使用Kubernetes API將CSI插件與Kubernetes CSI Driver進(jìn)行綁定,并創(chuàng)建相應(yīng)的API服務(wù)。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: csi-example-driver-node
  labels:
    app: csi-example-driver
spec:
  selector:
    matchLabels:
      app: csi-example-driver-node
  template:
    metadata:
      labels:
        app: csi-example-driver-node
    spec:
      containers:
      - name: csi-example-driver
        image: my-registry/csi-example-driver
        volumeMounts:
        - name: plugins-dir
          mountPath: /var/lib/kubelet/plugins/example.com
      - name: csi-provisioner
        image: my-registry/csi-provisioner
        volumeMounts:
        - name: plugins-dir
          mountPath: /var/lib/kubelet/plugins/example.com
      volumes:
      - name: plugins-dir
        hostPath:
          path: /mnt/data

三、容器化存儲系統(tǒng)的管理與使用

3.1 容器化存儲系統(tǒng)的動態(tài)Provisioning

3.1.1 動態(tài)Provisioning流程

容器化存儲系統(tǒng)支持動態(tài)Provisioning功能,可以在Kubernetes集群中根據(jù)需求自動創(chuàng)建存儲卷。

動態(tài)Provisioning流程如下:

  1. 應(yīng)用程序請求Kubernetes創(chuàng)建存儲卷。
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - name: my-persistent-volume
      mountPath: /data
  volumes:
  - name: my-persistent-volume
    persistentVolumeClaim:
      claimName: my-claim
  1. Kubernetes檢查是否有可用的存儲資源。

  2. Kubernetes通過StorageClass定義自動選擇適當(dāng)?shù)拇鎯ο到y(tǒng)。

  3. Kubernetes通過Provisioner定義自動創(chuàng)建并綁定存儲卷到Pod中。

3.1.2 動態(tài)Provisioning實現(xiàn)方法

容器化存儲系統(tǒng)的動態(tài)Provisioning功能可以通過以下兩種方式來實現(xiàn):

  • 使用Kubernetes內(nèi)置的CSI Driver

Kubernetes內(nèi)置了一些CSI Driver,如nfs和glusterfs,可以使用它們來實現(xiàn)動態(tài)Provisioning功能,無需自己編寫插件。

  • 自行編寫CSI Driver

如果Kubernetes集群中使用的存儲系統(tǒng)沒有內(nèi)置的CSI Driver,可以通過自行編寫插件來實現(xiàn)動態(tài)Provisioning功能。

3.2 Kubernetes上存儲卷的使用

3.2.1 存儲卷的概念和使用方式

存儲卷是Kubernetes中的一種對象用于存儲應(yīng)用程序的數(shù)據(jù)可以與容器一起使用

存儲卷使用方式如下:

  1. 創(chuàng)建一個存儲卷
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-volume
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  NFS:
    server: my-nfs-server
    path: /exports/my-volume
  1. 在Pod中使用存儲卷
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - name: my-persistent-volume
      mountPath: /data
  volumes:
  - name: my-persistent-volume
    persistentVolumeClaim:
      claimName: my-claim

3.2.2 存儲卷類型及其基本特性

Kubernetes中有多種存儲卷類型它們有各自的特性和適用場景如下所示:

  • emptyDir:臨時目錄,數(shù)據(jù)不會保存在磁盤上,容器重啟時數(shù)據(jù)會丟失。
  • hostPath:將主機(jī)的文件系統(tǒng)暴露給容器,訪問速度快,但可移植性較差。
  • nfs:網(wǎng)絡(luò)文件系統(tǒng),數(shù)據(jù)存儲在NFS服務(wù)器上,適合許多容器訪問同一份數(shù)據(jù)。
  • glusterfs:分布式文件系統(tǒng),數(shù)據(jù)存儲在多臺主機(jī)上,可以實現(xiàn)高可用和可擴(kuò)展性。
  • cephfs:分布式文件系統(tǒng),數(shù)據(jù)存儲在多臺主機(jī)上,可以實現(xiàn)高可用和可擴(kuò)展性。
  • local:本地存儲,數(shù)據(jù)存儲在節(jié)點上,適合I/O密集型的應(yīng)用。

3.3 容器化存儲系統(tǒng)的數(shù)據(jù)保護(hù)

3.3.1 Snapshot和Clone的概念和實現(xiàn)

存儲系統(tǒng)的數(shù)據(jù)保護(hù)包括數(shù)據(jù)備份、恢復(fù)、快照和克隆功能。其中快照和克隆是最常用的數(shù)據(jù)保護(hù)功能。

快照是存儲系統(tǒng)創(chuàng)建數(shù)據(jù)副本的一種方法。它幾乎瞬間完成,不會占用額外的存儲空間,可以隨時恢復(fù)到某個時間點。

克隆是以快照為基礎(chǔ)創(chuàng)建的一份全新的副本。它可以在生產(chǎn)環(huán)境外測試應(yīng)用程序,也可以用于快速復(fù)制數(shù)據(jù)。

3.3.2 Backup和Restore的實現(xiàn)

備份和恢復(fù)是存儲系統(tǒng)的另一種數(shù)據(jù)保護(hù)方式。備份可以在特定時間點創(chuàng)建數(shù)據(jù)副本,以應(yīng)對數(shù)據(jù)的災(zāi)難性丟失情況。

恢復(fù)是將備份數(shù)據(jù)恢復(fù)到原始位置的過程,讓應(yīng)用程序繼續(xù)工作。實現(xiàn)備份和恢復(fù)功能可以使用Kubernetes提供的VolumeSnapshot API 和 VolumeSnapshotContent API,也可以使用自己的存儲系統(tǒng)提供的 API 和工具。

四、常見容器化存儲系統(tǒng)在Kubernetes上的部署

Kubernetes作為當(dāng)前最受歡迎的容器編排平臺,可以很好地管理容器應(yīng)用的生命周期,其內(nèi)置的存儲系統(tǒng)也可以滿足大多數(shù)應(yīng)用程序的需求。但對于某些應(yīng)用程序或企業(yè)級解決方案而言,Kubernetes內(nèi)置的存儲系統(tǒng)不足以滿足其需求。在這種情況下常見的容器化存儲系統(tǒng),如Ceph RBD、GlusterFS和NFS等,就成為了備選方案。本文將介紹這些存儲系統(tǒng)在Kubernetes上的部署方法和注意事項,以及如何實現(xiàn)支持動態(tài)Provisioning的CSI Driver。

4.1 Ceph RBD

Ceph RBD是一種快速、可靠、分布式的塊存儲系統(tǒng),可以作為Kubernetes的存儲后端,為容器提供高性能的塊存儲服務(wù)。Ceph RBD部署的過程如下:

  1. 部署Ceph存儲集群。

  2. 安裝和配置RBD客戶端,以便Kubernetes節(jié)點可以訪問Ceph存儲集群。

  3. 創(chuàng)建RBD存儲卷的Kubernetes存儲類。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ceph-rbd
provisioner: ceph.com/rbd
parameters:
  monitors: "<MONITOR1>,<MONITOR2>,<MONITOR3>"
  pool: "<POOL>"
  imageFormat: "2"
  imageFeatures: "layering"
  1. 在Kubernetes上創(chuàng)建PVC和Pod,然后使用RBD存儲卷。

如果想要實現(xiàn)支持動態(tài)Provisioning的CSI Driver,可以使用RBD CSI Driver,具體步驟如下:

  1. 部署RBD CSI Driver。

  2. 在Kubernetes節(jié)點上安裝和配置RBD CSI Driver。

  3. 創(chuàng)建RBD CSI Driver的外部存儲類。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: rbd
provisioner: rbd.csi.ceph.com
parameters:
  monitors: "<MONITOR1>,<MONITOR2>,<MONITOR3>"
  pool: "<POOL>"
  1. 在Kubernetes上創(chuàng)建PVC和Pod,然后使用RBD CSI Driver存儲卷。

4.2 GlusterFS

GlusterFS是一種可擴(kuò)展的網(wǎng)絡(luò)文件系統(tǒng)可以為Kubernetes容器提供高可用、高性能、高擴(kuò)展性的文件存儲服務(wù)。GlusterFS部署的過程如下:

  1. 部署GlusterFS存儲集群。

  2. 安裝和配置GlusterFS客戶端,以便Kubernetes節(jié)點可以訪問GlusterFS存儲集群。

  3. 創(chuàng)建GlusterFS存儲卷的Kubernetes存儲類。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: glusterfs
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://<GLUSTERFS_SERVER>:24008"
  clusterid: "<CLUSTER_ID>"
  volumetype: "replica 2"
  1. 在Kubernetes上創(chuàng)建PVC和Pod,然后使用GlusterFS存儲卷。

如果想要實現(xiàn)支持動態(tài)Provisioning的CSI Driver,可以使用GlusterFS CSI Driver,具體步驟如下:

  1. 部署GlusterFS CSI Driver。

  2. 在Kubernetes節(jié)點上安裝和配置GlusterFS CSI Driver。

  3. 創(chuàng)建GlusterFS CSI Driver的外部存儲類。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: glusterfs
provisioner: gluster.org/glusterfs
parameters:
  endpoint: "<GLUSTERFS_SERVER>"
  restauthenabled: "false"
  1. 在Kubernetes上創(chuàng)建PVC和Pod,然后使用GlusterFS CSI Driver存儲卷。

4.3 NFS

NFS是一種基于客戶端和服務(wù)器之間共享文件的網(wǎng)絡(luò)文件系統(tǒng)可以為Kubernetes容器提供輕量、可靠、易用的文件存儲服務(wù)。NFS部署的過程如下:

  1. 部署NFS服務(wù)器

  2. 配置NFS服務(wù)器以允許Kubernetes節(jié)點訪問共享目錄

  3. 創(chuàng)建NFS存儲卷的Kubernetes存儲類

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs
provisioner: kubernetes.io/nfs
parameters:
  server: "nfs-server.example.com"
  path: "/exports"
  1. 在Kubernetes上創(chuàng)建PVC和Pod,然后使用NFS存儲卷

使用NFS存儲卷時,需要注意以下幾點:

  • NFS存儲卷應(yīng)該在Pod中只讀掛載
volumeMounts:
- name: nfs-volume
  mountPath: /data
  readOnly: true
  • 應(yīng)該使用別名來指定NFS服務(wù)器的IP地址或域名,以避免在有多個NFS服務(wù)器的情況下需要更改存儲類。
parameters:
  server: "nfs.example.com"
  path: "/exports/data"

五、小結(jié)回顧

容器化存儲系統(tǒng)的部署和管理是容器編排平臺的一個重要組成部分,隨著Kubernetes的發(fā)展和普及,對存儲系統(tǒng)的要求也越來越高。對于企業(yè)級應(yīng)用程序而言,Kubernetes內(nèi)置的存儲系統(tǒng)不夠靈活、不夠高效、不夠智能就需要使用常見的容器化存儲系統(tǒng),如Ceph RBD、GlusterFS和NFS等,來滿足其需求。在這種情況下,快速、可靠、智能的存儲系統(tǒng)將成為企業(yè)級應(yīng)用程序中不可或缺的一部分。未來容器化存儲系統(tǒng)將朝著更快、更穩(wěn)定、更易用的方向發(fā)展。文章來源地址http://www.zghlxwxcb.cn/news/detail-482824.html

到了這里,關(guān)于在Kubernetes上部署和管理容器化存儲系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • kubernetes 系列教程之部署 BusyBox 容器

    Kubernetes版本 v1.19.14 BusyBox 是一個輕量級的 Unix 工具集合,它將許多常用的 Unix 工具打包在一個可執(zhí)行文件中。在 Kubernetes 中,可以使用 BusyBox 容器作為調(diào)試工具,快速執(zhí)行命令或檢查容器內(nèi)部的狀態(tài)。本篇博客將介紹如何在 Kubernetes 集群上部署和使用 BusyBox 容器。 步驟一:

    2024年02月16日
    瀏覽(21)
  • 容器化微服務(wù):用Kubernetes實現(xiàn)彈性部署

    容器化微服務(wù):用Kubernetes實現(xiàn)彈性部署

    隨著云計算的迅猛發(fā)展,容器化和微服務(wù)架構(gòu)成為了構(gòu)建現(xiàn)代應(yīng)用的重要方式。而在這個過程中,Kubernetes(常簡稱為K8s)作為一個開源的容器編排平臺,正在引領(lǐng)著容器化微服務(wù)的部署和管理革命。本文將深入探討容器化微服務(wù)的核心概念、Kubernetes的優(yōu)勢以及如何借助Kube

    2024年02月11日
    瀏覽(16)
  • Kubernetes (十) 存儲——Configmap配置管理

    Kubernetes (十) 存儲——Configmap配置管理

    一.Configmap作用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? 實驗環(huán)境:清除之前的ns pod svc networkpolicy......? ? ? ? ? ? ? ? ??? ? kubectl delete -f networkpolicy.yaml ? ? ? ? ? ? ? ??? ?kubectl delete svc myapp-v1 ? ? ? ?

    2024年01月22日
    瀏覽(45)
  • Kubernetes日志查看指南:深入了解容器日志管理技術(shù)

    簡介: Kubernetes(簡稱K8s)已成為現(xiàn)代容器化應(yīng)用程序管理的主要平臺之一。了解如何有效地查看和管理Kubernetes集群中的容器日志對于故障排除、性能優(yōu)化和安全監(jiān)控至關(guān)重要。本文將向您介紹一些基本的技術(shù)和工具,幫助您在Kubernetes環(huán)境中查看和分析容器日志。 查看單個

    2024年02月12日
    瀏覽(27)
  • Docker和Kubernetes與容器自動化管理:最佳實踐

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) 容器技術(shù)在企業(yè)級應(yīng)用中扮演著重要角色,通過容器化部署應(yīng)用程序可以極大的降低IT成本、縮短交付周期、提高資源利用率。對于容器技術(shù)來說,Docker和Kubernetes無疑是其兩大支柱產(chǎn)品。由于Docker和Kubernetes都提供了統(tǒng)一的編排接口(API),使

    2024年02月07日
    瀏覽(28)
  • 【探索 Kubernetes|作業(yè)管理篇 系列 14】StatefulSet 存儲狀態(tài)

    【探索 Kubernetes|作業(yè)管理篇 系列 14】StatefulSet 存儲狀態(tài)

    大家好,我是秋意零。 在上一篇中,我們講解了 StatefulSet 的拓?fù)錉顟B(tài);我們發(fā)現(xiàn),它的拓?fù)錉顟B(tài),就是順序啟動/刪除、Pod 名稱+編號命名、將 Pod 名稱設(shè)為 Hostname 名稱、通過 Service 無頭服務(wù)的 DNS 記錄訪問。 今天,就來看看 StatefulSet 的存儲狀態(tài)。 最近搞了一個扣扣群,旨在

    2024年02月11日
    瀏覽(21)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器運行)

    主機(jī)名 IP地址 備注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主機(jī)配置 2、升級內(nèi)核 3、配置內(nèi)核轉(zhuǎn)發(fā)以及過濾 4、安裝ipset ipvsadm,IPVS(IP Virtual Server)是一個用于負(fù)載均衡的 Linux 內(nèi)核模塊,它可以用來替代 kube-proxy 默認(rèn)的

    2024年02月20日
    瀏覽(102)
  • kubernetes--分析容器系統(tǒng)調(diào)用:Sysdig

    kubernetes--分析容器系統(tǒng)調(diào)用:Sysdig

    目錄 Sysdig介紹: sysdig工作流程 安裝Sysdig sysdig常用參數(shù): sysdig過濾: sysdig之Chisels(工具箱): 其他常用命令 ?????? Sysdig是一個非常強(qiáng)大的系統(tǒng)監(jiān)控分析和故障排查工具。匯聚strace+tcpdump+iftop+lsof工具功能為一身。 ?????? sysdig除了能獲取系統(tǒng)資源利用率、進(jìn)程、網(wǎng)絡(luò)連

    2024年02月05日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包