当前位置: 首页 > news >正文

k8s 常用命令(三)

1查看版本信息kubectl version

[root@master ~]# kubectl version

[root@master ~]# kubectl version

Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T21:04:39Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T20:59:07Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}

[root@master ~]# kubectl

2查看资源对象简写缩写):kubectl api-resources

[root@master ~]# kubectl api-resources

Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T21:04:39Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T20:59:07Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}

3查看集群信息kubectl cluster-info

[root@master ~]# kubectl cluster-info

Kubernetes control plane is running at https://192.168.159.10:6443

CoreDNS is running at https://192.168.159.10:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

4查看帮助信息kubectl --help

[root@master ~]# kubectl –help

kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):

  create        Create a resource from a file or from stdin.

  expose        使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes

Service

  run           在集群中运行一个指定的镜像

  set           为 objects 设置一个指定的特征

Basic Commands (Intermediate):

  explain       查看资源的文档

  get           显示一个或更多 resources

  edit          在服务器上编辑一个资源

  delete        Delete resources by filenames, stdin, resources and names, or by resources and label selector

Deploy Commands:

  rollout       Manage the rollout of a resource

  scale         Set a new size for a Deployment, ReplicaSet or Replication Controller

  autoscale     Auto-scale a Deployment, ReplicaSet, StatefulSet, or ReplicationController

Cluster Management Commands:

  certificate   修改 certificate 资源.

  cluster-info  显示集群信息

  top           显示 Resource (CPU/Memory) 使用.

  cordon        标记 node 为 unschedulable

  uncordon      标记 node 为 schedulable

  drain         Drain node in preparation for maintenance

  taint         更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:

  describe      显示一个指定 resource 或者 group 的 resources 详情

  logs          输出容器在 pod 中的日志

  attach        Attach 到一个运行中的 container

  exec          在一个 container 中执行一个命令

  port-forward  Forward one or more local ports to a pod

  proxy         运行一个 proxy 到 Kubernetes API server

  cp            复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.

  auth          Inspect authorization

  debug         Create debugging sessions for troubleshooting workloads and nodes

Advanced Commands:

  diff          Diff live version against would-be applied version

  apply         通过文件名或标准输入流(stdin)对资源进行配置

  patch         Update field(s) of a resource

  replace       通过 filename 或者 stdin替换一个资源

  wait          Experimental: Wait for a specific condition on one or many resources.

  kustomize     Build a kustomization target from a directory or URL.

