四、Kubernetes(K8S):kubectl概述、安装、设置

这篇具有很好参考价值的文章主要介绍了四、Kubernetes(K8S):kubectl概述、安装、设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

概述

安装与配置kubectl

语法

命令

对象

规则结构

命令选项

资源类型

输出选项

格式化输出

自定义列

排序列表对象

常用操作示例


安装kubectl,云原生&监控&可观测性&微服务&SaaS,kubernetes,docker,容器,kubectl

概述

kubectl是Kubernetes命令行工具。它允许用户与Kubernetes集群进行交互,并管理Kubernetes对象,如Pod、Service、Deployment等。kubectl可以在命令行界面中使用,也可以在脚本中使用,并将Kubernetes集群的状态和操作暴露给自动化工具和CI/CD管道。它是Kubernetes的重要组件之一,并被广泛用于管理容器化应用程序。

kubectl是kubernetes声明式 API的客户端,所以 kubectl 的主要功能就是用来操作对象的。理顺 kubectl 的用法,也会对 Kubernetes 的知识体系以及运维工作有很大的帮助。

本文概述涵盖了kubectl语法,对命令操作的描述,并列举常见例子。有关每个命令的详细信息,包括支持的所有flags和子命令,请参考下一篇:Kubernetes(K8S):Kubectl常用命令详解。

 原文:https://blog.csdn.net/zhouruifu2015/article/details/130057847

安装与配置kubectl

使用Kubernetes命令行工具kubectl在Kubernetes上部署和管理应用程序。使用kubectl可以检查集群资源,创建,删除和更新组件。

1. Linux安装

下载最新版本:curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

下载特定版本:curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl

下载到本地后,对kubectl二进制添加可执行权限:chmod +x ./kubectl

将二进制文件移动到PATH中:mv ./kubectl /usr/local/bin/kubectl

2. Windows安装

下载地址:https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/windows/amd64/kubectl.exe

下载完后,将二进制文件添加到PATH中即可。

       如果使用的Docker Desktop APP,kubectl.exe默认位置在:C:\Program Files\Docker\Docker\resources\bin

3. 检查kubectl配置

通过获取集群状态来检查kubectl是否正确配置:kubectl cluster-info

安装kubectl,云原生&监控&可观测性&微服务&SaaS,kubernetes,docker,容器,kubectl

语法

在管理工具界面使用kubectl语法运行如下命令:

kubectl [command] [TYPE] [NAME] [flags]

其中command,TYPE,NAME,和flags:

* command指定要在一个或多个资源执行的操作,例如操作create,get,describe,delete。

* TYPE指定资源类型Resource types。Resource types会区分大小写,也可以指定单数,复数或缩写的形式。

例如,以下命令将输出相同的结果:

$ kubectl get pod pod1

$ kubectl get pods pod1

$ kubectl get po pod1

安装kubectl,云原生&监控&可观测性&微服务&SaaS,kubernetes,docker,容器,kubectl

* NAME指定Resource的Name。Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:$ kubectl get pods。

安装kubectl,云原生&监控&可观测性&微服务&SaaS,kubernetes,docker,容器,kubectl

当在多个资源上执行操作时,可以通过type和name 指定每个资源,或者指定一个或多个file:通过type和name指定的资源。如果它们都是相同的type,就可以对资源进行分组TYPE1 name1 name2 name<#>

例:$ kubectl get pod example-pod1 example-pod2 

*单独指定多种资源type:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>

例:$ kubectl get pod/example-pod1 replicationcontroller/example-rc1 

*使用一个或多个file来指定资源:-f file1 -f file2 -f file<#> 使用YAML而不是JSON,因为YAML往往更容易掌握也对用户更友好,特别是对于配置文件。

例:$ kubectl get pod -f ./pod.yaml 

* flags指定可选flags。例如,可以使用-s或--server flag来指定Kubernetes API Server的地址和端口。

提示:命令行指定的flags将覆盖默认值和任何相应的环境变量。

如果需要更多相关帮助,只需从终端命令窗口运行 kubectl help

命令

