【k8s】利用Kubeadm搭建k8s1.29.x版本+containerd

文章目录

  • 前言
    • 1.准备的三台虚拟机
    • 2.安装 kubeadm 前的准备工作
    • 3.安装containerd
      • 1.解压安装包
      • 2.生成默认配置文件
      • 3.使用systemd托管containerd
      • 4.修改默认配置文件
    • 4.安装runc
    • 5.安装 CNI plugins
      • 5.1 安装nerdctl
    • 6.安装 kubeadm、kubelet 和 kubectl
      • 6.1 配置crictl
    • 7.初始化集群
      • 1.打印初始化配置到yaml文件
      • 2.修改初始化默认配置文件
      • 3.查看下载的镜像
      • 4.提前拉取镜像
      • 5.初始化集群
        • 5.1 基本上会出现的错误
      • 6.配置kubectl访问集群
        • 1.初始化成功后会出现以下配置信息:
        • 2.根据提示配置信息
        • 3.访问集群
    • 8.安装 Flannel 网络插件
    • 9.安装其他节点


前言

这里写一个用kubeadm搭建k8s的1.29.x版本,依此来把当前文章变成后续 版本的通用部署k8s文章
,容器运行时有好几个 containerd、CRI-O、Docker Engine(使用 cri-dockerd),这里选择containerd

containerd安装参考手册

containerd 调用链更短,组件更少,更稳定,支持OCI标准,占用节点资源更少。 建议选择 containerd。
以下情况,请选择 docker 作为运行时组件:
如需使用 docker in docker
如需在 K8S 节点使用 docker build/push/save/load 等命令
如需调用 docker API
如需 docker compose 或 docker swarm

1.准备的三台虚拟机

IP规格操作系统主机名
192.168.31.72c4gCentOS7.9k8s-master01
192.168.31.82c4gCentOS7.9k8s-node01
192.168.31.92c4gCentOS7.9k8s-node02

2.安装 kubeadm 前的准备工作

参考官方文档:安装 kubeadm

2.1 Kubernetes 使用主机名来区分集群内的节点,所以每台主机的 hostname 不可重名。修改 /etc/hostname 这个文件来重命名 hostname:
Master 节点命名为 k8s-master01,Worker 节点命名为 k8s-node01,k8s-node02

hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

2.2 将 SELinux 设置为 permissive 模式(相当于将其禁用)

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

2.3 关闭防火墙

systemctl stop firewalld.service 
systemctl disable firewalld.service

2.4 关闭swap(避免内存交换至磁盘导致性能下降)

 $ sudo swapoff -a$ sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

2.5 配置主机名解析

cat >>/etc/hosts<< EOF
192.168.31.7 k8s-master01
192.168.31.8 k8s-node01
192.168.31.9 k8s-node02
EOF

2.6 开启转发 IPv4 并让 iptables 看到桥接流量

创建名为/etc/modules-load.d/k8s.conf 的文件,并且将 overlay和br_netfilter写入。这两个模块 overlay 和 br_netfilter 是 containerd 运行所需的内核模块。
(overlay模块:overlay模块是用于支持Overlay网络文件系统的模块。Overlay文件系统是一种在现有文件系统的顶部创建叠加层的方法,以实现联合挂载(Union Mount)。它允许将多个文件系统合并为一个单一的逻辑文件系统,具有层次结构和优先级。这样可以方便地将多个文件系统中的文件或目录合并在一起,而不需要实际复制或移动文件。
br_netfilter模块:br_netfilter模块是用于支持Linux桥接网络的模块,并提供了与防火墙(netfilter)子系统的集成。桥接网络是一种将不同的网络接口连接在一起以实现局域网通信的方法,它可以通过Linux内核的桥接功能来实现。br_netfilter模块与netfilter集成,可用于在Linux桥接设备上执行网络过滤和NAT(网络地址转换)操作。)

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl --system# 运行以下命令确认模块是否正常被加载
lsmod | grep br_netfilter
lsmod | grep overlay
# 通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1:
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

3.安装containerd

安装包下载地址:containerd

1.解压安装包

