Containerd+Kubernetes搭建k8s集群

news2025/5/19 3:30:05

Containerd+Kubernetes搭建k8s集群

  • 文档说明
  • 安装软件的版本和下载地址
  • 环境说明
    • 服务器准备
    • 负载均衡IP地址准备
  • 安装步骤
    • 环境设置
      • 关闭防火墙
      • 关闭SELinux
      • 关闭swap分区
      • 设置主机名称解析
      • 设置主机名称
      • 加载 br_netfilter 模块
      • 桥接的IPv4流量传递到iptables
      • 升级操作系统内核
        • 导入elrepo gpg key
        • 安装elrepo YUM源仓库
        • 安装kernel-lt版本
        • 设置grub2默认引导为0
        • 重新生成grub2引导文件
        • 重启
      • 安装ipset及ipvsadm
      • 配置ipvsadm模块加载方式
    • 安装containerd
      • 下载containerd
      • 解压containerd
      • 生成containerd的配置文件
      • 启动containerd并设置开机自启动
    • 安装runc
      • 下载libseccomp
      • 安装libseccomp
      • 下载runc
      • 安装runc
    • 安装kubernetes
      • 配置kubernetes的yum源
      • 安装kubernetes
      • 配置cgroup驱动改为systemd
  • 搭建kubernetes集群
    • 初始化集群
    • 设置kubelet开机自启动
  • 安装 Calico 网络插件
  • 安装MetalLB负载均衡器
    • 修改 kube-proxy 的配置文件
    • 安装MetalLB
    • 为MetalLB分配IP地址
  • 部署应用
    • 部署nginx
    • 暴露给外网访问

文档说明

之前写了一篇基于docker安装kubernetes的文章,这篇文档我们来使用containerd来安装kubernetes,相较于docker,containerd运行容器的时候效率更高,并且可以兼容docker镜像。基于docker安装kubernetes的文章地址:https://blog.csdn.net/m0_51510236/article/details/123477488

安装kubernetes之前,你需要准备如下配置的虚拟机或实体机进行安装(最少三台):

  • CPU:2核
  • 内存:2GB
  • 硬盘:50GB

上面的是最低配置,你可以根据自己的硬件条件提高配置。

安装软件的版本和下载地址

对应软件版本和下载地址如下表:

软件名称(软件说明)版本下载地址
CentOS(操作系统)7-2207-02阿里源/清华源
kubernetes(容器编排工具)1.26.5文档内提供
containerd(容器服务)1.6.21点击下载
libseccomp(计算插件)2.5.4点击下载
runc(容器运行时)1.1.7点击下载
Calico(网络插件)3.25文档内提供
Metallb(负载均衡插件)v0.13.9文档内提供

部分软件是在国外服务器下载,如果下载过慢可以私信我获取

环境说明

服务器准备

服务器列表:

服务器名称IP地址配置服务器用途
k8s-master192.168.79.502c2g50gkubernetes的主节点
k8s-node01192.168.79.522c2g50gkubernetes的工作节点1
k8s-node02192.168.79.542c2g50gkubernetes的工作节点2

三台服务器均已准备好:
在这里插入图片描述

你还需要保证这些服务器之间能够互相ping同

负载均衡IP地址准备

metallb的loadbalancer需要一些预留的IP地址以用于负载均衡的IP地址分配,本篇文章预留的IP地址为192.168.79.60~192.168.79.69

安装步骤

环境设置

接下来我们需要在三台服务器上同时进行一些操作,所以你可以在Xshell上依次点击工具栏上的 工具(T) -> 发送键输入到(K) -> 已链接的会话(C) 来保证输入一条命令可以在三个终端执行,不同ssh工具设置方式不同,请自行查询。

步骤有点多,记得别漏了哦

关闭防火墙

使用以下命令关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

同时发送给三个终端,查看执行结果可以看到防火墙已经全部关闭了:
在这里插入图片描述

关闭SELinux

使用以下命令关闭SELinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

关闭swap分区

使用以下命令关闭swap分区:

# 永久关闭
swapLine=$(cat /etc/fstab | grep swap | awk '{print $1}')
sed -i "s/$swapLine/#$swapLine/" /etc/fstab
# 临时关闭
swapoff -a

成功之后使用 free -h 命令可以查看到swap分区的大小变为0了
在这里插入图片描述

设置主机名称解析

使用以下命令设置主机名称解析,但是需要注意要改为对应你们自己的IP地址哦:

cat >> /etc/hosts << EOF
192.168.79.50 k8s-master
192.168.79.52 k8s-node01
192.168.79.54 k8s-node02
EOF

