云原生 kubenetes 控制器管理

Kubernetes:容器编排技术从入门到精通 在当今的云计算与容器化技术的浪潮中,Kubernetes 已经成为了容器编排领域中不可或缺的技术。它是由 Google 开源的,用于自动化部署、扩展和管理容器化应用的平台。本章将深入浅出地介绍 Kubernetes 的基本概念、架构设计以及如何高效部署和管理应用程序。Kubernetes,源自希腊语,意为“舵手”或“领航员”,象征其在容器编排中的领导地位。Kubernetes 旨在简化复杂的分布式系统管理,提供了一个简单而强大的机制,用于部署、扩展及运行应用程序容器。 阅读详情

一.Replicaset控制器

1.建立控制器

[root@k8s-master controler]# kubectl create deployment webcluster --image myapp:v1  --dry-run=client -o yaml  > repset.yml
[root@k8s-master controler]# vim repset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp
[root@k8s-master controler]# kubectl apply -f repset.yml
replicaset.apps/webcluster created
打开一个新的shell
[root@master ~]# watch -n 1 kubectl get pods   --show-labels
Every 1.0s: kubectl get pods --show-labels                                    k8s-master: Tue Aug 25 16:22:01 2026

NAME               READY   STATUS    RESTARTS   AGE    LABELS
webcluster-5h8vv   1/1     Running   0          103s   app=webcluster
webcluster-6qgnd   1/1     Running   0          103s   app=webcluster

拉伸
kubectl  scale replicaset webcluster --replicas 4
kubectl  scale replicaset webcluster --replicas 2
kubectl  scale replicaset webcluster --replicas 0

2.测试功能

[root@master controler]# vim repset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  replicas: 4
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp

[root@k8s-master controler]# kubectl apply -f repset.yml
replicaset.apps/webcluster created

NAME               READY   STATUS    RESTARTS   AGE   LABELS
webcluster-b4qt7   1/1     Running   0          12s   app=webcluster
webcluster-dch25   1/1     Running   0          12s   app=webcluster
webcluster-rkmcm   1/1     Running   0          12s   app=webcluster
webcluster-zlrzp   1/1     Running   0          12s   app=webcluster

[root@k8s-master controler]# kubectl label pods webcluster-b4qt7 app-
pod/webcluster-b4qt7 unlabeled

[root@k8s-master controler]# kubectl label pods webcluster-b4qt7 app=webcluster
pod/webcluster-b4qt7 labeled

二.deployment

1.监控

[root@master ~]# watch -n 1 " kubectl get pods   --show-labels;echo ====;kubectl get replicasets.apps"

Every 1.0s:  kubectl get pods   --show-labels;echo ====;kubectl get repli...  k8s-master: Tue Aug 25 16:29:04 2026

No resources found in default namespace.
====
No resources found in default namespace.

2.建立deployment控制器

