当前位置: 首页 > news >正文

Linux——k8s认识

计算资源隔离

-  更方便进行高并发架构的维护和升级

-  架构管理的灵活性更高,不再以单个节点的物理资源作为基础

技术:

- 硬件辅助虚拟化

- 容器技术

在企业部署方案中,很少以单节点实现虚拟化和容器技术,一般以集群状态来运行虚拟化技术或者容器。

容器相对比硬件辅助虚拟化的优点:

  1. 轻量级  (运行时对系统内存和硬盘的使用较少)
  2. 便捷性  portable   (容器对于镜像有规范化的镜像标准,因此打包制作好的镜像可以在任何容器运行时环境中运行)
  3. 运行速度快   (容器在启动时,并不需要从系统内核开始进行初始化;容器在运行时只需要启动少量进程即可)

缺点:

  1. 容器并不可靠
  2. 缺少专门的存储规划
  3. 容器通信方式有限

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

容器的存储管理和网络基础设施管理:

以docker为例:

存储:

bind-mount

volume

以上的存储类型都不支持在跨节点进行容器化应用部署时的存储管理问题.

网络:

host    直接复制容器宿主机的网络配置

bridge   桥接网络驱动       不同桥接网络之间容器通信需要配置额外的网络通信参数

ipvlan / macvlan        通过改变网络接口的vlan标签,让不同宿主机中的容器可以彼此进行通信

overlay 支持跨宿主机的容器通信

以上的docker网络设施解决方案中,要么只能实现单节点的通信,要么在多节点通信状态下,将大大增加宿主机网卡的工作压力。以上的跨节点通信方案在设置时,都需要设置额外的路由规则才可以实现。

K8S 部署过程整理:

Kubernetes 集群的需求:

(1)可用性:一个单机的 Kubernetes 学习环境,具有单点失效特点。创建高可用的集群则意味着需要考虑:

  1. 将控制器(运行K8S核心组件的节点)与工作节点(运行应用容器的节点)分开
  2. 在多个节点上提供控制器组件的副本
  3. 为针对集群的 API 服务器的流量提供负载均衡
  4. 随着负载的合理需要,提供足够的可用的(或者能够迅速变为可用的)工作节点
  5. 规模:如果你预期你的生产用Kubernetes 环境要承受固定量的请求,你可能可以针对所需要的容量来一次性完成安装。不过,如果你预期服务请求会随着时间增长,或者因为类似季节或者特殊事件的原因而发生剧烈变化,你就需要规划如何处理请求上升时对控制面和工作节点的压力,或者如何缩减集群规模以减少未使用资源的消耗。
  6. 安全性与访问管理:在你自己的学习环境 Kubernetes 集群上,你拥有完全的管理员特权。
  7. 但是针对运行着重要工作负载的共享集群,用户账户不止一两个时,就需要更细粒度的方案来确定谁或者哪些主体可以访问集群资源。
  8. 你可以使用基于角色的访问控制(RBAC)和其他安全机制来确保用户和负载能够访问到所需要的资源,同时确保工作负载及集群自身仍然是安全的。
  9. 你可以通过管理策略和 容器资源来针对用户和工作负载所可访问的资源设置约束。

K8S 集群中每个节点的角色分工:

  1. 控制器: K8S 部署集群的管理,应用服务的调度管理
  2. 工作节点(Node):运行pod的节点

简单修改主机名/ip地址

node1:

[root@bogon ~]# hostnamectl set-hostname node1
[root@bogon ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.110.11/24 ipv4.gateway 192.168.110.2 ipv4.dns 8.8.8.8 autoconnect yes
[root@bogon ~]# nmcli connection up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@bogon ~]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:00:8b:54 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.110.11/24 brd 192.168.110.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe00:8b54/64 scope link tentative noprefixroute valid_lft forever preferred_lft forever
[root@bogon ~]# su 
[root@node1 ~]# 
[root@node1 ~]# vim /etc/ssh/sshd_config   // 允许root登录
添加下面这一行
PermitRootLogin yes[root@node1 ~]# systemctl restart sshd
[root@node1 ~]# 

node2:

利用终端软件,统一执行,前期环境配置和软件安装

注:以下命令需要在三个节点上都执行

一、启用ipv4软件包转发

[root@node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
[root@node1 ~]# vim /etc/sysctl.d/k8s.conf
net.ipv[root@node1 ~]# sysctl --system
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/50-redhat.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
* Applying /etc/sysctl.conf ...
kernel.yama.ptrace_scope = 0
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
kernel.core_pipe_limit = 16
fs.suid_dumpable = 2
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.ens160.rp_filter = 2
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.ens160.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.ens160.promote_secondaries = 1
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.ping_group_range = 0 2147483647
net.core.default_qdisc = fq_codel
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_regular = 1
fs.protected_fifos = 1
net.core.optmem_max = 81920
kernel.pid_max = 4194304
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.ens160.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

二、确认ip、mac地址、prod_uuid、主机名、在三个节点上不同

[root@node1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 100                                                                                               0link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen                                                                                                1000link/ether 00:0c:29:00:8b:54 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.110.11/24 brd 192.168.110.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe00:8b54/64 scope link noprefixroutevalid_lft forever preferred_lft forever
[root@node1 ~]# cat /sys/class/dmi/id/p
power/           product_name     product_sku      product_version
product_family   product_serial   product_uuid
[root@node1 ~]# cat /sys/class/dmi/id/p
power/           product_name     product_sku      product_version
product_family   product_serial   product_uuid
[root@node1 ~]# cat /sys/class/dmi/id/product_uuid
9b3c4d56-0bb8-1c6d-3ab7-e216b7008b54

三、确认6443 端口未被占用

[root@node1 ~]# nc 127.0.0.1 6443 -v
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

四、禁用交换分区

[root@node1 ~]# swapon -s
Filename                                Type            Size            Used            Pr                                                                                               iority
/dev/dm-1                               partition       4108284         0               -2
[root@node1 ~]# swapoff -a
[root@node1 ~]# swapon -s
[root@node1 ~]# vim /etc/fstab
[root@node1 ~]# cat /etc/fstab#
# /etc/fstab
# Created by anaconda on Fri Aug 23 00:45:24 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cs_bogon-root /                       xfs     defaults        0 0
UUID=d910d323-150c-40df-bd32-bdfb1f5c93b9 /boot                   xfs     defaults                                                                                                       0 0
UUID=BA00-CA1F          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
#/dev/mapper/cs_bogon-swap none                    swap    defaults        0 0

五、安装CRI 容器运行时

[root@node1 ~]# dnf remove -y podman container* runc*
[root@node1 ~]# dnf -y install dnf-utils
[root@node1 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/doc                                                                                               ker-ce.repo
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
[root@node1 ~]# dnf -y install docker-ce docker-ce-cli containerd.io   // 等待安装完成即可[root@node1 ~]# systemctl enable --now containerd.service
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/lib/systemd/system/containerd.service.
[root@node1 ~]# ll /var/run/containerd/containerd.sock   //k8s调用容器运行时接口,确保此文件存在
srw-rw----. 1 root root 0 Sep 19 13:57 /var/run/containerd/containerd.sock
配置containerd 服务支持CRI的调用
[root@node1 ~]# vim /etc/containerd/config.toml
[root@node1 ~]# sed -i "s/cri//" /etc/containerd/config.toml
[root@node1 ~]# grep plugin /etc/containerd/config.toml
disabled_plugins = [""]
[root@node1 ~]# systemctl restart containerd.service
[root@node1 ~]#

六、安装Kubenetes相关管理工具

三个节点一起执行
[root@node1 ~]# setenforce 0
[root@node1 ~]# sed -i "s/^SELINUX=enforcing/SELINUX=permissivce" /etc/selinux/config
sed: -e expression #1, char 40: unterminated `s' command
[root@node1 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=permissivce' /etc/selinux/config
sed: -e expression #1, char 40: unterminated `s' command
[root@node1 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=permissivce/' /etc/selinux/config
[root@node1 ~]# grep SELINUX /etc/selinux/config
# SELINUX= can take one of these three values:
# NOTE: Up to RHEL 8 release included, SELINUX=disabled would also
SELINUX=permissive
# SELINUXTYPE= can take one of these three values:
SELINUXTYPE=targeted
[root@node1 ~]# vim /etc/yum.repos.d/k8s.repo
[root@node1 ~]# cat /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
只在node1上配置,通过scp 同步给其他节点。
[root@node1 ~]# scp /etc/yum.repos.d/k8s.repo root@192.168.110.10:/etc/yum.repos.d/
The authenticity of host '192.168.110.10 (192.168.110.10)' can't be established.
ED25519 key fingerprint is SHA256:84EopGSflyn0EP7RLvmnvaWPJCTe8G99eX4dF6XQzFk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.110.10' (ED25519) to the list of known hosts.
root@192.168.110.10's password:
k8s.repo                                                                                                                            100%  235   104.8KB/s   00:00
[root@node1 ~]# scp /etc/yum.repos.d/k8s.repo root@192.168.110.22:/etc/yum.repos.d/
The authenticity of host '192.168.110.22 (192.168.110.22)' can't be established.
ED25519 key fingerprint is SHA256:84EopGSflyn0EP7RLvmnvaWPJCTe8G99eX4dF6XQzFk.
This host key is known by the following other names/addresses:~/.ssh/known_hosts:1: 192.168.110.10
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.110.22' (ED25519) to the list of known hosts.
root@192.168.110.22's password:
k8s.repo                                                                                                                            100%  235   120.0KB/s   00:00在三个节点上同时安装。
[root@node1 ~]# yum -y install kubeadm kubectl kubelet --disableexcludes=kubernetes
[root@control ~]# systemctl start  kubelet.service

下载初始化平台需要使用的镜像,不使用官方的register.k8s.io仓库,使用aliyun的镜像。

在三个节点上同时下载。

[root@control ~]# cat kube.memo
registry.cn-hangzhou.aliyuncs.com/google_containers
[root@control ~]# kubeadm config print init-defaults > init.yml
[root@control ~]# kubeadm config print join-defaults > join.yml

修改init.yml

使用国内镜像,并且设置好apiserver的地址

下载镜像:

[root@control ~]# kubeadm config images  pull   --config init.yml
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.3
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.15-0

初始化集群:

[root@control ~]# kubeadm init  --config init.yml

// 注意观察输出中可能包含的错误信息

 

 测试可以拉取docker镜像的方案:

1、 设置dns 服务器

2、设置docker加速镜像

[root@control ~]# cat  /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}
[root@control ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 8.8.8.8
[root@control ~]# systemctl restart docker
docker pull flannel/flannel:latest
docker pull flannel/flannel-cni-plugin:latest

相关文章:

Linux——k8s认识

计算资源隔离 - 更方便进行高并发架构的维护和升级 - 架构管理的灵活性更高&#xff0c;不再以单个节点的物理资源作为基础 技术&#xff1a; - 硬件辅助虚拟化 - 容器技术 在企业部署方案中&#xff0c;很少以单节点实现虚拟化和容器技术&#xff0c;一般以集群状态来运…...

EC Shop安装指南 [ Apache PHP Mysql ]

这个是软件测试课上老师布置的一个作业&#xff0c;期间老师也出现了不少错误&#xff0c;所以还是有必要记录一下吧&#xff0c;凑一篇文章 主要是老师的文档以及自己的一些尝试记录&#xff0c;试错记录&#xff0c;解决方案等 主要介绍了Apache的安装&#xff0c;MySQL的安…...

无线感知会议系列【3】【基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用-1】

前言&#xff1a; 2020年北京智源大会 张大庆老师的一个报告 参考链接&#xff1a; 基于WiFi和4G/5G的非接触无线感知&#xff1a;挑战、理论和应用_哔哩哔哩_bilibili 目录&#xff1a; 无线感知简介 无线感知的核心 研究方向 Frsenel 模型 基于Fresnel 感知的应用举例…...

Virtuoso服务在centos中自动停止的原因分析及解决方案

目录 前言1. 问题背景2. 原因分析2.1 终端关闭导致信号12.2 nohup命令的局限性 3. 解决方案3.1 使用 screen 命令保持会话3.2 使用 tmux 作为替代方案3.3 使用系统服务&#xff08;systemd&#xff09; 4. 其他注意事项4.1 网络配置4.2 日志监控 结语 前言 在使用Virtuoso作为…...

泽众P-One性能测试平台火焰图帮助定位产品性能问题

在软件开发过程中&#xff0c;性能问题往往是最头疼的问题之一。随着软件系统的日益复杂&#xff0c;快速准确地定位并解决性能问题变得尤为重要。泽众P-One作为一站式性能测试平台&#xff0c;通过引入火焰图性能分析可视化工具&#xff0c;极大地提升了性能问题的定位效率和解…...

数据结构修炼——顺序表和链表的区别与联系

目录 一、线性表二、顺序表2.1 概念及结构2.2 接口实现2.3 一些思考以及顺序表的缺点 三、链表3.1 概念及结构3.2 链表的分类3.3 链表的实现3.3.1 无头单向非循环链表3.3.2 带头双向循环链表 四、顺序表和链表的区别 一、线性表 线性表&#xff08;linear list&#xff09;是n…...

AD9854 为什么输出波形幅度受限??

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…...

在grafana上配置显示全部node资源信息概览

在grafana上配置显示全部node资源信息概览&#xff0c;便于巡检 1&#xff0c;注册grafana官网账号&#xff1a;Grafana dashboards | Grafana Labs&#xfeff; 2、寻找可以展示所有node资源概览信息的dashboard&#xff0c;并下载支持prometheus数据源的dashboard&#xff…...

MySQL —— 索引

索引的概念 MySQL的索引是⼀种数据结构&#xff0c;它可以帮助数据库高效地查询、更新数据表中的数据。索引通过 ⼀定的规则排列数据表中的记录&#xff0c;使得对表的查询可以通过对索引的搜索来加快速度。 MySQL索引类似于书籍的目录&#xff0c;通过指向数据行的位置&…...

(已解决)vscode如何选择python解释器

文章目录 前言解决方案 前言 有的时候可能有不同版本的编译器&#xff0c;以适用不同年份的项目。所以&#xff0c;怎么在vscode中换python解释器呢&#xff1f; 解决方案 对着要运行的python文件进行右键&#xff0c;比如我是要运行main文件&#xff0c;点击那个命令选项版…...

sql刷题常用函数

ROW_NUMBER() ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) 是一个窗口函数&#xff0c;用于生成每个分组内的唯一行号。这个函数非常适合在分组数据中进行排序&#xff0c;并为每一行分配一个序号。下面是对你的具体示例的详细解释&#xff1a; ROW_NUMBER() OVER (…...

Golang | Leetcode Golang题解之第417题太平洋大西洋水流问题

题目&#xff1a; 题解&#xff1a; type pair struct{ x, y int } var dirs []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func pacificAtlantic(heights [][]int) (ans [][]int) {m, n : len(heights), len(heights[0])pacific : make([][]bool, m)atlantic : make([][]bool, …...

Acwing Hash表

哈希表的作用&#xff1a;把一个比较大的空间&#xff0c;通过一个函数映射到一个比较小的空间 一般做哈希运算时&#xff0c;取一个质数作为模&#xff0c;会使得冲突的概率降低。 哈希表的冲突解决方法&#xff1a; 拉链法开放寻址法 下面详细介绍这两种方法的原理及其实现…...

大健康裂变分销小程序开发

大健康裂变分销小程序的开发是一个涉及技术、市场策略、用户体验和合规性等多个方面的综合项目。这类小程序旨在通过分销机制促进大健康产品的销售和品牌推广&#xff0c;同时利用社交网络的裂变效应扩大市场影响力。以下是大健康裂变分销小程序开发的主要步骤和考虑因素&#…...

js取出一个对象中指定的字段(封装公共方法)

需求&#xff1a;在一个对象里面挑选出所需要的一个或多个字段 例子&#xff1a;在{ a: 1, b: 2, c: 3, d: 4 }里面挑选出b和d字段 封装公共方法 const pick (obj, keys) > {return Object.keys(obj).filter(key > keys.includes(key)).reduce((result, key) > {if …...

【黑马点评】已解决java.lang.NullPointerException异常

Redis学习Day3——黑马点评项目工程开发-CSDN博客 问题发现及描述 在黑马点评项目中&#xff0c;进行到使用Redis提供的Stream消息队列优化异步秒杀问题时&#xff0c;我在进行jmeter测试时遇到了重大的错误 发现无论怎么测试&#xff0c;一定会进入到catch中&#xff0c;又由…...

计算机专业的就业方向

计算机专业的就业方向 亲爱的新生们&#xff0c;欢迎你们踏上计算机科学的旅程&#xff01;作为一名计算机专业的学生&#xff0c;你们即将进入一个充满无限可能的领域。今天&#xff0c;我将为大家介绍计算机专业的一些主要就业方向&#xff0c;帮助你们了解未来的职业选择。…...

VSCode C++ Tasks.json中的变量

前言 上文介绍了在VSCode中创建C项目和编译多文件的情况。本文将介绍Tasks.json中一些变量的含义&#xff1b; 内容 tasks.json文件 下文参考VSCode文档&#xff1a;Visual Studio Code 变量参考 预定义标量 ${userHome} - 用户主文件夹的路径${workspaceFolder} - 在 VS Co…...

第一次安装Pytorch

1、新版本的Anaconda内置的python版本是3.12&#xff0c; 目前 Windows 上的 PyTorch 仅支持 Python 3.8-3.11;不支持 Python 2.x。 1、创建运行环境 在不创建虚拟环境的情况下&#xff0c;不建议使用最新的Python和Anaconda。 在几次失败后&#xff0c;我使用的是Anaconda3-2…...

Python数据分析-Steam 收入排名前 1500 的游戏

一、研究背景 随着全球数字化进程的加速&#xff0c;电子游戏产业已成为全球娱乐产业的重要组成部分&#xff0c;吸引了越来越多的资本与消费者关注。特别是基于互联网的游戏平台&#xff0c;如Steam&#xff0c;已成为全球范围内发行和销售游戏的重要渠道。Steam平台不仅为玩…...

服务器日志分析实战:用Python追踪HTTP 404错误并可视化异常频率

作为一名爬虫开发者或网站运维人员,服务器日志就像飞机的“黑匣子”——它记录了每个请求的来龙去脉。而404错误(页面未找到)尤其值得关注:它可能是用户输错了网址,可能是你爬虫的URL构造逻辑有漏洞,也可能是网站改版后旧的链接失效了。更严重的是,大量突然涌出的404请求…...

Python基础语法:生成器 generator(yield)

一、简介根据指定的规则循环生成数据&#xff0c;当条件不成立时则生成数据结束。数据不是一次性全部生成出来&#xff0c;而是使用一个&#xff0c;再生成一个&#xff0c;好处是可以节约大量的内存。就像设计模式中的懒汉式。适合处理大数据或流数。生成器是一种特殊的迭代器…...

美团外卖mtgsig与waimai_sign双层签名逆向解析

1. 这不是“爬虫教程”&#xff0c;而是一份反向工程现场笔记你搜到这篇内容&#xff0c;大概率正卡在某个调试窗口前&#xff1a;抓包看到mtgsig和waimai_sign两个参数像两堵墙&#xff0c;无论怎么改请求头、换UA、清缓存&#xff0c;返回永远是{"code":403,"…...

16个分片+2副本:pg_shard的master_create_worker_shards最佳实践

16个分片2副本&#xff1a;pg_shard的master_create_worker_shards最佳实践 【免费下载链接】pg_shard ATTENTION: pg_shard is superseded by Citus, its more powerful replacement 项目地址: https://gitcode.com/gh_mirrors/pg/pg_shard pg_shard作为PostgreSQL的分…...

基于Cynthion逆向USB协议,为DP100电源开发Linux控制软件

1. 项目概述&#xff1a;用Cynthion嗅探USB&#xff0c;为DP100电源打造Linux软件作为一名长期在Linux环境下折腾硬件和嵌入式开发的爱好者&#xff0c;我经常遇到一个头疼的问题&#xff1a;很多不错的桌面小设备&#xff0c;比如电源、示波器、逻辑分析仪&#xff0c;它们的官…...

SpeakingURL版本升级指南:从旧版本迁移到最新版本的完整教程

SpeakingURL版本升级指南&#xff1a;从旧版本迁移到最新版本的完整教程 【免费下载链接】speakingurl Generate a slug – transliteration with a lot of options 项目地址: https://gitcode.com/gh_mirrors/sp/speakingurl SpeakingURL是一款强大的URL友好化工具&…...

基于Atmega 1284P的16位复古计算器:硬件设计与软件实现全解析

1. 项目概述与核心思路最近在整理工作室时&#xff0c;翻出了一堆老旧的7段数码管和矩阵键盘&#xff0c;看着这些充满复古气息的元件&#xff0c;一个想法冒了出来&#xff1a;为什么不自己动手做一台复古风格的计算器呢&#xff1f;不是那种用液晶屏显示的现代计算器&#xf…...

解决claude code频繁封号与token不足的taotoken接入方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 解决Claude Code频繁封号与Token不足的Taotoken接入方案 1. 问题背景&#xff1a;Claude Code用户面临的挑战 对于依赖Claude Cod…...

为内部知识库问答系统集成多模型后备路由以提升服务韧性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部知识库问答系统集成多模型后备路由以提升服务韧性 对于依赖大模型提供智能问答服务的企业内部知识库而言&#xff0c;服务的…...

事故数据四年连降,为何山西煤矿的命还是悬在一根绳上?

说实话&#xff0c;写到山西煤矿这四个字&#xff0c;我心里就咯噔一下。2026年5月22日19时29分&#xff0c;山西长治市沁源县山西通洲集团留神峪煤业有限公司井下发生瓦斯爆炸事故&#xff0c;截至到写稿&#xff0c;事故已造成90人遇难。看的心里堵得慌。我特意去翻了翻这些年…...