设置主机名称

这个设置需要每个主机单个设置,所以可以点击终端右上角的 OFF 按钮临时关闭输出命令到所有的会话:
在这里插入图片描述

每台服务器执行的命令

  • 192.168.79.50: hostnamectl set-hostname k8s-master
  • 192.168.79.52: hostnamectl set-hostname k8s-node01
  • 192.168.79.54: hostnamectl set-hostname k8s-node02

设置完后记得点击每个终端右上角的 ON 按钮开启同时输出命令到所有终端哦:
在这里插入图片描述

加载 br_netfilter 模块

由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块,但是这个模块不会默认加载,所以我们开启后还要设置开机自动加载这个模块

# 设置开机自动加载这个模块
cat >> /etc/rc.d/rc.local << EOF
/usr/sbin/modprobe br_netfilter
EOF
chmod +x /etc/rc.d/rc.local
# 立刻加载
modprobe br_netfilter

桥接的IPv4流量传递到iptables

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

升级操作系统内核

因为本次安装的版本为 1.26.5 ,为第二新的版本,可能由于内核版本较低导致安装失败,所以我们执行这个步骤将内核升级到最新的稳定版本

导入elrepo gpg key

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装elrepo YUM源仓库

yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

安装kernel-lt版本

m1为长期稳定版本,lt为长期维护版本

yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64

设置grub2默认引导为0

grub2-set-default 0

重新生成grub2引导文件

grub2-mkconfig -o /boot/grub2/grub.cfg

重启

当上面命令全部执行完成后使用 reboot 命令重启电脑,以使升级的内核生效
在这里插入图片描述

重启之后使用 uname -r 查看系统内核版本,升级时间不同可能导致稳定的内核版本不一样:
在这里插入图片描述

安装ipset及ipvsadm

请求多的时候可能会导致响应过慢,安装这两个软件能够在一定程度上提升ipvs转发速度

yum install -y ipset ipvsadm

配置ipvsadm模块加载方式

添加需要加载的模块

cat > /etc/sysconfig/modules/ipvs.modules << EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

授权、运行、检查是否加载

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

查看结果:
在这里插入图片描述

环境设置部分已经全部完成,现在可以开始正式按钻过软件了

安装containerd

下载containerd

可以使用以下命令下载containerd:

wget https://github.com/containerd/containerd/releases/download/v1.6.21/cri-containerd-cni-1.6.21-linux-amd64.tar.gz -O /usr/local/src/cri-containerd-cni-1.6.21-linux-amd64.tar.gz

因为是在github上下载较慢,为了节省时间我就提前下载好并上传到服务器上了:
在这里插入图片描述

解压containerd

需要将containerd解压到根目录,使用命令:

tar -zxvf cri-containerd-cni-1.6.21-linux-amd64.tar.gz -C /

可以查看containerd版本号:

containerd -version

执行结果:
在这里插入图片描述

生成containerd的配置文件

使用以下命令生成containerd的默认配置文件:

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

配置文件(/etc/containerd/config.toml)需要将 sandbox_image 的版本号改一下版本号和镜像地址,因为默认的镜像地址是在谷歌上的,谷歌国内访问不到

默认值:sandbox_image = “registry.k8s.io/pause:3.6”

目标值:sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.9”

修改结果:
在这里插入图片描述

启动containerd并设置开机自启动

systemctl enable --now containerd

安装runc

containerd自带有runc,但是自带的有些问题,所以我们还需要特意安装一遍稳定版的runc:
在这里插入图片描述

下载libseccomp

因为runc依赖于libseccomp计算库,所以我们使用以下命令下载libseccomp的源码压缩包:

wget https://github.com/opencontainers/runc/releases/download/v1.1.7/libseccomp-2.5.4.tar.gz

下载完成:
在这里插入图片描述

安装libseccomp

首先我们先将libseccomp的源码包解压:

tar -zxvf libseccomp-2.5.4.tar.gz

然后我们需要安装c语言的编译工具和libseccomp的gperf依赖

yum install -y gcc gcc-c++ gperf

执行安装

cd libseccomp-2.5.4
./configure
make && make install

查看是否安装成功:

find / -name libseccomp.so

查询结果:
在这里插入图片描述

下载runc

使用以下命令下载:

wget https://github.com/opencontainers/runc/releases/download/v1.1.7/runc.amd64

同理因为github下载较慢,我提前下载了然后上传到服务器上:
在这里插入图片描述

安装runc