## 解压到 /usr/local 目录下
tar Czxvf /usr/local/  containerd-1.7.16-linux-amd64.tar.gz

2.生成默认配置文件

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

3.使用systemd托管containerd

wget -O /usr/lib/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.servicesystemctl daemon-reload
systemctl enable --now containerd

如果上述方式不行,可以粘贴以下内容执行

# 生成system service文件
cat<<EOF|tee /etc/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerdType=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999[Install]
WantedBy=multi-user.target
EOF# 加载文件并启动
systemctl daemon-reload
systemctl enable --now containerd

这里有两个重要的参数:

Delegate: 这个选项允许 containerd 以及运行时自己管理自己创建容器的 cgroups。如果不设置这个选项,systemd 就会将进程移到自己的 cgroups 中,从而导致 containerd 无法正确获取容器的资源使用情况。
KillMode: 这个选项用来处理 containerd 进程被杀死的方式。默认情况下,systemd 会在进程的 cgroup 中查找并杀死 containerd 的所有子进程。KillMode 字段可以设置的值如下。

control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
process:只杀主进程
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:没有进程会被杀掉,只是执行服务的 stop 命令

4.修改默认配置文件

1.# 开启运行时使用systemd的cgroup
sed -i '/SystemdCgroup/s/false/true/' /etc/containerd/config.toml
2.#重启containerd
systemctl restart containerd

4.安装runc

用于根据OCI规范生成和运行容器的CLI工具
下载地址

wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc

5.安装 CNI plugins

CNI(container network interface)是容器网络接口,它是一种标准设计和库,为了让用户在容器创建或者销毁时都能够更容易的配置容器网络。这一步主要是为contained nerdctl的客户端工具所安装的依赖 .
客户端工具有两种,分别是crictl和nerdctl, 推荐使用nerdctl,使用效果与docker命令的语法一致

# wget https://github.com/containernetworking/plugins/releases/download/v1.4.1/cni-plugins-linux-amd64-v1.4.1.tgz# mkdir -p /opt/cni/bin
[root@clouderamanager-15 containerd]# tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.4.1.tgz#ll /opt/cni/bin/
total 128528
-rwxr-xr-x 1 1001  127  4119661 Mar 12 18:56 bandwidth
-rwxr-xr-x 1 1001  127  4662227 Mar 12 18:56 bridge
-rwxr-xr-x 1 1001  127 11065251 Mar 12 18:56 dhcp
-rwxr-xr-x 1 1001  127  4306546 Mar 12 18:56 dummy
-rwxr-xr-x 1 1001  127  4751593 Mar 12 18:56 firewall
-rwxr-xr-x 1 root root  2856252 Feb 21  2020 flannel
-rwxr-xr-x 1 1001  127  4198427 Mar 12 18:56 host-device
-rwxr-xr-x 1 1001  127  3560496 Mar 12 18:56 host-local
-rwxr-xr-x 1 1001  127  4324636 Mar 12 18:56 ipvlan
-rw-r--r-- 1 1001  127    11357 Mar 12 18:56 LICENSE
-rwxr-xr-x 1 1001  127  3651038 Mar 12 18:56 loopback
-rwxr-xr-x 1 1001  127  4355073 Mar 12 18:56 macvlan
-rwxr-xr-x 1 root root 37545270 Feb 21  2020 multus
-rwxr-xr-x 1 1001  127  4095898 Mar 12 18:56 portmap
-rwxr-xr-x 1 1001  127  4476535 Mar 12 18:56 ptp
-rw-r--r-- 1 1001  127     2343 Mar 12 18:56 README.md
-rwxr-xr-x 1 root root  2641877 Feb 21  2020 sample
-rwxr-xr-x 1 1001  127  3861176 Mar 12 18:56 sbr
-rwxr-xr-x 1 1001  127  3120090 Mar 12 18:56 static
-rwxr-xr-x 1 1001  127  4381887 Mar 12 18:56 tap
-rwxr-xr-x 1 root root  7506830 Aug 18  2021 tke-route-eni
-rwxr-xr-x 1 1001  127  3743844 Mar 12 18:56 tuning
-rwxr-xr-x 1 1001  127  4319235 Mar 12 18:56 vlan
-rwxr-xr-x 1 1001  127  4008392 Mar 12 18:56 vrf

