您的位置: 首页 > 资讯 > 正文

一篇带你学习Kubernetes Descheduler 使用 天天热消息

2023-04-21 15:38:38 来源:k8s技术圈

从 kube-scheduler 的角度来看,它是通过一系列算法计算出最佳节点运行 Pod,当出现新的 Pod 进行调度时,调度程序会根据其当时对 Kubernetes 集群的资源描述做出最佳调度决定,但是 Kubernetes 集群是非常动态的,由于整个集群范围内的变化,比如一个节点为了维护,我们先执行了驱逐操作,这个节点上的所有 Pod 会被驱逐到其他节点去,但是当我们维护完成后,之前的 Pod 并不会自动回到该节点上来,因为 Pod 一旦被绑定了节点是不会触发重新调度的,由于这些变化,Kubernetes 集群在一段时间内就可能会出现不均衡的状态,所以需要均衡器来重新平衡集群。

当然我们可以去手动做一些集群的平衡,比如手动去删掉某些 Pod,触发重新调度就可以了,但是显然这是一个繁琐的过程,也不是解决问题的方式。为了解决实际运行中集群资源无法充分利用或浪费的问题,可以使用 descheduler 组件对集群的 Pod 进行调度优化,descheduler可以根据一些规则和配置策略来帮助我们重新平衡集群状态,其核心原理是根据其策略配置找到可以被移除的 Pod 并驱逐它们,其本身并不会进行调度被驱逐的 Pod,而是依靠默认的调度器来实现,目前支持的策略有:


(资料图)

RemoveDuplicatesLowNodeUtilizationHighNodeUtilizationRemovePodsViolatingInterPodAntiAffinityRemovePodsViolatingNodeAffinityRemovePodsViolatingNodeTaintsRemovePodsViolatingTopologySpreadConstraintRemovePodsHavingTooManyRestartsPodLifeTimeRemoveFailedPods

这些策略都是可以启用或者禁用的,作为策略的一部分,也可以配置与策略相关的一些参数,默认情况下,所有策略都是启用的。另外,还有一些通用配置,如下:

nodeSelector:限制要处理的节点evictLocalStoragePods: 驱逐使用 LocalStorage 的 PodsignorePvcPods: 是否忽略配置 PVC 的 Pods,默认是 FalsemaxNoOfPodsToEvictPerNode:节点允许的最大驱逐 Pods 数

我们可以通过如下所示的DeschedulerPolicy来配置:

apiVersion: "descheduler/v1alpha2"kind: "DeschedulerPolicy"nodeSelector: "node=node1" # 如果没有设置,所有内容都将被处理,无需进行此设置。maxNoOfPodsToEvictPerNode: 5000 # 如果没有设置,就不需要进行限制。maxNoOfPodsToEvictPerNamespace: 5000profiles:  - name: ProfileName    pluginConfig:    - name: "DefaultEvictor"      args:        evictSystemCriticalPods: true        evictFailedBarePods: true        evictLocalStoragePods: true        nodeFit: true    plugins:      evict:        enabled:          - "DefaultEvictor"      deschedule:        enabled:          - ...      balance:        enabled:          - ...      [...]

安装

descheduler​可以以CronJob​或者Deployment​的形式运行在 k8s 集群内,同样我们可以使用 Helm Chart 来安装descheduler:

➜ helm repo add descheduler https://kubernetes-sigs.github.io/descheduler/

通过 Helm Chart 我们可以配置descheduler​以CronJob​或者Deployment​方式运行,默认情况下descheduler​会以一个critical pod​运行,以避免被自己或者 kubelet 驱逐了,需要确保集群中有system-cluster-critical​这个Priorityclass:

➜ kubectl get priorityclass system-cluster-criticalNAME                      VALUE        GLOBAL-DEFAULT   AGEsystem-cluster-critical   2000000000   false            87d

使用 Helm Chart 安装默认情况下会以CronJob​的形式运行,执行周期为schedule: "*/2 * * * *"​,这样每隔两分钟会执行一次descheduler任务,默认的配置策略如下所示:

apiVersion: v1kind: ConfigMapmetadata:  name: deschedulerdata:  policy.yaml: |    apiVersion: "descheduler/v1alpha1"    kind: "DeschedulerPolicy"    strategies:      LowNodeUtilization:        enabled: true        params:          nodeResourceUtilizationThresholds:            targetThresholds:              cpu: 50              memory: 50              pods: 50            thresholds:              cpu: 20              memory: 20              pods: 20      RemoveDuplicates:        enabled: true      RemovePodsHavingTooManyRestarts:        enabled: true        params:          podsHavingTooManyRestarts:            includingInitContainers: true            podRestartThreshold: 100      RemovePodsViolatingInterPodAntiAffinity:        enabled: true      RemovePodsViolatingNodeAffinity:        enabled: true        params:          nodeAffinityType:          - requiredDuringSchedulingIgnoredDuringExecution      RemovePodsViolatingNodeTaints:        enabled: true      RemovePodsViolatingTopologySpreadConstraint:        enabled: true        params:          includeSoftConstraints: false

通过配置DeschedulerPolicy​的strategies​,可以指定descheduler的执行策略,这些策略都是可以启用或禁用的,下面我们会详细介绍,这里我们使用默认策略即可,使用如下命令直接安装即可:

➜ helm upgrade --install descheduler descheduler/descheduler --set image.repository=cnych/descheduler -n kube-system

部署完成后会创建一个CronJob资源对象来平衡集群状态:

➜ kubectl get cronjob -n kube-systemNAME          SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGEdescheduler   */2 * * * *   False     1        8s              117s➜ kubectl get job -n kube-systemNAME                   COMPLETIONS   DURATION   AGEdescheduler-28032982   1/1           15s        17s➜ kubectl get pods -n kube-system -l job-name=descheduler-28032982NAME                         READY   STATUS      RESTARTS   AGEdescheduler-28032982-vxn24   0/1     Completed   0          31s

正常情况下就会创建一个对应的 Job 来执行descheduler任务,我们可以通过查看日志可以了解做了哪些平衡操作:

➜ kubectl logs -f descheduler-28032982-vxn24 -nkube-systemI0420 08:22:10.019936       1 named_certificates.go:53] "Loaded SNI cert" index=0 certName="self-signed loopback" certDetail="\"apiserver-loopback-client@1681978930\" [serving] validServingFor=[apiserver-loopback-client] issuer=\"apiserver-loopback-client-ca@1681978929\" (2023-04-20 07:22:09 +0000 UTC to 2024-04-19 07:22:09 +0000 UTC (now=2023-04-20 08:22:10.019885292 +0000 UTC))"I0420 08:22:10.020138       1 secure_serving.go:210] Serving securely on [::]:10258I0420 08:22:10.020301       1 tlsconfig.go:240] "Starting DynamicServingCertificateController"I0420 08:22:10.021237       1 policyconfig.go:211] converting Deschedule plugin: %sRemovePodsViolatingInterPodAntiAffinityI0420 08:22:10.021255       1 policyconfig.go:211] converting Deschedule plugin: %sRemovePodsViolatingNodeAffinityI0420 08:22:10.021262       1 policyconfig.go:211] converting Deschedule plugin: %sRemovePodsViolatingNodeTaintsI0420 08:22:10.021269       1 policyconfig.go:202] converting Balance plugin: %sRemovePodsViolatingTopologySpreadConstraintI0420 08:22:10.021280       1 policyconfig.go:202] converting Balance plugin: %sLowNodeUtilizationI0420 08:22:10.021296       1 policyconfig.go:202] converting Balance plugin: %sRemoveDuplicatesI0420 08:22:10.021312       1 policyconfig.go:211] converting Deschedule plugin: %sRemovePodsHavingTooManyRestarts# ......I0420 08:22:11.630980       1 removeduplicates.go:162] "Duplicate found" pod="kruise-system/kruise-controller-manager-7d78fc5c97-pxsqx"I0420 08:22:11.630997       1 removeduplicates.go:103] "Processing node" node="node2"I0420 08:22:11.631052       1 removeduplicates.go:103] "Processing node" node="node3"I0420 08:22:11.631113       1 removeduplicates.go:103] "Processing node" node="master1"I0420 08:22:11.631184       1 removeduplicates.go:194] "Adjusting feasible nodes" owner={namespace:kruise-system kind:ReplicaSet name:kruise-controller-manager-7d78fc5c97 imagesHash:openkruise/kruise-manager:v1.3.0} from=4 to=3I0420 08:22:11.631200       1 removeduplicates.go:203] "Average occurrence per node" node="node1" ownerKey={namespace:kruise-system kind:ReplicaSet name:kruise-controller-manager-7d78fc5c97 imagesHash:openkruise/kruise-manager:v1.3.0} avg=1I0420 08:22:11.647438       1 evictions.go:162] "Evicted pod" pod="kruise-system/kruise-controller-manager-7d78fc5c97-pxsqx" reasnotallow="" strategy="RemoveDuplicates" node="node1"I0420 08:22:11.647494       1 descheduler.go:408] "Number of evicted pods" totalEvicted=1I0420 08:22:11.647583       1 reflector.go:227] Stopping reflector *v1.Namespace (0s) from k8s.io/client-go/informers/factory.go:150I0420 08:22:11.647702       1 reflector.go:227] Stopping reflector *v1.PriorityClass (0s) from k8s.io/client-go/informers/factory.go:150I0420 08:22:11.647761       1 tlsconfig.go:255] "Shutting down DynamicServingCertificateController"I0420 08:22:11.647764       1 reflector.go:227] Stopping reflector *v1.Node (0s) from k8s.io/client-go/informers/factory.go:150I0420 08:22:11.647811       1 secure_serving.go:255] Stopped listening on [::]:10258......