[root@master ~]# kubectl api-resourcesNAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KINDbindings                                       v1                                     true         Bindingcomponentstatuses                 cs           v1                                     false        ComponentStatusconfigmaps                        cm           v1                                     true         ConfigMapendpoints                         ep           v1                                     true         Endpointsevents                            ev           v1                                     true         Eventlimitranges                       limits       v1                                     true         LimitRangenamespaces                        ns           v1                                     false        Namespacenodes                             no           v1                                     false        Nodepersistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaimpersistentvolumes                 pv           v1                                     false        PersistentVolumepods                              po           v1                                     true         Podpodtemplates                                   v1                                     true         PodTemplatereplicationcontrollers            rc           v1                                     true         ReplicationControllerresourcequotas                    quota        v1                                     true         ResourceQuotasecrets                                        v1                                     true         Secretserviceaccounts                   sa           v1                                     true         ServiceAccountservices                          svc          v1                                     true         Servicemutatingwebhookconfigurations                  admissionregistration.k8s.io/v1        false        MutatingWebhookConfigurationvalidatingwebhookconfigurations                admissionregistration.k8s.io/v1        false        ValidatingWebhookConfigurationcustomresourcedefinitions         crd,crds     apiextensions.k8s.io/v1                false        CustomResourceDefinitionapiservices                                    apiregistration.k8s.io/v1              false        APIServicecontrollerrevisions                            apps/v1                                true         ControllerRevisiondaemonsets                        ds           apps/v1                                true         DaemonSetdeployments                       deploy       apps/v1                                true         Deploymentreplicasets                       rs           apps/v1                                true         ReplicaSetstatefulsets                      sts          apps/v1                                true         StatefulSettokenreviews                                   authentication.k8s.io/v1               false        TokenReviewlocalsubjectaccessreviews                      authorization.k8s.io/v1                true         LocalSubjectAccessReviewselfsubjectaccessreviews                       authorization.k8s.io/v1                false        SelfSubjectAccessReviewselfsubjectrulesreviews                        authorization.k8s.io/v1                false        SelfSubjectRulesReviewsubjectaccessreviews                           authorization.k8s.io/v1                false        SubjectAccessReviewhorizontalpodautoscalers          hpa          autoscaling/v1                         true         HorizontalPodAutoscalercronjobs                          cj           batch/v1                               true         CronJobjobs                                           batch/v1                               true         Jobcertificatesigningrequests        csr          certificates.k8s.io/v1                 false        CertificateSigningRequestleases                                         coordination.k8s.io/v1                 true         Leaseendpointslices                                 discovery.k8s.io/v1                    true         EndpointSliceevents                            ev           events.k8s.io/v1                       true         Eventingresses                         ing          extensions/v1beta1                     true         Ingressflowschemas                                    flowcontrol.apiserver.k8s.io/v1beta1   false        FlowSchemaprioritylevelconfigurations                    flowcontrol.apiserver.k8s.io/v1beta1   false        PriorityLevelConfigurationingressclasses                                 networking.k8s.io/v1                   false        IngressClassingresses                         ing          networking.k8s.io/v1                   true         Ingressnetworkpolicies                   netpol       networking.k8s.io/v1                   true         NetworkPolicyruntimeclasses                                 node.k8s.io/v1                         false        RuntimeClasspoddisruptionbudgets              pdb          policy/v1                              true         PodDisruptionBudgetpodsecuritypolicies               psp          policy/v1beta1                         false        PodSecurityPolicyclusterrolebindings                            rbac.authorization.k8s.io/v1           false        ClusterRoleBindingclusterroles                                   rbac.authorization.k8s.io/v1           false        ClusterRolerolebindings                                   rbac.authorization.k8s.io/v1           true         RoleBindingroles                                          rbac.authorization.k8s.io/v1           true         Rolepriorityclasses                   pc           scheduling.k8s.io/v1                   false        PriorityClasscsidrivers                                     storage.k8s.io/v1                      false        CSIDrivercsinodes                                       storage.k8s.io/v1                      false        CSINodecsistoragecapacities                           storage.k8s.io/v1beta1                 true         CSIStorageCapacitystorageclasses                    sc           storage.k8s.io/v1                      false        StorageClassvolumeattachments                              storage.k8s.io/v1                      false        VolumeAttachment

Settings Commands:

  label         更新在这个资源上的 labels

  annotate      更新一个资源的注解

  completion    Output shell completion code for the specified shell (bash or zsh)

Other Commands:

  api-resources Print the supported API resources on the server

  api-versions  Print the supported API versions on the server, in the form of "group/version"

  config        修改 kubeconfig 文件

  plugin        Provides utilities for interacting with plugins.

  version       输出 client 和 server 的版本信息

Usage:

  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.

Use "kubectl options" for a list of global command-line options (applies to all commands).

5、node节点日志查看:journalctl -u kubelet -f

k8s中查看核心组件日志怎么看

①、通过kubeadm部署的:kubectl logs -f pod_组件名 -n namespace

                                             或者 journalctl -u kubelet -f

②、二进制部署的:journalctl -u kubelet -f

-- Logs begin at 三 2022-11-02 02:24:50 CST. --

11月 01 19:51:04 master kubelet[13641]: I1101 19:51:04.415651   13641 pod_container_deletor.go:79] "Container not found in pod's containers" containerID="041b38b5bb2ff0161170bea161fd70e9175cc27fdc98877944d899ebe7b90d2f"

11月 01 19:51:06 master kubelet[13641]: I1101 19:51:06.428325   13641 reconciler.go:196] "operationExecutor.UnmountVolume started for volume \"kubeconfig\" (UniqueName: \"kubernetes.io/host-path/771ef2517500c43b40e7df4c76198cac-kubeconfig\") pod \"771ef2517500c43b40e7df4c76198cac\" (UID: \"771ef2517500c43b40e7df4c76198cac\") "

11月 01 19:51:06 master kubelet[13641]: I1101 19:51:06.428370   13641 operation_generator.go:829] UnmountVolume.TearDown succeeded for volume "kubernetes.io/host-path/771ef2517500c43b40e7df4c76198cac-kubeconfig" (OuterVolumeSpecName: "kubeconfig") pod "771ef2517500c43b40e7df4c76198cac" (UID: "771ef2517500c43b40e7df4c76198cac"). InnerVolumeSpecName "kubeconfig". PluginName "kubernetes.io/host-path", VolumeGidValue ""