# 删除containerd自带的runc
rm -rf /usr/local/sbin/runc
# 为我们自己的runc赋予执行权限
chmod +x runc.amd64
# 将runc复制到安装目录
mv runc.amd64 /usr/local/sbin/runc

再次执行runc发现没有报错了:
在这里插入图片描述

安装kubernetes

配置kubernetes的yum源

需要配置阿里云的yum源,因为官方文档默认的yum源是在谷歌那,国内访问不到,可以执行以下命令配置yum源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubernetes

配置了yum源之后可以直接使用yum命令安装kubernetes

yum install -y kubeadm-1.26.5 kubectl-1.26.5 kubelet-1.26.5

配置cgroup驱动改为systemd

我们需要将kubernetes的cgroup改为systemd,需要将 /etc/sysconfig/kubelet 的内容改为 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd",使用以下命令:

sed -i 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/g' /etc/sysconfig/kubelet

修改之后:
在这里插入图片描述

搭建kubernetes集群

上面我们已经完成了kubernetes的安装,接下来我们要开始搭建集群了

初始化集群

这一步只需要在master上执行就好了,所以点击master上面的 OFF 按钮关闭发送命令至所有终端:
在这里插入图片描述

我们可以使用以下命令初始化(注意修改master的IP地址):

kubeadm init \
--apiserver-advertise-address=192.168.79.50 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.26.5 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/containerd/containerd.sock

配置的内容解析

  • --apiserver-advertise-address=192.168.79.50:k8s-master的地址,注意修改为自己的master地址
  • --image-repository=registry.aliyuncs.com/google_containers:默认的镜像拉取地址在谷歌,所以这里改为阿里云的镜像地址
  • --kubernetes-version=v1.26.5:kubernetes的版本号
  • --service-cidr=10.96.0.0/12:service的网段
  • --pod-network-cidr=10.244.0.0/16:pod的网段地址,注意之后安装Calico网络插件的时候还会用到这个地址
  • --cri-socket=unix:///var/run/containerd/containerd.sock:设置cri的socket使用containerd的sock

看到这个代表初始化成功:
在这里插入图片描述

按照提示本地执行代码:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

远程执行的代码需要改一下,需要加上 --cri-socket=unix:///var/run/containerd/containerd.sock ,所以执行:

kubeadm join 192.168.79.50:6443 --token 9i3lvb.2m4aoo1672t4edra \
	--discovery-token-ca-cert-hash sha256:a41c37db5378cd1fad77a2537a3dd64117465c4a33c9de7825abc3daa847b8d0 \
	--cri-socket=unix:///var/run/containerd/containerd.sock

可以查看加入集群的结果:
在这里插入图片描述

使用 kubectl get nodes -o wide 命令查看加入到的集群:
在这里插入图片描述

设置kubelet开机自启动

需要设置kubelet开机自启动,这样开机才会自动运行kubernetes

systemctl enable --now kubelet

安装 Calico 网络插件

Calico对应版本的官网地址:https://docs.tigera.io/calico/3.25/getting-started/kubernetes/quickstart

可以使用官网的这行命令在master当中执行安装Calico:
在这里插入图片描述

命令:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml

查看执行结果:
在这里插入图片描述

需要过一段时间才能安装成功,因为要拉取插件,可使用命令查看安装结果:

kubectl get all -n tigera-operator

看到这个则代表安装成:
在这里插入图片描述

还需要自定义资源安装,不能直接执行这个文件,需要将这个文件下载下来然后改一点东西:
在这里插入图片描述

使用命令下载:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
cat custom-resources.yaml

查看内容,我们需要将pod网段改为我们初始化集群时候设置的 10.244.0.0/16
在这里插入图片描述

使用命令即可修改:

sed -i 's/cidr: 192.168.0.0/cidr: 10.244.0.0/g' custom-resources.yaml
cat custom-resources.yaml

查看修改后的结果:
在这里插入图片描述

现在可以直接执行它:

kubectl create -f custom-resources.yaml

查看执行结果:
在这里插入图片描述

时间比较长,所以监控创建结果:

watch kubectl get all -o wide -n calico-system

当STATUS全部变为Running的时候就代表安装成功了:
在这里插入图片描述

接下来可以开始下一步了

安装MetalLB负载均衡器

metallb是用于kubernetes的Service暴露LoadBalancer的负载均衡器,官网地址:https://metallb.universe.tf/installation/

修改 kube-proxy 的配置文件

按照官网的意思修改:
在这里插入图片描述

执行命令:

kubectl edit configmap -n kube-system kube-proxy

仅需要修改我标出来的地方即可:
在这里插入图片描述