从日志中我们就可以清晰的知道因为什么策略驱逐了哪些 Pods。

PDB

由于使用descheduler​会将 Pod 驱逐进行重调度,但是如果一个服务的所有副本都被驱逐的话,则可能导致该服务不可用。如果服务本身存在单点故障,驱逐的时候肯定就会造成服务不可用了,这种情况我们强烈建议使用反亲和性和多副本来避免单点故障,但是如果服务本身就被打散在多个节点上,这些 Pod 都被驱逐的话,这个时候也会造成服务不可用了,这种情况下我们可以通过配置PDB(PodDisruptionBudget)对象来避免所有副本同时被删除,比如我们可以设置在驱逐的时候某应用最多只有一个副本不可用,则创建如下所示的资源清单即可:

# pdb-demo.yamlapiVersion: policy/v1kind: PodDisruptionBudgetmetadata:  name: pdb-demospec:  maxUnavailable: 1 # 设置最多不可用的副本数量,或者使用 minAvailable,可以使用整数或百分比  selector:    matchLabels: # 匹配Pod标签      app: demo

关于 PDB 的更多详细信息可以查看官方文档:https://kubernetes.io/docs/tasks/run-application/configure-pdb/。

所以如果我们使用descheduler​来重新平衡集群状态,那么我们强烈建议给应用创建一个对应的PodDisruptionBudget对象进行保护。

策略PodLifeTime:驱逐超过指定时间限制的 pod

该策略用于驱逐比maxPodLifeTimeSeconds​更旧的 Pods,可以通过podStatusPhases来配置哪类状态的 Pods 会被驱逐,建议为每个应用程序创建一个 PDB,以确保应用程序的可用性,比如我们可以配置如下所示的策略来驱逐运行超过 7 天的 Pod:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "PodLifeTime":    enabled: true    params:      maxPodLifeTimeSeconds: 604800 # Pods 运行最多7天

RemoveDuplicates

该策略确保只有一个和 Pod 关联的 RS、Deployment 或者 Job 资源对象运行在同一节点上。如果还有更多的 Pod 则将这些重复的 Pod 进行驱逐,以便更好地在集群中分散 Pod。如果某些节点由于某些原因崩溃了,这些节点上的 Pod 漂移到了其他节点,导致多个与 RS 关联的 Pod 在同一个节点上运行,就有可能发生这种情况,一旦出现故障的节点再次准备就绪,就可以启用该策略来驱逐这些重复的 Pod。

配置策略的时候,可以指定参数excludeOwnerKinds用于排除类型,这些类型下的 Pod 不会被驱逐:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "RemoveDuplicates":    enabled: true    params:      removeDuplicates:        excludeOwnerKinds:          - "ReplicaSet"

LowNodeUtilization

该策略主要用于查找未充分利用的节点,并从其他节点驱逐 Pod,以便 kube-scheduler 重新将它们调度到未充分利用的节点上。该策略的参数可以通过字段nodeResourceUtilizationThresholds进行配置。