11月 01 19:51:06 master kubelet[13641]: I1101 19:51:06.529163   13641 reconciler.go:319] "Volume detached for volume \"kubeconfig\" (UniqueName: \"kubernetes.io/host-path/771ef2517500c43b40e7df4c76198cac-kubeconfig\") on node \"master\" DevicePath \"\""

11月 01 19:51:07 master kubelet[13641]: I1101 19:51:07.282148   13641 kubelet_getters.go:300] "Path does not exist" path="/var/lib/kubelet/pods/771ef2517500c43b40e7df4c76198cac/volumes"

11月 01 19:51:10 master kubelet[13641]: I1101 19:51:10.913108   13641 topology_manager.go:187] "Topology Admit Handler"

11月 01 19:51:11 master kubelet[13641]: I1101 19:51:11.079185   13641 reconciler.go:224] "operationExecutor.VerifyControllerAttachedVolume started for volume \"kubeconfig\" (UniqueName: \"kubernetes.io/host-path/5e72c0f5a18f84d50f027106c98ab6b1-kubeconfig\") pod \"kube-scheduler-master\" (UID: \"5e72c0f5a18f84d50f027106c98ab6b1\") "

11月 01 19:51:15 master kubelet[13641]: E1101 19:51:15.849398   13641 cadvisor_stats_provider.go:151] "Unable to fetch pod etc hosts stats" err="failed to get stats failed command 'du' ($ nice -n 19 du -x -s -B 1) on path /var/lib/kubelet/pods/771ef2517500c43b40e7df4c76198cac/etc-hosts with error exit status 1" pod="kube-system/kube-scheduler-master"

11月 01 19:51:25 master kubelet[13641]: E1101 19:51:25.874999   13641 cadvisor_stats_provider.go:151] "Unable to fetch pod etc hosts stats" err="failed to get stats failed command 'du' ($ nice -n 19 du -x -s -B 1) on path /var/lib/kubelet/pods/771ef2517500c43b40e7df4c76198cac/etc-hosts with error exit status 1" pod="kube-system/kube-scheduler-master"

11月 01 19:51:31 master kubelet[13641]: I1101 19:51:31.

6、获取一个或多个资源信息:kubectl get

语法格式:

kubectl get <resource> [-o wide | json| yaml] [-n namespace]

注释:

resource:可以是具体资源名称

-o :指定输出格式

-n :指定名称空间

6.1、查看所有命名空间运行的pod信息: kubectl get pods -A

[root@master ~]# kubectl get pods -A

NAMESPACE      NAME                             READY   STATUS    RESTARTS   AGE

kube-flannel   kube-flannel-ds-7clld            1/1     Running   0          5h35m

kube-flannel   kube-flannel-ds-psgvb            1/1     Running   0          5h35m

kube-flannel   kube-flannel-ds-xxncr            1/1     Running   0          5h35m

kube-system    coredns-6f6b8cc4f6-lbvl5         1/1     Running   0          5h45m

kube-system    coredns-6f6b8cc4f6-m6brz         1/1     Running   0          5h45m

kube-system    etcd-master                      1/1     Running   0          5h45m

kube-system    kube-apiserver-master            1/1     Running   0          5h45m

kube-system    kube-controller-manager-master   1/1     Running   0          5h11m

kube-system    kube-proxy-jwpnz                 1/1     Running   0          5h40m

kube-system    kube-proxy-xqcqm                 1/1     Running   0          5h41m

kube-system    kube-proxy-z6rhl                 1/1     Running   0          5h45m

kube-system    kube-scheduler-master            1/1     Running   0          5h11m

6.2查看所有命名空间运行的pod详细信息 kubectl get pods -A -o wide

[root@master ~]# kubectl get pods -A -o wide

NAMESPACE      NAME                             READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES

kube-flannel   kube-flannel-ds-7clld            1/1     Running   0          5h39m   192.168.159.13   node02   <none>           <none>

kube-flannel   kube-flannel-ds-psgvb            1/1     Running   0          5h39m   192.168.159.11   node01   <none>           <none>

kube-flannel   kube-flannel-ds-xxncr            1/1     Running   0          5h39m   192.168.159.10   master   <none>           <none>

kube-system    coredns-6f6b8cc4f6-lbvl5         1/1     Running   0          5h49m   10.150.2.2       node02   <none>           <none>

kube-system    coredns-6f6b8cc4f6-m6brz         1/1     Running   0          5h49m   10.150.1.2       node01   <none>           <none>

kube-system    etcd-master                      1/1     Running   0          5h49m   192.168.159.10   master   <none>           <none>