5.1 安装nerdctl

nerdctl 下载链接

[root@k8s-master01 ~]# tar xf nerdctl-1.7.6-linux-amd64.tar.gz 
[root@k8s-master01 ~]# cp nerdctl /usr/local/bin/

使用方法可以看看help基本和docker一致,有一点查看k8s的容器的话要带上命名空间,查看命名空间方法, 你们应该看不到,因为你们k8s没安装完毕,下面只是演示已有的环境,你们可以安装文档安装完后在执行就可以看到了

[root@k8s-master01 ~]# nerdctl namespace ls
NAME       CONTAINERS    IMAGES    VOLUMES    LABELS
default    2             3         0              
k8s.io     18            28        0      [root@k8s-master01 ~]# nerdctl -n k8s.io ps
CONTAINER ID    IMAGE                                                                      COMMAND                   CREATED           STATUS    PORTS    NAMES
064fa2784341    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  55 minutes ago    Up                 k8s://kube-system/kube-apiserver-k8s-master01
09c26f251e2b    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  54 minutes ago    Up                 k8s://kube-system/coredns-857d9ff4c9-pfv7g
1c76bb267dd7    registry.aliyuncs.com/google_containers/coredns:v1.11.1                    "/coredns -conf /etc…"    54 minutes ago    Up                 k8s://kube-system/coredns-857d9ff4c9-j2mpk/coredns
26056672e64f    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  55 minutes ago    Up                 k8s://kube-system/kube-controller-manager-k8s-master01
39c8b14c7900    docker.io/flannel/flannel:v0.25.1                                          "/opt/bin/flanneld -…"    55 minutes ago    Up                 k8s://kube-flannel/kube-flannel-ds-4lvmj/kube-flannel
5a2179bd3586    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  55 minutes ago    Up                 k8s://kube-system/kube-proxy-pn9nf
5b08a8bc55b3    registry.aliyuncs.com/google_containers/kube-apiserver:v1.29.4             "kube-apiserver --ad…"    55 minutes ago    Up                 k8s://kube-system/kube-apiserver-k8s-master01/kube-apiserver
5c5cd79490e2    registry.aliyuncs.com/google_containers/kube-controller-manager:v1.29.4    "kube-controller-man…"    55 minutes ago    Up                 k8s://kube-system/kube-controller-manager-k8s-master01/kube-controller-manager
6ac3186661e8    registry.aliyuncs.com/google_containers/etcd:3.5.12-0                      "etcd --advertise-cl…"    55 minutes ago    Up                 k8s://kube-system/etcd-k8s-master01/etcd
71dcba075ef1    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  55 minutes ago    Up                 k8s://kube-flannel/kube-flannel-ds-4lvmj
832a79f84588    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  55 minutes ago    Up                 k8s://kube-system/etcd-k8s-master01
88c5762186d3    registry.aliyuncs.com/google_containers/coredns:v1.11.1                    "/coredns -conf /etc…"    54 minutes ago    Up                 k8s://kube-system/coredns-857d9ff4c9-pfv7g/coredns
8da195124e98    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  54 minutes ago    Up                 k8s://kube-system/coredns-857d9ff4c9-j2mpk
972e77d13a98    registry.aliyuncs.com/google_containers/pause:3.9                          "/pause"                  55 minutes ago    Up                 k8s://kube-system/kube-scheduler-k8s-master01
c68d547746ad    registry.aliyuncs.com/google_containers/kube-proxy:v1.29.4                 "/usr/local/bin/kube…"    55 minutes ago    Up                 k8s://kube-system/kube-proxy-pn9nf/kube-proxy
e2aec44d040f    registry.aliyuncs.com/google_containers/kube-scheduler:v1.29.4             "kube-scheduler --au…"    55 minutes ago    Up                 k8s://kube-system/kube-scheduler-k8s-master01/kube-scheduler

