K8S学习笔记-------1.安装部署K8S集群环境

1.修改为root权限

#sudo su   

2.修改主机名

#hostnamectl set-hostname k8s-master01 

3.查看网络地址

sudo nano /etc/netplan/01-netcfg.yaml

在这里插入图片描述

4.使网络配置修改生效

sudo netplan apply

5.修改UUID(某些虚拟机系统,需要设置才能生成UUID)#

  • 查看UUID:dmidecode -s system-uuid

在这里插入图片描述

  • 查看UUID:ls -l /sys/class/dmi/id/product_uuid

在这里插入图片描述

6.修改machine-id

root@k8s-master01:/home/zgq# hostnamectl statusStatic hostname: k8s-master01Icon name: computer-vmChassis: vm 🖴Machine ID: 6e06b8a62f094742915c390eab08c802Boot ID: 2f2ee93655c148ab8d5a231444047515Virtualization: kvm
Operating System: Ubuntu 24.04.1 LTS              Kernel: Linux 6.8.0-51-genericArchitecture: x86-64Hardware Vendor: sangforHardware Model: _acloud_
Firmware Version: rel-1.7.5.1-20190822_073655Firmware Date: Tue 2014-04-01Firmware Age: 10y 8month 3w 2d                
root@k8s-master01:/home/zgq# ls -l /etc/machine-id
-r--r--r-- 1 root root 33 Dec  4 13:42 /etc/machine-id
root@k8s-master01:/home/zgq# cat  /etc/machine-id
6e06b8a62f094742915c390eab08c802
root@k8s-master01:/home/zgq# rm -f   /etc/machine-id
root@k8s-master01:/home/zgq# systemd-machine-id-setup
Initializing machine ID from VM UUID.
root@k8s-master01:/home/zgq# cat  /etc/machine-id
bad4f9616ef844369a8b351e8752d5c6

在这里插入图片描述

7.关闭SWAP分区