节点的利用率不足可以通过配置thresholds阈值参数来确定,可以通过 CPU、内存和 Pods 数量的百分比进行配置。如果节点的使用率均低于所有阈值,则认为该节点未充分利用。

此外,还有一个可配置的阈值targetThresholds​,用于计算可能驱逐 Pods 的潜在节点,该参数也可以配置 CPU、内存以及 Pods 数量的百分比进行配置。thresholds​和targetThresholds可以根据你的集群需求进行动态调整,如下所示示例:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "LowNodeUtilization":    enabled: true    params:      nodeResourceUtilizationThresholds:        thresholds:          "cpu": 20          "memory": 20          "pods": 20        targetThresholds:          "cpu": 50          "memory": 50          "pods": 50

需要注意的是:

仅支持以下三种资源类型:cpu、memory、podsthresholds​和targetThresholds必须配置相同的类型参数值的访问是 0-100(百分制)相同的资源类型,thresholds​的配置不能高于targetThresholds的配置

如果未指定任何资源类型,则默认是 100%,以避免节点从未充分利用变为过度利用。和LowNodeUtilization​策略关联的另一个参数是numberOfNodes,只有当未充分利用的节点数大于该配置值的时候,才可以配置该参数来激活该策略,该参数对于大型集群非常有用,其中有一些节点可能会频繁使用或短期使用不足,默认情况下,numberOfNodes 为 0。

RemovePodsViolatingInterPodAntiAffinity

该策略可以确保从节点中删除违反 Pod 反亲和性的 Pod,比如某个节点上有 podA 这个 Pod,并且 podB 和 podC(在同一个节点上运行)具有禁止它们在同一个节点上运行的反亲和性规则,则 podA 将被从该节点上驱逐,以便 podB 和 podC 运行正常运行。当 podB 和 podC 已经运行在节点上后,反亲和性规则被创建就会发送这样的问题。

要禁用该策略,直接配置成 false 即可:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "RemovePodsViolatingInterPodAntiAffinity":    enabled: false

RemovePodsViolatingNodeTaints

该策略可以确保从节点中删除违反NoSchedule​污点的 Pod,比如有一个名为 podA 的 Pod,通过配置容忍key=value:NoSchedule允许被调度到有该污点配置的节点上,如果节点的污点随后被更新或者删除了,则污点将不再被 Pods 的容忍满足,然后将被驱逐:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "RemovePodsViolatingNodeTaints":    enabled: true

RemovePodsViolatingNodeAffinity

该策略确保从节点中删除违反节点亲和性的 Pod。比如名为 podA 的 Pod 被调度到了节点 nodeA,podA 在调度的时候满足了节点亲和性规则requiredDuringSchedulingIgnoredDuringExecution,但是随着时间的推移,节点 nodeA 不再满足该规则了,那么如果另一个满足节点亲和性规则的节点 nodeB 可用,则 podA 将被从节点 nodeA 驱逐,如下所示的策略配置示例:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "RemovePodsViolatingNodeAffinity":    enabled: true    params:      nodeAffinityType:        - "requiredDuringSchedulingIgnoredDuringExecution"

RemovePodsViolatingTopologySpreadConstraint

该策略确保从节点驱逐违反拓扑分布约束的 Pods,具体来说,它试图驱逐将拓扑域平衡到每个约束的​​maxSkew​​内所需的最小 Pod 数,不过该策略需要 k8s 版本高于 1.18 才能使用。

默认情况下,此策略仅处理硬约束,如果将参数​​includeSoftConstraints​​设置为 True,也将支持软约束。

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "RemovePodsViolatingTopologySpreadConstraint":    enabled: true    params:      includeSoftConstraints: false

RemovePodsHavingTooManyRestarts

该策略确保从节点中删除重启次数过多的 Pods,它的参数包括podRestartThreshold​(这是应将 Pod 逐出的重新启动次数),以及包括InitContainers,它确定在计算中是否应考虑初始化容器的重新启动,策略配置如下所示:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "RemovePodsHavingTooManyRestarts":    enabled: true    params:      podsHavingTooManyRestarts:        podRestartThreshold: 100        includingInitContainers: true

Filter Pods

在驱逐 Pods 的时候,有时并不需要所有 Pods 都被驱逐,descheduler提供了两种主要的方式进行过滤:命名空间过滤和优先级过滤。