6.安装 kubeadm、kubelet 和 kubectl

参考 官方文档

你需要在每台机器上安装以下的软件包:
kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。
以下是1.29版本的仓库,如果要更换版本只需更新v版本号即可

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOFyum clean all && yum makecache

不指定版本默认下载最新的

# 指定版本
yum install -y kubelet-1.29.4 kubeadm-1.29.4 kubectl-1.29.4 --disableexcludes=kubernetes# 不指定版本
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetessystemctl enable --now kubelet# 查看下载的版本
[root@k8s-master01 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"29", GitVersion:"v1.29.4", GitCommit:"55019c83b0fd51ef4ced8c29eec2c4847f896e74", GitTreeState:"clean", BuildDate:"2024-04-16T15:05:51Z", GoVersion:"go1.21.9", Compiler:"gc", Platform:"linux/amd64"}# v1.29.4的版本

6.1 配置crictl

# 所有节点都操作
cat <<EOF|tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
EOFroot@k8s-master01 ~]# crictl ps -a
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD

7.初始化集群

1.打印初始化配置到yaml文件

kubeadm config print init-defaults >  kubeadm-config.yaml

2.修改初始化默认配置文件

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.31.7 # master的地址bindPort: 6443
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockimagePullPolicy: IfNotPresentname: k8s-master01 # master节点名称taints: # 设置污点,不让pod运行在控制面- effect: PreferNoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 设置国内镜像地址,加速镜像拉取kind: ClusterConfiguration
kubernetesVersion: 1.29.4 # k8s安装的版本,记住要和你上面下载的版本号一致
networking:podSubnet: 10.244.0.0/16 # 设置pod的网络地址,flannel默认是这个地址dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:anonymous:enabled: falsewebhook:cacheTTL: 0senabled: truex509:clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:mode: Webhookwebhook:cacheAuthorizedTTL: 0scacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: ""
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMaximumGCAge: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging:flushFrequency: 0options:json:infoBufferSize: "0"verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s

3.查看下载的镜像

[root@k8s-master01 ~]# kubeadm config images list --config kubeadm-config.yaml 
registry.aliyuncs.com/google_containers/kube-apiserver:v1.29.4
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.29.4
registry.aliyuncs.com/google_containers/kube-scheduler:v1.29.4
registry.aliyuncs.com/google_containers/kube-proxy:v1.29.4
registry.aliyuncs.com/google_containers/coredns:v1.11.1
registry.aliyuncs.com/google_containers/pause:3.9
registry.aliyuncs.com/google_containers/etcd:3.5.12-0

4.提前拉取镜像

kubeadm config images pull --config kubeadm-config.yaml

5.初始化集群

kubeadm init --config kubeadm-config.yaml

注意:如果初始化有问题,请参考5.1的方案去排查解决

5.1 基本上会出现的错误

它一直请求的是registry.k8s.io/pause:3.8 这个registry.k8s.io仓库的初始容器3.8版本,和我们上面通过文件所得到的版本不一样且仓库地址不是阿里云的,所以kubelet pause拉取镜像不受imageRepository: registry.aliyuncs.com/google_containers的影响
在这里插入图片描述
如果也出现初始化失败也是上面的问题,以下就是解决方法:

# 重定向一个标签
ctr -n k8s.io i tag registry.aliyuncs.com/google_containers/pause:3.9  registry.k8s.io/pause:3.8
# 在重新初始化
kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=all

基本上就可以解决掉了

其他节点也都执行以下操作

crictl pull registry.aliyuncs.com/google_containers/pause:3.9  && ctr -n k8s.io i tag registry.aliyuncs.com/google_containers/pause:3.9  registry.k8s.io/pause:3.8

6.配置kubectl访问集群

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/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.31.7:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:3fa473a5e9d923a3fc5ddbecab79bc939c62835cd0f74cee6770b833b124b65c
2.根据提示配置信息
  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
3.访问集群
# 查看节点
[root@k8s-master01 ~]# kubectl get nodes
NAME           STATUS   ROLES           AGE    VERSION
k8s-master01   NotReady control-plane   1m   v1.29.4

