Debian11之基于kubeadm安装K8S(v1.26.0) 集群

news2024/10/7 12:20:53

Debian10之基于kubeadm安装K8S(v1.26.0) 集群

参考文章

原文链接:https://blog.csdn.net/qq_30818545/article/details/128056996
版权声明:本文为CSDN博主「大能嘚吧嘚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明

文章目录

  • Debian10之基于kubeadm安装K8S(v1.26.0) 集群
      • 硬件要求
      • 各服务器初始化配置
  • 容器运行时接口 和 容器运行时
  • 各节点安装容器运行时以及配置
      • docker安装
            • 优先考虑官网安装--重点重点
            • 卸载历史版本
  • 存储库安装
    • 1、安装依赖包
    • 2、安装GPG证书(使用阿里云地址)
    • 3、写入软件源信息(使用阿里云地址)
    • 4、安装 Docker
  • 开机自启
  • 安装校验
  • 配置阿里云镜像加速器
  • Containerd1.6.19安装及配置
  • 介绍
  • 下载
            • 版本选择
            • ctr 和 crictl 区别
            • 配置containerd使用crictl(跳过)
  • 安装
  • 各节点安装kubeadm、kubectl、kubelet
            • 我使用的方法
        • 安装GPG密钥
  • 初始化Master节点上的kubeadm
    • 查询k8s各组件的版本号
            • 第一种方法
            • 第二种方法
    • 常用指令
    • 初始化master节点
            • 查看集群上节点的状态
    • 安装CNI(以Calico为例)后查看节点运行状况
    • 查询 kube-system 命名空间下的 deployment、pod、service 资源
      • 测试在 k8s 创建 pod 是否可以正常访问网络
      • 第二种办法参考下面博主
  • 报错问题
            • 出现这种情况一般是版本问题,可通过升级操作系统内核修复

硬件要求

1、Master主机:2核CPU、4G内存、20G硬盘
2、Node主机:4+核CPU、8G+内存、40G+硬盘
2、集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
3、节点之中不可以有重复的主机名、MAC 地址或 product_uuid
4、开启机器上的某些端口
5、为了保证 kubelet 正常工作,必须禁用交换分区

各服务器初始化配置

  • 配置各主节点的主机名称
hostnamectl set-hostname k8smaster && hostname # 设置主节点1的主机名称
hostnamectl set-hostname k8snode1 && hostname # 设置从节点1的主机名称

  • 配置各节点的Host文件
vi /etc/hosts # 编辑文件,注意不能有空格


192.168.31.236   k8s-master
192.168.31.235   k8s-node1
192.168.31.237   k8s-node2
  • 关闭各节点的防火墙
systemctl disable nftables.service && systemctl stop nftables.service && systemctl status nftables.service

  • 永久禁用各节点的交换分区
swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab # 注释掉swap那一行
  • 同步各节点的时区
# 设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai

容器运行时接口 和 容器运行时

容器运行时接口(Container Runtime Interface),简称CRI

容器运行时(Container Runtime),简称CR,有Docker、Containerd、Podman等等

默认情况下 Kubernetes 使用 CRI 与 CR 进行交互,如果不指定CRI,kubeadm 会自动尝试通过扫描已知的端点列表来检测已安装的CRI,如果检测到有多个或者没有CRI,kubeadm 将抛出一个错误并要求你指定一个想要的CRI

K8S 1.20 版本前后对比
img

img

K8S 1.20版本以前,CRI内部维护了DockerShim,CR使用的是Docker, CRI与CR进行交互时是通过DockerShim桥接来实现的
K8S 1.20版本以后,CRI内部取消的DockerShim(市场上大部分CR都遵循了K8S的CRI规范,KS8为了适应更多的CR而放弃了Docker,如果还想使用Docker则需要外部单独安装cri-dockerd),CR使用的是Containerd

各节点安装容器运行时以及配置

docker安装

优先考虑官网安装–重点重点
https://docs.docker.com/engine/install/debian/
卸载历史版本
apt-get remove docker docker-engine docker.io containerd runc && apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin

rm -rf /etc/docker && rm -rf /usr/libexec/docker && rm -rf /var/lib/docker && rm -rf /var/lib/containerd && rm -rf /etc/apt/keyrings

whereis docker # 确保没有和docker相关的文件

image-20230324210137811

存储库安装

1、安装依赖包

apt-get update && apt-get install ca-certificates curl gnupg lsb-release apt-transport-https software-properties-common

2、安装GPG证书(使用阿里云地址)

 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
mkdir -m 0755 -p /etc/apt/keyrings \
&& curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
mkdir -m 0755 -p /etc/apt/keyrings \
&& curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

image-20230324210355103

3、写入软件源信息(使用阿里云地址)

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.aliyun.com/docker-ce/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4、安装 Docker

chmod a+r /etc/apt/keyrings/docker.gpg && apt-get update

apt-cache madison docker-ce # 查询存储库中可用的版本

image-20230324210609858

apt-get install docker-ce=5:23.0.1-1~debian.11~bullseye # Docker守护进程

apt-get install docker-ce-cli=5:23.0.1-1~debian.11~bullseye # CLI工具用来远程控制Docker守护进程‎

# 轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具
apt-get install docker-compose && apt-get install docker-compose-plugin

开机自启

systemctl enable docker && systemctl restart docker && systemctl status docker

安装校验

docker info # 基本信息

docker --version # 检查安装版本

配置阿里云镜像加速器

img

在这里插入图片描述

Containerd1.6.19安装及配置

介绍

1、K8S发布的CRI(Container Runtime Interface)统一了容器运行时接口,凡是支持CRI的容器运行时的皆可作为K8S的底层容器运行时,而Docker 没有实现 CRI,为此必须安装一个额外的服务 cri-dockerd才可以在K8S中使用

2、K8S 1.24版本中从 kubelet 中移除了docker作为容器运行时,取而代之的是containerd容器运行时,它是从Docker中分离出来的底层容器运行时,使用起来与Docker相似

3、containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性

4、containerd 可以在宿主机中管理完整的容器生命周期,包括容器镜像的传输和存储、容器的执行和管理、存储和网络等

下载

https://github.com/containerd/containerd/releases
版本选择
containerd-1.6.19-linux-amd64.tar.gz(单独的 containerd)(不推荐)

cri-containerd-1.6.19-linux-amd64.tar.gz(containerd + runc)(不推荐)
runc为容器运行时,实现了容器的init、run、create、ps等等在运行容器所需要的cmd指令

cri-containerd-cni-1.6.19-linux-amd64.tar.gz(containerd + runc + cni)(推荐)
CNI(Container Network Interface) 是一套容器网络接口规范,通过插件的形式支持各种各样的网络类型,为容器分配ip地址

