Kubernetes入门学习(上)

news2024/11/18 22:34:05

文章目录

  • Kubernetes入门学习(上)
    • 介绍
    • 云原生
  • Kubernetes架构
    • 基础概念
    • Kubernetes架构
      • 控制平面组件
      • Node组件
    • 组件关系
  • 安装Kubernetes
  • 基本对象和操作
    • Pod(容器集)
    • Deployment(部署)与ReplicaSet(副本集)
    • Service(服务)
    • namespace(命名空间)
    • 声明式对象配置
    • 容器与镜像
    • 金丝雀发布

Kubernetes入门学习(上)

介绍

  1. 名称简介

    Kubernetes 是一个开源的容器编排引擎和容器集群管理工具,用来对容器化应用进行自动化部署、 扩缩和管理。

    Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有8个字符。 Google 在 2014 年开源了 Kubernetes 项目。

  2. 优势
    Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。它之所以能够迅速流行起来,是因为它的许多功能高度契合互联网大厂的部署和运维需求。

  3. 功能

    • 服务发现和负载均衡
    • 存储编排
    • 自动部署和回滚
    • 自动完成装箱计算
    • 自我修复
    • 密钥与配置管理

云原生

  1. 定义
    • 通俗理解:原生应用是采用特定操作系统的语言针对该操作系统开发的应用,而在设计和开发应用时,让他们能够运行在云基础设施(比如Kubernetes)上,从而使应用具备可弹性扩展的能力,我们称之为云原生应用。简而言之:云原生就是以容器技术为载体、基于微服务架构思想的一套技术体系和方法论
    • 官方定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

Kubernetes 是 CNCF 托管的第一个开源项目。因此现在提到云原生,往往我们都把它与kubernetes联系起来。

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。

Kubernetes架构

基础概念

  • 节点(Node):Kubernetes中工作的机器叫做节点,会运行容器化应用程序,运行实际的应用和工作负载。
  • Pod:Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod表示你的集群上—组正在运行的容器。这些容器共享存储、网络、以及怎样运行这些容器的声明。
  • 集群:Kubernetes集群至少包含一个控制平面(control plane),以及一个或多个工作节点(worker node)。
  • 控制平面**(Control Plane) 😗* 控制平面负责管理工作节点和维护集群状态。所有任务分配都来自于控制平面。

Kubernetes架构

一个Kubernetes集群至少包含一个控制平面组件(control plane),以及一个或多个工作节点组件(worker node)。

控制平面组件

控制平面组件会为集群做出全局决策,比如资源的调度、检测和响应集群事件。

在这里插入图片描述

  1. kube-apiserver

    如果需要与Kubernetes 集群进行交互,就要通过 API

    apiserver是 Kubernetes 控制平面的前端,用于处理内部和外部请求。

  2. kube-scheduler

    负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。集群状况是否良好?如果需要创建新的容器,要将它们放在哪里?这些是调度程序需要关注的问题。scheduler调度程序会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。

  3. etcd

    一致且高可用的键值存储,用于存储配置数据和集群状态信息, 用作 Kubernetes 所有集群数据的后台数据库。

  4. kube-controller-manager

    控制器负责实际运行集群,controller-manager控制器管理器则是将多个控制器功能合而为一,降低了程序的复杂性。

    controller-manager包含了这些控制器:

    • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
    • 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
    • 端点控制器(Endpoints Controller):填充端点(Endpoints)对象(即加入 Service 与 Pod)
    • 服务帐户和令牌控制器(Service Account & Token Controllers):为新的命名空间创建默认帐户和 API 访问令牌
  5. cloud-controller-manager

    控制平面还包含一个可选组件cloud-controller-manager

    云控制器管理器(Cloud Controller Manager)允许你将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。

Node组件

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。

在这里插入图片描述

  1. kubelet

    kubelet 会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。
    当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。

  2. kube-proxy

    kube-proxy 是集群中每个节点(node)上运行的网络代理,是实现 Kubernetes 服务(Service) 概念的一部分。
    kube-proxy 维护节点网络规则和转发流量,实现从集群内部或外部的网络与 Pod 进行网络通信。

  3. 容器运行时(Container Runtime)

    这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。负责运行容器的软件。Kubernetes 支持许多容器运行环境,例如 containerd、docker或者其他实现了 Kubernetes CRI (容器运行环境接口)的容器。