安装MetalLB

执行以下命令即可安装:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml

查看执行结果(提前下载了文件):
在这里插入图片描述

使用命令查看部署结果:

kubectl get all -n metallb-system

同样的所有的STATUS都为Running状态则为安装成功:
在这里插入图片描述

为MetalLB分配IP地址

我们可能会创建多个对外暴露的Service,所以需要分配多个没有用到的IP地址给MetalLB,新增一个 metallb-ip-pool.yaml 文件,文件内容为:

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  # 注意改为你自己为MetalLB分配的IP地址
  - 192.168.79.60-192.168.79.69

---

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool

查看文件内容:
在这里插入图片描述

执行这个文件:

kubectl apply -f metallb-ip-pool.yaml

查看执行结果:
在这里插入图片描述

接下来我们就可以部署应用了

部署应用

部署nginx

我会部署一个nginx程序并通过metallb的地址池暴露访问地址给外网访问,使用命令部署一个nginx:

kubectl create deployment nginx --image=nginx

这个命令会在dockerhub当中拉取一个最新版的nginx并运行,可以查看运行结果:
在这里插入图片描述

同样使用命令查看部署情况

kubectl get deploy,pod -o wide

STATUS为Running:
在这里插入图片描述

暴露给外网访问

应用部署成功,现在需要创建一个LoadBalancer给外网访问了,使用命令将nginx暴露到外网,service类型为LoadBalancer:

kubectl expose deployment nginx --port=80 --type=LoadBalancer

显示暴露成功:
在这里插入图片描述

使用命令查看Service的外网IP地址:
在这里插入图片描述

接下来可以访问 192.168.79.60 这个IP地址了,可以看到nginx响应成功:
在这里插入图片描述

好了下课(点个关注呗)

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

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

相关文章

Three.js--》实现3d汽车模型展览搭建

目录 项目搭建 初始化three.js基础代码 添加汽车模型展示 动态修改汽车模型 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还是借助…

makefile make 的隐式规则

文章目录 前言一、什么是隐式规则?二、典型隐式规则情况三、查看隐式规则四、隐式规则的禁用五、隐式规则的副作用总结 前言 一、什么是隐式规则? make 提供了一些常用的&#xff0c;例行的规则实现。 当相应的规则未提供时 &#xff0c; make 尝试使用隐式规则。 make 提供…

KDZK-F水轮发电机转子测试仪

一、产品概述 KDZK-F水轮发电机转子测试仪是判断发电机转子绕组有无匝间短路的专用仪器&#xff0c;可以自动、手动&#xff08;单向或双向&#xff09;测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标&#xff0c;操作更方便。 可选择快速的…

手写操作系统必掌握基础:函数调用约定

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。深入研究Windows内核、Linux内核、Hotspot源码…聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写模拟器、手写编程语言… 目前我已经做了两个成熟的课程&#xff1a;手写JVM、手写OS&a…

RTX4060 系 2399 元起,NVIDIA 又赢麻了

就在上周&#xff0c;NVIDIA 正式官宣了 RTX40 系显卡家族中更加主流的三款新品。 分别是 RTX 4060、RTX 4060 Ti 8G 以及 RTX 4060 Ti 16G。 其中 RTX 4060 Ti 8G 解禁时间为本月 23 日晚&#xff0c;24 日上架开售。 而 RTX 4060、RTX 4060 Ti 16G 要等到七月份。 价格部分…

2023年湖北建筑架子工报名流程?报名需要什么资料?考试一次过?

2023年湖北建筑架子工报名流程&#xff1f;报名需要什么资料&#xff1f;考试一次过&#xff1f; 建筑架子工证是建筑行业必备的证书之一&#xff0c;它是证明持有人可以在建筑工地上从事搭建脚手架、模板等施工工作的重要证明。启程别告诉你架子工的报名流程和资料。 百度搜一…

测试提效1-电商一键创单的实现

因电商项目不同场景下单特别多&#xff0c;而走前端流程特别慢。所以在某些测试场景需要特定配送方式 和 特定配送状态数据&#xff0c;本次实现快速创建。 1、前端页面 前端页面采用vue &#xff0c;页面需要的属性或字段&#xff0c;打算包括 环境env、店铺(准备了3种不同模…

一种新的爬虫网络解锁器

事出原由 遇到一个需要采集境外电商的需求&#xff0c;相比国内各种层出不穷的反爬手段&#xff0c;境外产品更注重于用户行为和指纹上。 所以笔者在想是否有类似于指纹浏览器的环境可以提供给爬虫采集器使用。 经过检索&#xff0c;找到了一种名为爬虫网络解锁器的新兴产品…