注意:Kubernetes 要想实现网络模型,则需要安装一个 三方的CNI 插件。在 Kubernetes 1.24 之前,CNI 插件可以由 kubelet 使用命令行参数 cni-bin-dir 和 network-plugin 管理,Kubernetes 1.24开始移除了这些命令行参数。Kubernetes 1.26开始支持用于集群联网的容器网络接口 (CNI) 插件(官方推荐安装地址

https://kubernetes.io/docs/concepts/cluster-administration/addons
ctr 和 crictl 区别
背景:在部署 k8s 的过程中,经常要对镜像进行操作(拉取、删除、查看等)
问题:使用过程中会发现 ctr 和 crictl 有很多相同功能,也有些不同,那区别到底在哪里?
说明:
1.ctr 是 containerd 自带的 CLI 命令行工具,crictl 是 k8s 中 CRI(容器运行时接口)的客户端,
k8s 使用该客户端和 containerd 进行交互;
[root@xianchaonode1 ~]# cat /etc/crictl.yaml 
runtime-endpoint: "/run/containerd/containerd.sock"
image-endpoint: ""
timeout: 0
debug: false
pull-image-on-create: false
disable-pull-on-run: false
systemctl restart containerd
2.ctr 和 crictl 命令具体区别如下,也可以--help 查看。crictl 缺少对具体镜像的管理能力,可能是
k8s 层面镜像管理可以由用户自行控制,能配置 pod 里面容器的统一镜像仓库,镜像的管理可以有
habor 等插件进行处理。


docker 跟 containerd 不冲突,安装 docker 是为了能基于 dockerfile 构建
镜像
配置containerd使用crictl(跳过)

所有节点都配置

注意,我们安装的是cri-containerd-cni-1.6.19-linux-amd64.tar.gz(containerd + runc + cni)(推荐) ,就不需要再配置下面的拉

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

systemctl restart containerd

安装

文档地址

https://github.com/containerd/containerd/blob/main/docs/getting-started.md
  • 解压
tar xzf /home/lixing/cri-containerd-cni-1.6.19-linux-amd64.tar.gz -C / # 自动把内部etc、opt、usr目录解压到/目录

  • 生成配置文件模板并自定义
mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml # 生成配置文件

  • 自定义镜像
vi /etc/containerd/config.toml # 编辑启动文件

mkdir -p /etc/containerd				#创建一个目录用于存放containerd的配置文件
containerd config default | sudo tee /etc/containerd/config.toml	#把containerd配置导出到文件


vim /etc/containerd/config.toml			#修改配置文件
[plugins."io.containerd.grpc.v1.cri"]
..................................

#搜索sandbox_image,把原来的k8s.gcr.io/pause:3.6改为
"registry.aliyuncs.com/google_containers/pause:3.9" 
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"	 
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
..........................

#搜索SystemdCgroup,把这个false改为true		
SystemdCgroup = true					


#搜索config_path,配置镜像加速地址(这是一个目录下面创建)
[plugins."io.containerd.grpc.v1.cri".registry]
     config_path = "/etc/containerd/certs.d"			

#创建镜像加速的目录 
mkdir /etc/containerd/certs.d/docker.io -pv
#配置加速
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://xxxxx.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]
EOF

#加载containerd的内核模块
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

#重启containerd
systemctl restart containerd 
systemctl status containerd


runc 安装(containerd通过runc来运行容器)

注意:containerd 解压后默认是包含runc的,但是缺乏相关依赖,建议自行安装并覆盖默认的 runc

下载地址

https://github.com/opencontainers/runc/releases
chmod +x runc.amd64 && mv runc.amd64 /usr/local/sbin/runc && runc -v # 覆盖默认的runc

  • 刷新配置文件
systemctl daemon-reload && systemctl restart containerd # 重新加载服务配置文件并重启

  • 设置开机启动
systemctl enable containerd # 开机自启
systemctl restart containerd.service # 重启服务
systemctl status containerd.service # 查看服务状态

  • 查看版本
containerd -version

ctr version

image-20230324234938796

各节点安装kubeadm、kubectl、kubelet

在这里插入图片描述

  • kubeadm:用来初始化集群的指令
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等
  • kubectl:用来与集群通信的命令行工具

官方安装教程

kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本

我使用的方法
https://lework.github.io/2021/04/03/debian-kubeadm-install/#%E9%83%A8%E7%BD%B2master%E8%8A%82%E7%82%B9
  • 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

  • 安装GPG密钥

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg  https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg


  sudo echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

  • 添加 Kubernetes apt 仓库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

  • 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
    安装Kubernetes
sudo apt-get upgrade && sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl 
# sudo apt-get remove kubelet kubeadm kubectl # 卸载

sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本,标记软件包不被自动更新

  • 添加 kubelet 开机自启
sudo systemctl enable kubelet

sudo systemctl restart kubelet && sudo systemctl status kubelet # 重启并查看状态

image-20230325002133597

配置 cgroup 驱动

kubelet 和 容器运行时需使用相同的CGroup驱动并且采用相同的配置

Linux上控制组(CGroup)用于限制分配给进程的资源
kubelet 和 容器运行时都需要对接CGroup来强制执行为Pod和容器管理资源(为诸如 CPU、内存这类资源设置请求和限制)
由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装, 推荐使用 systemd 驱动,不推荐 cgroupfs 驱动

初始化Master节点上的kubeadm

查询k8s各组件的版本号

第一种方法
kubeadm config images list # 查询k8s各组件的版本号

registry.k8s.io/kube-apiserver:v1.26.0
registry.k8s.io/kube-controller-manager:v1.26.0
registry.k8s.io/kube-scheduler:v1.26.0
registry.k8s.io/kube-proxy:v1.26.0
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3

image-20230325100836513

第二种方法

不是完全可以先拉镜像,可以先初始化接着往下做

初始化前可先拉取对应的镜像
查看初始化需要的镜像

 sudo kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

image-20230325102713582

拉取

sudo kubeadm config images pull --cri-socket unix:///run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers

常用指令

kubeadm init 用于搭建控制平面节点
kubeadm join 用于搭建工作节点并将其加入到集群中
kubeadm upgrade 用于升级 Kubernetes 集群到新版本
kubeadm config 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 kubeadm upgrade 来配置你的集群
kubeadm token 用于管理 kubeadm join 使用的令牌
kubeadm reset 用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
kubeadm certs 用于管理 Kubernetes 证书
kubeadm kubeconfig 用于管理 kubeconfig 文件
kubeadm version 用于打印 kubeadm 的版本信息
kubeadm alpha 用于预览一组可用于收集社区反馈的特性

初始化master节点

# kubernetes-version #制定 kubernetes 版本
# image-repository  #选择用于拉取镜像的容器仓库
# apiserver-advertise-address #当前 Master 主机的ip地址
# service-cidr #为服务的虚拟 IP 地址段,默认值:"10.96.0.0/12"
# pod-network-cidr #指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDR
sudo kubeadm init \
    --kubernetes-version v1.26.0 \
    --image-repository registry.aliyuncs.com/google_containers \
    --apiserver-advertise-address 192.168.111.30 \
    --service-cidr 10.245.0.0/12 \
    --pod-network-cidr 10.244.0.0/16

在这里插入图片描述

image-20230325103321239

  • Master1节点执行
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

kubeadm token list # 获取令牌
kubeadm token create # 创建令牌


新节点加入集群时token已过期,需要重新生成,在master执行如下命令

$ kubeadm token create --print-join-command

  • image-20230325103818143

    所有Node节点执行(加入Node节点到Master节点)

kubeadm join 192.168.111.30:6443 --token 6j62uf.oiy1b6apenl5c9pi \
--discovery-token-ca-cert-hash sha256:7a228dc323378d8d90e5af1b158a49dfcda8efd3ebe2d09274a9b8619c6b5539

kubeadm join 192.168.31.236:6443 --token 1uszne.hf4w4jd38xwok5r7 \
--discovery-token-ca-cert-hash sha256:31328100092458af3d12c1a28ce9acda8a44ffcd33e0f3d5d40fee0eb621765c

image-20230325103843329

查看集群上节点的状态
注意:默认K8S是不安装CNI(容器网络接口)的,需要开发者自行安装三方CNI
CNI 全称是 Container Network Interface(容器网络接口,负责容器间的网络通信),是由 CoreOS 提出的容器网络规范,k8s 网络模型采用的就是该CNI 网络模型规范,常见的CNI插件有 Calico、Flannel、Terway、Weave Net 、Canal 以及 Contiv

具体安装参考:https://kubernetes.io/docs/concepts/cluster-administration/addons

journalctl -f -u kubelet # 查看 kubelet 执行日志

1、(containerd容器版本包含CNI)当前CNI版本为1.0.0,而服务器CNI插件的版本只支持0.1.0-0.4.0

在这里插入图片描述

2、(containerd容器版本不包含CNI)没有安装CNI网络插件

在这里插入图片描述

安装CNI(以Calico为例)后查看节点运行状况

安装教程参考这篇文章

把安装 calico 需要的镜像 calico.tar.gz 传到 xianchaomaster1、xianchaomaster2、 这个包可以从1.24到1.26都可以使用

xianchaomaster3 和 xianchaonode1 节点,手动解压:

链接:https://pan.baidu.com/s/1LnEvpmyqClh_cSdcouWnIQ?pwd=rpzh 
提取码:rpzh 
--来自百度网盘超级会员V2的分享
[root@xianchaomaster1 ~]# ctr -n=k8s.io images import calico.tar.gz
[root@xianchaomaster2 ~]# ctr -n=k8s.io images import calico.tar.gz
[root@xianchaomaster3 ~]# ctr -n=k8s.io images import calico.tar.gz
[root@xianchaonode1 ~]# ctr -n=k8s.io images import calico.tar.gz

上传 calico.yaml 到 xianchaomaster1 上,使用 yaml 文件安装 calico 网络插件 。
[root@xianchaomaster1 ~]# kubectl apply -f calico.yaml

#calico 的 STATUS 状态是 Ready,说明 k8s 集群正常运行了

image-20230325104245990

kubectl get nodes -o wide
kubectl get pod -A

image-20230325104523164

查询 kube-system 命名空间下的 deployment、pod、service 资源

kubectl get deployment,pods,service -n kube-system -o wide
kubectl describe -n kube-system pod podName
kubectl logs -n kube-system podName

pod/kube-controller-manager-k8smaster1    k8smaster1【负责维护集群的状态,程序部署、故障检测、自动扩展、滚动更新】
pod/kube-scheduler-k8smaster1             k8smaster1【负责集群的资源调度,按照预定的策略将pod调度到相应的node节点上】
pod/kube-apiserver-k8smaster1             k8smaster1【资源操作的唯一入口,接受用户输入的指令,提供认证、授权、API注册和发现等机制】
pod/etcd-k8smaster1                       k8smaster1【负责存储集群中各种资源的对象信息】
pod/kube-proxy-xxxxx                      k8smaster1【负责提供集群内部的服务发现和负载均衡】

测试在 k8s 创建 pod 是否可以正常访问网络

#把 busybox-1-28.tar.gz 上传到 xianchaonode1 节点,手动解压
[root@xianchaonode1 ~]# ctr images import busybox-1-28.tar.gz
kubectl run busybox --image docker.io/library/busybox:1.28 --image-pull-policy=IfNotPresent --restart=Never --rm -it  busybox -- sh
/ # ping www.baidu.com
PING www.baidu.com (39.156.66.18): 56 data bytes
64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms
#通过上面可以看到能访问网络,说明 calico 网络插件已经被正常安装了

image-20230325113436054

第二种办法参考下面博主

https://blog.csdn.net/VIP099/article/details/106748278?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167971355116800184183492%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167971355116800184183492&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-9-106748278-null-null.142^v76^control_1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%20k8s%E6%B5%8B%E8%AF%95pod%E9%9B%86%E7%BE%A4%E7%BD%91%E7%BB%9C&spm=1018.2226.3001.4187

image-20230325112101512

报错问题

image-20230324211346390

删除这个目录下面的其他源,因为跟其他的源重复掉了
image-20230324211911472

出现这种情况一般是版本问题,可通过升级操作系统内核修复

.csdn.net/VIP099/article/details/106748278?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167971355116800184183492%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167971355116800184183492&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-9-106748278-null-null.142v76control_1,201v4add_ask,239v2insert_chatgpt&utm_term=%20k8s%E6%B5%8B%E8%AF%95pod%E9%9B%86%E7%BE%A4%E7%BD%91%E7%BB%9C&spm=1018.2226.3001.4187


[外链图片转存中...(img-8dAmPxUu-1679742515054)]

# 报错问题

[外链图片转存中...(img-7tSIx1ui-1679742515054)]

删除这个目录下面的其他源,因为跟其他的源重复掉了
[外链图片转存中...(img-I0n8vtlH-1679742515055)]

###### 出现这种情况一般是版本问题,可通过升级操作系统内核修复


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

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

相关文章

游戏封包加密方案解析

当下游戏市场已全面回暖&#xff0c;暑期档临近更将迎来大量新游上线&#xff0c;如此关键节点&#xff0c;游戏厂商应当更加注重游戏安全。 FairGuard发现近期游戏黑灰产攻击角度愈发刁钻&#xff0c;除了常见的内存修改外挂、注入挂&#xff0c;针对游戏封包破解的「脱机挂」…

Springboot项目开发常遇到的问题

一、Springboot&#xff0c;修改默认端口&#xff0c;无效 Springboot是一个轻量级Web开发工具。里面内嵌了tomcat&#xff0c;所以我们不需要安装tomcat了。但是多个项目放在一起的时候&#xff0c;总不能都访问8080端口吧。所以我们需要修改默认端口。 默认是8080&#xff0…

jQuery 基础知识

1.jQuery的使用 要想使用 jQuery 的话&#xff0c;我们必须先要官网上下载&#xff08; http://jquery.com/ &#xff09;3.7 到 4.0的开发版本就可以&#xff0c;下载到文件夹以后桌面都可以 &#xff0c;然后拖动到代码编辑器根目录下即可 在需要使用 jQuery 的页面引入 j…

使用chartgtp写Android代码

<LinearLayout android:layout_width"match_parent" android:layout_height"match_parent" android:orientation"horizontal"> <TextView android:id"id/姓名" …

FME教程:批量提取面要素图形的拐点坐标到Excel,其他类型图形的坐标提取、输出可参考本文方法

目录 一、提取成果 二、实现过程 1.读取数据 2.分离内外边界 3.提取坐标 4.获取边界序号 5.坐标处理 6.数据输出 三、总结 今天给大家介绍使用FME提取几何图形拐点坐标&#xff0c;并输出到Excel中的案例。这里以shapefile格式&#xff0c;且内部存在环洞的面要素为例…

linux nohup命令如何使用?

Linux nohup 命令 nohup 英文全称 no hang up&#xff08;不挂起&#xff09;&#xff0c;用于在系统后台不挂断地运行命令&#xff0c;退出终端不会影响程序的运行。 nohup 命令&#xff0c;在默认情况下&#xff08;非重定向时&#xff09;&#xff0c;会输出一个名叫 nohup…

低价乱价问题怎么处理

消费者遇到商品价格混乱的时候&#xff0c;选择不购买即可&#xff0c;但是品牌商遇到线上低价、乱价的局面又怎么办呢&#xff0c;不处理当然是不可以的。品牌放任低价、乱价不管的后果就是&#xff0c;经销商流失、顾客流失、品牌价值受损。那品牌应如何解决低价问题呢。 什么…

《嵌入式存储器架构、电路与应用》----学习记录(二)

第3章 嵌入式动态随机存储器 6T SRAM存储单元由六个晶体管组成&#xff0c;单元面积相对较大。为了增加存储密度&#xff0c;eDRAM是SRAM最具有潜力的替代品&#xff0c;根据存储单元不同分类&#xff1a; 传统的单晶体管单电容的(1T1C)eDRAM&#xff0c;其存储单元由一种特殊…

Redis的缓存过期淘汰策略

Redis的缓存过期淘汰策略 一 面试题引入二 Redis内存满了怎么办&#xff1f;2.1 redis默认内存多少&#xff1f;在哪里查看&#xff1f;如何设置修改&#xff1f;2.2 如果Redis内存使用超出了设置的最大值会怎样&#xff1f; 三 Redis里的数据怎么没的&#xff1f;它如何删除呢…

智能出行 驱动未来|2023 开放原子全球开源峰会 CARSMOS 开源智能出行生态年会即将启幕

由开放原子开源基金会主办&#xff0c;元遨 / CARSMOS 开源智能出行项目组协办&#xff0c;深信科创、Futurewei Technologies、Open Motors、北极雄芯等单位共同承办的 2023 开放原子全球开源峰会 “CARSMOS 开源智能出行生态年会” 将于 6 月 12 日在北京经开区北人亦创国际会…

chatgpt赋能python:Python函数:降低编程复杂度的利器

Python函数&#xff1a;降低编程复杂度的利器 编写高效且易于维护的代码&#xff0c;是每个开发者都追求的目标。Python函数在实现这个目标中起着至关重要的作用。通过函数&#xff0c;我们可以将程序分解为更小的代码块&#xff0c;以简化代码逻辑和降低复杂度。本文将介绍Py…

C++服务器框架开发7——日志系统LogFormatter_2

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发6——日志系统logFormatter/size_t学习 C服务器框架开发7——日志系统LogFormatter_2 目前进度 目前进度 学…

Java程序设计入门教程--随机类Random

随机数的类 在程序设计中&#xff0c;经常都需要产生一些随机数&#xff0c;比如模拟随机抽奖、抽样等。 Random类在java.util包中&#xff0c;是专门用于提供生成一个随机数的类&#xff0c;随机数的生成相关方法都在该内中。比如Random类的nextInt方法需要一int型值作为参数&…

【生信】R语言在RNA-seq中的应用

R语言在RNA-seq中的应用 文章目录 R语言在RNA-seq中的应用生成工作流环境读取和处理数据由targets文件提供实验定义对实验数据进行质量过滤和修剪生成FASTQ质量报告 比对建立HISAT2索引并比对 读长量化读段计数样本间的相关性分析 差异表达分析运行edgeR可视化差异表达结果计算…

11.Ansible Roles介绍

什么是Ansible角色&#xff1f; 就像在现实世界中给不同的人分配角色一样,让他们成为医生工程师, 宇航员, 警察,或者厨师&#xff61;在Ansible的世界里, 你可以给服务器分配角色,让它们成为数据库服务器&#xff64; Web服务器&#xff64; Redis消息服务器或备份服务器&#…

LCUSB-13xB/M 系列高性能 USB 接口 CAN 卡在医疗体外诊断仪上的应用

1&#xff0c;LCUSB -13xB/M 系列高性能 USB 接口 CAN 卡的功能介绍 LCUSB -13xB/M 系列高性能 USB 接口 CAN 卡&#xff0c;坚固 金属外壳&#xff0c;具有更佳 EMC 性能&#xff0c;插到用户设备 USB 接口 上&#xff0c;快速扩展出 1~2 路 CAN 通道&#xff0c;可作为组件集…

java基础学习

一、注释 1&#xff09;当行注释 // 2&#xff09;多行注释 /* ... */ 3&#xff09;文档注释 &#xff08;java特有&#xff09; /** author 张三 version v1.0 这是文档注释&#xff0c;需要将class用public修饰 */ 二、关键字 &#xff08;1&#xff09;48个关键…

tinker CAD入门操作

入门 - 导航和菜单 欢迎来到设计世界&#xff01; 设计是发现所有尚未完成的东西的艺术。它是学习和教学&#xff0c;打破和制造&#xff0c;看到和展示的平等部分。 设计就是分享&#xff01; Tinkercad是一款功能强大且易于使用的工具&#xff0c;用于创建数字设计&#xff0…

CVE-2023-33246 Apache RocketMQ RCE

0x01 漏洞介绍 Apache RocketMQ是一款开源的分布式消息和流处理平台&#xff0c;提供了高效、可靠、可扩展的低延迟消息和流数据处理能力&#xff0c;广泛用于异步通信、应用解耦、系统集成以及大数据、实时计算等场景。 漏洞的官方描述为当RocketMQ多个组件&#xff0c;包括N…

chatgpt赋能python:Python分三行输入:提高编程效率的绝佳方法

Python分三行输入&#xff1a;提高编程效率的绝佳方法 Python是一种高级编程语言&#xff0c;以简洁、易读的代码著称。Python分三行输入是一种旨在提高编程效率的技术&#xff0c;它可以减少代码阅读时间、降低语法错误率&#xff0c;并且让代码更加易于维护。在本文中&#…