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

(二)k8s實(shí)戰(zhàn)-深入Pod詳解

這篇具有很好參考價(jià)值的文章主要介紹了(二)k8s實(shí)戰(zhàn)-深入Pod詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、配置文件詳解

創(chuàng)建Pod nginx樣例

apiVersion: v1 # api文檔版本
kind: Pod # 資源對(duì)象類(lèi)型,Pod, Deployment,StatefulSet
metadata: # Pod相關(guān)的元數(shù)據(jù),用于描述Pod的數(shù)據(jù)
  name: nginx-demo # Pod的名稱(chēng)
  labels: # 定義Pod的標(biāo)簽
    type: app # 自定義lable標(biāo)簽,名稱(chēng)為tyoe,值為app
    test: 1.0.0 # 自定義lable標(biāo)簽,描述Pod版本號(hào)
  namespace: 'default' # 命名空間的配置
spec: # 期望Pod按照這里的描述進(jìn)行創(chuàng)建
  containers: # Pod中的容器描述
  - name: nginx # 容器名稱(chēng)
    image: arm64v8/nginx:latest # 指定容器的鏡像
    imagePullPolicy: IfNotPresent # 鏡像拉取策略,Always, Never, IfNotPresent
    command: # 指定容器啟動(dòng)時(shí)執(zhí)行的命令
    - nginx
    - -g
    - 'daemon off;' # nginx -g daemon off;
    workingDir: /usr/share/nginx/html # 定義容器啟動(dòng)后默認(rèn)的目錄
    ports:
    - name: http # 端口名稱(chēng)
      containerPort: 80 # 容器內(nèi)需要暴露的端口
      protocol: TCP # 描述該端口是基于哪種協(xié)議通信的
    env: # 環(huán)境變量
    - name: JVM_OPTS # 環(huán)境變量名稱(chēng)
      value: '-Xms120m -Xmx128m' # 環(huán)境變量的值

    resources:
      requests: # 最少需要多少資源
        cpu: 100m # 限制cpu最多使用0.1個(gè)核心
        memory: 128Mi # 限制內(nèi)存最少使用128兆
      limits: # 最多可以用多少資源
        cpu: 200m # 限制cpu最多使用0.2個(gè)核心
        memory: 256Mi # 限制最多使用256兆

  restartPolicy: OnFailure # pod重啟策略,Always,OnFailure,Never,默認(rèn)值為Always, OnFailure 只有pod非零推出碼終止時(shí),kubelet才會(huì)重啟改容器,容器正常>結(jié)束的退出碼為0

K8S 的資源清單