SAP: 建立HTTPS 连接时,报错 ICM_HTTP_SSL_PEER_CERT_UNTRUSTED

报错1&#xff1a; SSL handshake with tpm-uat.jlbry.cn:443 failed: SSSLERR_PEER_CERT_UNTRUSTED (-102)#The peers X.509 Certificate (chain) is untrusted##SapSSLSessionStartNB()SSSLERR_PEER_CERT_UNTRUSTED# SSL:SSL_read() failed (536872221/0x2000051d)# >…

【正点原子STM32连载】第十四章 蜂鸣器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十四…

【无标题】ELISA-3(加装跟踪装置)—让群体协作更智能!

群体智能是近年来发展迅速的一个人工智能学科领域&#xff0c;通过对蚂蚁、蜜蜂等为代表的社会性昆虫群体行为的研究&#xff0c;实现分布式等智能行为。作为新一代人工智能的重要方向&#xff0c;群体智能通常用于无人机、机器人集群的协同作业。目前&#xff0c;群体智能在基…

零操作难度,轻松进行应用测试,App专项测试之Monkey测试完全指南!

目录 前言&#xff1a; 一、 Monkey测试的基础参数 1.1 事件类型参数&#xff1a; 1.2 覆盖包 1.3 事件数量 二、 Monkey测试的高级参数 2.1 稳定性级别 2.2 策略参数 2.3 包含选项参数 三、 附加代码 四、 总结 前言&#xff1a; 在移动应用的开发过程中&#xff0…

数据结构(C语言):有序顺序表的设计及相关操作函数

一、题目 有序顺序表的设计 实验要求&#xff1a; 有序顺序表的操作&#xff0c;包括初始化&#xff0c;求数据元素个数&#xff0c;插入&#xff0c;删除和取数据元素。放在头文件中&#xff08;建议尝试用动态数组实现有序顺序表&#xff09;&#xff1b;注意有序顺序表的…

【正点原子STM32连载】 第十七章 串口通信实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十七…

2023年25个Java8面试问题和答案

Java是一种非常流行的编程语言&#xff0c;从Android应用程序到物联网&#xff08;IoT&#xff09;无处不在。事实上&#xff0c;根据Codeplatoon的数据&#xff0c;Java在1年的招聘信息中排名#2022。考虑到它的普遍存在&#xff0c;对精通Java的专业人员的需求仍然很高也就不足…

【vlan高级特性——super vlan概述】

今天给大家分享Windows常用cmd网络命令&#xff0c;希望对大家能有所帮助&#xff01; 1、arp [option] [address] 显示/修改ARP缓存 执行命令&#xff1a;arp -a 参数说明&#xff1a; 显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。 ARP -s inet_addr eth…

那些30多岁的测试工程师都是怎么走过来的?

最近工作真的不好找了&#xff0c;感觉身边的朋友明显变得焦虑了&#xff0c;一个个都在抱怨生活的迷茫和疑惑。 30岁测试员该何去何从&#xff1f; 如今我们往往能够看到网上的各种新闻&#xff0c;什么“30岁是程序员的一道坎“ “非诚勿扰:32岁 程序员登台&#xff0c;遭美…

【Java-Crawler】爬取动态页面(WebMagic、Selenium、ChromeDriver)

WebMagicSeleniumChromeDriverMaven 爬取动态页面 一、需要下载的资源和引入的依赖资源依赖 二、实战代码测试效果 在上一篇说WebMagic框架的时候&#xff08; 一文学会WebMagic爬虫框架&#xff09;&#xff0c;提到了WebMagic仅能解析静态页面&#xff0c;满足不了小编的爬虫…

chatgpt赋能Python-python_numpy转置

Python中的Numpy转置&#xff1a;使用transpose()函数 在Python中&#xff0c;Numpy是非常常用的一个科学计算库&#xff0c;它提供了大量的数学函数、矩阵计算等功能。其中&#xff0c;矩阵的转置是一个非常基本的运算&#xff0c;在Numpy中&#xff0c;我们可以使用transpos…

SSRS rdlc报表 六 报表分组和总计

报表分组和总计在报表中是一个很常用的功能&#xff0c;比如我们需要按部门进行分组&#xff0c;统计每个部门的费用支出&#xff0c;或者在进一步分组&#xff0c;每个部门每个月的费用支出&#xff0c;通过rdlc报表&#xff0c;很容易实现这个需求。 我们下面要讲解的案例&a…