你会注意到 Master 节点的状态是NotReady,这是由于还缺少网络插件,集群的内部网络还没有正常运作。

8.安装 Flannel 网络插件

Kubernetes 定义了 CNI 标准,有很多网络插件,这里选择最常用的 Flannel,可以在它的 GitHub 仓库找到相关文档。

# 可以直接下载这个yaml,然后进行修改wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

因为咱们刚刚定义了podSubnet的网段为10.244.0.0/16 和flannel是同一个网段 所以就不需要修改yaml的网段了
然后我们安装 Flannel:

$ kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

再查看就正常啦, 如果还没有ready 可以看下flannel pod是否起来,kubectl get pod -n kube-flannel

[root@k8s-master01 ~]# kubectl get nodes -o wide
NAME           STATUS   ROLES           AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
k8s-master01   Ready    control-plane   15m   v1.29.4   192.168.31.7   <none>        CentOS

9.安装其他节点

在其他节点执行下面命令即可,这个命令就是最初初始化成功后所留下的信息

kubeadm join 192.168.31.7:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:3fa473a5e9d923a3fc5ddbecab79bc939c62835cd0f74cee6770b833b124b65c

如果忘记了或者被上面命令覆盖了可以执行以下命令重新生成:

kubeadm token create --print-join-command

安装完后查看节点信息

[root@k8s-master01 ~]# kubectl get nodes
NAME           STATUS   ROLES           AGE     VERSION
k8s-master01   Ready    control-plane   23m   v1.29.4
k8s-node01     Ready    <none>          14m   v1.29.4
k8s-node02     Ready    <none>          14m   v1.29.4

至此整个安装结束

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

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

相关文章

wordpress忘记后台密码,在数据库中修改回来,然后再修改回去。

源地址&#xff1a;https://www.ctvol.com/seoomethods/1421332.html 我们在做wordpess运维的时候&#xff0c;都会遇到很尴尬的时候&#xff0c;有时候在错误运维中&#xff0c;不知道删除了什么东西&#xff0c;造成wordpress后台不能登录&#xff0c;后台页面也直接失效&am…

文献速递:深度学习医学影像心脏疾病检测与诊断--CT中的深度学习用于自动钙评分:使用多个心脏CT和胸部CT协议的验证

Title 题目 Deep Learning for Automatic Calcium Scoring in CT: Validation Using Multiple Cardiac CT and Chest CT Protocols CT中的深度学习用于自动钙评分&#xff1a;使用多个心脏CT和胸部CT协议的验证 Background 背景 Although several deep learning (DL) calc…

【网站项目】戒烟网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

ZIP压缩输出流(将ZIP文件解压)

文章目录 前言一、ZIP压缩输出流是什么&#xff1f;二、使用介绍 1.使用方法2.实操展示总结 前言 该篇文章相对应的介绍如何使用java代码将各种文件&#xff08;文件夹&#xff09;从ZIP压缩文件中取出到指定的文件夹中。解压流将ZIP文件中的文件以条目的形式逐一读取&#xff…

SAP PP模块学习提炼第一部分

SAP是ERP的一款软件。 SAP的入门困难&#xff1a; 听不懂&#xff0c;看不懂缺乏知识体系缺乏行业经验 SAP入门引导&#xff1a; 导师引导实战演练 SAP基础介绍 1.什么是SAP? System, Application and Products in Data Processing 即数据处理的系统、应用和产品。 2.…

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

算法学习007-进制转换 c++递归算法实现 中小学算法思维学习 信奥算法解析

目录 C进制转换 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C进制转换 一、题目要求 1、编程实现 小明学c有一段时间了&#xff0c;今天他想做一个进制转换的小程序&#xff0c;将十进…

网络基础——路由

网络基础——路由 要想网络畅通&#xff0c;应让网络中的路由器知道如何转发数据包到各个网段。路由器根据路由表来转发数据包&#xff0c;而路由表是通过直连网络、静态路由以及动态路由来构建的。 route命令&#xff0c;底层是使用ioctl实现&#xff1b;ip命令&#xff0c;…