组件关系

在这里插入图片描述

安装Kubernetes

参考这篇即可K8s安装部署–超级详细(无坑,v1.23)_虚拟机部署k8s_我不当正经人了z的博客-CSDN博客

容器镜像加速详见阿里云镜像加速

个人觉得这教程更好https://blog.csdn.net/IOT_AI/article/details/131975562

基本对象和操作

Pod(容器集)

  1. 概述

    Pod 是包含一个或多个容器的容器组,是 Kubernetes 中创建和管理的最小对象。

    Pod 有以下特点:

    • Pod是kubernetes中最小的调度单位(原子单元),Kubernetes直接管理Pod而不是容器。

    • 同一个Pod中的容器总是会被自动安排到集群中的同一节点(物理机或虚拟机)上,并且一起调度

    • Pod可以理解为运行特定应用的“逻辑主机”,这些容器共享存储、网络和配置声明(如资源限制)。

    • 每个 Pod 有唯一的 IP 地址。 IP地址分配给Pod,在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,Pod 内的容器可以使用localhost互相通信。

  2. 举例

    一个Pod中你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 “边车 (sidercar)” 容器负责从远端更新这些文件,如下图所示:在这里插入图片描述

  3. 操作Pod

# 拉取并且运行Pod
# --image 指定镜像
kubectl run mynginx --image=nginx
# 查看Pod
kubectl get pod
# 描述
kubectl describe pod mynginx
# 查看Pod的运行日志
kubectl logs mynginx

# 显示pod的IP和运行节点信息
kubectl get pod -owide
# 使用Pod的ip+pod里面运行容器的端口
curl 10.42.1.3

#在容器中执行
# 命令放在--后
kubectl exec mynginx -it -- /bin/bash

# --watch 隔一段时间执行一次命令用于观察
kubectl get pod --watch
# -it 交互模式 
# --rm 退出后删除容器,多用于执行一次性任务或使用客户端
kubectl run mynginx --image=nginx -it --rm -- /bin/bash 

# 删除
kubectl delete pod mynginx
# 强制删除
kubectl delete pod mynginx --force

Deployment(部署)与ReplicaSet(副本集)

  1. 介绍

    1. Deployment:Deployment是对ReplicaSetPod更高级的抽象。

      它使Pod拥有多副本,自愈,扩缩容、滚动升级等能力。一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力

    2. ReplicaSet:ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。通常我们不直接使用ReplicaSet,而是在Deployment中声明。

  2. 操作

    基本操作:创建、查看、删除

    #创建deployment,部署3个运行nginx的Pod
    kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3
    #查看deployment
    kubectl get deploy
    #查看replicaSet
    kubectl get rs 
    #删除deployment
    kubectl delete deploy nginx-deployment
    

    缩放

    • 手动缩放

      #将副本数量调整为5
      kubectl scale deployment/nginx-deployment --replicas=5
      kubectl get deploy
      
    • 自动缩放

      自动缩放通过增加和减少副本的数量,以保持所有 Pod 的平均 CPU 利用率不超过 75%。

      自动伸缩需要声明Pod的资源限制,同时使用 Metrics Server 服务

      #自动缩放
      kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75 
      #查看自动缩放
      kubectl get hpa
      #删除自动缩放
      kubectl delete hpa nginx-deployment
      

    滚动更新

    #查看版本和Pod
    kubectl get deployment/nginx-deployment -owide
    kubectl get pods
    
    #更新容器镜像
    kubectl set image deployment/nginx-deployment nginx=nginx:1.23
    #滚动更新
    kubectl rollout status deployment/nginx-deployment
    #查看过程
    kubectl get rs --watch
    

    版本回滚

    #查看历史版本
    kubectl rollout history deployment/nginx-deployment
    #查看指定版本的信息
    kubectl rollout history deployment/nginx-deployment --revision=2
    #回滚到历史版本
    kubectl rollout undo deployment/nginx-deployment --to-revision=2
    