[root@k8s-master controler]# kubectl create deployment webcluster --image myapp:v1  --dry-run=client -o yaml  > dep.yml
[root@k8s-master controler]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 2
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp
#        resources: {}
[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster created

NAME                          READY   STATUS    RESTARTS   AGE   LABELS
webcluster-77c87d9946-4dbnr   1/1     Running   0          40s   app=webcluster,pod-template-hash=77c87d9946
webcluster-77c87d9946-mbgdw   1/1     Running   0          40s   app=webcluster,pod-template-hash=77c87d9946
====
NAME                    DESIRED   CURRENT   READY   AGE
webcluster-77c87d9946   2         2         2       40s

[root@k8s-master controler]# kubectl expose deployment webcluster --port 80 --target-port 80
service/webcluster exposed
[root@k8s-master controler]# kubectl describe  services webcluster
Name:                     webcluster
Namespace:                default
Labels:                   app=webcluster
Annotations:              <none>
Selector:                 app=webcluster
Type:                     ClusterIP
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.103.237.129
IPs:                      10.103.237.129
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
Endpoints:                10.244.2.35:80,10.244.1.20:80
Session Affinity:         None
Internal Traffic Policy:  Cluster
Events:                   <none>


3.升级和回滚

升级
[root@master controler]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 2
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v2
        name: myapp
#        resources: {}
[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@k8s-master controler]# kubectl describe  services webcluster
Name:                     webcluster
Namespace:                default
Labels:                   app=webcluster
Annotations:              <none>
Selector:                 app=webcluster
Type:                     ClusterIP
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.103.237.129
IPs:                      10.103.237.129
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
Endpoints:                10.244.2.36:80,10.244.1.21:80
Session Affinity:         None
Internal Traffic Policy:  Cluster
Events:                   <none>

三.版本更新管理及优化

[root@k8s-master controler]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 6
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v2
        name: myapp
#        resources: {}
[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster configured

1.查看更新策略信息

[root@k8s-master controler]# kubectl describe deployments.apps webcluster
Name:                   webcluster
Namespace:              default
CreationTimestamp:      Tue, 25 Aug 2026 16:29:50 +0800
Labels:                 app=webcluster
Annotations:            deployment.kubernetes.io/revision: 2
Selector:               app=webcluster
Replicas:               6 desired | 6 updated | 6 total | 6 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        5
RollingUpdateStrategy:  25% max unavailable, 25% max surge

2.设定更新策略

[root@master controler]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 6
  selector:
    matchLabels:
      app: webcluster
  strategy:
    rollingUpdate:
      maxSurge: 1                             #更新时pod数量最多比期望值多一个
      maxUnavailable: 0                       #不能使用pod数量比期望值数量多0
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp
#        resources: {}
[root@master controler]# kubectl apply -f dep.yml

3.更新暂停和恢复

[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster created
[root@k8s-master controler]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION  CHANGE-CAUSE
1         <none>

[root@k8s-master controler]# kubectl rollout pause deployment webcluster  #暂停更新
deployment.apps/webcluster paused
[root@k8s-master controler]# vim dep.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 6
  selector:
    matchLabels:
      app: webcluster
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v2
        name: myapp
#        resources: {}

[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@k8s-master controler]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION  CHANGE-CAUSE
1         <none>

[root@k8s-master controler]# kubectl rollout resume deployment webcluster   #开启更新
deployment.apps/webcluster resumed
[root@k8s-master controler]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

四.DaemonSet

[root@master controler]# kubectl create deployment daemonset --image myapp:v1 --dry-run=client -o yaml  > daemonset.yml
[root@master controler]# vim daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: daemonset
  name: daemonset
spec:
  selector:
    matchLabels:
      app: daemonset
  template:
    metadata:
      labels:
        app: daemonset
    spec:
      containers:
      - image: myapp:v1
        name: myapp



#另外开启一个主机node3,并设定在初始化集群时的所有设定确保所有服务的开启
#在master中重新生成集群主机注册时需要的token
[root@master controler]# kubeadm token create  --print-join-command
kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927


[root@node3 ~]#  kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927 --cri-socket  unix:///var/run/cri-dockerd.sock

#当node3加入集群后会在node3中立即群星指定的pod,其原因是因为运行了daemonset
#可以在master中观察pod的状态

五.Job控制器

[root@master ~]# docker load -i perl-5.34.tar.gz
[root@master ~]# docker tag perl:5.34.0 reg.timinglee.org/library/perl:5.34.0
[root@master ~]# docker login  reg.timinglee.org -u admin
Password:
Login Succeeded
[root@master ~]# docker push reg.timinglee.org/library/perl:5.34.0

[root@master controler]# kubectl create job job --image perl:5.34.0 --dry-run=client -o yaml > job.yml
[root@master controler]# vim job.yml
apiVersion: batch/v1
kind: Job
metadata:
  name: testjob
spec:
  completions: 6
  parallelism: 2
  backoffLimit: 4
  template:
    spec:
      containers:
      - image: busybox
        name: testjob
        command: ["/bin/sh", "-c"]
        args:
        - |
          echo this is testjob message
          sleep 10
      restartPolicy: Never


[root@master controler]# kubectl apply -f job.yml
job.batch/job created

[root@k8s-master controller]# kubectl logs pods/testjob-4cdlr
this is testjob message

六.Cronjob控制器

[root@master controler]# kubectl create cronjob cronjob --image busybox  --schedule "* * * * *" --dry-run=client -o yaml > cronjob.yml
[root@master controler]# vim cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob
spec:
  jobTemplate:
    metadata:
      name: cronjob
    spec:
      template:
        spec:
          containers:
          - image: busybox
            name: cronjob
            command:
              - /bin/sh
              - -c
              - echo "hello timinglee"
          restartPolicy: OnFailure
  schedule: '* * * * *'

[root@master controler]# kubectl apply -f cronjob.yml		#整分运行

[root@master controler]# kubectl get cronjobs.batch
NAME      SCHEDULE    TIMEZONE   SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob   * * * * *   <none>     False     0        17s             70s

[root@master controler]# kubectl logs cronjob-29598241-pxggh
hello timinglee

macOS安装Cplex+yalmip 阅读详情

相关推荐

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 300

云原生 kubenetes pod管理

查看命名空间创建命名空间删除命名空间。

UseLessQQ的博客 305

深度解析中国支付清算体系

说起国之重器,不仅仅有 东风快递、渔16、渔17、渔18,还有另外一个国之重器-CNAPS2(中国支付清算体系)。 中国国内支付行业的发达水平、繁荣程度,不客气的讲,在全世界都是数一数二的,世界上最大的银行卡组织银联在中国,世界上交易量最大的网络零售支付清算体网联在中国。可以说现在我国经济的高速发展,离不开CNAPS2。

银行信息系统应用架构详解 2510

【云原生】Kubenetes快速入门

上图意思就是一个master(主)和6个node(工作)节点的k8s集群Master 负责管理集群负责协调和管理集群中的所有的活动,比如调用应用程序啊、维护应用的状态、扩展和更新应用程序等。Worker节点(即图中的Node)是VM或服务器,它们充当k8s集群中的工作计算机。每个Worker节点都有一个Kubelet,它管理该Worker节点并负责与Master节点通信。每个Worker节点还具有处理容器操作的工具,例如Docker。简单了解下这些概念即可,让我们继续!Pod 容器组。

全网粉丝10W+、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 1280

[MTK][Android P]如何去掉差分包中的preloader分区

最近碰到一个问题,在进行差分升级的时候,会因为某些原因导致preloader hash值不匹配,升级失败,所以需要在差分升级的时候不升级preloader。 解决的方法,就是在制作AB分区的差分升级包的时候,把目标zip解压出来,把ab_partitions.txt中的分区名去掉,同时把preloader.img去掉 修改如下: Project/build/tools/releasetool...

thonmin的专栏 1434

工程师必看:如何用定时截尾试验快速验证产品MTBF(附真实案例解析)

本文为硬件工程师详细解析了如何运用定时截尾试验快速验证产品MTBF(平均无故障工作时间)。通过七步实战法,结合工业物联网网关的真实案例,阐述了从参数设定、试验执行到结果判读的完整流程,并提供了MATLAB脚本实现自动化计算与可视化,帮助工程师在有限时间内科学评估产品可靠性。

weixin_29243063的博客 493

Kubenetes,我知道你!

一个node 节点就是一个物理机或者虚拟机,可以运行多个pod, pod是最小的调度单元,一个pod是一个或多个应用容器的组合(建议一个pod只存放一个容器,可以更好的实现应用程序的结偶和扩展。外部服务访问:开发测试时:通过node:port访问,生产正式访问时: ingress通过域名实现外部访问内容,可以配置路由规则,ingress也可以配置负载均衡和SSL。容器化技术是一种轻量级虚拟化技术,把应用和依赖打包到一个独立、可移植的容器中运行,实现一次构建、到处运行,Docker就是容器化技术的一种实现。

wangsong412的专栏 154

无符号整数、带符号整数溢出问题

让我们详细讲解一下带符号整数溢出和无符号整数溢出问题中,符号标志位 (SF)、零标志位 (ZF) 和进位标志位 (CF) 的行为方式

weixin_49342084的博客 2086

kubenetes

获取资源 : kube get svc,pod......

daizikui的博客 97

QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示(实操部分)

本教程详细介绍了如何从零开始配置QMK固件的OLED显示屏,实现个性化键盘显示。首先,文章解释了OLED显示屏的基本概念及其在键盘中的应用,并介绍了I2C和SPI两种通信方式。接着,教程逐步指导用户如何在QMK固件中启用OLED功能,包括在rules.mk中启用OLED、在halconf.h和mcuconf.h中配置I2C功能,以及在config.h中设置I2C和OLED参数。最后,教程展示了如何在keymap.c中编写代码,实现OLED显示内容,并提供了进阶定制功能,如显示当前层信息、按键状态和QMK L

Despacito0o的博客 580

一文读懂「Chain of Thought,CoT」思维链

Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,对于复杂问题尤其是复杂的数学题大模型很难直接给出正确答案。如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。COT通过要求模型在输出最终答案之前,显式输出中间逐步的推理步骤这一方法来增强大模型的算数、常识和推理能力。简单,但有效。2022 年,在 Google 发布的论文。

女王の专属领地 4万+

Kubenetes 扩展教程(二)

Kubernetes API 是系统的核心基础。对集群的所有内部和外部操作都是对 API 服务器的请求。因此,Kubernetes 中的所有东西都是一个具有相应动作的API 对象。官方的版本化参考文档包含了所有的 API 对象以及大量的信息和例子,比如v1。19 参考。API 是一个基于资源的接口,用于读取、创建、更新或删除资源。组件通过它的 HTTP REST 端点为 API 提供服务。因此,控制平面、节点或终端用户的每个动作都是对的一种 HTTP 调用。让我们假设您想要创建一个新的 pod。

龙哥盟 518

[AI] 本地部署 Dify 遇到 Internal Error?一文彻底解决密码不一致引发的问题

摘要:Dify本地部署常见InternalError错误主要由配置残留或密码不一致导致,特别是修改.env文件后未同步清除数据库记录。彻底解决方案包括:1)清理Docker数据;2)删除旧配置和数据库;3)还原源代码;4)重建.env文件;5)重新初始化部署。关键提醒:记录部署路径、备份.env文件并妥善保存密码。该错误本质是配置冲突,最有效方法是完全重置而非调试,保持清晰的部署管理可避免多数InternalError问题。(149字)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 434

