kubernetes namespace pod label deployment介绍与命令

news2025/1/20 14:55:14

kubernetes namespace pod label deployment 介绍与命令

1: namespace

Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
kubernetes在集群启动之后,会默认创建几个namespace



[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   11d
kube-flannel      Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d

下面来看namespace资源的具体操作:
查看所有的namespace

[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   11d
kube-flannel      Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d



查看指定的ns


[root@master ~]# kubectl get ns default
NAME      STATUS   AGE
default   Active   11d

指定输出格式 命令:kubectl get ns ns名称 -o 格式参数# kubernetes支持的格式有很多,比较常见的是wide、json、yaml


[root@master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2022-11-17T06:56:00Z"
  labels:
    kubernetes.io/metadata.name: default
  name: default
  resourceVersion: "193"
  uid: 0e917826-5598-4933-8942-20a5d1574bc2
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

查看ns详情 命令:kubectl describe ns ns名称

[root@master ~]# kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.


ResourceQuota 针对namespace做的资源限制# LimitRange针对namespace中的每个组件做的资源限制
创建命名空间

[root@master ~]# kubectl create ns lh
namespace/lh created
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   11d
kube-flannel      Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d
lh                Active   9s


删除namespace


[root@master ~]# kubectl delete ns lh
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   11d
kube-flannel      Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d

配置方式
首先准备一个yaml文件:ns-dev.yaml


apiVersion: v1
kind: Namespace
metadata:
  name: dev

创建


[root@master ~]# kubectl create -f ns-dev.yaml
namespace/dev created
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   11d
dev               Active   10s
kube-flannel      Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d

删除


[root@master ~]# kubectl delete -f ns-dev.yaml
namespace "dev" deleted
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   11d
kube-flannel      Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d

2: Pod

Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。

在这里插入图片描述

kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:



[root@master ~]# kubectl get pod -n kube-system
NAME                                         READY   STATUS    RESTARTS      AGE
coredns-c676cc86f-qxmh5                      1/1     Running   1 (21m ago)   11d
coredns-c676cc86f-w2hwh                      1/1     Running   1 (21m ago)   11d
etcd-master.example.com                      1/1     Running   1 (21m ago)   11d
kube-apiserver-master.example.com            1/1     Running   1 (21m ago)   11d
kube-controller-manager-master.example.com   1/1     Running   1 (21m ago)   11d
kube-proxy-4r7jl                             1/1     Running   1 (21m ago)   11d
kube-proxy-l7bkp                             1/1     Running   1 (21m ago)   11d
kube-proxy-q6xtl                             1/1     Running   1 (21m ago)   11d
kube-scheduler-master.example.com            1/1     Running   1 (21m ago)   11d

创建

[root@master ~]# kubectl  create deployment nginx --image nginx --port 80 -n lh
deployment.apps/nginx created
[root@master ~]# kubectl run nginx1 --image=nginx --port=81 --namespace lh
pod/nginx created
image:指定镜像
port: 指定端口
namespace:指定命名空间

查看pod基本信息

[root@master ~]# kubectl get pod -n lh
NAME                    READY   STATUS    RESTARTS   AGE
nginx-ff6774dc6-5dw9c   1/1     Running   0          43s
nginx1                  1/1     Running   0          4m1s



查看pod详细信息



[root@master ~]# kubectl describe pod nginx -n lh
Name:             nginx
Namespace:        lh
Priority:         0
Service Account:  default
Node:             node2.example.com/192.168.226.30
Start Time:       Mon, 28 Nov 2022 17:26:54 +0800
Labels:           run=nginx
Annotations:      <none>
Status:           Running
IP:               10.244.2.2
IPs:
  IP:  10.244.2.2
Containers:
  nginx:
    Container ID:   containerd://15db12697df3ae48fce13371cc511101547685593f5f2e06a29034db37f52819
    Image:          nginx
    Image ID:       docker.io/library/nginx@sha256:e209ac2f37c70c1e0e9873a5f7231e91dcd83fdf1178d8ed36c2ec09974210ba
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Mon, 28 Nov 2022 17:27:08 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-424fz (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-424fz:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m29s  default-scheduler  Successfully assigned lh/nginx to node2.example.com
  Normal  Pulling    2m29s  kubelet            Pulling image "nginx"
  Normal  Pulled     2m16s  kubelet            Successfully pulled image "nginx" in 13.388009229s
  Normal  Created    2m16s  kubelet            Created container nginx
  Normal  Started    2m16s  kubelet            Started container nginx

访问Pod
获取podip

[root@master ~]# kubectl get pods -n lh -o wide
NAME                    READY   STATUS    RESTARTS      AGE     IP           NODE                NOMINATED NODE   READINESS GATES
nginx-ff6774dc6-5dw9c   1/1     Running   1 (20s ago)   73s     10.244.1.4   node1.example.com   <none>           <none>
nginx1                  1/1     Running   0             4m31s   10.244.2.4   node2.example.com   <none>           <none>

访问


[root@master ~]# curl http://10.244.2.4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

删除指定Pod


[root@master ~]# kubectl delete pod nginx1 -n lh
pod "nginx1" deleted
[root@master ~]# kubectl delete pod nginx-ff6774dc6-5dw9c -n lh
pod "nginx-ff6774dc6-5dw9c" deleted


查看可以发现此时create创建的pod还存在着,但是名字发生了改变,这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建# 此时要想删除Pod,必须删除Pod控制器

[root@master ~]# kubectl get pod -n lh
NAME                    READY   STATUS    RESTARTS   AGE
nginx-ff6774dc6-9bp2c   1/1     Running   0          58s

查看当前namespace下的pod控制器



[root@master ~]# kubectl get  deploy  -n lh
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           5m21s

删除此PodPod控制器

[root@master ~]# kubectl delete deploy  nginx -n lh
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pods -n lh
No resources found in lh namespace.


配置操作
创建一个pod-nginx.yaml,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: lh
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP



创建


[root@master ~]# kubectl create -f pod-nginx.yaml
pod/nginx created
[root@master ~]# kubectl get pod -n lh
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          10s

删除


[root@master ~]# kubectl delete -f pod-nginx.yaml
pod "nginx" deleted
[root@master ~]# kubectl get pod -n lh
No resources found in lh namespace.


3: label

Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
Label的特点:
• 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等
• 一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
• Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除
可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。
一些常用的Label 示例如下:
• 版本标签:“version”:“release”, “version”:“stable”…
• 环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“pro”
• 架构标签:“tier”:“frontend”,“tier”:“backend”
标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector,即:
Label用于给某个资源对象定义标识
Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector:
基于等式的Label Selector
name = slave: 选择所有包含Label中key="name"且value="slave"的对象
env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象
基于集合的Label Selector
name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend): 选择所有包含Label中的key=“name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号”,"进行分隔即可。例如:
name=slave,env!=production
name not in (frontend),env!=production

为pod打上标签


[root@master ~]# kubectl label pod nginx dd=1  -n lh
pod/nginx labeled

查看标签


[root@master ~]# kubectl get pod nginx -n lh --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          78s   dd=1


更新标签


[root@master ~]# kubectl label pod nginx dd=2 -n  lh --overwrite
pod/nginx labeled
[root@master ~]# kubectl get pod -n lh --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          5m56s   dd=2

筛选标签


[root@master ~]# kubectl get pod  -l dd=2 -n lh  --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          6m45s   dd=2
[root@master ~]# kubectl get pod  -l dd=1 -n lh  --show-labels
No resources found in lh namespace.

删除标签



[root@master ~]# kubectl label pod nginx dd- -n lh
pod/nginx unlabeled
[root@master ~]# kubectl get pod -n lh --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          7m44s   <none>

配置方式



apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: lh
  labels:
    dd: "2" 
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

然后就可以执行对应的更新命令了:kubectl apply -f pod-nginx.yaml


[root@master ~]# kubectl apply -f pod-nginx.yaml

[root@master ~]# kubectl get pod -n lh --show-labels
NAME    READY   STATUS    RESTARTS        AGE   LABELS
nginx   1/1     Running   1 (8m39s ago)   19m   env=test,version=3.0

4: Deployment

在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
在kubernetes中Pod控制器的种类有很多,此处只介绍deployment
在这里插入图片描述

创建pod

[root@master ~]# kubectl  create deploy  nginx --image=nginx:latest --port=80 --replicas=2  -n lh
deployment.apps/nginx created


 --image  指定pod的镜像
 --port   指定端口
 --replicas  指定创建pod数量
 --namespace  指定namespace

查看创建的pod

[root@master ~]# kubectl get pod -n lh
NAME                    READY   STATUS    RESTARTS      AGE
nginx                   1/1     Running   1 (13m ago)   24m
nginx-cd55c47f5-g4llx   1/1     Running   0             44s
nginx-cd55c47f5-wsbt5   1/1     Running   0             44s


查看deployment的信息


[root@master ~]# kubectl get deploy -n lh
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   2/2     2            2           79s


UP-TO-DATE:成功升级的副本数量
AVAILABLE:可用副本的数量

查看deployment的详细信息



[root@master ~]# kubectl describe deploy nginx -n lh
Name:                   nginx
Namespace:              lh
CreationTimestamp:      Mon, 28 Nov 2022 18:18:53 +0800
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:latest
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-cd55c47f5 (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  2m31s  deployment-controller  Scaled up replica set nginx-cd55c47f5 to 2

删除


[root@master ~]# kubectl delete deploy nginx -n lh
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pod -n lh
NAME    READY   STATUS    RESTARTS      AGE
nginx   1/1     Running   1 (16m ago)   27m

配置文件
创建一个deploy-nginx.yaml,内容如下:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: lh
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP

然后就可以执行对应的创建和删除命令了:
创建:kubectl create -f deploy-nginx.yaml
删除:kubectl delete -f deploy-nginx.yaml

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

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

相关文章

STM32实战总结:HAL之wifi

关于无线传输的基础知识&#xff0c;参考&#xff1a; 无线通信技术概览_路溪非溪的博客-CSDN博客 学了这么多&#xff0c;发现信息技术主要就是数据的存储、处理以及传输这几个过程。通过各种各样的技术&#xff0c;来实现这几个目标。 wifi模块 现在常用的是wifi模块&#xf…

今天面了个腾讯拿38K出来的,让我见识到了基础的天花板

各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石&#xff0c;可以攻玉&#xff0c;多看多借鉴还是有帮助的&#xff0c;这次腾讯也在疯狂…

自动化测试如何实施落地?详细教程来了

目录 前言 落地前&#xff1a;分析因素 开展前&#xff1a;评估价值 落地过程&#xff1a;解决问题 推广运营&#xff1a;关注反馈&输出价值 文末总结 重点&#xff1a;配套学习资料和视频教学 前言 这篇文章&#xff0c; 就聊聊自动化项目如何落地&#xff0c;以及…

25. [Python GUI] PyQt5中拖放的基本原理

PyQt5的拖放 拖放涉及到的主要的一些类如下所示&#xff1a; 一、拖放的基本原理 1.1 拖放的动作 拖放操作包括两个动作&#xff1a; 拖动(drag)放下(drop 或称为放置)。 当被拖动时拖动的数据会被存储为 MIME 类型的对象&#xff0c; MIME 类型使用 QMimeData 类来描述。…

C++——new和delete关键字

什么是new和delete new和delete不是函数&#xff0c;和sizeof一样都是C定义的关键字&#xff0c;不同的是sizeof在编译时就可以确定其返回值&#xff0c;而new和delete相对复杂 示例 string *ps new string("hello world");如果换做c语言&#xff0c;上面这句话就…

数据库——数据库备份与恢复

目录 原因&#xff1a; 数据库的备份与恢复&#xff1a; 1、使用MySQLdump命令备份 2、恢复数据库 表的导入和导出 1、表的导出 2、表的导入 原因&#xff1a; 尽管采取了一些管理措施来保证数据库的安全&#xff0c;但是不确定的意外情况总是有可能造成数据的损失&#xff0c;…

数据库理论 05 关系数据库设计——基于《数据库系统概念》第七版

通过E-R图转换得出一组关系模式后 **选择1&#xff1a;**把一些关系模式合并为更大的关系 —— 会产生过多的数据冗余 inst_dept(ID, name, salary, dept_name, building, budget)如果通过E-R模型转换得出如下两个关系模式 sec_class(sec_id, building, room_number) and se…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java计算机专业建设管理系统3286d

面对老师五花八门的设计要求&#xff0c;首先自己要明确好自己的题目方向&#xff0c;并且与老师多多沟通&#xff0c;用什么编程语言&#xff0c;使用到什么数据库&#xff0c;确定好了&#xff0c;在开始着手毕业设计。 1&#xff1a;选择课题的第一选择就是尽量选择指导老师…

ThreadLocal源码解析 1.运行原理

ThreadLocal源码解析—运行原理 简介 ThreadLocal 类用来提供线程内部的局部变量&#xff0c;这种变量在多线程环境下访问&#xff08;通过 get 和 set 方法访问&#xff09;时能保证各个线程的变量相对独立于其他线程内的变量&#xff0c;分配在堆内的 TLAB 中。 ThreadLoc…

【Mybatis编程:根据若干个id批量删除相册(动态SQL)】

目录 1. 执行的SQL语句 2. 在AlbumMapper.java接口添加抽象方法 3. 在AlbumMapper.xml中配置以上抽象方法映射的SQL语句 4. 标签书写规范 1. 执行的SQL语句 需要执行的SQL语句大致是&#xff1a; delete from pms_album where id? or id? or ... id? delete from pms…

《机器学习实战》10.K-均值聚类算法

目录 利用K-均值聚类算法对未标注数据分组 K-均值聚类算法 2 使用后处理来提高聚类性能 3 二分K-均值算法 4 示例&#xff1a;对地图上的点进行聚类 4.1 Yahoo&#xff01;PlaceFinder API 4.2 对地理坐标进行聚类 5 本章小结 本章涉及到的相关代码和数据 利用K-均值聚…

Unity基本编译环境设置(代码自动补全)

基本说明&#xff1a; 中国 Unity 官网下载地址&#xff1a;https://unity.cn/releases 请下载 Unity HUB 来管理和安装你的 Unity 各种版本 场景一&#xff1a; Windows系统 &#xff5c;Unity 2020之前的版本 &#xff5c;Visual Studio Community编辑器 电脑中没有任何…

并发控制常用定位方法及解决措施

并发控制常用定位方法及解决措施 7.1 排队问题 出现业务阻塞、性能下降、查询无响应等类似现网问题时&#xff0c;通过以下方法可以排查是否排队问题并定位排队原因&#xff0c;同时根据排队原因给出相应规避措施。 7.1.1 确认是否排队 首先确认是否排队问题&#xff0c;其…

力扣(LeetCode)2095. 删除链表的中间节点(C++)

快慢指针 设置哑结点&#xff0c;便于删除头结点。找到链表的中间结点&#xff0c;可以用快慢指针从头结点出发&#xff0c;慢指针最后停在中间结点。删除中间结点&#xff0c;应当找中间结点的前一个结点。于是想到加入哑结点&#xff0c;这样初始快慢指针既可以往前一个位置…

RADServer应用程序的交钥匙应用程序基础

RADServer应用程序的交钥匙应用程序基础 RADServer是快速构建和部署基于服务的应用程序的交钥匙应用程序基础。RAD Server提供自动化的Delphi和CREST/JSON API发布和管理、企业数据库集成中间件、IoT Edgeware和一系列应用程序服务&#xff0c;如用户目录和身份验证服务、推送通…

retimer芯片调式总结

1,主备状态是否ok。 看里面的0-3工作在Master(master Active), 4-7 工作在Master(wait master),主控0-3,备控4-7. current postion说明: typedef enum {VEGA_HMUX_SWITCH_TO_MASTER = 0,VEGA_HMUX_SWITCH_TO_SLAVE = 1,VEGA_HMUX_SWITCH_TO_PATTERN = 2,VEGA_HMUX_SWITC…

VSCode配置ssh连接本地wsl方法

1、首先需要安装插件Remote-SSH 2、其次在wsl子系统中安装ssh服务并设置允许密码登入 3、开启ssh服务并查看wsl子系统的IP地址 4、返回vscode里面的Remote SSH插件&#xff0c;点击下图中的那个号进行设置&#xff1a; 首先输入的是连接名字 &#xff0c;按enter键确认之后选…

施工企业数字化转型如何避免IT技术与企业管理的“两张皮”

工程项目是建筑产业的最基本单元&#xff0c;企业的生产经营数据都来源于项目&#xff0c;通过量化建造过程中的生产、管理要素&#xff0c;利用IoT、BIM、大数据、AI等核心技术&#xff0c;实时采集现场真实、唯一、精准、有效的工程项目资金、成本、进度、质量、安全、技术等…

NET:Spire.XLS 12.11.3 supports a variety of new formulas

Spire.XLS 12.11.3 supports a variety of new formulas 发现度娘破解版Spire.XLS for .NET is a professional Excel .NET API that can be used to create, read, write, convert and print Excel files in any type of .NET ( C#, VB.NET, ASP.NET, .NET Core, .NET 5.0, .…

【纯虚函数】设计一个形状类——矩形、圆形、三角形,分别计算三种当前图形的周长和面积

目录 一、纯虚函数 抽象类 纯虚函数概念&#xff1a; 抽象类的概念&#xff1a; 二、习题 题目&#xff1a; 代码&#xff1a; 测试结果&#xff1a; 一、纯虚函数 抽象类 纯虚函数概念&#xff1a; 是指没有具体实现的虚成员函数。用于这样的情况&#xff1a;设计一个…