Service(服务)

  1. 概述

    Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。

    Service为一组 Pod 提供相同的 DNS 名(域名),并且在它们之间进行负载均衡。

    Kubernetes 为 Pod 提供分配了IP 地址,但IP地址可能会发生变化。

    集群内的容器可以通过service名称访问服务,而不需要担心Pod的IP发生变化。

    Kubernetes Service 定义了这样一种抽象:

    逻辑上的一组可以互相替换的 Pod,通常称为微服务。

    Service 对应的 Pod 集合通常是通过选择算符来确定的。

    举个例子,在一个Service中运行了3个nginx的副本。这些副本是可互换的,我们不需要关心它们调用了哪个nginx,也不需要关注 Pod的运行状态,只需要调用这个服务就可以了。

  2. 操作

    # 将已有的部署创建为服务
    # --name:指定服务名
    # --type:指定servicetype
    # --port:指定服务公开端口
    # --target-port:指定容器内部端口
    kubectl expose deployment/nginx-deployment \
    --name=nginx-service --type=ClusterIP --port=80 --target-port=80
    # 查看服务
    kubectl get svc
    
  3. ServiceTypePort解析

    • ServiceType 取值

      • ClusterIP:将服务公开在集群内部。kubernetes会给服务分配一个集群内部的 IP,集群内的所有主机都可以通过这个Cluster-IP访问服务集群内部的Pod可以通过service名称访问服务
      • NodePort:通过每个节点的主机IP 和静态端口(NodePort)暴露服务。 集群的外部主机可以使用节点IP和NodePort访问服务
      • ExternalName:将集群外部的网络引入集群内部。
      • LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。
    • Port

      在这里插入图片描述

namespace(命名空间)

  1. 概述

    **命名空间(Namespace)**是一种资源隔离机制,将同一集群中的资源划分为相互隔离的组

    命名空间可以在多个用户之间划分集群资源(通过资源配额)。

    • 例如我们可以设置开发、测试、生产等多个命名空间。

    同一命名空间内的资源名称要唯一,但跨命名空间时没有这个要求。

    命名空间作用域仅针对带有名字空间的对象,例如 Deployment、Service 等。

    这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等。

  2. Kubernetes 会创建四个初始命名空间:

    • default 默认的命名空间,不可删除,未指定命名空间的对象都会被分配到default中。
    • kube-system Kubernetes 系统对象(控制平面和Node组件)所使用的命名空间。
    • kube-public 自动创建的公共命名空间,所有用户(包括未经过身份验证的用户)都可以读取它。通常我们约定,将整个集群中公用的可见和可读的资源放在这个空间中。
    • kube-node-lease 租约(Lease)对象使用的命名空间。每个节点都有一个关联的 lease 对象,lease 是一种轻量级资源。lease对象通过发送心跳,检测集群中的每个节点是否发生故障。

    使用kubectl get lease -A查看lease对象

  3. 操作

    管理命名空间

    kubectl get pod -A
    #创建命名空间
    kubectl create namespace dev
    #查看命名空间
    kubectl get ns
    
    #在命名空间内运行Pod
    kubectl run nginx --image=nginx --namespace=dev
    kubectl run my-nginx --image=nginx -n=dev
    
    #查看命名空间内的Pod
    kubectl get pods -n=dev
    
    #查看命名空间内所有对象
    kubectl get all
    # 删除命名空间会删除命名空间下的所有内容
    kubectl delete ns dev
    

    切换当前命名空间

    #查看当前上下文
    kubectl config current-context
    
    #将dev设为当前命名空间,后续所有操作都在此命名空间下执行。
    kubectl config set-context $(kubectl config current-context) --namespace=dev
    