kube-system    kube-apiserver-master            1/1     Running   0          5h49m   192.168.159.10   master   <none>           <none>

kube-system    kube-controller-manager-master   1/1     Running   0          5h16m   192.168.159.10   master   <none>           <none>

kube-system    kube-proxy-jwpnz                 1/1     Running   0          5h45m   192.168.159.13   node02   <none>           <none>

kube-system    kube-proxy-xqcqm                 1/1     Running   0          5h45m   192.168.159.11   node01   <none>           <none>

kube-system    kube-proxy-z6rhl                 1/1     Running   0          5h49m   192.168.159.10   master   <none>           <none>

kube-system    kube-scheduler-master            1/1     Running   0          5h15m   192.168.159.10   master   <none>           <none>

 

6.3查看所有资源对象kubectl get all -A

[root@master ~]# kubectl get all -A

NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE

kube-flannel   pod/kube-flannel-ds-7whbw            1/1     Running   0          5h14m

kube-flannel   pod/kube-flannel-ds-nj4vl            1/1     Running   0          5h14m

kube-flannel   pod/kube-flannel-ds-w55x5            1/1     Running   0          5h14m

kube-system    pod/coredns-6f6b8cc4f6-lg6hc         1/1     Running   0          5h20m

kube-system    pod/coredns-6f6b8cc4f6-tdwhx         1/1     Running   0          5h20m

kube-system    pod/etcd-master                      1/1     Running   0          5h20m

kube-system    pod/kube-apiserver-master            1/1     Running   0          5h20m

kube-system    pod/kube-controller-manager-master   1/1     Running   0          5h13m

kube-system    pod/kube-proxy-gv58r                 1/1     Running   0          5h20m

kube-system    pod/kube-proxy-xd4lz                 1/1     Running   0          5h18m

kube-system    pod/kube-proxy-zzs2s                 1/1     Running   0          5h18m

kube-system    pod/kube-scheduler-master            1/1     Running   0          5h12m

NAMESPACE     NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE

default       service/kubernetes      ClusterIP   10.125.0.1     <none>        443/TCP                  5h20m

default       service/nginx-service   NodePort    10.125.18.84   <none>        80:32476/TCP             5h3m

kube-system   service/kube-dns        ClusterIP   10.125.0.10    <none>        53/UDP,53/TCP,9153/TCP   5h20m

NAMESPACE      NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE

kube-flannel   daemonset.apps/kube-flannel-ds   3         3         3       3            3           <none>                   5h14m

kube-system    daemonset.apps/kube-proxy        3         3         3       3            3           kubernetes.io/os=linux   5h20m

NAMESPACE     NAME                      READY   UP-TO-DATE   AVAILABLE   AGE

kube-system   deployment.apps/coredns   2/2     2            2           5h20m

NAMESPACE     NAME                                 DESIRED   CURRENT   READY   AGE

kube-system   replicaset.apps/coredns-6f6b8cc4f6   2         2         2       5h20m

6.4查看node节点上的标签kube get nodes --show-labels 

[root@master ~]# kubectl get nodes --show-labels

NAME     STATUS   ROLES                  AGE     VERSION   LABELS

master   Ready    control-plane,master   5h58m   v1.21.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=

node01   Ready    node                   5h53m   v1.21.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node01,kubernetes.io/os=linux,node-role.kubernetes.io/node=node

node02   Ready    node                   5h53m   v1.21.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node02,kubernetes.io/os=linux,node-role.kubernetes.io/node=node

6.5查看pod节点上的标签kubectl get pods --show-labels -A

[root@master ~]# kubectl get pods --show-labels -A

[root@master ~]# kubectl get pods --show-labels -A

NAMESPACE      NAME                             READY   STATUS    RESTARTS   AGE     LABELS

kube-flannel   kube-flannel-ds-7clld            1/1     Running   0          5h51m   app=flannel,controller-revision-hash=5b775b5b5c,pod-template-generation=1,tier=node

kube-flannel   kube-flannel-ds-psgvb            1/1     Running   0          5h51m   app=flannel,controller-revision-hash=5b775b5b5c,pod-template-generation=1,tier=node

kube-flannel   kube-flannel-ds-xxncr            1/1     Running   0          5h51m   app=flannel,controller-revision-hash=5b775b5b5c,pod-template-generation=1,tier=node

kube-system    coredns-6f6b8cc4f6-lbvl5         1/1     Running   0          6h1m    k8s-app=kube-dns,pod-template-hash=6f6b8cc4f6