使用 kubectl --help 能看到可用的命令列表:

$ kubectl --help

安装kubectl,云原生&amp;监控&amp;可观测性&amp;微服务&amp;SaaS,kubernetes,docker,容器,kubectl

可以看到 kubectl 的命令行帮助非常不错,不仅有功能说明、分类,还有难度标识,甚至有部分的中文说明,kubectl 的每个命令都可以用 --help 查看进一步的帮助说明。

1. 创建

新建命令用于在集群中创建对象,最常用的新建命令应该是 create、run 了,create 能够创建多种对象,而 run 则主要用来创建 Pod。这两个命令都需要在命令行中使用参数的方式来表达待创建的对象的字段内容,其表达力非常粗糙和有限,并且带有明显的命令式 API 风味,在我的日常工作中已经很少用到这样的命令了。

但是这种命令往往有个妙用,--dry-run=client(旧版本中是 --dry-run),可以在不产生实际操作的情况下,测试命令的输出,加上 -o yaml,可以帮助输出 YAML 文档。

2. 查询

get 是最常用的查询指令,用于获取对象列表和基本信息,而 describe 则用于获取一个对象的详细信息。另外一个常用的读取指令就是 Debug 常用的日志查看指令:kubectl logs。

3. 更新

最重要的更新命令可以说是 apply,edit 了,patch、label、annotation、scale 等命令也算常用。

apply 是把 yaml 提交给 Kubernetes 集群的最常用方式,而 edit patch 都是用于修改线上负载的常用手段。label 和 annotation 命令则是用于修改对象元数据的,例如标签和注解。

4. 获取帮助

kubectl 的所有命令、子命令都支持 --help 参数,可以用这种方式获取帮助。

kubectl options 命令能够获取 kubectl 的所有全局参数。

常用参数

-f:很多指令(不只是 apply 和 create)都可以用 -f <文件名> 的方式进行输入,如果使用管道操作,则可以用参数 -f - 接收 STDIN 的输入。

-l:可以使用各种对象上的标签对操作范围进行过滤,例如 -l app=hello

-o:指定输出格式,这个参数相对复杂,最常用的是 yaml 或者 json 用于输出机器报文,还可以用 JSON Path 或者 Go Template 对结果进行处理。

对象

对象通常是类型+名称的一个组合,可以用 kubectl 获得当前集群支持的对象类型:

安装kubectl,云原生&amp;监控&amp;可观测性&amp;微服务&amp;SaaS,kubernetes,docker,容器,kubectl

如上图,输出内容包含几个列:名称、简称、API 群组、是否归属命名空间以及对象的 Kind 属性。例如常用的 Deployment:

  1. NAME-名称:Deployment
  2. SHORTNAMES-简称:Deploy
  3. APIVERSION-API 群组:apps
  4. NAMESPACED归属命名空间:是
  5. KIND:Deployment

使用命令 kubectl get deploy,就能获得当前命名空间中的 Deployment 对象列表,如果在尾巴上加入 Deployment 的名称,就能得到符合名称要求的 Deployment 对象。

安装kubectl,云原生&amp;监控&amp;可观测性&amp;微服务&amp;SaaS,kubernetes,docker,容器,kubectl

规则结构

前面提到的 -f 参数,或者是 get -o yaml,都要用到具体的对象数据结构,这个结构到底是哪里规定的呢?基本结构可以分为三个部分,以一个 Namespace 为例:

apiVersion: v1
kind: Namespace
metadata:
  name: default
spec:
  finalizers:
  - kubernetes

一般会分为四个基础字段:apiVersion、kind、metadata、status 以及 spec。

  1. apiVersion:格式为 <apiGroup>/<apiVersion>,一个对象的 API Group,可以用前文提到的 api-resources 命令查到,而版本则可以通过 kubectl api-versions 查询得到。
  2. kind:对应 api-resources 命令输出的字段。
  3. metadata:元数据,其中包括标签、注解、名称等字段,如果对象是属于命名空间的,也会把命名空间写在这里。
  4. status:这个字段的内容通常是由 Kubenretes 自动填写的。经常会被省略掉。
  5. spec:具体的对象内容,可以由几个途径获取其定义结构
    1. 部分资源可以使用 kubectl explain <对象类别> 获得解释
    2. 如果该资源在集群中有对象存在,可以使用 kubectl get <对象类别> <对象名称> -o yaml 的方式获得原文。
    3. 如果前两种方法都没有,就需要去查看 Kubernetes 或者第三方的 API Reference 了。

