k8s介绍-搭建k8s

news2024/11/15 8:22:29

官网:https://kubernetes.io/

应用部署方式演变

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

优点:简单,不需要其他技术的参与

缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容器产生影响

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

优点:程序环境不会相互产生影响,提供了一定程度的安全性

缺点: 增加了操作系统,浪费了部分资源

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

优点:可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等

运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦

容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署

 容器化部署方式给带来很多便利,但是也会出现一些问题,比如说:

  1. 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
  2. 当并发访问量变大的时候,怎么样做到横向扩展容器数量

这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

Swarmdocker自己的容器编排工具

Mesosapache的一个资源统一管控的工具,需要和marathon结合使用

Kubernetesgoogle开源的容器编排工具

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方式

三台主机 

192.168.100.10                master

192.168.100.20                node1

192.168.100.30                node2

 环境搭建

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

  1. 操作系统环境:cpu2个  内存2G  硬盘50G  rocky9
  2. 主机名设置:

Master节点:master

Node节点:node1

Node节点:node2

环境初始化

 关闭防火墙,

selinux,

设置时钟同步

配置主机名解析

三台主机都需要做

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.10 node1
192.168.100.30 node2

三台主机做免密钥登录

禁用swap分区---------三个节点都需要配置

vim /etc/fstab

注释掉swap分区那一行

swapoff  -a



开启IP转发,和修改内核信息---------三个节点都需要配置

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

modprobe   br_netfilter
sysctl -p  /etc/sysctl.d/k8s.conf

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

Rockylinux9中
/etc/modules-load.d/ipvs.modules这个文件
vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh

chmod +x /etc/modules/ipvs.modules
bash /etc/modules/ipvs.modules
lsmod | grep -e ip_vs 


[root@master ~]# lsmod |grep ip_vs
ip_vs_sh               16384  0
ip_vs_wrr              16384  0
ip_vs_rr               16384  0
ip_vs                 237568  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          217088  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              16384  3 nf_conntrack,xfs,ip_vs

部署k8s

安装docker

三台主机都需要做

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum -y install docker-ce-25.0.5-1.el9

配置镜像加速器

三台都需要做

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

 下载cri-docker

将提前下载好的包上传上去进行解压
[root@master ~]# ls
anaconda-ks.cfg  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/

下载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
编辑cri-docker.server
[root@master ~]# cd /etc/systemd/system/
[root@master system]# vim 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 system]# vim cri-docker.socket

修改ListenStream行内容为
ListenStream=/var/run/cri-dockerd.sock
复制cri-dockerd到其他节点
[root@master ~]# scp cri-dockerd-0.3.9.amd64.tgz root@node1:/root
cri-dockerd-0.3.9.amd64.tgz                               100%   14MB 125.4MB/s   00:00    
[root@master ~]# scp cri-dockerd-0.3.9.amd64.tgz root@node2:/root
cri-dockerd-0.3.9.amd64.tgz                               100%   14MB 126.4MB/s   00:00    
节点解压cri-docker
[root@node1 ~]# tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/

[root@node2 ~]# tar -xvf cri-dockerd-0.3.9.amd64.tgz --strip-components=1 -C /usr/local/bin/
复制修改好的service文件到其他节点
[root@master ~]# cd /etc/systemd/system/
[root@master system]# scp cri-docker.s* root@node1:/etc/systemd/system/
cri-docker.service                                        100% 1523     3.0MB/s   00:00    
cri-docker.socket                                         100%  210   533.3KB/s   00:00    
[root@master system]# scp cri-docker.s* root@node2:/etc/systemd/system/
cri-docker.service                                        100% 1523     3.3MB/s   00:00    
cri-docker.socket                                         100%  210   327.4KB/s   00:00    

启动并设置开机自启

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

部署k8s源

三台都需要做

[root@master ~]# cat <<EOF | tee /etc/yum.repos.d/kubernetes.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
EOF
安装集群所需软件包kubelet kubeadm kubectl(全部节点)
[root@master ~]# yum install -y kubelet kubeadm kubectl
配置k8s Cgoup控制组(全部节点)
vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