命名空间过滤

该策略可以配置是包含还是排除某些名称空间。可以使用该策略的有:

PodLifeTimeRemovePodsHavingTooManyRestartsRemovePodsViolatingNodeTaintsRemovePodsViolatingNodeAffinityRemovePodsViolatingInterPodAntiAffinityRemoveDuplicatesRemovePodsViolatingTopologySpreadConstraint

比如只驱逐某些命令空间下的 Pods,则可以使用include参数进行配置,如下所示:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "PodLifeTime":    enabled: true    params:      podLifeTime:        maxPodLifeTimeSeconds: 86400      namespaces:        include:          - "namespace1"          - "namespace2"

又或者要排除掉某些命令空间下的 Pods,则可以使用exclude参数配置,如下所示:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "PodLifeTime":    enabled: true    params:      podLifeTime:        maxPodLifeTimeSeconds: 86400      namespaces:        exclude:          - "namespace1"          - "namespace2"

优先级过滤

所有策略都可以配置优先级阈值,只有在该阈值以下的 Pod 才会被驱逐,我们可以通过设置thresholdPriorityClassName​(将阈值设置为指定优先级类别的值)或thresholdPriority​(直接设置阈值)参数来指定该阈值。默认情况下,该阈值设置为system-cluster-critical这个 PriorityClass 类的值。

比如使用thresholdPriority:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "PodLifeTime":    enabled: true    params:      podLifeTime:        maxPodLifeTimeSeconds: 86400      thresholdPriority: 10000

或者使用thresholdPriorityClassName进行过滤:

apiVersion: "descheduler/v1alpha1"kind: "DeschedulerPolicy"strategies:  "PodLifeTime":    enabled: true    params:      podLifeTime:        maxPodLifeTimeSeconds: 86400      thresholdPriorityClassName: "priorityclass1"

不过需要注意不能同时配置thresholdPriority​和thresholdPriorityClassName,如果指定的优先级类不存在,则 descheduler 不会创建它,并且会引发错误。

注意事项

当使用 descheduler 驱除 Pods 的时候,需要注意以下几点:

关键性 Pod 不会被驱逐,比如priorityClassName​设置为system-cluster-critical​或system-node-critical的 Pod。不属于 RS、Deployment 或 Job 管理的 Pods 不会被驱逐。DaemonSet 创建的 Pods 不会被驱逐。使用LocalStorage​的 Pod 不会被驱逐,除非设置evictLocalStoragePods: true。具有 PVC 的 Pods 不会被驱逐,除非设置ignorePvcPods: true。在LowNodeUtilization​和RemovePodsViolatingInterPodAntiAffinity​策略下,Pods 按优先级从低到高进行驱逐,如果优先级相同,Besteffort​类型的 Pod 要先于Burstable​和Guaranteed类型被驱逐。annotations​中带有descheduler.alpha.kubernetes.io/evict字段的 Pod 都可以被驱逐,该注释用于覆盖阻止驱逐的检查,用户可以选择驱逐哪个 Pods。如果 Pods 驱逐失败,可以设置--v=4​从descheduler日志中查找原因,如果驱逐违反 PDB 约束,则不会驱逐这类 Pods。

关键词:

一篇带你学习Kubernetes Descheduler 使用 天天热消息
从kube-scheduler的角度来看,它是通过一系列算法计算出最佳节点运行Pod,当出现新的Pod进行调度时,调度程
2023-04-21
讷河市:以“三个坚持”为引领 不断擦亮文化文艺品牌_天天简讯
讷河市:以“三个坚持”为引领不断擦亮文化文艺品牌
2023-04-21
【全球速看料】深物业B(200011)4月21日游资资金净买入5.34万元
截至2023年4月21日收盘,深物业B(200011)报收于5 63元,上涨0 36%,换手率0 06%,成交量408 0手,成交额22 97万元。
2023-04-21
奥来德:2022年净利同比降16.93% 拟10转4派10元|实时焦点
4月19日电,奥来德公告,2022年实现营业收入4 59亿元,同比增长13 03%;净利润1 13亿元,同比下降16 9
2023-04-21
怎么选择合适的徒步旅行的地方?徒步旅行路线选择注意事项_最新
适合徒步旅行的地方适合徒步旅行的地方应该是自己熟悉的场地。喜欢旅行的朋友应注意,徒步旅行和探险旅
2023-04-21
霞浦|今天(4月20日)起,11路优化调整 焦点精选
霞浦|今天(4月20日)起,11路优化调整
2023-04-21
世界时讯:金鸿顺(603922.SH)拟对三家子公司实施增资 合计增资1.2亿元
智通财经APP讯,金鸿顺公告,公司拟向全资子公司长沙金鸿顺汽车部件有限公司、沈阳金鸿顺汽车部件有限公司、重庆伟汉汽车部件有限公司实施增资
2022-12-28
观热点:做零食批发!你可以这样搞
兄弟们,这几天一直没有更新内容,主要是因为汤主也了。以前刷抖音都是看别人分享阳了之后的症状。现在终于轮到自己了,不过我的症状比较简单
2022-12-28
全球即时:汇通能源:主营业务包括房屋租赁、物业服务以及房地产开发与销售,公司高管没有增持计划
每经AI快讯,有投资者在投资者互动平台提问:想问一下公司有哪些业务?是属于房地产板块吗?之前一直在零售板块,现在房地产服务板块,最近股
2022-12-28
实时焦点:长城信息多项业务与关联方同场竞标 清理同业竞争承诺或成“空话”
长城信息多项业务与关联方同场竞标清理同业竞争承诺或成“空话”
2022-12-27
天天即时看!日本拟在最西端岛屿部署地对空导弹
12月27日,央视军事微博:据日本时事通信社消息,日本防卫省敲定了在冲绳县与那国岛部署地对空导弹的方针。与那国岛是日本最西端的岛屿,距台
2022-12-27
世界微头条丨中国贸促会:全球经贸摩擦冲突进一步加剧
证券时报网讯,12月27日,中国贸促会发布2022年9月和10月全球经贸摩擦指数。新闻发言人杨帆介绍,9月的全球经贸摩擦指数为183,处于高位,相比
2022-12-27
沧州:8个重大科技专项项目确定 引领经济社会高质量发展
为充分发挥科技在经济社会高质量发展中的引领和支撑作用,沧州市确定8个项目为2021年全市重大科技专项项目。这8个重大科技专项项目分别为:
2022-03-19
  中新网海口1月23日电(王子谦 符宇群)海南省高级人民法院院长陈凤超23日说,2021年海南法院为自贸港建设提供坚强司法保障,全年有效管
2022-01-24
  新华社武汉1月23日电(记者王贤)随着春节假期临近,从广州、深圳等地返回湖北的旅客较多。为此,23日,武汉站、汉口站、襄阳东站、十堰
2022-01-24
  1月22日0—24时,广东省新增本土确诊病例3例和本土无症状感染者1例,均为珠海报告。23日,珠海市疫情防控新闻发布会上,珠海市政府副秘
2022-01-24
青海海西州德令哈市发生3.7级地震
  据中国地震台网正式测定,1月23日11时58分在青海海西州德令哈市发生3 7级地震,震源深度9千米,震中位于北纬38 40度,东经97 35度。
2022-01-24
  北京2022年冬奥会和冬残奥会颁奖花束已于近期完成交付。与传统的鲜切花不同,这些花束全部采用上海市非物质文化遗产“海派绒线编结技艺
2022-01-24
  中新网宿迁1月23日电 (刘林 张华东)核酸检测是当下及时发现潜在感染者、阻断疫情传播的有效方法。23日,记者从宿迁市宿豫区警方获悉
2022-01-24
  记者从天津市人社局获悉,从明天(24日)起,天津2022年度第一期积分落户申报工作正式开始,这是新修订的《天津市居住证管理办法》《天津
2022-01-24
  中新社北京1月23日电 (记者 刘亮)记者23日从中国海关总署获悉,2021年,中国海关组织开展“国门绿盾”专项行动,在寄递、旅客携带物
2022-01-24
  记者从天津市疫情防控指挥部获悉,天津疫情第341—360例阳性感染者基本信息公布。  目前,这20例阳性感染者已转运至市定点医院做进一
2022-01-24
“最美基层民警”武文斌:案子破了最管用
  中新网吕梁1月23日电 题:“最美基层民警”武文斌:案子破了最管用  作者 高瑞峰  同事称他为“拼命三郎”。从警14年,武文斌破