命令选项

下表包括了所有kubectl操作简短描述和通用语法:

Operation

Syntax

Description

annotate

kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]

为一个或多个资源添加注释

api-versions

kubectl api-versions [flags]

列出支持的API版本。

apply

kubectl apply -f FILENAME [flags]

对文件或stdin的资源进行配置更改。

attach

kubectl attach POD -c CONTAINER [-i] [-t] [flags]

连接到一个运行的容器,既可以查看output stream,也可以与容器(stdin)进行交互。

autoscale

kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]

自动扩容/缩容由replication controller管理的一组pod

cluster-info

kubectl cluster-info [flags]

显示有关集群中masterservices的终端信息。

config

kubectl config SUBCOMMAND [flags]

修改kubeconfig文件。有关详细信息,请参阅各个子命令。

create

kubectl create -f FILENAME [flags]

filestdin创建一个或多个资源。

delete

kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]

filestdin或指定label 选择器,namesresource选择器或resources中删除resources

describe

kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]

显示一个或多个resources的详细状态。

edit

kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]

使用默认编辑器编辑和更新服务器上一个或多个定义的资源。

exec

kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]

pod中的容器执行命令。

explain

kubectl explain [--include-extended-apis=true] [--recursive=false] [flags]

获取各种资源的文档。例如podnodeservices

expose

kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags]

 replication controllerservicepod作为一个新的Kubernetes service显示。

get

kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]

列出一个或多个资源。

label

kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]

添加或更新一个或多个资源的flags

logs

kubectl logs POD [-c CONTAINER] [--follow] [flags]

pod中打印容器的日志。

patch

kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]

使用strategic merge 补丁程序更新资源的一个或多个字段。

port-forward

kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]

将一个或多个本地端口转发到pod

proxy

kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]

Kubernetes API服务器运行代理。

replace

kubectl replace -f FILENAME

filestdin替换资源。

rolling-update

kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]

通过逐步替换指定的replication controller及其pod来执行滚动更新。

run

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]

在集群上运行指定的镜像。

scale

kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]

更新指定replication controller的大小。

stop

kubectl stop

已弃用:请参阅kubectl delete

version

kubectl version [--client] [flags]

显示客户端和服务器上运行的Kubernetes版本。

资源类型

下表列出了所有支持的资源类型及其缩写:

Resource type

Abbreviated alias

apiservices

certificatesigningrequests

csr

clusters

clusterrolebindings

clusterroles

componentstatuses

cs

configmaps

cm

controllerrevisions

cronjobs

customresourcedefinition

crd

daemonsets

ds

deployments

deploy

endpoints

ep

events

ev

horizontalpodautoscalers

hpa

ingresses

ing

jobs

limitranges

limits

namespaces

ns

networkpolicies

netpol

nodes

no

persistentvolumeclaims

pvc

persistentvolumes

pv

poddisruptionbudget

pdb

podpreset

pods

po

podsecuritypolicies

psp

podtemplates

replicasets

rs

replicationcontrollers

rc

resourcequotas

quota

rolebindings

roles

secrets

serviceaccounts

sa

services

svc

statefulsets

storageclasses

输出选项

使用以下部分来了解如何格式化或对某些命令的输出进行排序。关于哪些命令支持什么输出选项,请查阅kubectl参考文档。

格式化输出

所有kubectl命令输出的默认格式是可读的纯文本格式。要以特定的格式向终端窗口输出详细信息,可以将-o或-output flags 添加到支持的kubectl命令中。

语法:

kubectl [command] [TYPE] [NAME] -o=<output_format>

根据kubectl操作,支持以下输出格式:

输出格式

描述