声明式对象配置

  1. 云原生的代表技术包括:

    • 容器

    • 服务网格

    • 微服务

    • 不可变基础设施

    • 声明式API

  2. 管理对象:命令行指令 vs 声明式配置

    • 命令行指令

      例如,使用kubectl命令来创建和管理 Kubernetes 对象。

      命令行就好比口头传达,简单、快速、高效。

      但它功能有限,不适合复杂场景,操作不容易追溯,多用于开发和调试。

    • 声明式配置

      kubernetes使用yaml文件来描述 Kubernetes 对象。

      声明式配置就好比申请表,学习难度大且配置麻烦。

      好处是操作留痕,适合操作复杂的对象,多用于生产。

  3. 常用命令缩写

    名称缩写Kind
    namespacesnsNamespace
    nodesnoNode
    podspoPod
    servicessvcService
    deploymentsdeployDeployment
    replicasetsrsReplicaSet
    statefulsetsstsStatefulSet
  4. 配置对象

    在创建的 Kubernetes 对象所对应的 yaml文件中,需要配置的字段如下:

    • apiVersion - Kubernetes API 的版本
    • kind - 对象类别,例如PodDeploymentServiceReplicaSet
    • metadata - 描述对象的元数据,包括一个 name 字符串、UID 、标签和可选的 namespace
    • spec - 对象的配置

    举例:

    # my-pod.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        ports:
        - containerPort: 80
    

    使用yaml文件管理对象

    #创建对象
    kubectl apply -f my-pod.yaml
    #编辑对象,这里有点问题
    kubectl edit nginx
    #删除对象
    kubectl delete -f my-pod.yaml
    
  5. 标签

    标签(Labels) 是附加到对象(比如 Pod)上的键值对,用于补充对象的描述信息。

    标签使用户能够以松散的方式管理对象映射,而无需客户端存储这些映射。

    由于一个集群中可能管理成千上万个容器,我们可以使用标签高效的进行选择和操作容器集合。


    • 键的格式:
      • 前缀(可选)/名称(必须)。
    • 有效名称和值:
      • 必须为 63 个字符或更少(可以为空)
      • 如果不为空,必须以字母数字字符([a-z0-9A-Z])开头和结尾
      • 包含破折号**-**、下划线**_**、点**.**和字母或数字

    label配置模版

    apiVersion: v1
    kind: Pod
    metadata:
      name: label-demo
      labels: #定义Pod标签
        environment: test
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        ports:
        - containerPort: 80
    
    # 查看Pod的同时展示标签
    kubectl get pod --show-labels
    # 根据标签查看Pod
    kubectl get pod -l environment=test,app=nginx
    
  6. 选择器

    标签选择器 可以识别一组对象。标签不支持唯一性。

    标签选择器最常见的用法是为Service选择一组Pod作为后端。


    Service配置模版

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: NodePort
      selector: #与Pod的标签一致
        environment: test
        app: nginx
      ports:
          # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
        - port: 80
          targetPort: 80
          # 可选字段
          # 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)
          nodePort: 30007
    

    目前支持两种类型的选择运算:基于等值的基于集合的

    多个选择条件使用逗号分隔,相当于**And(&&)**运算。

    • 等值选择:键值对

      selector:
        matchLabels: # component=redis && version=7.0
          component: redis
          version: 7.0
      
    • 集合选择

      selector:
        matchExpressions: # tier in (cache, backend) && environment not in (dev, prod)
          - {key: tier, operator: In, values: [cache, backend]}
          - {key: environment, operator: NotIn, values: [dev, prod]}
      

容器与镜像

容器运行时接口(CRI)

Kubelet运行在每个节点(Node)上,用于管理和维护Pod和容器的状态。

容器运行时接口(CRI)是kubelet 和容器运行时之间通信的主要协议。它将 Kubelet 与容器运行时解耦,理论上,实现了CRI接口的容器引擎,都可以作为kubernetes的容器运行时。

Docker没有实现(CRI)接口,Kubernetes使用dockershim来兼容docker。

自V1.24版本起,Dockershim 已从 Kubernetes 项目中移除。


crictl是一个兼容CRI的容器运行时命令,他的用法跟docker命令一样,可以用来检查和调试底层的运行时容器。

crictl pull mysql:5.7-debian
crictl images

在一些局域网环境下,我们没法通过互联网拉取镜像,可以手动的导出、导入镜像。

crictl命令没有导出、导入镜像的功能。

需要使用ctr命令导出、导入镜像,它是containerd的命令行接口。

containerd导出、导入镜像

#导出镜像,kubernetes中所有镜像都在k8s.io命名
ctr -n k8s.io images export mysql.tar docker.io/library/mysql:5.7-debian --platform linux/amd64
#导入镜像
ctr -n k8s.io images import mysql.tar