kube-system    coredns-6f6b8cc4f6-m6brz         1/1     Running   0          6h1m    k8s-app=kube-dns,pod-template-hash=6f6b8cc4f6

kube-system    etcd-master                      1/1     Running   0          6h1m    component=etcd,tier=control-plane

kube-system    kube-apiserver-master            1/1     Running   0          6h1m    component=kube-apiserver,tier=control-plane

kube-system    kube-controller-manager-master   1/1     Running   0          5h27m   component=kube-controller-manager,tier=control-plane

kube-system    kube-proxy-jwpnz                 1/1     Running   0          5h56m   controller-revision-hash=6b87fcb57c,k8s-app=kube-proxy,pod-template-generation=1

kube-system    kube-proxy-xqcqm                 1/1     Running   0          5h56m   controller-revision-hash=6b87fcb57c,k8s-app=kube-proxy,pod-template-generation=1

kube-system    kube-proxy-z6rhl                 1/1     Running   0          6h1m    controller-revision-hash=6b87fcb57c,k8s-app=kube-proxy,pod-template-generation=1

kube-system    kube-scheduler-master            1/1     Running   0          5h26m   component=kube-scheduler,tier=control-plane

6.6查看节点组件的状态信息kubectl get cs

[root@master ~]# kubectl get cs

Warning: v1 ComponentStatus is deprecated in v1.19+

NAME                 STATUS    MESSAGE             ERROR

scheduler            Healthy   ok                 

controller-manager   Healthy   ok                 

etcd-0               Healthy   {"health":"true"} 

6.7查看命名空间kubectl get namespaces

或者使用缩写:[root@master ~]# kubectl get ns

[root@master ~]# kubectl  get namespace

NAME              STATUS   AGE

default           Active   6h8m

kube-flannel      Active   5h58m

kube-node-lease   Active   6h8m

kube-public       Active   6h8m

kube-system       Active   6h8m

7创建命名空间 :kubectl create ns app

[root@master ~]# kubectl create ns ceshi

namespace/ceshi created

 

8删除命名空间kubectl delete ns ceshi

[root@master ~]# kubectl delete ns ceshi

namespace "ceshi" deleted

9在命名空间kube-public创建无状态控制器deployment来启动pod暴露80端口副本集为3

kube-public命名空间创建一个nginx

[root@master ~]# kubectl create deployment nginx --image=nginx:1.15 --port=80 --replicas=3 -n kube-public

[root@master ~]# kubectl create deployment nginx --image=nginx:1.15 --port=80 --replicas=3 -n kube-public

deployment.apps/nginx created

 

11、暴露发布pod中的服务供用户访问

[root@master ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort -n kube-public

 

访问:

 

 

http://www.lryc.cn/news/138582.html

相关文章:

  • API 网关基础
  • 【Linux】权限问题
  • 线性代数的学习和整理10:各种特殊类型的矩阵(草稿-----未完成 建设ing)
  • Go 自学:变量、函数、结构体、接口、错误处理
  • pyqt Pyton VTK 使用 滑块 改变 VTK Actor 颜色
  • 春秋云镜 CVE-2019-16113
  • 【JavaEE基础学习打卡06】JDBC之进阶学习PreparedStatement
  • Postgresql12基于时间点恢复
  • 【MySQL系列】Select语句单表查询详解(二)ORDERBY排序
  • C++学习第十九天----简单文件输入/输出和今日工作问题
  • 基于风险的漏洞管理
  • 命令行——Git基本操作总结
  • 验证评估守护关基安全 赛宁数字孪生靶场创新实践
  • R语言09-R语言中的字符函数和分布相关函数
  • pnpm无法加载文件 (解决方法 )
  • 做一个蛋糕店小程序需要哪些步骤?
  • Docker的革命:容器技术如何重塑软件部署之路
  • 【ARM-Linux】项目,语音刷抖音项目
  • Linux驱动开发:技术、实践与Linux的历史
  • # Go学习-Day5
  • 创建型(二) - 单例模式
  • 基于swing的图书借阅管理系统java jsp书馆书籍信息mysql源代码
  • Android相机-HAL-Rockchip-hal3
  • 基于Java+SpringBoot+vue前后端分离华强北商城二手手机管理系统设计实现
  • 【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)
  • HTML 网页中 自定义图像单击或鼠标悬停时放大
  • 从程序员进阶到架构师再到CTO,该如何破解焦虑?
  • 批量将excel文件转csv文件
  • 实现 CSS 文字渐变色效果
  • C++信息学奥赛1148:连续出现的字符