Kubernetes 凭什么成了云原生应用底座?

微软开源的 云原生应用开发的框架Dapr 发布了1.0 版本《Dapr 正式发布 1.0》,云原生应用开发更加简单容易,Dapr 的容器编排环境也是用的Kubernetes。过去几年,...

dotNET跨平台 625

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

kubernetes服务部署中常用控制器

kubernets 容器部署常用的控制器,控制器作用

u010519674的专栏 253

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

云原生生态周报 Vol. 5 | etcd性能知多少

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34054931的博客 101

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

带你深入探究云原生时代的分布式操作系统 Kubernetes

过去几年,以 docker、kubernetes 为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和 k8s 项目作为技术重心,试图“放长线钓大鱼”。就...

dotNET跨平台 716

云原生时代, Kubernetes 多集群架构初探

为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”。我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力。另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的优势和特性,以便使用不同集群的最新技术(如 AI、GPU 集群等)。 就是因为这种种原因,多集群几乎成为了云计算的新潮流,而被谈及最多并且落地的多集群场景主要有这三类: 一类用于应对“云突发”。如下图 1 所示,正常情况下用户使用自己的 IDC 集群提供服务,当应对突发大流量时,迅速将应用扩容到云上集...

Peter的博客 567

云原生在京东丨如何在 Kubernetes 上部署有状态的云原生应用?(上)