[root@master ~]# systemctl restart kubelet.service 
[root@master ~]# systemctl enable kubelet.service 
配置kubelet自启动(全部节点)
[root@master ~]# kubeadm config images list
I0923 11:00:25.255094    3466 version.go:256] remote version is much newer: v1.31.0; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.14
registry.k8s.io/kube-controller-manager:v1.28.14
registry.k8s.io/kube-scheduler:v1.28.14
registry.k8s.io/kube-proxy:v1.28.14
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.15-0
registry.k8s.io/coredns/coredns:v1.10.1

打印集群初始化配置文件(master节点运行)

[root@master ~]# kubeadm config print init-defaults > kubeadm-config.yaml

修改参数(master节点)

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.100.10         #修改,集群初始化的主节点IP  
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/cri-dockerd.sock          #修改使用docke
  imagePullPolicy: IfNotPresent
  name: master                            #修改节点名称
  taints: null


........

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers        #修改使用阿里云镜像仓库 

使用配置文件初始化(master节点运行)

[root@master ~]#  kubeadm init --config kubeadm-config.yaml --upload-certs
         --upload-certs参数是将集群密钥添加到etcd数据库
[init] Using Kubernetes version: v1.28.0
[preflight] Running pre-flight checks
	[WARNING FileExisting-socat]: socat not found in system path
        /// 有一个软件包没有安装,先安装在进行初始化
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
^C
安装
[root@master ~]# yum -y install socat


再次进行初始化
[root@master ~]# kubeadm init --config kubeadm-config.yaml --upload-certs

配置环境变量(master节点运行)

根据初始化完成提示配置

[root@master ~]# cat /etc/profile.d/k8s.sh 
export KUBECONFIG=/etc/kubernetes/admin.conf

传给另外两台主机

[root@master ~]# scp /etc/profile.d/k8s.sh root@node1:/etc/profile.d/
k8s.sh                                             100%   45    65.4KB/s   00:00    
[root@master ~]# scp /etc/profile.d/k8s.sh root@node2:/etc/profile.d/
k8s.sh                                             100%   45    73.6KB/s   00:00    

[root@master ~]# scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/
admin.conf                                                100% 5650    10.4MB/s   00:00    
[root@master ~]# scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes/
admin.conf                                                100% 5650     9.0MB/s   00:00    



都需要 source /etc/profile.d/k8s.sh

工作节点加入集群(工作节点运行)

根据初始化完成提示将工作节点添加入集群

kubeadm join 192.168.100.10:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:b195b482a4294f2727f3115298492fb1b148eded3a6d6f15cd243bee168aad0b --cri-socket=unix:///var/run/cri-dockerd.sock

注意:--cri-socket=unix:///var/run/cri-dockerd.sock参数是指定使用docker作为容器管理引擎

下载calico文件(master节点运行)

Calico是为集群中的 Pod 提供网络功能