-o=custom-columns=<spec>

使用逗号分隔的custom columns列表打印一个表。

-o=custom-columns-file=<filename>

使用文件中的custom columns模板打印表<filename>

-o=json

输出JSON格式的API对象。

-o=jsonpath=<template>

打印在jsonpath表达式中定义的字段。

-o=jsonpath-file=<filename>

打印由 file中的jsonpath表达式定义的字段<filename>

-o=name

仅打印资源名称,而不打印其他内容。

-o=wide

以纯文本格式输出任何附加信息。对于pod,包括node名称。

-o=yaml

输出YAML格式的API对象。

例如:

在此示例中,以下命令将单个pod的详细信息作为YAML格式化对象输出:

kubectl get pod web-pod-13je7 -o=yaml

自定义列

要定义custom columns并仅将所需的详细信息输出,可以使用该custom-columns选项,选择Inline定义custom columns或使用模板文件定义:-o=custom-columns=<spec>或-o=custom-columns-file=<filename>。

例如

Inline方式:

kubectl get pods <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion

模板文件方式:

kubectl get pods <pod-name> -o=custom-columns-file=template.txt

其中,template.txt文件包含:

NAME                    RSRC

metadata.name           metadata.resourceVersion

任何一个命令运行的结果将是:

NAME           RSRC

submit-queue   610995

排序列表对象

要将对象输出到终端窗口中的排序列表,可以将--sort-by标志添加到kubectl支持的命令中,通过使用--sort-by标志指定任何数字或字符串字段来对对象进行排序,要指定字段,请使用jsonpath表达式。参考JSONPATH的具体介绍和详细使用文章。

命令:

kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>

例如

要打印按名称排序的pod列表,请运行:

kubectl get pods --sort-by=.metadata.name

常用操作示例

kubectl create - 从file或stdin中创建资源。

// Create a service using the definition in example-service.yaml.

kubectl create -f example-service.yaml

// Create a replication controller using the definition in example-controller.yaml.

kubectl create -f example-controller.yaml

// Create the objects that are defined in any .yaml, .yml, or .json file within the <directory> directory.

kubectl create -f <directory>

kubectl get 列出一个或多个资源。

// List all pods in plain-text output format.

kubectl get pods

// List all pods in plain-text output format and includes additional information (such as node name).

kubectl get pods -o wide

// List the replication controller with the specified name in plain-text output format. Tip: You can shorten and replace the 'replicationcontroller' resource type with the alias 'rc'.

kubectl get replicationcontroller <rc-name>

// List all replication controllers and services together in plain-text output format.

kubectl get rc,services

kubectl describe - 显示一个或多个资源的详细状态。

// Display the details of the node with name <node-name>.

kubectl describe nodes <node-name>

// Display the details of the pod with name <pod-name>.

kubectl describe pods/<pod-name>

// Display the details of all the pods that are managed by the replication controller named <rc-name>.

// Remember: Any pods that are created by the replication controller get prefixed with the name of the replication controller.

kubectl describe pods <rc-name>

kubectl delete - 从file、stdin或指定label选择器,names,resource选择器或resources中删除resources资源。

// Delete a pod using the type and name specified in the pod.yaml file.

kubectl delete -f pod.yaml

// Delete all the pods and services that have the label name=<label-name>.

kubectl delete pods,services -l name=<label-name>

// Delete all pods.

kubectl delete pods --all

kubectl exec - 对pod中的容器执行命令。

// Get output from running 'date' from pod <pod-name>. By default, output is from the first container.

kubectl exec <pod-name> date

// Get output from running 'date' in container <container-name> of pod <pod-name>.

kubectl exec <pod-name> -c <container-name> date

// Get an interactive TTY and run /bin/bash from pod <pod-name>. By default, output is from the first container.

kubectl exec -ti <pod-name> /bin/bash

kubectl logs - 打印pod中的容器的日志。

// Return a snapshot of the logs from pod <pod-name>.

kubectl logs <pod-name>

// Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.

kubectl logs -f <pod-name>

参考阅读:

原文:https://blog.csdn.net/zhouruifu2015/article/details/130057847