kubelet 的默认行为是在节点上检测到交换内存时无法启动。 这意味着要么禁用交换(swap)功能,要么让 kubelet 容忍交换。

  • 若需允许交换分区(swap),请在 kubelet 配置文件中添加 failSwapOn: falsels -,或通过命令行参数指定。 注意:即使设置了 failSwapOn: false,工作负载默认情况下仍无法访问交换空间。 可以通过在 kubelet 配置文件中设置 swapBehavior 来修改此设置。若要使用交换空间, 请设置 swapBehavior 的值,这个值不能是默认的 NoSwap。 更多细节参阅交换内存管理。
  • 要禁用交换分区(swap),可以使用命令 sudo swapoff -a 暂时关闭交换分区功能。 要使此更改在重启后仍然生效,请确保在系统的配置文件(如 /etc/fstab 或 systemd.swap)中禁用交换功能, 具体取决于你的系统配置方式。
    swapoff -a && sysctl -w vm.swappiness=0 # 临时关闭
    sed -ri ‘/[#]*swap/s@^@#@’ /etc/fstab # 基于配置文件关闭
    在这里插入图片描述

8.时区和时间同步配置

  • 设置东8区
root@k8s-master01:/home/zgq# timedatectl set-timezone Asia/Shanghai

在这里插入图片描述

  • 同步阿里云
root@k8s-master01:/home/zgq# ntpdate ntp.aliyun.com

在这里插入图片描述

  • 自动同步:通过计划任务实现时间同步。
root@k8s-master01:/home/zgq# crontab -e
`0 */1 * * * ntpdate time1.aliyun.com
root@k8s-master01:/home/zgq# crontab -l
# m h  dom mon dow   command
0 0 * * * ntpdate ntp.aliyun.com

在这里插入图片描述

9.配置内核转发及网桥过滤

|||所有主机均需要操作

  1. 配置containerd需要的模块,本次执行,手动加载此模块
modprobe -- overlay
modprobe -- br_netfilter

2.开机自动加载所需的内核模块

root@k8s-master01:/home/zgq# cat << EOF | tee /etc/modules-load.d/k8s.conf 
overlay
br_netfilter
EOF
```ap3.查看已加载的模块
```bash
root@k8s-node2:/home/zgq# lsmod | grep "overlay"
root@k8s-node2:/home/zgq# lsmod | grep "br_netfilter"

在这里插入图片描述

4.添加网桥过滤及内核转发配置文件
# 以下3个参数是containerd所依赖的内核参数

root@k8s-master01:/home/zgq# cat << EOF | tee /etc/sysctl.d/k8s.conf  
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

在这里插入图片描述

5.加载内核参数,使生效

root@k8s-master01:/home/zgq# sysctl --system

在这里插入图片描述

6.安装ipset及ipvsadm
|||||所有主机均需操作

当涉及到网络和流量管理时,ipset 和 ipvsadm 是两个常用的工具。下面是对它们的介绍:

  1. ipset:
    ipset 是一个用于管理 IP 地址集合的工具。
    它允许您创建、修改和删除包含 IP 地址、网络子网和端口号的集合。
    ipset 提供了高效的数据结构和算法,可以快速进行 IP 地址的匹配和查找。
    它经常与防火墙软件(如 iptables)一起使用,用于实现更高级的网络规则和过滤策略。
    iptables是Linux服务器上进行网络隔离的核心技术,内核在处理网络请求时会对iptables中的策略进行逐条解析,因此当策略较多时效率较低;而是用IPSet技术可以将策略中的五元组(协议,源地址,源端口,目的地址,目的端口)合并到有限的集合中,可以大大减少iptables策略条目从而提高效率。测试结果显示IPSet方式效率将比iptables提高100倍
  2. ipvsadm:
    ipvsadm 是一个用于配置 Linux 内核 IP 虚拟服务器(IPVS)的工具。
    IPVS 是一个实现负载均衡的内核模块,可以将传入的网络流量分发到多个后端服务器上。
    ipvsadm 可以用于创建、修改和删除 IPVS 规则和服务。
    它允许您定义负载均衡算法、设置后端服务器列表、配置健康检查和会话持久性等功能。
    通过 ipvsadm,您可以实现基于网络层或传输层的负载均衡,并优化网络流量的分发和处理。
    为什么要使用IPVS,从k8s的1.8版本开始,kube-proxy引入了IPVS模式,IPVS模式与iptables同样基于Netfilter,但是采用的hash表,因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能。
    ipvs依赖于nf_conntrack_ipv4内核模块,4.19包括之后内核里改名为nf_conntrack,1.13.1之前的kube-proxy的代码里没有加判断一直用的nf_conntrack_ipv4,好像是1.13.1后的kube-proxy代码里增加了判断,我测试了是会去load nf_conntrack使用ipvs正常

这两个工具在 Linux 系统中被广泛用于网络管理和负载均衡场景。它们提供了强大的功能和灵活性,用于管理和控制网络流量、配置防火墙规则以及实现高可用和高性能的网络服务。

  1. 安装ipset及ipvsadm
root@docker01:/home/zgq# apt install ipset ipvsadm

还可以准备:
sysstat 是一个用于监控系统性能的工具集,包括 iostat、mpstat、pidstat 和 sar 等工具。要在不同的操作系统上安装
‌conntrack‌是Linux内核中的一个重要组件,主要用于跟踪和记录网络连接的状态信息。它基于Netfilter框架实现,是防火墙、网络地址转换(NAT)等功能的基础。
libseccomp是一个用于Linux操作系统的安全计算模式(seccomp)的用户空间库.

  1. libseccomp支持seccomp安全计算模式,该模式是Linux内核的一种特性,允许限制进程可以执行的系统调用,以增加应用程序的安全性。
    libseccomp提供了用于创建、加载和管理seccomp过滤器的API。这些过滤器可以定义一组允许的系统调用规则,从而限制应用程序的系统调用集合,阻止对潜在危险的系统调用的调用。

  2. 所有节点创建要开机自动加载的模块配置文件

cat > /etc/modules-load.d/ipvs.conf << 'EOF'
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

3.创建加载模块脚本文件

cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe  --  ip_vs
modprobe  --  ip_vs_rr
modprobe  --  ip_vs_wrr
modprobe  --  ip_vs_sh
modprobe  --  nf_conntrack
EOF
  1. 执行ipvs.sh
root@k8s-node2:/home/zgq# sh ipvs.sh

10.关闭防火墙

  • 查看ufw状态
root@k8s-master01:/home/zgq# systemctl status ufw

在这里插入图片描述

  • ufw disable
    启动时关闭
root@k8s-node2:/home/zgq# ufw disable

在这里插入图片描述
立即关闭

root@docker01:/home/zgq# systemctl disable  ufw

11.安装containerd

  1. 安装和配置
apt update && apt install -y containerd

看下版本

root@k8s-node2:/home/zgq# containerd -v
生成配置文件
mkdir -p /etc/containerd && \
containerd config default > /etc/containerd/config.toml
修改/etc/containerd/config.toml 文件中:
直接搜索SystemdCgroup
SystemdCgroup 为 true:

在这里插入图片描述

  1. 重载SANDBOX
    正常情况下,国内你是拉取不到registry.k8s.io/pause:3.8镜像的,这个镜像是一切的pod的基础,要么自己手动导入进来,要么改成国内的镜像,通过设置以下配置来覆盖默认的沙盒镜像:
    在你的 containerd 配置中, 你可以通过设置以下选项重载沙箱镜像:
[plugins."io.containerd.grpc.v1.cri"]sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

可以直接用命令

sudo sed -i 's/sandbox_image = ".*"/sandbox_image = "registry.aliyuncs.com\/google_containers\/pause:3.9"/' /etc/containerd/config.toml

12. 安装 kube三件套

 更新源sudo apt update && \sudo apt upgrade -y安装工具apt install -y apt-transport-https ca-certificates curl gpg创建目录,有的版本有,看情况创建mkdir -p -m 755 /etc/apt/keyrings下载秘钥curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg && \
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加软件源1.32
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新,安装软件,防止更新
apt update && \
apt install -y kubelet kubectl kubeadm && \
apt-mark hold kubelet kubeadm kubectl
设置开机自启
systemctl enable --now kubelet
查看版本
kubeadm version

13.初始化MASTER

  1. 先下载镜像,有科学的不用阿里
sudo kubeadm config images pull \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.32.0 \
--cri-socket=unix:///run/containerd/containerd.sock 

在这里插入图片描述

  1. 初始化
kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.95.211 \ //修改IP
--control-plane-endpoint=k8s-master01 \  //修改HOSTNAME
--kubernetes-version=v1.32.0 \
--service-cidr=10.50.0.0/16 \
--pod-network-cidr=10.60.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock
  1. 完成初始化,规范化用户修改设置
Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 \--control-plane Then you can join any number of worker nodes by running the following on each as root:kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 
  • 不包括安装网络插件的,.Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是“Not Ready”状态、Pod 的 CoreDNS无法提供服务等。

  • 规范化修改用户设置

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
  • 查看pods执行情况
kubectl get pods -A

14.加入集群

  1. 加入control panel 节点
kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 \--control-plane 
  1. 加入worker 节点
kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 

如果忘记了token,可以采取以下方式重新获取token和sha256

root@k8s-master01:/home/zgq#kubeadm token create
qchluu.2qsq44a9rxttzv1qroot@k8s-master01:/home/zgq#openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null \
| sha256sum | awk '{print $1}'
9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6

14.安装calico

这里安装的目前最新版,这种方式安装不了的自行下载后执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
下载配置文件
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml
修改自己的cidr,然后执行
kubectl apply -f custom-resources.yaml
root@k8s-master01:/home/zgq# kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/tiers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/adminnetworkpolicies.policy.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator created

在这里插入图片描述

root@k8s-master01:/home/zgq# kubectl apply -f custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default created
root@k8s-master01:/home/zgq# kubectl get pods -A
NAMESPACE          NAME                                       READY   STATUS              RESTARTS   AGE
calico-apiserver   calico-apiserver-58548dbdb-jw49q           0/1     Pending             0          95s
calico-apiserver   calico-apiserver-58548dbdb-tpvqw           0/1     Pending             0          95s
calico-system      calico-kube-controllers-85d9cd79b5-8kqgk   0/1     Pending             0          94s
calico-system      calico-node-c9j2n                          0/1     Init:0/2            0          94s
calico-system      calico-typha-654c5b4475-7rbsx              0/1     ContainerCreating   0          95s
calico-system      csi-node-driver-dlw4n                      0/2     ContainerCreating   0          94s
kube-system        coredns-6766b7b6bb-87ndz                   0/1     Pending             0          3h45m
kube-system        coredns-6766b7b6bb-tbjxs                   0/1     Pending             0          3h45m
kube-system        etcd-k8s-master01                          1/1     Running             1          3h45m
kube-system        kube-apiserver-k8s-master01                1/1     Running             1          3h45m
kube-system        kube-controller-manager-k8s-master01       1/1     Running             1          3h45m
kube-system        kube-proxy-gp5nr                           1/1     Running             0          3h45m
kube-system        kube-scheduler-k8s-master01                1/1     Running             1          3h45m
tigera-operator    tigera-operator-7d68577dc5-5bm95           1/1     Running             0          10m

15.查看PODS状态

root@k8s-master01:/home/zgq# kubectl get pods -A
NAMESPACE          NAME                                       READY   STATUS    RESTARTS   AGE
calico-apiserver   calico-apiserver-58548dbdb-jw49q           1/1     Running   0          10h
calico-apiserver   calico-apiserver-58548dbdb-tpvqw           1/1     Running   0          10h
calico-system      calico-kube-controllers-85d9cd79b5-8kqgk   1/1     Running   0          10h
calico-system      calico-node-c9j2n                          1/1     Running   0          10h
calico-system      calico-typha-654c5b4475-7rbsx              1/1     Running   0          10h
calico-system      csi-node-driver-dlw4n                      2/2     Running   0          10h
kube-system        coredns-6766b7b6bb-87ndz                   1/1     Running   0          14h
kube-system        coredns-6766b7b6bb-tbjxs                   1/1     Running   0          14h
kube-system        etcd-k8s-master01                          1/1     Running   1          14h
kube-system        kube-apiserver-k8s-master01                1/1     Running   1          14h
kube-system        kube-controller-manager-k8s-master01       1/1     Running   1          14h
kube-system        kube-proxy-gp5nr                           1/1     Running   0          14h
kube-system        kube-scheduler-k8s-master01                1/1     Running   1          14h
tigera-operator    tigera-operator-7d68577dc5-5bm95           1/1     Running   0          10h
root@k8s-master01:/home/zgq# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
scheduler            Healthy   ok        
etcd-0               Healthy   ok        
root@k8s-master01:/home/zgq# kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
k8s-master01   Ready    control-plane   14h   v1.32.0
root@k8s-master01:/home/zgq# kubectl get ns
NAME               STATUS   AGE
calico-apiserver   Active   10h
calico-system      Active   10h
default            Active   14h
kube-node-lease    Active   14h
kube-public        Active   14h
kube-system        Active   14h
tigera-operator    Active   11h

其他参考站点

  1. 阿里开源镜像站

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

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

相关文章

二维数组 C++ 蓝桥杯

1.稀疏矩阵 #include<iostream> using namespace std;const int N 1e4 10; int a[N][N];int main() {int n, m; cin >> n >> m;for (int i 1; i < n; i) {for (int j 1; j < m; j) {cin >> a[i][j];}}for (int j m; j > 1; j--) {for (i…

macos系统jmap执行异常

jdk8环境下执行jmap异常 网上说mac环境jdk8不支持Jmap&#xff0c;需要替换成更高的jdk版本&#xff0c;更改zshrc文件的jdk版本 环境变量生效 执行jmap不再报错

Linux 传输层协议 UDP 和 TCP

UDP 协议 UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度如果校验和出错, 就会直接丢弃 UDP 的特点 UDP 传输的过程类似于寄信 . 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…

HTB:UnderPass[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机UDP开放端口进行脚本、服务扫描 …

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代&#xff0c;ARM&#xff08;Advanced RISC Machines&#xff09;处理器凭借其高性能、低功耗的特性&#xff0c;成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集&#xff08;RISC&#xff09;的典范&#xff0c;ARM核…

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现

伴随近年来新型储能技术的高质量规模化发展&#xff0c;储能电站作为新能源领域的重要载体&#xff0c; 旨在配合逐步迈进智能电网时代&#xff0c;满足电力系统能源结构与分布的创新升级&#xff0c;给予相应规模 电池管理系统的设计与实现以新的挑战。同时&#xff0c;电子系…

【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三

目录 1 -> 绘制图形 1.1 -> 绘制基本几何图形 1.2 -> 绘制自定义几何图形 2 -> 添加动画效果 2.1 -> animateTo实现闪屏动画 2.2 -> 页面转场动画 3 -> 常见组件说明 1 -> 绘制图形 绘制能力主要是通过框架提供的绘制组件来支撑&#xff0c;支…

【算法】经典博弈论问题——威佐夫博弈 python

目录 威佐夫博弈(Wythoff Game)【模板】 威佐夫博弈(Wythoff Game) 有两堆石子&#xff0c;数量任意&#xff0c;可以不同&#xff0c;游戏开始由两个人轮流取石子 游戏规定&#xff0c;每次有两种不同的取法 1)在任意的一堆中取走任意多的石子 2)可以在两堆中同时取走相同数量…

通过Redisson构建延时队列并实现注解式消费

目录 一、序言二、延迟队列实现1、Redisson延时消息监听注解和消息体2、Redisson延时消息发布器3、Redisson延时消息监听处理器 三、测试用例四、结语 一、序言 两个月前接了一个4万的私活&#xff0c;做一个线上商城小程序&#xff0c;在交易过程中不可避免的一个问题就是用户…

第一个Qt开发实例(一个Push Button按钮和两个Label)【包括如何在QtCreator中创建新工程、代码详解、编译、环境变量配置、测试程序运行等】

目录 Qt开发环境QtCreator的安装、配置在QtCreator中创建新工程在Forms→mainwindow.ui中拖曳出我们要的图形按钮查看拖曳出按钮后的代码为pushButton这个图形添加回调函数编译工程关闭开发板上QT的GUI(选做)禁止LCD黑屏(选做)设置Qt运行的环境变量运行Qt程序如何让程序在系统启…

Spring Security(maven项目) 3.0.3.0版本

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…

携程Java开发面试题及参考答案 (200道-上)

说说四层模型、七层模型。 七层模型(OSI 参考模型) 七层模型,即 OSI(Open System Interconnection)参考模型,是一种概念模型,用于描述网络通信的架构。它将计算机网络从下到上分为七层,各层的功能和作用如下: 物理层:物理层是计算机网络的最底层,主要负责传输比特流…

【Rust自学】16.4. 通过Send和Sync trait来扩展并发

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 16.4.1. Send和Sync trait Rust语言本身的并发特性较少&#xff0c;目前所提及的并发特性都来自于标准库&#xff0c;而不是语言本身。其…

MYSQL面试题总结(题目来源JavaGuide)

MYSQL基础架构 问题1&#xff1a;一条 SQL语句在MySQL中的执行过程 1. 解析阶段 (Parsing) 查询分析&#xff1a;当用户提交一个 SQL 语句时&#xff0c;MySQL 首先会对语句进行解析。这个过程会检查语法是否正确&#xff0c;确保 SQL 语句符合 MySQL 的语法规则。如果发现…

传输层协议——TCP协议

文章目录 &#x1f34d;TCP协议谈谈可靠性TCP协议格式序号与确认序号窗口大小六个标志位 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协…

pycharm(2)

conda 我下载安装conda的时候产生了各种问题&#xff0c;最终我发现&#xff0c;打开杀毒软件会有阻碍 cuda的版本问题很大&#xff0c;我尝试多个版本之后&#xff0c;发现anaconda3-2024.06.1-windows-x86_64安装了之后不会报错&#xff0c;另外pycharm的版本也一直有问题&a…

python算法和数据结构刷题[3]:哈希表、滑动窗口、双指针、回溯算法、贪心算法

回溯算法 「所有可能的结果」&#xff0c;而不是「结果的个数」&#xff0c;一般情况下&#xff0c;我们就知道需要暴力搜索所有的可行解了&#xff0c;可以用「回溯法」。 回溯算法关键在于:不合适就退回上一步。在回溯算法中&#xff0c;递归用于深入到所有可能的分支&…

【PyQt】pyqt小案例实现简易文本编辑器

pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器&#xff0c;使用PyQt5框架构建。以下是代码的主要功能和特点&#xff1a; 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…

Node.js与嵌入式开发:打破界限的创新结合

文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js&#xff1f;1.2 嵌入式开发的范式转变 二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案 三、实战案例&#xff1a;智能农业监测系统3.1 硬件配置3.2 软件架…