2022-01-24
  据“西安发布”消息,截至2022年1月23日,雁塔区长延堡街道近14天内无新增本地病例和聚集性疫情。根据国务院联防联控机制关于分区分级
2022-01-24
  中新网西宁1月23日电 (记者 孙睿)据青海省地震台网测定,2022年1月23日10点21分(北京时间)在青海省海西州德令哈市(北纬38 44度,东经
2022-01-24
江西南昌:市民赏年画迎新年 书法家挥毫送春联
  (新春见闻)江西南昌:市民赏年画迎新年 书法家挥毫送春联  1月23日,“赏年画过大年”新年画作品联展江西南昌站活动在江西省文化馆
2022-01-24
  中新网成都1月23日电 (祝欢)成都市第十七届人民代表大会第六次会议23日在成都举行,成都市中级人民法院院长郭彦与成都市人民检察院检
2022-01-24
列车临时停车3分钟救旅客
  (新春见闻)列车临时停车3分钟救旅客  中新网广州1月23日电 (郭军 黄伟伟)“车长,车长,4号车厢有位旅客腹涨难忍,身体不舒服”…
2022-01-24
女子背负命案潜逃24年 因涉疫人员核查落网
  中新网湖州1月23日电(施紫楠 徐盛煜 赵学良)1998年7月,犯罪嫌疑人杜某因家庭琐事,用菜刀将自己的弟媳砍伤致死。案发后,她从老家河
2022-01-24
广东“00后”雄狮少年锤炼功夫迎新春
  (新春见闻)广东“00后”雄狮少年锤炼功夫迎新春  中新社广州1月23日电 题:广东“00后”雄狮少年锤炼功夫迎新春  作者 孙秋霞 
2022-01-24
03-19 2022岳阳国际旅游节开幕 特色农产品展销等系列活动目不暇接
2022岳阳国际旅游节开幕 特色农产品展销等系列活动目不暇接
今天,天下洞庭岳阳市君山区第九届良心堡油菜花节暨2022岳阳国际旅游节开幕,菊红、粉红、水红、桃红、紫色、白色等七色组成的4万亩花海在 [详细]
03-19 2022年郴州计划重点推进文旅项目101个 总投资354亿元
2022年郴州计划重点推进文旅项目101个 总投资354亿元
3月16日,我市举行全市文旅项目和城市大提质大融城项目集中开工仪式,市委书记吴巨培宣布项目开工。郴州嘉合欢乐世界、仙福路工地清风徐来 [详细]
03-19 宿州泗县深入推进文旅融合发展 擦亮城市品牌
宿州泗县深入推进文旅融合发展 擦亮城市品牌
近年来,泗县以争创安徽省文化旅游名县为目标,深入推进文旅融合发展,努力擦亮水韵泗州 运河名城城市品牌,全县文化旅游业实现高质量发展 [详细]
03-19 淡季不忘引流 京郊民宿市场有望迎来回暖
淡季不忘引流 京郊民宿市场有望迎来回暖
旅游淡季中的京郊民宿有望成为市场中最先复苏的板块。3月17日,北京商报记者调查发现,虽然正值旅游淡季,且受疫情变化的影响,不过各家民 [详细]
01-24 西安浐灞回应“社区领导怒怼咨询群众”:涉事社区主任已停职
西安浐灞回应“社区领导怒怼咨询群众”:涉事社区主任已停职
  西安浐灞回应“一社区领导在市民咨询离市政策时发生争执”事件 涉事社区主任已停职  西部网讯(记者 刘望)日前,网络上流传一条视频 [详细]
01-24 宁夏:“草根主播”把货卖 “线上赶集”年味浓
宁夏:“草根主播”把货卖 “线上赶集”年味浓
  (新春走基层)宁夏:“草根主播”把货卖 “线上赶集”年味浓  中新网宁夏红寺堡1月23日电 题:宁夏:“草根主播”把货卖 “线上赶 [详细]
01-24 西安:整区解封前24小时内进行不漏一人的全员核酸检测
西安:整区解封前24小时内进行不漏一人的全员核酸检测
  1月23日15时,陕西省政府新闻办公室举行陕西省新冠肺炎疫情防控工作第四十五场新闻发布会。陕西省卫生健康委员会党组成员、省中医药管 [详细]