參數(shù)名 類(lèi)型 字段說(shuō)明
apiVersion String K8S APl 的版本,可以用 kubectl api versions 命令查詢(xún)
kind String yam 文件定義的資源類(lèi)型和角色
metadata Object 元數(shù)據(jù)對(duì)象,下面是它的屬性
metadata.name String 元數(shù)據(jù)對(duì)象的名字,比如 pod 的名字
metadata.namespace String 元數(shù)據(jù)對(duì)象的命名空間
Spec Object 詳細(xì)定義對(duì)象
spec.containers[] list 定義 Spec 對(duì)象的容器列表
spec.containers[].name String 為列表中的某個(gè)容器定義名稱(chēng)
spec.containers[].image String 為列表中的某個(gè)容器定義需要的鏡像名稱(chēng)
spec.containers[].imagePullPolicy string 定義鏡像拉取策略,有 Always、Never、IfNotPresent 三個(gè)值可選
- Always(默認(rèn)):意思是每次都嘗試重新拉取鏡像
- Never:表示僅適用本地鏡像
- IfNotPresent:如果本地有鏡像就使用本地鏡像,沒(méi)有就拉取在線(xiàn)鏡像。
spec.containers[].command[] list 指定容器啟動(dòng)命令,因?yàn)槭菙?shù)組可以指定多個(gè),不指定則使用鏡像打包時(shí)使用的啟動(dòng)命令。
spec.containers[].args[] list 指定容器啟動(dòng)命令參數(shù),因?yàn)槭菙?shù)組可以指定多個(gè)。
spec.containers[].workingDir string 指定容器的工作目錄
spec.containers[].volumeMounts[] list 指定容器內(nèi)部的存儲(chǔ)卷配置
spec.containers[].volumeMounts[].name string 指定可以被容器掛載的存儲(chǔ)卷的名稱(chēng)
spec.containers[].volumeMounts[].mountPath string 指定可以被容器掛載的存儲(chǔ)卷的路徑
spec.containers[].volumeMounts[].readOnly string 設(shè)置存儲(chǔ)卷路徑的讀寫(xiě)模式,ture 或者 false,默認(rèn)是讀寫(xiě)模式
spec.containers[].ports[] list 指定容器需要用到的端口列表
spec.containers[].ports[].name string 指定端口的名稱(chēng)
spec.containers[].ports[].containerPort string 指定容器需要監(jiān)聽(tīng)的端口號(hào)
spec.containers[].ports[].hostPort string 指定容器所在主機(jī)需要監(jiān)聽(tīng)的端口號(hào),默認(rèn)跟上面 containerPort 相同,注意設(shè)置了 hostPort 同一臺(tái)主機(jī)無(wú)法啟動(dòng)該容器的相同副本(因?yàn)橹鳈C(jī)的端口號(hào)不能相同,這樣會(huì)沖突)
spec.containers[].ports[].protocol string 指定端口協(xié)議,支持 TCP 和 UDP,默認(rèn)值為 TCP
spec.containers[].env[] list 指定容器運(yùn)行前需設(shè)置的環(huán)境變量列表
spec.containers[].env[].name string 指定環(huán)境變量名稱(chēng)
spec.containers[].env[].value string 指定環(huán)境變量值
spec.containers[].resources Object 指定資源限制和資源請(qǐng)求的值(這里開(kāi)始就是設(shè)置容器的資源上限)
spec.containers[].resources.limits Object 指定設(shè)置容器運(yùn)行時(shí)資源的運(yùn)行上限
spec.containers[].resources.limits.cpu string 指定 CPU 的限制,單位為 Core 數(shù),將用于 docker run –cpu-shares 參數(shù)
spec.containers[].resources.limits.memory string 指定 mem 內(nèi)存的限制,單位為 MIB、GiB
spec.containers[].resources.requests Object 指定容器啟動(dòng)和調(diào)度時(shí)的限制設(shè)置
spec.containers[].resources.requests.cpu string CPU請(qǐng)求,單位為core數(shù),容器啟動(dòng)時(shí)初始化可用數(shù)量
spec.containers[].resources.requests.memory string 內(nèi)存請(qǐng)求,單位為MIB、GiB,容器啟動(dòng)的初始化可用數(shù)量
spec.restartPolicy string 定義 pod 的重啟策略,可選值為 Always、OnFailure、Never,默認(rèn)值為 Always。
- Always:pod 一旦終止運(yùn)行,則無(wú)論容器是如何終止的,kubelet 服務(wù)都將重啟它。
- OnFailure:只有 pod 以非零退出碼終止時(shí),kubelet 才會(huì)重啟該容器。如果容器正常結(jié)束(退出碼為0),則 kubectl 將不會(huì)重啟它。
- Never:Pod 終止后,kubelet 將退出碼報(bào)告給 master,不會(huì)重啟該 pod
spec.nodeSelector Object 定義 Node 的 label 過(guò)濾標(biāo)簽,以 key:value 格式指定
spec.imagePullSecrets Object 定義 pull 鏡像時(shí)使用 secret 名稱(chēng),以 name:secretkey 格式指定
spec.hostNetwork Boolean 定義是否使用主機(jī)網(wǎng)絡(luò)模式,默認(rèn)值為 false。設(shè)置 true 表示使用宿主機(jī)網(wǎng)絡(luò),不使用 docker 網(wǎng)橋,同時(shí)設(shè)置了 true將無(wú)法在同一臺(tái)宿主機(jī)上啟動(dòng)第二個(gè)副本