云妹导读:Kubernetes 是云计算历史上增长最快的基础设施项目之一。在短短的五年内,它已经达到了现代基础设施的成熟水平。从公有云中的托管容器即服务(CaaS)到数据中心中的平台即服...

京东科技开发者 555

Kubernetes Deployment:部署与管理应用指南

1. ReplicaSet(RS) 2. Deployment 3. Deployment资源配置 总结 ‍ 在上一章节中,介绍了pod,以及介绍了如何使用命令行来创建一个pod。那么问题来了,一般来说,我们部署微服务不可能只部署一个噻,肯定是部署多个,但是我们总不可能说,写一个for循环,启动多个

cmdos的专栏 86

【云原生】Kubernetes----RBAC用户资源权限

随着云计算和容器技术的蓬勃发展,Kubernetes(K8s)作为容器编排的领头羊,其安全性成为了众多企业和开发者关注的焦点。本文将详细解析Kubernetes的安全机制,包括认证、鉴权和准入控制,以确保集群的稳定性和数据的安全。

hy199707的博客 1641

在 Kubernetes 中部署和管理应用程序:完整指南

本文详细介绍了在Kubernetes(K8s)中部署和管理应用程序的全流程指南。主要内容包括:应用容器化(Dockerfile编写与镜像构建)、基础部署(Deployment、ConfigMap/Secret配置、Service/Ingress服务暴露)、应用管理(扩缩容、滚动更新与回滚)、数据持久化(PV/PVC与StatefulSet)以及监控运维(日志管理、容器调试和指标监控)。

爱片闲串,爱钓鱼,爱中医,爱分享 1081

同是容器管理系统,Kubernetes为什么那么火?

Kubernetes允许用户随处部署云原生应用程序,并以其偏好的方式对加以管理。 正如大多数现代软件开发人员通过实践所证明,容器技术确实能够为用户在物理及虚拟基础设施之上运行云原生应用程序提供更为理想的灵活性。容器技术能够将多层服务打包为一款应用程序,并确保其能够在不同计算环境之间往来移植,从而实现开发/测试,及生产性使用。 利用容器技术,用户能够...

weixin_34194379的博客 158

云原生项目二

本项目基于MySQL8.0与开源大模型API,构建电商订单库智能查询与性能调优系统,实现自然语言转SQL、自动执行、执行计划分析及索引优化,无需专业SQL能力。在openEuler环境下完成网络配置、YUM源设置、时间同步、防火墙关闭及Python3.11编译安装,部署MySQL8.0.45并接入阿里云大模型API,最终通过Streamlit实现可视化交互,完成从环境搭建到AI智能运维的全流程落地。

zfm242397396的博客 202
上一篇: 云原生 kubenetes pod管理
下一篇: 云原生 kubernetes 中的service
UseLessQQ
博客等级 码龄3年 73粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值