金丝雀发布

  1. 概述

    金丝雀部署(canary deployment) 也被称为灰度发布

    早期,工人下矿井之前会放入一只金丝雀检测井下是否存在有毒气体。

    采用金丝雀部署,你可以在生产环境的基础设施中小范围的部署新的应用代码。

    一旦应用签署发布,只有少数用户被路由到它,最大限度的降低影响。

    如果没有错误发生,则将新版本逐渐推广到整个基础设施在这里插入图片描述

  2. 部署过程

    在这里插入图片描述

    第一个版本

    发布v1版本的应用,镜像使用nginx:1.22,数量为 3

    • 创建Namespace

    Namespace配置模版

    • 创建Deployment

    Deployment配置模版

    • 创建外部访问的Service

    Service配置模版

    # deploy-v1.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: dev
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-v1
      namespace: dev
      labels:
        app: nginx-deployment-v1
    spec:
      replicas: 3
      selector:
        matchLabels: # 跟template.metadata.labels一致
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.22
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: canary-demo
      namespace: dev
    spec:
      type: NodePort
      selector: # 跟Deployment中的selector一致
        app: nginx
      ports:
          # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
        - port: 80
          targetPort: 80
          # Optional field
          # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
          nodePort: 30008
    

    创建Canary Deployment

    # deploy-cannary.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-canary
      namespace: dev
      labels:
        app: nginx-deployment-canary
    spec:
      replicas: 1
      selector:
        matchLabels: # 跟template.metadata.labels一致
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
            track: canary
        spec:
          containers:
            - name: new-nginx
              image: docker/getting-started
              ports:
                - containerPort: 80
    

    image-20231128224122881

    分配流量

    查看服务kubectl describe svc canary-demo --namespace=dev

    • 调整比例

      待稳定运行一段时间后,扩大试用范围,将部署的v2版本数量调整为3,v1和v2的数量都是3个。

      kubectl scale deployment/nginx-deployment-canary --replicas=3 -n=dev
      

      image-20231128224029908

    • 下线旧版本

      kubectl scale deployment/nginx-deployment-v1 --replicas=0 -n=dev
      

      image-20231128224152534

    清空环境

    kubectl delete all --all -n=dev
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1264194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工业智能】Solutions

各类问题对应的解决方案 工艺参数推荐APC 排产调度智能算法强化学习 运筹优化空压机群控 预测 工艺参数推荐 APC 排产调度 智能算法 遗传算法 强化学习 DDQN 运筹优化 空压机群控 MIP混合整数规划 能耗优化 预测 电池容量预测 时序预测,回归预测 点击剩余…

python基础练习题库实验5

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6058fb4b66994aed838f920f7fe75706.png)题目4代码实验结果题目总结题目1 编写一个程序,使用while循环语句和字符串格式显示以下精确输出。 例如: …

企企通相继出席首届百家新锐企业融通创新交流会与采购数字化创新沙龙,持续深化数字赋能

近期,企企通受邀分别参加了广州、上海业界重磅活动,针对新形势下企业数字化采购升级的新技术与新思路、产业链上下游协同发展等进行探讨,赋能数字化信息技术产业生态发展,并对各方主体如何协作共赢助推企业数字化发展建言献策。 0…

7.Spring源码解析-parseBeanDefinitions解析beanDefinitions

默认解析的命名空间由parseDefaultElement方法去处理&#xff0c;即import, alias, bean, 嵌套的beans四种元素 import 写法示例: <import resource"CTIContext.xml" /> <import resource"customerContext.xml" /> importBeanDefinitionRe…

idea 2023使用技巧(一)

IntelliJ IDEA在业界被公认为最好的java开发工具之一。它能给你良好的开发体验。 idea版本号为2023.2.5。 1 基础操作 1.1索引 idea首次加载项目时&#xff0c;都会创建索引&#xff0c;创建索引的时间跟项目的文件多少成正比。idea的缓存和索引主要是用来加快文件查询&…

Python入职某新员工大量使用Lambda表达式,却被老员工喷是屎山

Python中Lambda表达式是一种简洁而强大的特性,其在开发中的使用优缺点明显,需要根据具体场景权衡取舍。 Lambda表达式的优点之一是它的紧凑语法,适用于一些短小而简单的函数。这种形式使得代码更为精炼,特别在一些函数式编程场景中,Lambda表达式可以提高代码的表达力。此外…

平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖

11 月 10 日&#xff0c;2023 金融街论坛年会同期举办了“第五届成方金融科技论坛——金融科技守正创新论坛”&#xff0c;北京金融产业联盟发布了“扬帆计划——分布式数据库金融应用研究与实践优秀成果”&#xff0c; 平凯星辰提报的实践报告——“国产 HTAP 数据库在金融规模…

