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

[云原生案例2.4 ] Kubernetes的部署安装 【通过Kubeadm部署Kubernetes高可用集群】

文章目录

  • 1. 基本架构及前置准备
    • 1.1 基本架构
    • 1.2 前置准备
  • 2. 系统初始化操作 ---- 所有节点
    • 2.1 关闭防火墙、selinux和swap分区
      • 2.1.1 关闭防火墙和selinux
      • 2.1.2 关闭交换分区
    • 2.2 修改主机名,添加域名映射
      • 2.2.1 修改主机名
      • 2.2.2 修改本地hosts文件
    • 2.3 内核升级
    • 2.4 调整内核参数
    • 2.5 所有节点实现Linux的资源限制
    • 2.6 加载ip_vs模块
    • 2.7 时间同步
    • 2.8 内核升级(可选项)
  • 3. 部署Docker
    • 3.1 通过yum安装docker ---- 所有节点
    • 3.2 修改相关配置并启动docker
  • 4. 部署Kurbernetes的相关工具
    • 4.1 安装kubeadm,kubelet和kubectl ---- 所有节点
  • 5. 高可用组件安装、配置
    • 5.1 部署 Haproxy ---- 所有 master 节点
    • 5.2 部署Keepalived ---- 所有 master 节点
    • 5.3 编写状态监控脚本,启动haproxy和keepalived
  • 6. 部署Kurbernetes集群
    • 6.1 设置集群初始化配置文件 ---- master01 节点
    • 6.2 所有节点拉取镜像
    • 6.3 master01 节点进行初始化
    • 6.4 环境配置 ---- master01节点
    • 6.5 部署网络插件flannel
    • 6.6 所有节点加入集群
      • 6.6.1 master节点加入集群
      • 6.6.1 node 节点加入集群
    • 6.7 查看当前集群信息

1. 基本架构及前置准备

1.1 基本架构

在这里插入图片描述

1.2 前置准备

Master01	192.168.67.100	
Master02	192.168.67.101	
Master03	192.168.67.102	Node01	192.168.67.103	
Node02	192.168.67.104	Harbor	192.168.67.105
注意事项:
- master节点cpu核心数要求大于2
- 最新的版本不一定好,但相对于旧版本,核心功能稳定,但新增功能、接口相对不稳
- 学会一个版本的 高可用部署,其他版本操作都差不多
- 宿主机尽量升级到CentOS 7.9
- 内核kernel升级到 4.19+ 这种稳定的内核
- 部署k8s版本时,尽量找 1.xx.5 这种大于5的小版本(这种一般是比较稳定的版本)

2. 系统初始化操作 ---- 所有节点

2.1 关闭防火墙、selinux和swap分区

2.1.1 关闭防火墙和selinux

#关闭防火墙
systemctl disable firewalld --now#关闭selinux 
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/configiptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

2.1.2 关闭交换分区

#交换分区必须要关闭。#K8s的各个组件和容器都需要足够的内存来运行,而Swap的使用可能导致性能下降,甚至是应用程序的奔溃。#关闭Swap可以确保集群的可预测性和稳定性,避免不必要的磁盘交换。swapoff -a						
sed -ri 's/.*swap.*/#&/' /etc/fstab		
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果

2.2 修改主机名,添加域名映射

2.2.1 修改主机名

hostnamectl set-hostname master01
hostnamectl set-hostname master02
hostnamectl set-hostname master03
hostnamectl set-hostname node01
hostnamectl set-hostname node02

2.2.2 修改本地hosts文件

vim /etc/hosts
192.168.67.100 master01
192.168.67.101 master02
192.168.67.102 master03
192.168.67.103 node01
192.168.67.104 node02

2.3 内核升级

wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpmwget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpmcd /opt/
yum localinstall -y kernel-ml*#更改内核启动方式
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grubby --default-kernelreboot

2.4 调整内核参数

cat > /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF#生效参数
sysctl --system  

在这里插入图片描述

2.5 所有节点实现Linux的资源限制

vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited

在这里插入图片描述

2.6 加载ip_vs模块

#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

在这里插入图片描述

2.7 时间同步

#通过ntp
yum -y install ntpdateln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#修改时区
echo 'Asia/Shanghai' >/etc/timezone#时间同步
ntpdate time2.aliyun.com

在这里插入图片描述

systemctl enable --now crondcrontab -e
*/30 * * * * /usr/sbin/ntpdate time2.aliyun.com

2.8 内核升级(可选项)

wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpmcd /opt/
yum localinstall -y kernel-ml*#更改内核启动方式
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grubby --default-kernel
reboot

