K8S介绍---搭建集群

Kubernetes介绍

官网:https://kubernetes.io/

一、应用部署方式演变

1、传统部署:互联网早期,会直接将应用程序部署在物理机上

优点:简单,不需要其他技术的参与
缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容器产生影响

2、虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

优点:程序环境不会相互产生影响,提供了一定程度的安全性
缺点: 增加了操作系统,浪费了部分资源

3、容器化部署:与虚拟化类似,但是共享了操作系统

优点:可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等。
运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦。
容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署。

容器化部署方式给带来很多便利,但是也会出现一些问题,比如说:
(1)一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
(2)当并发访问量变大的时候,怎么样做到横向扩展容器数量
这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:
Swarm:docker自己的容器编排工具
Mesos:apache的一个资源统一管控的工具,需要和marathon结合使用
Kubernetes:google开源的容器编排工具

二、kubernetes简介

Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器—Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第二个正式版本。
Kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:
1、自我修复:一旦某个容器崩溃,能够在1秒中左右迅速启动新的容器
2、弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整。
3、服务发现:服务可以通过自动发现的形式找到它所依赖的服务
4、负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡
5、版本回退:如果发现新发布的程序版本问题,可以立即回退到原来的版本
6、存储编排:可以根据容器自身的需求自动创建存储卷

三、kubernetes组件

一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。

Master:集群的控制平面,负责集群的决策(管理)
Apiserver:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。
Scheduler:负责集群资源调度,按照预定的调度策略将pod调度到相应的node节点上。
ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等。
Etcd:负责存储集群中各种资源对象的信息。

Node:集群的数据平面,负责为容器提供运行环境(干活)
Kubelet:负责维护容器的生命周期,即通过控制docker来创建、更新、销毁容器
Docker:负责节点上容器的各种操作

下面以部署一个nginx服务来说明kubernetes系统各个组件的调用关系:
1、首先要明确,一旦kubernetes环境启动之后,master和node都会想自身的信息存储导etcd数据库中
2、一个nginx服务的安装请求会首先被发送到master节点的apiserver组件
3、Apiserver组件会调用scheduler组件来决定到底应该把这个服务安装导哪个node节点上
4、Apiserver调用controller-manager去调度node节点安装nginx服务
5、Kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod,pod是kubernetes的最小操作单元,容器必须跑在pod中
一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理,这样外界用户就可以访问集群中的nginx服务了。

四、kubernetes概念

Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控
Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod
Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
Namespace:命名空间,用来隔离pod的运行环境

K8s集群环境搭建

一、环境规划

1、集群类型

Kubernetes集群大体上分为两类:一主多从和多主多从
一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适用于测试环境
多主多从:多台master节点和多台node节点,搭建麻烦,安全性高,适用于生产环境

在这里插入图片描述

2、安装方式

Kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包
1、Minikube:一个用于快速搭建单节点kubernetes的工具
2、Kubeadm:一个用于快速搭建kubernetes集群的工具,https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
3、二进制包:从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效,https://github.com/kubernetes/kubernetes
说明:现在需要安装kubernetes的集群环境,但是又不想过于麻烦,所有选择使用kubeadm方式

3、主机规划

角色         ip地址                          组件
master:192.168.100.111    docker,kubectl,kubeadm,kubelet
node1: 192.168.100.112    docker,kubectl,kubeadm,kubelet
node2: 192.168.100.114    docker,kubectl,kubeadm,kubelet

二、环境搭建

本次环境搭建需要安装三台Linux系统(一主二从),内置centos8系统,然后在每台linux中分别安装docker。kubeadm(1.25.4),kubelet(1.25.4),kubectl(1.25.4).

1、主机安装

安装虚拟机过程中注意下面选项的设置:
1、操作系统环境:cpu2个 内存2G 硬盘50G Rocky Linux9
2、语言:中文简体/英文
3、软件选择:基础设施服务器
4、分区选择:自动分区/手动分区
5、网络配置:按照下面配置网络地址信息
网络地址:192.168.100.(111、112、114)
子网掩码:255.255.255.0
默认网关:192.168.100.254
DNS:8.8.8.8
6、主机名设置:
Master节点:master
Node节点:node1
Node节点:node2