常用命令:
刪除pod
kubectl delete po nginx-demo
創(chuàng)建pod
kubectl create -f nginx-demo.yaml
查看pod
kubectl get po
實(shí)時(shí)查看pod(動(dòng)態(tài))
kubectl get po -w
查看pod詳細(xì)信息
kubectl get po -o wide
查看pod構(gòu)建詳細(xì)信息
kubectl describe po nginx-demo
查看路由
route -n

二、探針

為什么需要存活探針和就緒探針

上面的配置文件中,通過(guò)配置restartPolicy字段來(lái)對(duì)容器退出后執(zhí)行3種不同的重啟策略,但這并不能解決我們所有的問(wèn)題,比如容器中的Java應(yīng)用程序拋出OutOfMemoryErrors,但JVM進(jìn)程會(huì)一致存在,容器并沒(méi)有退出,再比如,Java停止響應(yīng)或死鎖,容器也沒(méi)有終止等等,這時(shí)如果有一種機(jī)制來(lái)告訴kubernetes來(lái)重啟容器那就最好了,在k8s中,提供了一種存活探針的機(jī)制來(lái)實(shí)現(xiàn)上訴的問(wèn)題。

  • livenessProbe,叫做存活探針,是為了檢測(cè)容器是否正在運(yùn)行,是否活著;
  • readinessProbe,叫做就緒探針,是為了檢測(cè)容器是否準(zhǔn)備就緒,是否能接受客戶(hù)端請(qǐng)求;
  • startupProbe,叫做啟動(dòng)探針,用于判斷容器進(jìn)程是否已經(jīng)啟動(dòng)。

關(guān)于探針看這篇文章,寫(xiě)的太好了??
pod健康檢查之容器的存活探針、就緒探針

1、StartupProbe啟動(dòng)探針

k8s 1.16 版本新增的探針,用于判斷應(yīng)用程序是否已經(jīng)啟動(dòng)了。
當(dāng)配置了 startupProbe 后,會(huì)先禁用其他探針,直到 startupProbe 成功后,其他探針才會(huì)繼續(xù)。

作用:由于有時(shí)候不能準(zhǔn)確預(yù)估應(yīng)用一定是多長(zhǎng)時(shí)間啟動(dòng)成功,因此配置另外兩種方式不方便配置初始化時(shí)長(zhǎng)來(lái)檢測(cè),而配置了 statupProbe 后,只有在應(yīng)用啟動(dòng)成功了,才會(huì)執(zhí)行另外兩種探針,可以更加方便的結(jié)合使用另外兩種探針使用。

startupProbe:  #啟動(dòng)探針配置
  httpGet:  # 探測(cè)方式,基于http請(qǐng)求探測(cè)
    path: /api/startup # http請(qǐng)求路徑
    port: 80 # 請(qǐng)求端口

2、LivenessProbe就緒探針

用于探測(cè)容器中的應(yīng)用是否運(yùn)行,如果探測(cè)失敗,kubelet 會(huì)根據(jù)配置的重啟策略進(jìn)行重啟,若沒(méi)有配置,默認(rèn)就認(rèn)為容器啟動(dòng)成功,不會(huì)執(zhí)行重啟策略。

livenessProbe: #就緒探針配置
  httpGet: # 探測(cè)方式,基于http請(qǐng)求探測(cè)
    path: /health # http請(qǐng)求路徑
    port: 8080 # 請(qǐng)求端口
    scheme: HTTP
  initialDelaySeconds: 60 # 初始延時(shí),表示容器啟動(dòng)60秒后才開(kāi)始探測(cè)
  failureThreshold: 5  # 失敗多少次才算真正失敗
  periodSeconds: 10 # 間隔時(shí)間
  successThreshold: 1 # 多少次檢測(cè)成功才算成功
  timeoutSeconds: 5  # 請(qǐng)求的超時(shí)時(shí)間