3. 部署Docker

3.1 通过yum安装docker ---- 所有节点

yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io

在这里插入图片描述

3.2 修改相关配置并启动docker

配置镜像加速,修改默认Cgroupdriver,修改日志存储格式

  1. 使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。

  2. 日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志

cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://k2anw3oh.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "500m", "max-file": "3"}
}
EOF

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service --now
docker info | grep "Cgroup Driver"

在这里插入图片描述

4. 部署Kurbernetes的相关工具

4.1 安装kubeadm,kubelet和kubectl ---- 所有节点

#定义kubernetes源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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#安装
yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15

在这里插入图片描述

#配置Kubelet使用阿里云的pause镜像
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2"
EOF#开机自启kubelet
systemctl enable kubelet.service --now
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

5. 高可用组件安装、配置

5.1 部署 Haproxy ---- 所有 master 节点

#yum安装haproxy
yum -y install haproxy

在这里插入图片描述

#修改配置文件
cat > /etc/haproxy/haproxy.cfg << EOF
globallog         127.0.0.1 local0 infolog         127.0.0.1 local1 warningchroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemonstats socket /var/lib/haproxy/statsdefaultsmode                    tcplog                     globaloption                  tcplogoption                  dontlognulloption                  redispatchretries                 3timeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout check           10smaxconn                 3000frontend monitor-inbind *:33305mode httpoption httplogmonitor-uri /monitorfrontend k8s-masterbind *:6444mode tcpoption tcplogdefault_backend k8s-masterbackend k8s-mastermode tcpoption tcplogoption tcp-checkbalance roundrobinserver k8s-master1 192.168.67.100:6443  check inter 10000 fall 2 rise 2 weight 1server k8s-master2 192.168.67.101:6443  check inter 10000 fall 2 rise 2 weight 1server k8s-master3 192.168.67.102:6443  check inter 10000 fall 2 rise 2 weight 1
EOF

在这里插入图片描述

5.2 部署Keepalived ---- 所有 master 节点

yum -y install keepalived

在这里插入图片描述