1.1禁用firewalld、selinux、postfix(三个节点都做)

systemctl stop firewalld
systemctl disable firewalldvim /etc/selinux/config
SELINUX=disabledsetenforce 0systemctl stop postfix
systemctl disable postfix

2、主机名解析 (三个节点都做)

[root@master ~]# vim /etc/hosts 
//在该文件最后写入主机ip及主机名
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.111  master
192.168.100.112  node1
192.168.100.114  node2//直接传输到两台从节点
[root@master ~]# scp /etc/hosts root@192.168.100.112:/etc/hosts
[root@master ~]# scp /etc/hosts root@192.168.100.114:/etc/hosts

3、下载工具包,时间同步(三个节点都做)

//三台主机都是一样的操作
[root@master ~]# yum -y install chrony lrzsz tar wget
[root@master ~]# systemctl restart chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# hwclock -w

4、禁用swap分区(三个节点都做)

[root@master ~]# vim /etc/fstab
//注释掉swap分区那一行[root@master ~]# swapoff -a
[root@master ~]# free -m

5、开启IP转发,和修改内核信息—(三个节点都做)

[root@master ~]# vim /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1[root@master ~]# modprobe   br_netfilter
[root@master ~]# sysctl -p  /etc/sysctl.d/k8s.conf

6、配置IPVS功能(三个节点都做)

Rockylinux9中
/etc/modules-load.d/ipvs.modules这个文件
[root@master ~]# vim /etc/modules-load.d/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh[root@master ~]# chmod +x /etc/modules-load.d/ipvs.modules
[root@master ~]# bash /etc/modules-load.d/ipvs.modules
[root@master ~]# lsmod | grep -e ip_vs 
[root@master ~]# reboot
6.1、ipvs功能开机自启(三个节点都做)
[root@master ~]# vim /etc/systemd/system/ipvs.service
[Unit]
Description=Run a Custom Script at Startup
After=default.target[Service]
ExecStart=/etc/modules-load.d/ipvs.modules[Install]
WantedBy=default.target[root@master ~]# systemctl daemon-reload 
[root@master ~]# systemctl enable ipvs

注:这里做完最好留个快照

7、切换docker镜像源(三个节点都做)

//这里使用的是阿里源
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

8、安装docker-ce(三个节点都做)