[root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
创建calico网络(master节点运行)
[root@master ~]# kubectl apply -f calico.yaml
查看集群各节点状态
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   49m   v1.28.14
node1    Ready    <none>          37m   v1.28.14
node2    Ready    <none>          36m   v1.28.14
查看k8s集群的各组件
[root@master ~]# kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-9d57d8f49-jjbc7   1/1     Running   0          8m11s
calico-node-8sptx                         1/1     Running   0          8m11s
calico-node-fd7pc                         1/1     Running   0          8m11s
calico-node-xsqp6                         1/1     Running   0          8m11s
coredns-6554b8b87f-4pkpz                  1/1     Running   0          52m
coredns-6554b8b87f-hsbcm                  1/1     Running   0          52m
etcd-master                               1/1     Running   0          52m
kube-apiserver-master                     1/1     Running   0          52m
kube-controller-manager-master            1/1     Running   0          52m
kube-proxy-8qvrh                          1/1     Running   0          39m
kube-proxy-jzxqs                          1/1     Running   0          52m
kube-proxy-zsghb                          1/1     Running   0          41m
kube-scheduler-master                     1/1     Running   0          52m

测试

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

[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-xgdpz   1/1     Running   0          32s   172.16.104.1   node2   <none>           <none>

[root@master ~]# kubectl  get  services
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        55m
nginx        NodePort    10.99.81.235   <none>        80:32585/TCP   29s

测试访问

[root@master ~]# curl http://172.16.104.1
<!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>

修改网页内容

[root@master ~]# kubectl  get  pods  -o  wide
NAME                     READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
nginx-7854ff8877-xgdpz   1/1     Running   0          6m26s   172.16.104.1   node2   <none>           <none>

[root@master ~]# kubectl exec -it pod/nginx-7854ff8877-xgdpz -- /bin/bash
root@nginx-7854ff8877-xgdpz:/# cd /usr/share/nginx/html/
root@nginx-7854ff8877-xgdpz:/usr/share/nginx/html# ls
50x.html  index.html
root@nginx-7854ff8877-xgdpz:/usr/share/nginx/html# echo hello wuhan > index.html // 修改网页内容
root@nginx-7854ff8877-xgdpz:/usr/share/nginx/html# 

再次访问

[root@master ~]# curl http://172.16.104.1
hello wuhan

https://blog.csdn.net/huangjinjin520/article/details/140583970

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

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

相关文章

Active Directory 实验室设置第二部分- 添加数据到AD域

在之前的文章中&#xff0c;我们已经讨论了AD森林的安装和AD基础知识。在这篇文章中&#xff0c;让我们开始使用 AD 对象&#xff08;如用户对象、计算机对象、组对象、网络共享等&#xff09;填充 AD 环境&#xff0c;以及计算机如何加入域。 #1、添加用户对象 可以使用GUI、…

什么是CPQ?一文讲解什么是CPQ选型配置报价系统

什么是CPQ选型配置报价? CPQ&#xff0c;是英文名 Configure Price Quote的缩写&#xff0c;中文称为配置报价软件。该软件经常出现在销售行业。它是一种可以快速为企业报价的销售工具。企业在报价时&#xff0c;会综合考虑数量、折扣、产品可选功能等。CPQ软件能够整合企业的…

Linux学习之路 -- 线程 -- 互斥

目录 1、概念引入 2、互斥锁 1、pthread_mutex_init && pthread_ mutex_destory 2、pthread_mutex_lock && pthread_mutex_unlock 3、互斥锁原理的简单介绍 1、概念引入 为了介绍线程的同步与互斥&#xff0c;我们以抢票逻辑引入相关的概念。 示例代码…

harmonyOS 原来构建还有这么多弯弯绕绕

随着用户需求的不断增长&#xff0c;我们的 APP 已发展成功能丰富的超级APP&#xff0c;这也导致打包构建变得非常耗时&#xff0c;可能需要数小时&#xff0c;严重影响开发效率和产品迭代。通过采用模块化设计、增量构建、并行处理、缓存机制、优化依赖管理&#xff0c;以及云…

SSM整合步骤

目录 一、Mybatis整合Spring 1、整合后的maven坐标 2、核心配置文件 3、pojo、mapper、service配置 4、单测 二、整合SpringMVC 1、引入springMVC的坐标并配置tomcat 2、核心配置文件 3、controller配置 4、启动项目并测试 SSM SpringMVC Spring Mybatis 整合顺序&#xff1…

Spring AOP - 注解方式实现

前文已经讨论了基于配置文件方式实现Spring AOP&#xff08;Spring AOP - 配置文件方式实现&#xff09;&#xff0c;本文采用注解的方式实现前文相同的功能。配置步骤如下&#xff1a; 1、项目增加aop依赖&#xff08;pom.xml) <dependency><groupId>org.springfr…

大数据:快速入门Scala+Flink

一、什么是Scala Scala 是一种多范式编程语言&#xff0c;它结合了面向对象编程和函数式编程的特性。Scala 这个名字是“可扩展语言”&#xff08;Scalable Language&#xff09;的缩写&#xff0c;意味着它被设计为能够适应不同规模的项目&#xff0c;从小型脚本到大型分布式…

vue2 中使用 Tinymce 富文本编辑器详解

vue2.x使用Tinymce富文本 项目中Tinymce效果图安装依赖包/创建依赖文件创建skins文件夹汉化文件-zh_CN.js 封装组件Tinymce.vue组件中使用封装组件tinymce.vueTinymce 扩展插件集合 项目中Tinymce效果图 如果想先了解一下&#xff0c;可以浏览一博主整理的的TinyMCE中文文档&am…

【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】

目录 【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】 1. 信息传递的奇迹:电化学信号的奥秘 2. 非线性动态交互:大脑的智慧之源 3. 结构与功能的鸿沟:从并行分布到有限层次 结语:探索未知的边界 【揭秘大脑与AI的鸿沟:电化学信号与非线性动态交互的奥秘】…

【深度学习】【TensorRT】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转engineWindows平台搭…

[C#]winform 使用opencvsharp实现玉米粒计数

【算法介绍】 这段代码是使用OpenCvSharp库&#xff08;OpenCV的C#封装&#xff09;对图像进行处理&#xff0c;主要流程包括图像的二值化、腐蚀操作、距离变换、轮廓检测&#xff0c;并在原图上标出检测到的轮廓位置及数量。下面是对代码的详细解读&#xff1a; 初始化&…

网络通信——路由器、交换机、集线器(HUB)

注意&#xff1a;传输层&#xff0c;应用层没有网路设备 一.路由器&#xff08;网络层设备&#xff09; 1.分割广播域 2.一个接口就是一个广播域 3.一般接口位4&#xff0c;8&#xff0c;12。 4.数据转发 &#xff08;由路由表转发数据&#xff09; 5.根据路由表来进行路径选…

基于微信小程序的美食外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

面试速通宝典——1

1. 内存有哪几种类型&#xff1f; ‌‌‌‌  内存分为五个区&#xff0c;堆&#xff08;malloc&#xff09;、栈&#xff08;如局部变量、函数参数&#xff09;、程序代码区&#xff08;存放二进制代码&#xff09;、全局/静态存储区&#xff08;全局变量、static变量&#…

米壳AI:自媒体如何获取高清原画质!真8K视频是这样下载的!

作为一名新手自媒体博主&#xff0c;你是不是也在各种短视频平台上疯狂搜索保存外网视频的方法和软件呢&#xff1f;&#x1f603;然而&#xff0c;真正能下载真 4K 视频的却寥寥无几。 别苦恼啦&#xff01;今天我就来给大家分享一个小编亲测过后真实好用的工具 —— 米壳 AI。…

网页通知设计灵感:CSS 和 JS 的 8 大创意实现

文章目录 前言正文1.霓虹灯风格的通知系统2.垂直时间轴通知3.动画徽章通知4.项目式通知5.多种状态通知&#xff1a;成功、错误、警告6.信息、警告、提示组件7.扁平化风格通知8.社交媒体风格弹出通知 总结 前言 网页通知如今已成为电商、社交平台等网站的常见功能&#xff0c;它…

Pandas -----------------------基础知识(二)

dataframe读写数据操作 import pandas as pd# 准备数据(字典) data [[1, 张三, 1999-3-10, 18],[2, 李四, 2002-3-10, 15],[3, 王五, 1990-3-10, 33],[4, 隔壁老王, 1983-3-10, 40] ]df pd.DataFrame(data, columns[id, name, birthday, age]) df写到csv文件中 &#xff0c;…

SOLIDWORKS 2025 重点新功能大放送(壹)

SOLIDWORKS 2025涵盖全新以用户为中心的增强功能&#xff0c;致力实现更智能、更快速地与团队和外部合作伙伴协同工作。 小索是设计部负责人&#xff0c;SOLIDWORKS资深使用者&#xff0c;使用SOLIDWORKS软件多年&#xff0c;喜欢分享&#xff0c;正在体验SOLIDWORKS 2025版本…

tensorboard展示不同运行的曲线结果

运行tensorboard曲线如下&#xff1a; tensorboard --logdir .有时候&#xff0c;曲线图会展示多条曲线&#xff0c;以至于我们想分辨哪条线来自哪次训练都做不到了。如下图是设置smoothing-0.6的结果&#xff1a; smoothing可以在页面找到设置按钮&#xff0c;呼出设置侧边…

【算法笔记】二分查找 红蓝染色法

目录 二分查找 红蓝染色法&#xff08;感谢灵神&#xff09;闭区间[left, right]左闭右开区间[left, right)开区间(left, right)变式 二分查找 红蓝染色法&#xff08;感谢灵神&#xff09; 这里是灵神的教学视频&#xff1a;二分查找 红蓝染色法_哔哩哔哩_ bilibili 学了二分…