3、ReadinessProbe存活探針

用于探測(cè)容器內(nèi)的程序是否健康,它的返回值如果返回 success,那么就認(rèn)為該容器已經(jīng)完全啟動(dòng),并且該容器是可以接收外部流量的。

readinessProbe: # 存活探針配置
  httpGet:
    path: /ready
    port: 8181
    scheme: HTTP
  failureThreshold: 3 # 錯(cuò)誤次數(shù)
  periodSeconds: 10 # 間隔時(shí)間
  successThreshold: 1 # 多少次檢測(cè)成功才算成功
  timeoutSeconds: 1 # 請(qǐng)求的超時(shí)時(shí)間

4、三種探測(cè)方式

# 1.ExecAction 
# 在容器內(nèi)部執(zhí)行一個(gè)命令,如果返回值為 0,則任務(wù)容器時(shí)健康的。
livenessProbe:
  exec:
    command:
      - cat
      - /health

# 2.TCPSocketAction
# 通過(guò) tcp 連接監(jiān)測(cè)容器內(nèi)端口是否開(kāi)放,如果開(kāi)放則證明該容器健康
livenessProbe:
  tcpSocket:
    port: 80

# 3.HTTPGetAction
# 生產(chǎn)環(huán)境用的較多的方式,發(fā)送 HTTP 請(qǐng)求到容器內(nèi)的應(yīng)用程序,如果接口返回的狀態(tài)碼在 200~400 之間,則認(rèn)為容器健康。
livenessProbe:
  failureThreshold: 5
  httpGet:
    path: /health
    port: 8080
    scheme: HTTP
    httpHeaders:
      - name: xxx
        value: xxx

5、探針的附加參數(shù)配置

initialDelaySeconds: 60 # 初始化時(shí)間
timeoutSeconds: 2 # 超時(shí)時(shí)間
periodSeconds: 5 # 監(jiān)測(cè)間隔時(shí)間
successThreshold: 1 # 檢查 1 次成功就表示成功
failureThreshold: 2 # 監(jiān)測(cè)失敗 2 次就表示失敗

注意:定義存活探針時(shí),一定要設(shè)置initialDelaySeconds屬性,該屬性為初始延時(shí),如果不設(shè)置,默認(rèn)容器啟動(dòng)時(shí)探針就開(kāi)始探測(cè)了,這樣可能會(huì)存在應(yīng)用程序還未啟動(dòng)就緒,就會(huì)導(dǎo)致探針檢測(cè)失敗,k8s就會(huì)根據(jù)pod重啟策略殺掉容器然后再重新創(chuàng)建容器的莫名其妙的問(wèn)題。
在生產(chǎn)環(huán)境中,一定要定義一個(gè)存活探針。

三、Pod生命周期

生命周期閱讀這篇文章??
pod生命周期以及探針介紹

(二)k8s實(shí)戰(zhàn)-深入Pod詳解,kubernetes,云原生,kubelet,容器
(二)k8s實(shí)戰(zhàn)-深入Pod詳解,kubernetes,云原生,kubelet,容器

Pod 退出流程(刪除操作)

  1. Endpoint 刪除 pod 的 ip 地址
  2. Pod 變成 Terminating 狀態(tài)
  3. 執(zhí)行 preStop 的指令

PreStop 的應(yīng)用

  1. 注冊(cè)中心下線(xiàn)
  2. 數(shù)據(jù)清理
  3. 數(shù)據(jù)銷(xiāo)毀

下一篇:(三)k8s實(shí)戰(zhàn)-資源調(diào)度文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-672580.html

