基于centos7.9使用shell脚本部署k8s1.25平台
k8s
- 环境初始化
- 安装Harbor
- 安装k8s
- 安装istio和kubevirt
使用脚本部署k8s1.25版本平台,网络插件使用flannel ,容器运行时ctr,部署包括harbor仓库,服务网格、kubevirt服务等
使用的centos7.9资源配置如下:
主机 | IP | 资源 |
---|---|---|
master | 192.168.200.100 | 4C_8G_100G |
node | 192.168.200.101 | 4C_8G_100G |
环境初始化
两边节点修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname node
cat >> /etc/hosts <<eof
192.168.200.100 master
192.168.200.101 node
eof
mastr节点配置centos源
mkdir /opt/centos
mount /dev/sr0 //opt/centos/
rm -rf /etc/yum.repos.d/*
配置repo仓库
vi /etc/yum.repos.d/local.repo
[local]
name=local
gpgcheck=0
enabled=1
baseurl=file:///opt/centos
[k8s]
name=k8s
gpgcheck=0
enabled=1
baseurl=file:///opt/kubernetes-repo
安装Harbor
mount kubernetes_v2.1.iso /mnt/
cp -rf /mnt/* /opt/
cd /opt/
#!/bin/bash# 配置免密钥
ALL_SERVER_ROOT_PASSWORD=000000
all_hosts=`cat /etc/hosts |awk '{print $1}' |sed '/::1/d'|sort -u`
all_hostname=`cat /etc/hosts |awk '{print $2}' |sort -u`
a_hosts="$all_hosts $all_hostname"
my_ip=`ip a |grep -w "inet" |awk '{print $2}'|sed 's/\/.*//g'`
other_ip=$all_hosts
for i in $my_ip;do other_ip=`echo $other_ip |sed "s/$i//g"`;doneyum install -y expect
if [[ ! -s ~/.ssh/id_rsa.pub ]];thenssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q -b 2048
fi
for hosts in $a_hosts; doping $hosts -c 4 >> /dev/null 2>&1if [ 0 -ne $? ]; thenecho -e "\033[31mWarning\n$hosts IP unreachable!\033[0m"fiexpect -c "set timeout -1;spawn ssh-copy-id -i /root/.ssh/id_rsa $hosts ;expect {*(yes/no)* {send -- yes\r;exp_continue;}*assword:* {send -- $ALL_SERVER_ROOT_PASSWORD\r;exp_continue;}eof {exit 0;}}";
done# 配置 时间同步
IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
yum install -y chrony
sed -i '3,6s/^/#/g' /etc/chrony.conf
sed -i "7s|^|server $IP iburst|g" /etc/chrony.conf
echo "allow all" >> /etc/chrony.conf
echo "local stratum 10" >> /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
timedatectl set-ntp true
sleep 5
systemctl restart chronyd
chronyc sources# 关闭防火墙以及selinux
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0# 关闭swap分区
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
echo -e "nameserver 114.114.114.114" > /etc/resolv.conf
echo -e "overlay\nbr_netfilter" > /etc/modules-load.d/containerd.conf
modprobe -- overlay
modprobe -- br_netfilter
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/kubernetes.conf# 安装 Docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
systemctl enable docker
systemctl start docker# 修改 Docker Cgroup Driver为systemd
tee /etc/docker/daemon.json <<EOF
{"insecure-registries" : ["0.0.0.0/0"],"registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker# 安装docker-compose
chmod +x /opt/docker-compose/v2.10.2-docker-compose-linux-x86_64
mv /opt/docker-compose/v2.10.2-docker-compose-linux-x86_64 /usr/local/bin/docker-compose# 导入镜像
for i in $(ls /opt/images|grep tar)
dodocker load -i /opt/images/$i
done# 安装Harbor仓库
IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
cd /opt/harbor/
tar -zxvf harbor-offline-installer-v2.5.3.tgz
cd harbor
mv harbor.yml.tmpl harbor.yml
sed -i "5s/reg.mydomain.com/${IP}/g" harbor.yml
sed -i "13s/^/#/g" harbor.yml
sed -i "15,18s/^/#/g" harbor.yml
docker load -i harbor.v2.5.3.tar.gz
./prepare || exit
./install.sh || exit
sleep 5
docker-compose ps
echo "请在浏览器通过http://${IP}访问Harbor"
[root@localhost opt]# ./k8s_harbor_install.sh
搭建完成后界面IP访问Harbor:admin/Harbor12345
导入镜像
#!/bin/bash#--------------------------------------------
## 镜像上传说明
# 需要先在镜像仓库中创建 library 项目
# 根据实际情况更改以下私有仓库地址
#--------------------------------------------# 定义日志
workdir=`pwd`
log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").loglogger()
{log=$1cur_time='['$(date +"%Y-%m-%d %H:%M:%S")']'echo ${cur_time} ${log} | tee -a ${log_file}
}images_hub() {while true;doread -p "输入镜像仓库地址(不加http/https): " registryread -p "输入镜像仓库用户名: " registry_userread -p "输入镜像仓库用户密码: " registry_passwordecho "您设置的仓库地址为: ${registry},用户名: ${registry_user},密码: xxx"read -p "是否确认(Y/N): " confirmif [ $confirm != Y ] && [ $confirm != y ] && [ $confirm == '' ]; thenecho "输入不能为空,重新输入"elsebreakfidone
}images_hubecho "镜像仓库 $(docker login -u ${registry_user} -p ${registry_password} ${registry})"images=$(docker images -a | grep -v TAG | grep -v goharbor | awk '{print $1 ":" $2}')#images=$(cat library-images.txt )# 定义全局项目,如果想把镜像全部同步到一个仓库,则指定一个全局项目名称;
global_namespace=librarydocker_push() {for imgs in $( echo "${images}" );doif [[ -n "$global_namespace" ]]; thenn=$(echo ${imgs} | awk -F"/" '{print NF-1}')# 如果镜像名中没有/,那么此镜像一定是library仓库的镜像;if [ ${n} -eq 0 ]; thenimg_tag=${imgs}#重命名镜像docker tag ${imgs} ${registry}/${global_namespace}/${img_tag}#删除原始镜像#docker rmi ${imgs}#上传镜像docker push ${registry}/${global_namespace}/${img_tag}# 如果镜像名中有一个/,那么/左侧为项目名,右侧为镜像名和tagelif [ ${n} -eq 1 ]; thenimg_tag=$(echo ${imgs} | awk -F"/" '{print $2}')#重命名镜像docker tag ${imgs} ${registry}/${global_namespace}/${img_tag}#删除旧镜像#docker rmi ${imgs}#上传镜像docker push ${registry}/${global_namespace}/${img_tag}# 如果镜像名中有两个/,elif [ ${n} -eq 2 ]; thenimg_tag=$(echo ${imgs} | awk -F"/" '{print $3}')#重命名镜像docker tag ${imgs} ${registry}/${global_namespace}/${img_tag}#删除旧镜像#docker rmi ${imgs}#上传镜像docker push ${registry}/${global_namespace}/${img_tag}else#标准镜像为四层结构,即:仓库地址/项目名/镜像名:tag,如不符合此标准,即为非有效镜像。echo "No available images"fielsen=$(echo ${imgs} | awk -F"/" '{print NF-1}')# 如果镜像名中没有/,那么此镜像一定是library仓库的镜像;if [ ${n} -eq 0 ]; thenimg_tag=${imgs}namespace_1=librarynamespace_2=library#重命名镜像docker tag ${imgs} ${registry}/${namespace_1}/${img_tag}docker tag ${imgs} ${registry}/${namespace_2}/${img_tag}#删除原始镜像#docker rmi ${imgs}#上传镜像docker push ${registry}/${namespace_1}/${img_tag}docker push ${registry}/${namespace_2}/${img_tag}# 如果镜像名中有一个/,那么/左侧为项目名,右侧为镜像名和tagelif [ ${n} -eq 1 ]; thenimg_tag=$(echo ${imgs} | awk -F"/" '{print $2}')namespace=$(echo ${imgs} | awk -F"/" '{print $1}')#重命名镜像docker tag ${imgs} ${registry}/${namespace}/${img_tag}#删除旧镜像#docker rmi ${imgs}#上传镜像docker push ${registry}/${namespace}/${img_tag}# 如果镜像名中有两个/,elif [ ${n} -eq 2 ]; thenimg_tag=$(echo ${imgs} | awk -F"/" '{print $3}')namespace=$(echo ${imgs} | awk -F"/" '{print $2}')#重命名镜像docker tag ${imgs} ${registry}/${namespace}/${img_tag}#删除旧镜像#docker rmi ${imgs}#上传镜像docker push ${registry}/${namespace}/${img_tag}else#标准镜像为四层结构,即:仓库地址/项目名/镜像名:tag,如不符合此标准,即为非有效镜像。echo "No available images"fifidone
}docker_push
[root@localhost opt]# ./k8s_image_push.sh
输入镜像仓库地址(不加http/https): 192.168.200.100
输入镜像仓库用户名: admin
输入镜像仓库用户密码: Harbor12345
您设置的仓库地址为: 192.168.200.100,用户名: admin,密码: xxx
是否确认(Y/N): Y
安装k8s
[root@localhost opt]# cat k8s_master_install.sh
#!/bin/bash# 安装 Kubeadm
yum install -y kubeadm-1.25.0 kubelet-1.25.0 kubectl-1.25.0systemctl enable kubelet
systemctl start kubelet
docker -v
kubelet --version# 部署依赖
IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`tar -zxvf /opt/cri/crictl-v1.25.0-linux-amd64.tar.gz -C /usr/local/bin/
containerd config default > /etc/containerd/config.toml
sed -ri -e 's/(.*SystemdCgroup = ).*/\1true/' -e "s@(.*sandbox_image = ).*@\1\'$IP/library/pause:3.8\'@" /etc/containerd/config.toml
sed -i -e "/.*registry.mirrors.*/a\ [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"]\n endpoint = [\"https://registry.docker-cn.com\" ,\"http://hub-mirror.c.163.com\" ,\"https://docker.mirrors.ustc.edu.cn\"]\n [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"$IP\"]\n endpoint = [\"http://$IP\"]" -e "/.*registry.configs.*/a\ [plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\"$IP\".tls]\n insecure_skMASTER_IP_verify = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\"$IP\".auth]\n username = \"admin\"\n password = \"Harbor12345\"" /etc/containerd/config.tomlcat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOFtar -zxvf /opt/cri/nerdctl-0.23.0-linux-amd64.tar.gz -C /usr/local/bin/
mkdir -p /etc/nerdctl/cat > /etc/nerdctl/nerdctl.toml <<EOF
namespace = "k8s.io"
insecure_registry = true
EOFtar -zxvf /opt/cri/buildkit-v0.10.4.linux-amd64.tar.gz -C /usr/local/
cat > /usr/lib/systemd/system/buildkit.socket <<EOF
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660[Install]
WantedBy=sockets.target
EOF
cat > /usr/lib/systemd/system/buildkit.service << EOF
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit[Service]
Type=notify
ExecStart=/usr/local/bin/buildkitd --addr fd://[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl enable buildkit && systemctl start buildkit
systemctl daemon-reload && systemctl restart containerd && systemctl enable --now containerdctr version && crictl version && runc -version && buildctl --version && nerdctl versioncd /opt/harbor/harbor && docker-compose restart &> /dev/null && cd ~
nerdctl login -u admin -pHarbor12345 $IP# 初始化 master 节点
kubeadm init --kubernetes-version=1.25.0 --apiserver-advertise-address=$IP --image-repository $IP/library --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
sleep 50
kubectl get pod -n kube-system -owide# 部署 flannel网络
eval sed -i 's@docker.io/flannel@$IP/library@g' /opt/yaml/flannel/kube-flannel.yaml
kubectl apply -f /opt/yaml/flannel/kube-flannel.yaml
sleep 20# 部署dashboard
mkdir /opt/dashboard-certs
cd /opt/dashboard-certs/
kubectl create namespace kubernetes-dashboard
openssl genrsa -out dashboard.key 2048
openssl req -days 36000 -new -out dashboard.csr -key dashboard.key -subj '/CN=dashboard-cert'
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
sed -i "s/kubernetesui/$IP\/library/g" /opt/yaml/dashboard/recommended.yaml
kubectl apply -f /opt/yaml/dashboard/recommended.yaml
kubectl apply -f /opt/yaml/dashboard/dashadmin-user.yaml# 删除污点
kubectl taint nodes master node-role.kubernetes.io/control-plane-# 登录信息
token=`kubectl -n kubernetes-dashboard create token admin-user`
echo ""
echo ""
echo ""
echo "dashboard地址:https://$IP:30001"
echo "登录令牌:$token"
[root@localhost opt]# ./k8s_master_install.sh
将node脚本传给node节点
scp /opt/k8s_node_install.sh node:/root/
配置vsftp
yum install -y vsftpd
echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
node节点配置环境
rm -rf /etc/yum.repos.d/*
vi /etc/yum.repos.d/local.repo
[centos]
name=centos
gpgcheck=0
enabled=1
baseurl=ftp://192.168.200.100/centos
[k8s]
name=k8s
gpgcheck=0
enabled=1
baseurl=ftp://192.168.200.100/kubernetes-repo
node节点加入k8s集群
[root@localhost ~]# ls
anaconda-ks.cfg k8s_node_install.sh
[root@localhost ~]# ./k8s_node_install.sh
[root@master opt]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 14m v1.25.0
node Ready <none> 4m30s v1.25.0
[root@master opt]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-275nd 1/1 Running 0 4m48s
kube-flannel kube-flannel-ds-jlkz7 1/1 Running 0 14m
kube-system coredns-76bf7f8764-gcggn 1/1 Running 0 14m
kube-system coredns-76bf7f8764-qwz69 1/1 Running 0 14m
kube-system etcd-master 1/1 Running 0 15m
kube-system kube-apiserver-master 1/1 Running 0 15m
kube-system kube-controller-manager-master 1/1 Running 0 15m
kube-system kube-proxy-5jvkl 1/1 Running 0 14m
kube-system kube-proxy-f9k7p 1/1 Running 0 4m48s
kube-system kube-scheduler-master 1/1 Running 0 15m
kubernetes-dashboard dashboard-metrics-scraper-7b645c4f85-q858n 1/1 Running 0 13m
kubernetes-dashboard kubernetes-dashboard-568f4844dc-2tlhx 1/1 Running 0 13m
安装istio和kubevirt
#!/bin/bash#### 部署istio ####
install_istio(){nerdctl load -i /opt/project/images/istio_image.tartar -zxvf /opt/project/istio/istio-1.17.2-linux-amd64.tar.gz -C /opt/project/istiochmod +x /opt/project/istio/istio-1.17.2/bin/istioctlcp /opt/project/istio/istio-1.17.2/bin/istioctl /usr/local/bin/kubectl delete po -n kube-system `kubectl get po -n kube-system | grep coredns | head -n 1 | awk '{print $1}'`istioctl install --set profile=demo -ykubectl apply -f /opt/project/istio/istio-1.17.2/samples/addons/sleep 15kubectl get all -n istio-system
}#### 部署kubevirt ####
install_kubevirt(){yum install -y qemu-kvm libvirt virt-install bridge-utilsnerdctl load -i /opt/project/images/kubevirt_image.tarkubectl apply -f /opt/project/kubevirt/deploy/kubevirt-operator.yamlkubectl apply -f /opt/project/kubevirt/deploy/kubevirt-cr.yamlkubectl apply -f /opt/project/kubevirt/deploy/multus-daemonset.yamlkubectl apply -f /opt/project/kubevirt/deploy/multus-cni-macvlan.yamlchmod +x /opt/project/kubevirt/tools/virtctl-v0.41.0-linux-amd64cp /opt/project/kubevirt/tools/virtctl-v0.41.0-linux-amd64 /usr/local/bin/virtctlsleep 15kubectl get all -n kubevirt
}## 进行判断
read -p "是否安装配置istio和kubevirt(Y/N): " answercase "$answer" iny|Y)install_istioinstall_kubevirt;;n|N)exit 0;;*)echo "请输入正确的选项"exit 1;;
esac
[root@master opt]# ./k8s_project_install.sh
是否安装配置istio和kubevirt(Y/N): Y
[root@master opt]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
istio-system grafana-56bdf8bf85-g86cz 1/1 Running 0 2m47s
istio-system istio-egressgateway-85649899f8-clwmg 1/1 Running 0 4m9s
istio-system istio-ingressgateway-f56888458-24ttk 1/1 Running 0 4m9s
istio-system istiod-64848b6c78-64zqf 1/1 Running 0 4m13s
istio-system jaeger-76cd7c7566-46hvk 1/1 Running 0 2m47s
istio-system kiali-646db7568f-h9q6h 1/1 Running 0 2m47s
istio-system prometheus-85949fddb-k4ndc 2/2 Running 0 2m47s
kube-flannel kube-flannel-ds-275nd 1/1 Running 0 11m
kube-flannel kube-flannel-ds-jlkz7 1/1 Running 0 20m
kube-system coredns-76bf7f8764-qwz69 1/1 Running 0 21m
kube-system coredns-76bf7f8764-rkhk5 1/1 Running 0 4m21s
kube-system etcd-master 1/1 Running 0 21m
kube-system kube-apiserver-master 1/1 Running 0 21m
kube-system kube-controller-manager-master 1/1 Running 0 21m
kube-system kube-multus-ds-pjckn 1/1 Running 0 113s
kube-system kube-multus-ds-qn7lv 1/1 Running 0 113s
kube-system kube-proxy-5jvkl 1/1 Running 0 21m
kube-system kube-proxy-f9k7p 1/1 Running 0 11m
kube-system kube-scheduler-master 1/1 Running 0 21m
kubernetes-dashboard dashboard-metrics-scraper-7b645c4f85-q858n 1/1 Running 0 20m
kubernetes-dashboard kubernetes-dashboard-568f4844dc-2tlhx 1/1 Running 0 20m
kubevirt virt-api-6c4f849c9d-nntf6 1/1 Running 0 90s
kubevirt virt-api-6c4f849c9d-q78kk 1/1 Running 0 90s
kubevirt virt-controller-67b95d99d5-bhpts 1/1 Running 0 59s
kubevirt virt-controller-67b95d99d5-xspc7 1/1 Running 0 59s
kubevirt virt-handler-ptsk8 1/1 Running 0 59s
kubevirt virt-handler-vs5kh 1/1 Running 0 59s
kubevirt virt-operator-798f64bdf6-4t4nc 1/1 Running 0 116s
kubevirt virt-operator-798f64bdf6-cqqr6 1/1 Running 0 116s
相关文章:
基于centos7.9使用shell脚本部署k8s1.25平台
k8s 环境初始化安装Harbor安装k8s安装istio和kubevirt 使用脚本部署k8s1.25版本平台,网络插件使用flannel ,容器运行时ctr,部署包括harbor仓库,服务网格、kubevirt服务等 使用的centos7.9资源配置如下: 主机IP资源ma…...
11.29周五F34-Day10打卡
文章目录 1. 问问他能不能来。解析答案:【解析答案分析】【对比分析】【拓展内容】2. 问题是他能不能做。解析答案:【解析答案分析】3. 问题是我们能否联系得上她。(什么关系?动作 or 描述?)解析答案:【解析答案分析】【对比分析】4. 我们在讨论是否要开一个会。解析答案:…...
龙迅#LT8612UX适用于HDMI 转 HDMIVGA应用领域,分辨率高达4K60HZ,内置程序,方便调试!
1. 描述 LT8612UX 是一款 HDMI 转 HDMI&VGA 转换器,可将 HDMI2.0 数据流转换为 HDMI2.0 信号和模拟 RGB 信号。它还输出 8 通道 I2S 和 SPDIF 信号,可实现高质量的 7.1 通道音频。 LT8612UX 使用最新的 ClearEdge 技术,除了原始的 HDMI…...
C#学写了一个程序记录日志的方法(Log类)
1.错误和警告信息单独生产文本进行记录; 2.日志到一定内存阈值可以打包压缩,单独存储起来,修改字段MaxLogFileSizeForCompress的值即可; 3.Log类调用举例:Log.Txt(JB.信息,“日志记录内容”,"通道1"); usi…...
时间相关转换
Timestamp(date,type) { const zeroDate = new Date(date); if(type === startTime){ zeroDate.setHours(0, 0, 0, 0); } if(type === endTime){ zeroDate.setHours(23, 59, 59, 999); } return zeroDate.getTime(); }, //**时间戳转…...
服务器挖矿
文章目录 一、确定挖矿进程并停止二、查找并清除挖矿相关文件三、检查并修复系统漏洞四、加强安全防护 一、确定挖矿进程并停止 查找挖矿进程 在Linux系统中,可以使用命令如top或htop来查看系统资源占用情况。挖矿程序通常会占用大量的CPU或GPU资源。例如ÿ…...
mac maven编译出现问题
背景 进行maven install 命令,报错: [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a J…...
电磁兼容(EMC):磁性材料(永磁、软磁、功能磁)详解
目录 一、磁性材料概述 二、常用磁性材料分类 1. 永磁材料 2. 软磁材料 3. 功能性磁材 三、软磁材料特点 一、磁性材料概述 磁性材料是指由过渡元素铁(Fe)、钴(Co)、镍(Ni)及其合金等组成的能够直接…...
macOS 版本对应的 Xcode 版本,以及 Xcode 历史版本下载
注:当前页面的所有Xcode下载链接均为苹果官方下载链接 ,点击将直接转至苹果官网下载。 Xcode版本Xcode发布时间对应macOS版本macOS SDKsiOS SDKswatchOS SDKstvOS SDKs下载Xcode发布日志Xcode 15.413 May 2024macOS 14.014.5 (23F73)17.5 (21F77)10.5 (…...
从语法、功能、社区和使用场景来比较 Sass 和 LESS
一:可以从语法、功能、社区和使用场景来比较 Sass 和 LESS: 1:语法 原始的 Sass 采用的是缩进而不是大括号,后续的 Sass 版本与 LESS 一样使用与 CSS 类似的语法: address {.fa.fa-mobile-phone {margin: 0 3px 0 2…...
springboot-vue excel上传导出
数据库 device_manage表 字段,id,workshop,device_number,device_name,device_model,warn_time,expired_time device_warn表 字段,id,warn_time,expired_time 后端 实体类格式 device_manage Data TableName("device_manage"…...
CTF-PWN: ret2libc
plt表与got表是什么? PLT PLT (Procedure Linkage Table) 表在 ELF 文件中的代码段(.text)中,它看起来是这样的: .plt:0x00400530 <__libc_start_mainplt>:jmp QWORD PTR [rip 0x200602] # 0x601608 <__libc_start_maingot.plt>push 0x0jmp 0x4005100…...
SickOs: 1.1靶场学习小记
学习环境 kali攻击机:Get Kali | Kali Linux vulnhub靶场:https://download.vulnhub.com/sickos/sick0s1.1.7z 靶场描述: 这次夺旗赛清晰地模拟了在安全环境下如何对网络实施黑客策略从而入侵网络的过程。这个虚拟机与我在进攻性安全认证专…...
【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数
统计某个shp文件中不同区域内的站点数 方法 1:使用“空间连接 (Spatial Join)”工具方法 2:使用“点计数 (Point Count)”工具方法 3:通过“选择 (Select by Location)”统计方法 4:通过“Python 脚本 (ArcPy)”实现参考 在 ArcGI…...
JavaScript中类数组对象及其与数组的关系
JavaScript中类数组对象及其与数组的关系 1. 什么是类数组对象? 类数组对象是指那些具有 length 属性且可以通过非负整数索引访问元素的对象。虽然这些对象看起来像数组,但它们并不具备真正数组的所有特性,例如没有继承 Array.prototype 上…...
基础入门-Web应用架构搭建域名源码站库分离MVC模型解析受限对应路径
知识点: 1、基础入门-Web应用-域名上的技术要点 2、基础入门-Web应用-源码上的技术要点 3、基础入门-Web应用-数据上的技术要点 4、基础入门-Web应用-解析上的技术要点 5、基础入门-Web应用-平台上的技术要点 一、演示案例-域名差异-主站&分站&端口站&…...
C#:时间与时间戳的转换
1、将 DateTime 转换为 Unix 时间戳(秒) public static long DateTimeToUnixTimestamp(DateTime dateTime) {// 定义UTC纪元时间DateTime epochStart new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);// 计算从UTC纪元时间到指定时间的总秒数Tim…...
QT的exec函数
在Qt框架中,exec()方法是QDialog类(及其子类)的一个成员函数,用于以模态(modal)方式显示对话框。当exec()被调用时,它会启动一个局部的事件循环,这个循环会阻塞对对话框之外的其他窗…...
Css—实现3D导航栏
一、背景 最近在其他的网页中看到了一个很有趣的3d效果,这个效果就是使用css3中的3D转换实现的,所以今天的内容就是3D的导航栏效果。那么话不多说,直接开始主要内容的讲解。 二、效果展示 三、思路解析 1、首先我们需要将这个导航使用一个大…...
树莓集团:以人工智能为核心,打造数字化生态运营新典范
在当今数字化浪潮席卷全球的背景下,各行各业都在积极探索数字化转型的路径。作为数字产业的领军者,树莓集团凭借其深厚的技术积累和创新理念,在人工智能、大数据、云计算等前沿技术领域不断突破,成功打造了一个以人工智能为核心的…...
2024年首届数证杯 初赛wp
“数证杯”电子数据取证分析大赛致力于成为全国第一大电子数据取证分析大赛,面向所有网络安全从业人员公开征集参赛选手。参赛选手根据所属行业报名参赛赛道,比赛设置冠军、亚军、季军奖。所涉及行业包括能源、金融、通信、取证、安全等企业以及各类司法…...
2017 NHOI小学(C++)
A. 吃西瓜(2017 NHOI小学 1) 问题描述: 炎热的夏天来的可真快,小花猫和编程兔决定去买一个又大又甜的西瓜。可是小花和编程兔是两只非常奇怪的动物,都是偶数的爱好者,它们希望把西瓜切成两半后,每一部分的…...
【一维DP】【三种解法】力扣983. 最低票价
在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 : 一张 为期一天 的通行证售价为 costs[0] …...
【头歌实训:递归实现斐波那契数列】
头歌实训:递归实现斐波那契数列 文章目录 任务描述相关知识递归相关知识递归举例何时使用递归定义是递归的数据结构是递归的问题的求解方法是递归的 编程要求测试说明源代码: 任务描述 本关任务:递归求解斐波那契数列。 相关知识 为了完成…...
IntelliJ IDEA配置(mac版本)
用惯了eclipse开发java的小伙伴们,初次接触IntelliJ IDEA可能会和我一样,多少有些不适感,在使用过程中总想着eclipse得对应功能。 接下来,我就总结下我日常开发中遇到的常用配置(不包括快捷键,我认为每个人…...
CSAPP Cache Lab(缓存模拟器)
前言 理解高速缓存对 C 程序性能的影响,通过两部分实验达成:编写高速缓存模拟器;优化矩阵转置函数以减少高速缓存未命中次数。Part A一开始根本不知道要做什么,慢慢看官方文档,以及一些博客,和B站视频&…...
【机器学习】机器学习的基本分类-监督学习-逻辑回归-对数似然损失函数(Log-Likelihood Loss Function)
对数似然损失函数(Log-Likelihood Loss Function) 对数似然损失函数是机器学习和统计学中广泛使用的一种损失函数,特别是在分类问题(例如逻辑回归、神经网络)中应用最为广泛。它基于最大似然估计原理,通过…...
51c自动驾驶~合集35
我自己的原文哦~ https://blog.51cto.com/whaosoft/12206500 #纯视觉方案的智驾在大雾天还能用吗? 碰上大雾天气,纯视觉方案是如何识别车辆和障碍物的呢? 如果真的是纯纯的,特头铁的那种纯视觉方案的话。 可以简单粗暴的理解为…...
网络安全体系与网络安全模型
4.1 网络安全体系概述 4.1.1 网络安全体系概述 一般面言,网络安全体系是网络安全保障系统的最高层概念抽象,是由各种网络安全单元按照一定的规则组成的,共同实现网络安全的目标。网络安全体系包括法律法规政策文件、安全策略、组织管理、技术…...
antd table 自定义表头过滤表格内容
注意:该功能只能过滤可一次性返回全部数据的表格,通过接口分页查询的请自主按照需求改动哈~ 实现步骤: 1.在要过滤的列表表头增加过滤图标,点击图标显示浮窗 2.浮窗内显示整列可选选项,通过勾选单选或者全选、搜索框来…...
iis7搭建网站织梦/淘宝指数网址
一、选择交换机的主要技能指标 交换机:交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电…...
莆田做网站建设/优化设计方法
jsp初学者必备知识一、bs模式,cs模式的概念:二、web应用程序是什么三、如何将开发的web项目部署到服务器总结前言 ##刚开始学习jsp应该有点困难吧,掌握这几个基础知识就会好了很多哦:bs模式,cs模式的概念,…...
网站建设佰首选金手指二七/长春百度seo公司
原始地址:http://www.myhack58.com/Article/sort099/sort0100/2015/62781.htm 一、生成密钥 现在我们通过xshell生成密钥,注意:本章节,我只进行截图,不做进一步的文章说明。 如下: 我们现在有了公钥…...
湖南网站制作/站长之家网站排行榜
方法中返回的对象,一般不会造成内存溢出,但是一下情况就是刚好造成的内容溢出: 如果对象的引用刚好被单例所持有的话,JVM就不会回收该引用。 1、创建对象 Info info new Info(); 复制代码new Info()的时候,会返回一个…...
网站转微信小程序/emlog友情链接代码
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可…...
网站策划书怎么写/网址ip地址查询工具
如何能够获得Extjs.grid.panel总的Columns的列数 举报| 分享| 2015-01-01 13:56linjian001 |浏览 485 次编程语言Javascript网页设计通过什么方法能够获取这个数据 var grid Ext.create(Ext.grid.GridPanel,{}); var columns grid.columns; var Length columns.length 2015-…...