cd /etc/keepalived/
vim keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_HA1			#路由标识符,每个节点配置不同
}vrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh"interval 2weight 2
}vrrp_instance VI_1 {state MASTER				#本机实例状态,MASTER/BACKUP,备机配置文件中设置BACKUPinterface ens33virtual_router_id 51priority 100				#本机初始权重,备机设置小于主机的值advert_int 1virtual_ipaddress {192.168.67.200          #设置VIP地址}track_script {chk_haproxy}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 编写状态监控脚本,启动haproxy和keepalived

vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
if ! killall -0 haproxy; thensystemctl stop keepalived
fi
systemctl enable --now haproxy
systemctl enable --now keepalived

在这里插入图片描述

#观察VIP漂移情况
ip a

在这里插入图片描述

6. 部署Kurbernetes集群

6.1 设置集群初始化配置文件 ---- master01 节点

#生成配置模板,包含默认的 Kubernetes 集群配置
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
cd /opt/
#修改配置文件
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.67.100		#指定当前master节点的IP地址
13   bindPort: 644321 apiServer:
22   certSANs:								#在apiServer属性下面添加一个certsSANs的列表,添加所有master节点的IP地址和集群VIP地址
23   - 192.168.67.200
24   - 192.168.67.100
25   - 192.168.67.101
26   - 192.168.67.10230 clusterName: kubernetes
31 controlPlaneEndpoint: "192.168.67.200:6444"		#指定集群VIP地址
32 controllerManager: {}38 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers			#指定镜像下载地址
39 kind: ClusterConfiguration
40 kubernetesVersion: v1.20.15				#指定kubernetes版本号
41 networking:
42   dnsDomain: cluster.local
43   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段,指定service网段
44   serviceSubnet: 10.96.0.0/16			#指定service网段
45 scheduler: {}
#末尾再添加以下内容
--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式#尽量手打不要拷贝

在这里插入图片描述

#更新集群初始化配置文件
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml

在这里插入图片描述

6.2 所有节点拉取镜像

#查看初始化需要的镜像
kubeadm config images list --kubernetes-version 1.25.4

在这里插入图片描述

#拷贝yaml配置文件给其他主机,通过配置文件进行拉取镜像
for i in master02 master03 node01 node02; do scp /opt/new.yaml $i:/opt/; done

在这里插入图片描述

kubeadm config images pull --config /opt/new.yaml
#进行拉取镜像

在这里插入图片描述

6.3 master01 节点进行初始化

kubeadm init --config new.yaml --upload-certs | tee kubeadm-init.log
#会初始化一个 Kubernetes 集群并生成相应的证书和密钥,并将相关信息保存在指定的配置文件中

在这里插入图片描述

#若初始化失败,进行的操作
kubeadm reset -f
ipvsadm --clear 
rm -rf ~/.kube
再次进行初始化

6.4 环境配置 ---- master01节点

#配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#修改controller-manager和scheduler配置文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
......#- --port=0					#搜索port=0,把这一行注释掉

在这里插入图片描述
在这里插入图片描述

systemctl restart kubelet

6.5 部署网络插件flannel

所有节点上传 flannel 镜像 flannel.tar 和网络插件 cni-plugins-linux-amd64-v1.3.0.tgz 到 /opt 目录

cd /opt
docker load < flannel.tar

在这里插入图片描述

mv /opt/cni /opt/cni_bak
mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

在这里插入图片描述

#master节点上传 kube-flannel.yml 文件
kubectl apply -f kube-flannel.yml 

在这里插入图片描述

6.6 所有节点加入集群

6.6.1 master节点加入集群

kubeadm join 192.168.67.200:6444 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:0edd4bc85bc4ff92c543fe317cc09f072527daa9e35e328fd01a07af3bdd4ca1 \--control-plane --certificate-key e27514724dd576114513144779d7c23c0ebe5e1ae91d93528838afc4d1511ec6mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在这里插入图片描述
在这里插入图片描述

6.6.1 node 节点加入集群

kubeadm join 192.168.67.200:6444 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:0edd4bc85bc4ff92c543fe317cc09f072527daa9e35e328fd01a07af3bdd4ca1

在这里插入图片描述
在这里插入图片描述

6.7 查看当前集群信息

kubectl get nodes

在这里插入图片描述

kubectl get pod -n kube-system 
#返回所有运行 kube-system 命名空间中的 pod 的列表,以及每个 pod 的状态、运行时间和 IP 地址等信息
#kube-system 命名空间是用于存储 Kubernetes 系统组件和插件的命名空间
#查看这些组件和插件的状态和健康信息

在这里插入图片描述

相关文章:

[云原生案例2.4 ] Kubernetes的部署安装 【通过Kubeadm部署Kubernetes高可用集群】

文章目录 1. 基本架构及前置准备1.1 基本架构1.2 前置准备 2. 系统初始化操作 ---- 所有节点2.1 关闭防火墙、selinux和swap分区2.1.1 关闭防火墙和selinux2.1.2 关闭交换分区 2.2 修改主机名&#xff0c;添加域名映射2.2.1 修改主机名2.2.2 修改本地hosts文件 2.3 内核升级2.4…...

PP-ChatOCRv2、PP-TSv2、大模型半监督学习工具...PaddleX新特性等你来pick!

小A是一名刚刚毕业的算法工程师&#xff0c;有一天&#xff0c;他被老板安排了一个活&#xff0c;要对一批合同扫描件进行自动化信息抽取&#xff0c;输出结构化的分析报表。OCR问题不大&#xff0c;但是怎么进行批量的结构化信息抽取呢&#xff1f;小A陷入了苦苦思索… 小B是…...

HarmonyOS 学习记录

时光荏苒,岁月如梭,韶华不负,未来可期。转眼间已经30岁了&#xff0c;学习的重要性不言而喻&#xff0c;在接下来的日子里记录下自己学习HarmonyOS的过程。增加一下知识储备&#xff0c;防患于未然嘛 不得不说华为的开发文档写的不错&#xff0c;开发工具直接安装后自动配置环境…...

阿里云 业务集群的冗余、备份、监控方案

1. 请解释什么是业务集群的冗余、备份和监控&#xff1f; 一、冗余方案 硬件冗余&#xff1a;在业务集群中&#xff0c;关键设备如服务器、存储设备等应采用双机热备或集群技术&#xff0c;确保在某台设备出现故障时&#xff0c;其他设备能够自动接管工作&#xff0c;保证业务…...

无人驾驶的未来 后疫情时代如何抵达

作者 | 马冀&#xff0c;澳鹏&#xff08;Appen&#xff09;中国区副总裁 自动驾驶—疫情危难中显身手 2020年&#xff0c;一场突如其来的新冠肺炎肆虐全球, 导致不同国家的人们被迫隔离或保持社交距离&#xff0c;人与人之间的接触变得风险极高。一时间&#xff0c;人们对于…...

(论文阅读31/100)Stacked hourglass networks for human pose estimation

31.文献阅读笔记 简介 题目 Stacked hourglass networks for human pose estimation 作者 Alejandro Newell, Kaiyu Yang, and Jia Deng, ECCV, 2016. 原文链接 https://arxiv.org/pdf/1603.06937.pdf 关键词 Human Pose Estimation 研究问题 CNN运用于Human Pose E…...

【第2章 Node.js基础】2.6 Node.js 的Buffer数据类型

Buffer数据类型 文章目录 Buffer数据类型什么是Buffer数据类型Buffer 的特点 创建Buffer实例Buffer用于编码转换将Buffer 实例转换为JSON 对象Buffer实例基本操作1. 写入Buffer实例&#xff1a;2. 从Buffer实例读取数据&#xff1a;3. Buffer实例合并&#xff1a; 4. Buffer实例…...

reactive和effect,依赖收集触发依赖

通过上一篇文章已经初始化项目&#xff0c;集成了ts和jest。本篇实现Vue3中响应式模块里的reactive方法。 前置知识要求 如果你熟练掌握Map, Set, Proxy, Reflect&#xff0c;可直接跳过这部分。 Map Map是一种用于存储键值对的集合&#xff0c;并且能够记住键的原始插入顺…...

【C#学习】backgroundWorker控件

BackgroundWorker 控件的几个实例&#xff08;C# backgroundworker使用方法&#xff09;&#xff1a; 在 WinForms 中&#xff0c;有时要执行耗时的操作&#xff0c;在该操作未完成之前操作用户界面&#xff0c;会导致用户界面停止响应。 解决的方法就是新开一个线程&#xff…...

Istio学习笔记-部署模型

参考&#xff1a;Istioldie 1.18 / 部署模型 当您将 Istio 用于生产环境部署时&#xff0c;需要确定一系列的问题。 网格将被限制在单个集群中还是分布在多个集群中&#xff1f; 是将所有服务都放置在单个完全连接的网络中&#xff0c;还是需要网关来跨多个网络连接服务&#…...

磁盘调度算法

磁盘调度算法是计算机操作系统中用于管理磁盘上的数据访问的重要组成部分。这些算法有助于优化数据的读写操作&#xff0c;以减少磁盘访问时间&#xff0c;提高系统性能。以下是一些常见的磁盘调度算法&#xff1a; 先来先服务&#xff08;FCFS&#xff0c;First-Come-First-Se…...

力扣题库2. 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开…...

【Linux】第十六站:进程地址空间

文章目录 一、程序地址空间1.内存的分布2.static修饰后为什么不会被释放3.一个奇怪的现象 二、进程地址空间1.前面现象的原因2.地址空间究竟是什么&#xff1f;3.为什么要有进程地址空间4.页表5.什么叫进程&#xff1f;6.进程具有独立性。为什么&#xff1f;怎么做到呢&#xf…...

基于Springboot的影城管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的影城管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介绍…...

如何在面试中胜出?接口自动化面试题安排上

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…...

联邦学习研究综述笔记

联邦学习 联邦学习的定义&#xff1a;联邦学习是一种分布式机器学习架构&#xff0c;包含多个客户端&#xff08;参与者&#xff09;和一个聚合服务器。客服端&#xff08;参与方&#xff09;&#xff1a;在本地使用自己的私有数据训练模型&#xff0c;训练完成之后将模型的参…...

RedisTemplate乱码问题

其实这是在解决一个项目问题是发现的&#xff0c;因为原开发者的大意&#xff0c;造成了系统出现严重的逻辑问题。 因为系统系统采用分模块开发&#xff0c;某模块使用Spring提供的RedisTemplate进行值的读写&#xff0c;另一位使用了框架基于Jedis的一套公用方法进行值的读写…...

Java用户和内核交互图

...

2023.11.14使用bootstrap制作一个简洁的前端注册登录页

2023.11.14使用bootstrap制作一个简洁的前端注册登录页 比较简洁的登录页&#xff0c;主要是为自己开发的一些平台页面做测试用&#xff0c;前端具备功能如下&#xff1a; &#xff08;1&#xff09;输入用户名、密码&#xff0c;需补充后端验证代码。 &#xff08;2&#xff…...

Avatar虚拟形象解决方案,趣味化的视频拍摄与直播新体验

企业们正在寻找新的方式来吸引和保持观众的注意力,一种新兴的解决方案就是使用Avatar虚拟形象技术&#xff0c;这种技术可以让用户在视频拍摄或直播场景中&#xff0c;以自定义的数字人形象出现&#xff0c;同时保持所有的表情和脸部驱动。美摄科技正是这个领域的领军者&#x…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...