到了這里,關(guān)于(二)k8s實(shí)戰(zhàn)-深入Pod詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【云原生】深入掌握k8s中Pod和生命周期

    【云原生】深入掌握k8s中Pod和生命周期

    ? ? 個(gè)人主頁(yè): 征服bug-CSDN博客 kubernetes專(zhuān)欄: kubernetes_征服bug的博客-CSDN博客? 1 什么是 Pod 2 Pod 基本操作 3 Pod 運(yùn)行多個(gè)容器 4 Pod 的 Labels(標(biāo)簽) 5 Pod 的生命周期 1 什么是 Pod 摘取官網(wǎng): Pod | Kubernetes 1.1 簡(jiǎn)介 ????????Pod 是可以在 Kubernetes 中 創(chuàng)建和管理的、最小的可部署的計(jì)

    2024年02月14日
    瀏覽(60)
  • Kubernetes(k8s)核心資源解析:Pod詳解

    Kubernetes(k8s)核心資源解析:Pod詳解

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? Pod是Kubernetes中最小的調(diào)度單元,它可以包含一個(gè)或多個(gè)容器。Pod中的所有容器共享網(wǎng)絡(luò)和存儲(chǔ)卷,它們一起運(yùn)行在同一個(gè)節(jié)點(diǎn)上。Pod提供了一種抽象層,使得容器可以作為一個(gè)邏輯單元來(lái)管理。 Pod中的容器共享IP地址、端口空間和存儲(chǔ)

    2024年04月11日
    瀏覽(102)
  • 云上攻防-云原生篇&;Kubernetes&;K8s安全&;API&;Kubelet未授權(quán)訪(fǎng)問(wèn)&;容器執(zhí)行

    云上攻防-云原生篇&;Kubernetes&;K8s安全&;API&;Kubelet未授權(quán)訪(fǎng)問(wèn)&;容器執(zhí)行

    curl -XPOST -k “https://192.168.139.132:10250/run///” -d “cmd=id” 執(zhí)行的命令是test03容器里的命令,需要進(jìn)行容器逃逸。 1、攻擊8080端口:API Server(Master)未授權(quán)訪(fǎng)問(wèn) 舊版本的k8s的API Server默認(rèn)會(huì)開(kāi)啟兩個(gè)端口:8080和6443。 6443是安全端口,安全端口使用TLS加密;但是8080端口無(wú)需認(rèn)證,

    2024年04月22日
    瀏覽(71)
  • Kubernetes(k8s):Pod 的 Node Selector詳解

    Kubernetes(k8s):Pod 的 Node Selector詳解

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? Node Selector是Kubernetes中一個(gè)用于指定Pod部署位置的重要概念。通過(guò)Node Selector,用戶(hù)可以將Pod調(diào)度到具有特定標(biāo)簽的節(jié)點(diǎn)上。 這種標(biāo)簽通常用于區(qū)分節(jié)點(diǎn)的硬件配置、地理位置、網(wǎng)絡(luò)特性等。通過(guò)合理地設(shè)置Node Selector,用戶(hù)可以?xún)?yōu)化應(yīng)用

    2024年04月08日
    瀏覽(95)
  • [云原生] K8s之pod控制器詳解

    [云原生] K8s之pod控制器詳解

    Pod 是 Kubernetes 集群中能夠被創(chuàng)建和管理的最小部署單元。所以需要有工具去操作和管理它們的生命周期,這里就需要用到控制器了。 Pod 控制器由 master 的 kube-controller-manager 組件提供,常見(jiàn)的此類(lèi)控制器有 Replication Controller、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job 和 CronJo

    2024年03月11日
    瀏覽(23)
  • 【云原生|K8s系列第4篇】:實(shí)戰(zhàn)查看Pod和工作節(jié)點(diǎn)

    【云原生|K8s系列第4篇】:實(shí)戰(zhàn)查看Pod和工作節(jié)點(diǎn)

    本期文章是K8s系列第4篇,主要是實(shí)戰(zhàn)查看pod和工作節(jié)點(diǎn)。通過(guò)本期文章:我們將學(xué)習(xí)了解Kubernetes中的Pod和工作節(jié)點(diǎn),并且對(duì)已經(jīng)部署的應(yīng)用故障排除。 在前期的文章中,已經(jīng)介紹了一些云原生入門(mén)的知識(shí)及簡(jiǎn)單實(shí)戰(zhàn),感興趣的同學(xué)可以去我的云原生專(zhuān)欄中學(xué)習(xí),任意門(mén):云

    2024年01月16日
    瀏覽(29)
  • 云原生 黑馬Kubernetes教程(K8S教程)筆記——第一章 kubernetes介紹——Master集群控制節(jié)點(diǎn)、Node工作負(fù)載節(jié)點(diǎn)、Pod控制單元

    云原生 黑馬Kubernetes教程(K8S教程)筆記——第一章 kubernetes介紹——Master集群控制節(jié)點(diǎn)、Node工作負(fù)載節(jié)點(diǎn)、Pod控制單元

    參考文章:kubernetes介紹 本章節(jié)主要介紹應(yīng)用程序在服務(wù)器上部署方式演變以及kubernetes的概念、組件和工作原理。 在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個(gè)時(shí)代: 傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會(huì)直接將應(yīng)用程序部署在物理機(jī)上 優(yōu)點(diǎn):簡(jiǎn)單,不需要其它技術(shù)的參與 缺點(diǎn):不能為

    2024年02月04日
    瀏覽(35)
  • 深入探討Kubernetes(K8s)在云原生架構(gòu)中的關(guān)鍵作用和應(yīng)用

    深入探討Kubernetes(K8s)在云原生架構(gòu)中的關(guān)鍵作用和應(yīng)用

    ??個(gè)人主頁(yè):程序員 小侯 ??CSDN新晉作者 ??歡迎 ??點(diǎn)贊?評(píng)論?收藏 ?收錄專(zhuān)欄:云計(jì)算 ?文章內(nèi)容:Kubernetes(K8s) ??希望作者的文章能對(duì)你有所幫助,有不足的地方請(qǐng)?jiān)谠u(píng)論區(qū)留言指正,大家一起學(xué)習(xí)交流!?? 隨著云原生應(yīng)用程序的興起,Kubernetes(通常稱(chēng)為K8s)

    2024年02月09日
    瀏覽(86)
  • 【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù)

    【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù)

    前面我們已經(jīng)一起學(xué)習(xí)了很多的東西了,本篇文章,我們將一起學(xué)習(xí),如何給應(yīng)用注入數(shù)據(jù),當(dāng)然,本篇文章不會(huì)講解全部知識(shí)點(diǎn),而是帶領(lǐng)大家,一起學(xué)習(xí)如何對(duì)我們的項(xiàng)目進(jìn)行相關(guān)的配置和設(shè)置。 創(chuàng)建 Pod 時(shí),可以為其下的容器設(shè)置啟動(dòng)時(shí)要執(zhí)行的命令及其參數(shù)。如果要

    2024年02月02日
    瀏覽(94)
  • 【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 使用 Kustomize 對(duì) Kubernetes 對(duì)象進(jìn)行聲明式管理

    【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 使用 Kustomize 對(duì) Kubernetes 對(duì)象進(jìn)行聲明式管理

    Kustomize 是一個(gè)用來(lái)定制 Kubernetes 配置的工具。它提供以下功能特性來(lái)管理應(yīng)用配置文件: 從其他來(lái)源生成資源 為資源設(shè)置貫穿性(Cross-Cutting)字段 組織和定制資源集合 ConfigMap 和 Secret 包含其他 Kubernetes 對(duì)象(如 Pod)所需要的配置或敏感數(shù)據(jù)。 ConfigMap 或 Secret 中數(shù)據(jù)的來(lái)

    2024年01月17日
    瀏覽(102)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包