[root@master ~]# yum -y install docker-ce-25.0.5-1.el9
[root@master ~]# vim /etc/docker/daemon.json
{"registry-mirrors": [   "https://dockerpull.com","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.awsl9527.cn"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}[root@master ~]# systemctl daemon-reload 
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker//最后在master节点测试能否pullnginx镜像
[root@master ~]# docker pull nginx
[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    39286ab8a5e1   5 weeks ago   188MB

9、下载并解压cri-docker(三个节点都做)

[root@master ~]# wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
[root@master ~]# tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/

10、下载并编辑cri-docker service文件

[root@master01 ~]# wget -O /etc/systemd/system/cri-docker.service https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
[root@master01 ~]# wget -O /etc/systemd/system/cri-docker.socket https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket//查看是否下载成功
[root@master ~]# ll /etc/systemd/system/ | grep cri-docker
-rw-r--r--  1 root root 1319 Sep 21 10:44 cri-docker.service
-rw-r--r--  1 root root  204 Sep 21 10:45 cri-docker.socket

修改cri-docker.service文件

[root@master ~]# vim /etc/systemd/system/cri-docker.service 
//修改ExecStart行内容为
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker

修改cri-docker.socket文件

[root@master ~]# vim /etc/systemd/system/cri-docker.socket 
//修改ListenStream行内容为
ListenStream=/var/run/cri-dockerd.sock

11、将修改后的文件分别传到node1、node2节点


[root@master ~]# scp /etc/systemd/system/cri-docker.s* root@node1:/etc/systemd/system/
[root@master ~]# scp /etc/systemd/system/cri-docker.s* root@node2:/etc/systemd/system/

12、启动cri-docker并设置自启动(三个节点都做)

[root@master ~]# systemctl daemon-reload 
[root@master ~]# systemctl restart cri-docker
[root@master ~]# systemctl enable cri-docker

三、部署kubernetes集群

1、配置阿里云k8s源(三个节点都做)

[root@master ~]# vi /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key

2、安装集群所需软件包kubelet kubeadm kubectl(三个节点都做)

[root@master ~]# yum install -y kubelet kubeadm kubectl

3、配置k8s Cgoup控制组(三个节点都做)

[root@master ~]# vim /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

4、配置kubelet自启动,并初始化集群(三个节点都做)

[root@master ~]# systemctl restart kubelet.service 
[root@master ~]# systemctl enable kubelet.service 

5、master节点打印文件

//master节点所需的镜像文件
[root@master ~]# kubeadm config images list
//打印集群初始化配置文件
[root@master ~]# kubeadm config print init-defaults > kubeadm-config.yaml

6、master节点修改kubeadm参数

[root@master ~]# vim kubeadm-config.yaml
…
localAPIEndpoint:advertiseAddress: 192.168.100.111 #修改,集群初始化的主节点IPbindPort: 6443
nodeRegistration:criSocket: unix:///var/run/cri-dockerd.sock #修改使用dockerimagePullPolicy: IfNotPresentname: master  #修改节点名称taints: null
…
…
…
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #修改使用阿里云镜像仓库

7、使用配置文件初始化并配置环境变量

[root@master ~]# yum -y install socat//配置环境变量
[root@master ~]# vim /etc/profile.d/k8s.sh
export KUBECONFIG=/etc/kubernetes/admin.conf[root@master ~]# source /etc/profile.d/k8s.sh 
[root@master ~]# scp /etc/profile.d/k8s.sh root@node1:/etc/profile.d/
[root@master ~]# scp /etc/profile.d/k8s.sh root@node2:/etc/profile.d/[root@master ~]# scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/                                                                        
[root@master ~]# scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes///最后node1与node2节点都source一下
[root@node1 ~]# source /etc/profile.d/k8s.sh
[root@node2 ~]# source /etc/profile.d/k8s.sh

8、工作节点加入集群(node1节点、node2节点执行)

[root@node1 ~]# kubeadm join 192.168.100.111:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:002216bd98b4154ef6740dc6a2d42d83ba0e9ee3b99c7710461cdca4afd0a904 --cri-socket=unix:///var/run/cri-dockerd.sock//master节点查看
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES           AGE   VERSION
master   NotReady   control-plane   41m   v1.28.14
node1    NotReady   <none>          65s   v1.28.14
node2    NotReady   <none>          8s    v1.28.14

9、下载calico文件

[root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml

10、创建calico网络(master节点)

[root@master ~]# kubectl apply -f calico.yaml
//查看容器的创建信息,状态都为Running才可以
[root@master ~]# kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS      AGE
calico-kube-controllers-9d57d8f49-v96ft   1/1     Running   0             2m41s
calico-node-cl9xq                         1/1     Running   0             2m41s
calico-node-d2hvj                         1/1     Running   0             2m41s
calico-node-r9kcm                         1/1     Running   0             2m41s
coredns-6554b8b87f-44pf6                  0/1     Running   0             60m
coredns-6554b8b87f-kmtcx                  1/1     Running   0             60m
etcd-master                               1/1     Running   1 (46m ago)   60m
kube-apiserver-master                     1/1     Running   1 (46m ago)   60m
kube-controller-manager-master            1/1     Running   1 (46m ago)   60m
kube-proxy-g96gn                          1/1     Running   0             20m
kube-proxy-zl9cd                          1/1     Running   0             19m
kube-proxy-zrqwk                          1/1     Running   1 (46m ago)   60m
kube-scheduler-master                     1/1     Running   1 (46m ago)   60m//查看网络状态
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   61m   v1.28.14
node1    Ready    <none>          21m   v1.28.14
node2    Ready    <none>          20m   v1.28.14

11、使用k8s集群创建一个pod,运行nginx容器,然后进行测试

master节点操作

[root@master ~]# kubectl create deployment nginx --image nginx
deployment.apps/nginx created
[root@master ~]# kubectl  expose  deployment  nginx  --port 80  --type NodePort
service/nginx exposed
[root@master ~]# kubectl  get  pods  -o  wide
NAME                     READY   STATUS              RESTARTS   AGE   IP       NODE    NOMINATED NODE   READINESS GATES
nginx-7854ff8877-jgk4b   0/1     ContainerCreating   0          53s   <none>   node1   <none>           <none>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中List、ArrayList与顺序表

List、ArrayList与顺序表 List什么是List常用方法介绍List的使用 ArrayList与顺序表线性表顺序表接口的实现 ArrayList简介ArrayList的使用ArrayList的构造ArrayList的常见操作ArrayList的遍历ArrayList的扩容机制 ArrayList的具体使用杨辉三角简单的洗牌算法 ArrayList的问题及…

双向链表的基本结构及功能实现

1.基本结构: 双向链表是一种链表数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含三个部分&#xff1a; (1).数据域&#xff1a;存储节点的数据 (2).前驱指针:指向前一个节点 (3).后驱指针:指向下一个节点 2.基本特性&#xff1a; 双向链接: 与单向链表…

【WPF】02 按钮控件圆角配置及状态切换

按钮圆角 先从工具箱里拖进来一个Button控件&#xff0c;然后对这个按钮进行美化。 首先在 xaml 里按钮控件部分 添加如下代码&#xff1a; <Button x:Name"btnLogin" Content"登录" HorizontalAlignment"Center" Margin"0,399,0,0&q…

C++20中头文件compare的使用

<compare>是C20中新增加的头文件&#xff0c;此头文件是language support库的一部分。它包括&#xff1a;concepts、classes、customization point objects、functions。 1.concepts&#xff1a;三向比较运算符<>&#xff0c;目的是简化比对对象的过程&#xff0c;…

微服务配置管理——动态路由

动态路由 网关的路由配置全部是在项目启动时由org.springframework.cloud.gateway.route.CompositeRouteDefinitionLocator在项目启动的时候加载&#xff0c;并且一经加载就会缓存到内存中的路由表内&#xff08;一个Map&#xff09;&#xff0c;不会改变。也不会监听路由变更新…

【PG备份恢复】基于时间点的恢复(踩坑指南)

1 设置基于时间点恢复所需的配置 1.1 修改配置文件 postgresql.conf vim postgresql.conf archive_mode on archive_command cp %p /data1/backups/pg_wal_archive/%f wal_level replica 1.2 生效配置 2 进行一次全备 2.1 创建备份目录 mkdir -p /data/backup/pg_b…

C语言常见字符串函数模拟实现一:(strlen,strcpy,strcat,strcmp,strstr )

strlen模拟实现 重点&#xff1a;1.字符串已经\0作为结束标志&#xff0c;strlen返回的是字符串\0前面出现的字符个数&#xff08;不包含\0&#xff09; 2.参数指向的字符串必须要以\0结束。 3.注意函数的返回值是size_t&#xff0c;是无符号的&#xff0c;加减是无法对比的。…

thinkphp8 从入门到放弃(后面会完善用到哪里写到哪)

thinkphp8 从入门到放弃 引言 thinkphp* 大道至简一、 thinkphp8 安装安装Composerthinkphp 安装命令(tp-项目名称)多应用安装&#xff08;一个项目不会只有一个应用&#xff09;安装完文件目录如下本地部署配置伪静态好了项目可以run 二、架构服务&#xff08;Service&#xf…

大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

app自动化前置准备环境搭建

编写脚本之前的一些前置准备工作。 1&#xff0c;安装appium server&#xff1a;官网地址&#xff1a;http://appium.io/ 安装教程&#xff1a;https://www.cnblogs.com/gancuimian/p/16536322.html 2&#xff0c;安装appium客户端&#xff1a; appium客户端安装相对较简单…

智谱清影 - CogVideoX-2b-部署与使用

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 体验地址&#xff1a;[丹摩DAMODEL官网](https://www.damodel.com/console/overview) CogVideoX 简介本篇将详细介绍使用丹摩服务器部…

OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例

✨报告阅读&#xff1a;使用大模型来学习推理(Reason) 首先是原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 接下来我们看一个简单的关于模型安全性的测试&#xff0c;当模型被问到一个有风险的话题时&#xff0c;会如何思考并回答用户呢&…

CentOS中使用DockerCompose方式部署带postgis的postgresql(附kartoza/docker-postgis镜像下载)

场景 CentOS中使用Docker部署带postgis的postgresql&#xff1a; CentOS中使用Docker部署带postgis的postgresql_centos postgis插件在容器中如何安装-CSDN博客 上面使用Docker搜索和拉取kartoza/postgis时并没有任何限制。 当下如果不能科学上网时&#xff0c;大部分镜像源…

.Net Core 生成管理员权限的应用程序

创建一个ASP.NET Core Web API项目 给解决方案设置一个名称 选择一个目标框架&#xff0c;这里选择的是 .NET 8.0框架 在Porperties文件夹中添加一个app.manifest文件 设置app.manifest文件属性&#xff0c;生成操作设置为嵌入的资源 双击解决方案名称&#xff0c;编辑WebAppli…

【AI大模型】股票价格预测精度增强,基于变分模态分解、PatchTST和自适应尺度加权层

简介 股票价格指数是金融市场和经济健康的晴雨表&#xff0c;准确预测对投资决策至关重要。股票市场的高频交易和复杂行为使得预测具有挑战性&#xff0c;需开发稳定、准确的预测模型。研究表明&#xff0c;估值比率、数据驱动模型&#xff08;如支持向量机&#xff09;、股票…

Android平台使用VIA创建语音交互应用

Android平台使用VIA创建语音交互应用 概述 在 Android 平台上开发一款语音助手应用需要整合多种技术,包括语音识别(ASR)、文字转语音(TTS)、以及热词检测(Hotword Detection)。这些技术共同构成了语音助手应用的核心交互方式,使用户能够通过语音命令与设备进行无缝交…

RabbitMQ 快速入门

目录 什么是MQ 为什么要使用 MQ MQ 的分类 MQ 的选择 认识 RabbitMQ RabbitMQ 的核心部分 安装 脚本安装 docker 安装 启动 web 管理界面 创建用户 创建消息队列 基本概念 消息应答 持久化 预取值 发布确认 交换机 Exchange 概念 死信队列 死信的来源 延迟…

C++之 string(中)

C之 string string类对象的容量操作 resize 将有效字符的个数该成n个&#xff0c;多出的空间用字符c填充 虽然在string里用的不多&#xff0c;但是在vector里面常见 这里有三种情况&#xff1a; 1&#xff09;resize小于当前的size 2)resize大于当前的size,小于capacity …

重生之我在代码随想录刷算法第十三天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

参考文献链接&#xff1a;代码随想录 本人代码是Java版本的&#xff0c;如有别的版本需要请上代码随想录网站查看。 110.平衡二叉树 力扣题目链接 解题思路 这道题目刚看到以为和二叉树的最大深度差不多&#xff0c;上来写了一堆迭代求深度的代码结果发现不对劲。 看了题…

通过WinCC在ARMxy边缘计算网关上实现智能运维

随着信息技术与工业生产的深度融合&#xff0c;智能化运维成为提升企业竞争力的关键因素之一。ARMxy系列的ARM嵌入式计算机BL340系列凭借其高性能、高灵活性和广泛的适用性&#xff0c;为实现工业现场的智能运维提供了坚实的硬件基础。 1. 概述 ARMxy BL340系列是专为工业应用…