五、Kubernetes(K8S):Kubectl常用命令详解_kubelet命令_SteveRocket的博客-CSDN博客


微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q文章来源地址https://www.toymoban.com/news/detail-659987.html

到了这里,关于四、Kubernetes(K8S):kubectl概述、安装、设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生】K8s管理工具--Kubectl(一)

    1、陈述式管理方式 kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 kubectl 是官方的 CLI 命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 kubectl 的

    2024年02月05日
    浏览(41)
  • 【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

    目录 EFK安装部署 一、环境准备(所有主机) 1、主机初始化配置 2、配置主机名并绑定hosts,不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、配置阿里云yum源 3、安装kubelet kubeadm kubectl 4、配置init-config.yaml init-config.yaml配置 5、安装

    2024年02月12日
    浏览(39)
  • Kubernetes技术--k8s核心技术kubectl命令行工具

    (1).概述        kubectl是Kubernetes集群的 命令行工具 , 通过 kubectl 能够对集群本身进行管理 ,并能够在集群上进行容器化应用的安装部署。 (2).语法    Kubectl [command] [type] [name] [flags]   语法参数说明:   command: 指定要对资源执行的操作 ,例如 create、get、describe 和 delete   

    2024年02月10日
    浏览(42)
  • 【云原生】k8s中kubectl陈述式资源管理

    陈述式资源管理方法 --主要依赖命令行工具kubectl进行管理 优点 可以满足90%以上的使用场景 对资源的增、删、查操作比较容易 缺点 命令冗长,复杂,难以记忆 特定场景下,无法实现管理需求 对资源的修改麻烦,需要patch来使用json串更改。 声明式资源管理方法 主要依赖统一

    2024年02月12日
    浏览(60)
  • 使用kubeadm安装和设置Kubernetes(k8s)

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: 使用kubeadm方式搭建K8s集群主要分为以下几步 准备三台虚拟机,同时安装操作系统CentOS 7.x 对三个安装之后的操作系统进行初始化操作 在三个节点安装 dock

    2024年02月12日
    浏览(43)
  • 云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)

    前面利用kubekey部署了一个简单的非高可用,etcd单实例的kubernetes集群,经过研究,发现部署过程可以简化,省去了一部分下载过程(主要是下载kubernetes组件的过程)只是kubernetes版本会固定在1.22.16版本,etcd集群可以部署成生产用的外部集群,并且apiserver等等组件也是高可用,

    2024年02月15日
    浏览(50)
  • 【云原生-K8s】Kubernetes安全组件CIS基准kube-beach安装及使用

    为了保证集群以及容器应用的安全,Kubernetes 提供了多种安全机制,限制容器的行为,减少容器和集群的攻击面,保证整个系统的安全性。 互联网安全中心(CIS,Center for Internet Security),是一个非盈利组织,致力为互联网提供免费的安全防御解决方案 官网 :https://www.cisecu

    2024年02月06日
    浏览(76)
  • 云原生Kubernetes: Ubuntu 安装 K8S 1.23版本(单Master架构) 及故障恢复

    目录 一、实验 1.环境 2.安装 Ubuntu 3.连接Ubuntu 4.master节点安装docker 5.node节点安装docker 6.master节点安装K8S 7.添加K8S工作节点 8.安装网络插件calico 9.故障 10.故障恢复 11.测试k8s网络和coredns 二、问题 1.Ubuntu如何修改镜像源 2.Ubuntu和Windows之间如何实现复制粘贴 3.Ubuntu如何开启openssh

    2024年02月21日
    浏览(42)
  • Kubernetes (K8S)概述

    1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 1.1 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极

    2024年02月08日
    浏览(46)
  • k8s:kubectl 命令设置简写&启用自动补全功能

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes(K8s)是一个强大的容器编排平台,而kubectl则是与之交互的命令行工具。尽管Kubernetes提供了强大的功能,但有时候频繁输入长长的kubectl命令可能会降低效率。为了提高工作效率,我们可以通过设置别名来简化kubectl命令。 在本文

    2024年04月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包