一键生成AI数字人短视频工具推荐!

数字人是什么&#xff1f;是利用人工智能技术实现与真人直播形象的1:1克隆&#xff0c;即克隆出一个数字化的你自己&#xff0c;包括你的形象、表情、动作和声音都会被克隆下来&#xff0c;让你能够拥有接近真人的表现力。 怎样使用数字人一天生成上百条短视频&#xff0c;无需…

大模型爱好者的福音,有了它个人电脑也可以运行大模型了

GPT4ALL是一款可以运行在个人电脑上的大模型系统&#xff0c;不需要GPU即可运行&#xff0c;目前支持mac&#xff0c;linux和windows系统。 什么是GPT4ALL&#xff1f; 不论学习任何东西&#xff0c;首先要明白它是个什么东西。 Open-source large language models that run …

2024年CSC公派联合培养博士项目申报即将开始~

一、选派计划 联合培养博士研究生面向全国各博士学位授予单位选拔。 联合培养博士研究生的留学期限、资助期限为6-24个月。留学期限应根据拟留学单位学制、外方录取通知&#xff08;或正式邀请信&#xff09;中列明的留学时间确定。个人申报的资助期限应不超过留学期限&#…

力扣每日一题105:从前序与中序序列构造二叉树

题目 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,1…

内容安全(IPS入侵检测)

入侵检测系统&#xff08; IDS &#xff09;---- 网络摄像头&#xff0c;侧重于风险管理&#xff0c;存在于滞后性&#xff0c;只能够进行风险发现&#xff0c;不能及时制止。而且早期的IDS误报率较高。优点则是可以多点进行部署&#xff0c;比较灵活&#xff0c;在网络中可以进…

临时邮箱API发送邮件的安全性?如何保障?

临时邮箱API发送邮件的步骤有哪些&#xff1f;设置邮箱API方法&#xff1f; 电子邮件作为一种重要的通信方式&#xff0c;而临时邮箱API作为一种新兴的邮件发送技术&#xff0c;其安全性更是成为大家关注的焦点。那么&#xff0c;临时邮箱API发送邮件的安全性究竟如何呢&#…

C语言内存函数memcpy与memmove

一.memcpy的使用和模拟实现 1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置…

[正则表达式]正则表达式语法与运用(Regular Expression, Regex)

0. 在线工具 RegExr: Learn, Build, & Test RegEx 1. 场景列举 vim Linux命令行 sublime 编辑器 java、python等语言中 ... ... 不同场景、不同版本语法可能不一样 2. 以下示例数据与基本语法 &2024 &As20242024# 2024sA#abdcefgha_bdcefghABASDSADAASDASD…

Java反序列化-CC11链

前言 这条链子的主要作用是为了可以在 Commons-Collections 3.2.1 版本中使用&#xff0c;而且还是无数组的方法。这条链子适用于 Shiro550漏洞 CC11链子流程 CC2 CC6的结合体 CC2 这是CC2的流程图&#xff0c;我们取的是后面那三个链子&#xff0c;但是由于CC2 只能在 c…

创建操作手册知识库的终极指南

在繁忙的工作中&#xff0c;有一个方便好用的操作手册知识库能帮我们节省大量时间&#xff0c;避免走弯路。那么&#xff0c;如何创建这样一个知识库呢&#xff1f;下面就给大家讲解一下简单易学的创建步骤。 一、明确目标与需求 在创建操作手册知识库之前&#xff0c;首先要明…

【Java 刷题记录】前缀和

前缀和 25. 一维前缀和 示例1&#xff1a; 输入&#xff1a; 3 2 1 2 4 1 2 2 3输出&#xff1a; 3 6import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(S…

纯血鸿蒙APP实战开发——手写绘制及保存图片

介绍 本示例使用drawing库的Pen和Path结合NodeContainer组件实现手写绘制功能。手写板上完成绘制后&#xff0c;通过调用image库的packToFile和packing接口将手写板的绘制内容保存为图片&#xff0c;并将图片文件保存在应用沙箱路径中。 效果图预览 使用说明 在虚线区域手写…