CMake构建一个转换为3d tile的开源代码成功

之前CMake构建一个转换为3d tile的开源代码&#xff0c;生成解决方案之后&#xff0c;从VS2019打开&#xff1b; 总是报一个错误&#xff0c;跟 mocs_compilation_Debug.cpp 这个QT相关文件有关&#xff0c;它生成的obj&#xff0c;总是报模块计算机x64和目标计算机x86冲突&am…

ELK+Filebeat

Filebeat概述 1.Filebeat简介 Filebeat是一款轻量级的日志收集工具&#xff0c;可以在非JAVA环境下运行。 因此&#xff0c;Filebeat常被用在非JAVAf的服务器上用于替代Logstash&#xff0c;收集日志信息。实际上&#xff0c;Filebeat几乎可以起到与Logstash相同的作用&…

涵盖多种功能,龙讯旷腾Module第一期:物质结构

Module是什么 在PWmat的基础功能上&#xff0c;我们针对用户的使用需求开发了一些顶层模块&#xff08;Module&#xff09;。这些Module中的一部分是与已有的优秀工具的接口&#xff0c;一部分是以PWmat的计算结果为基础得到实际需要的物理量&#xff0c;一部分则是为特定的计…

小白备战蓝桥杯:Java基础语法

一、注释 IDEA注释快捷键&#xff1a;Ctrl / 单行注释&#xff1a; //注释信息 多行注释&#xff1a; /* 注释信息 */ 二、字面量 常用数据&#xff1a;整数、小数、字符串&#xff08;双引号&#xff09;、字符&#xff08;单引号&#xff09;、布尔值&#xff08;tr…

elk:filebeat也是一个日志收集工具

filebeat是一个轻量级的日志收集工具&#xff0c;所使用的系统资源比logstash部署和启动使用的资源要小的多 filebeat可以允许在非java环境&#xff0c;他可以代替logstash在非java环境上收集日志 filebeat无法实现数据的过滤&#xff0c;一般是结合logstash的数据过滤功能一…

让@RefreshScope注解来帮助我们实现动态刷新

文章目录 前言举例作用参考文章总结 前言 在实际开发当中我们常常会看到有些类上会加一个注解&#xff1a;RefreshScope&#xff0c;有没有对应的小伙伴去思考过这个东西&#xff0c;这个注解有什么作用&#xff1f;为什么要加&#xff1f;下面我们就来看看这个 RefreshScope …

【离散数学】——期末刷题题库(命题逻辑)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Kubernetes基础(九)-标签管理

1 概述 Label&#xff08;标签&#xff09;是Kubernetes系统中一个比较重要的概念&#xff0c;给某个资源对象&#xff08;Node、Pod、Service等&#xff09;定义一个Label&#xff0c;就相当于给它打了一个标签&#xff0c;然后可以通过Label Selector&#xff08;标签选择器…

C陷阱与缺陷——第2章语法陷阱

1. 理解函数声明 硬件将调用首地址为0位置的子例程 (*(void(*)())0)(); 任何C变量的声明都由两部分组成&#xff1a;类型以及一组类似表达式的声明符&#xff0c;声明符从表面看与表达式有些类似&#xff0c;对它求值应该返回一个声明中给定类型的结果。 假定变量fp是一个函…

Blazor Table 实现获取当前选中行的功能

这里需要使用到OnClickRowCallBack事件 后台使用案例

同质化严重,创新突破难,德佑湿厕纸道阻且长

撰稿|行星 来源|贝多财经 随着大众卫生健康意识的日益加深&#xff0c;作为日常生活必需品的纸类产品也逐步向着精细化、多元化的趋势发展&#xff0c;厨房用纸、婴儿用纸等面向各类特定场景和人群的新品类如雨后春笋般涌出&#xff0c;为市场带来了更多的可能性。 在传统卫…

自动化支付宝小程序UI测试,AirtestProject和pytest助你一臂之力!

一&#xff0c;前言 1&#xff0c;背景 因公司业务需要做支付宝小程序的UI自动化测试&#xff0c;于是在网上查找小程序的自动化资料&#xff0c;发现微信小程序是有自己的测试框架的&#xff0c;但几乎找不到支付宝小程序UI自动化测试相关的资料。白piao失败&#xff0c;那就…