二、k8s快速入门之docker+Kubernetes平台搭建
| centos | master | 192.168.100.10 |
|---|---|---|
| centos | node1 | 192.168.100.20 |
| centos | node2 | 192.168.100.30 |
除特殊说明命令都需要在三台都执行
⭐️ k8s 的指令:
- kubeadm:用来初始化集群的指令
- kubelet: 在集群中的每个节点上用来启动Pod和容器
- kubectl: 用来与集群通信的命令行工具
⭐️ kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以
初始化设置–三台
systemctl stop firewalld
systemctl disable firewalld
setenforce 0 ####想要永久关闭请自己设置
swapoff -a ##想要永久关闭请自己设置
free
iptables -F
iptables -X
iptables -Z
修改名字
hostname set-hostname master
hostname set-hostname node1
hostname set-hostname node2
编辑hosts文件
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.20 node1
192.168.100.30 node2
把源换为阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
下载需要的组件
yum install -y conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
有些组件非必须
调整内核参数
vim /etc/sysctl.d/kubernetes.conf
##必须 开启ipv4桥接
net.bridge.bridge-nf-call-iptables=1
##必须 开启ipv6桥接
net.bridge.bridge-nf-call-ip6tables=1
##开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_tw_recycle=0
#禁止使用swap空间,只有当系统00M时才允许使用它
vm.swappiness=0
#不检查物理内存是否够用
vm.overcommit_memory=1 #开启00M
vm.panic_on_oom=0
##表示同一用户同时最大可以创建的 inotify(通知) 实例 (每个实例可以有很多 watch(值班))
fs.inotify.max_user_instances=8192
## 表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)
##默认值 8192 在容器场景下偏小,在某些情况下可能会导致 inotify watch 数量耗尽,
##使得创建 Pod 不成功或者 kubelet 无法启动成功,
fs.inotify.max_user_watches=1048576
##max-file 表示系统级别的能够打开的文件句柄的数量, 一般如果遇到文件句柄达到上限时,
##会碰到 Too many open files 或者 Socket/File: Can’t open so many files 等错误
fs.file-max=52706963
##单个进程可分配的最大文件数
fs.nr_open=52706963
##禁用ipv6
net.ipv6.conf.all.disable_ipv6=1
##设置最大查看限制
net.netfilter.nf_conntrack_max=2310720## 载入ip_conntrack模块
[root@master ~]# modprobe ip_conntrack
## 载入桥接模式防火墙
[root@master ~]# modprobe br_netfilter
###这里可以直接载入/etc/sysconfig/modules 中
cat > /etc/sysconfig/modules/ipvs.modules <#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- br_netfiltermodprobe -- ip_conntrack
EOF[root@master ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 1048576
fs.file-max = 52706963
fs.nr_open = 52706963
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_max = 23107120
配置时间同步
⭐️ centos7.5自带了chrony无需下载
1️⃣ master操作
[root@master ~]# vim /etc/chrony.conf
server master iburst ##其余的全部删掉加上这条
allow 192.168.100.0/24
local stratum 10
systemctl restart chronyd;systemctl enable chronyd
2️⃣ node1和node2
vim /etc/chrony.conf
server master iburst ##其余的全部删掉加上这条
systemctl restart chronyd;systemctl enable chronyd
3️⃣ 查看时间同步
chronyc sources
⭐️升级内核版本–三台
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grub2-set-default 'CentOS Linux (4.4.189-1.e17.elrepo.x86_64) 7 (Core)'
reboot
安装Docker
⭐️ 由于LVS以及加入到linux内核,所以开启IPVS的前提需要加载内核模块
1️⃣在三个节点都执行,初始化操作
cat > /etc/sysconfig/modules/ipvs.modules <#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shEOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
2️⃣ 安装docker
⭐️kuberntesv1.15.1 支持18.09版本的docker
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
添加daemon.json文件
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver-systemd"], ##默认的cgroup组为systemd 默认情况下有两个cgroupFS一个式systemd
"log-driver": "json-file", ##改存储的日志的存储格式
"log-opts": {
"max-size": "100m"
}
}
EOFsystemctl start docker;systemctl enable docker//或者sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts": ["native.cgroupdriver-systemd"],"registry-mirrors": ["https://89fk096n.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Kubeadm安装配置
1️⃣ 配置好yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
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 --nogpgcheck -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
systemctl start kubelet
systemctl enable kubelet
2️⃣ 使用工具把kubaedm工具压缩包上传到master节点(这个如果是网络不好拉去镜像慢,可以直接用这个办法,如果没有这个包可以看后面的网络拉取)
[root@master ~]# ls
kubeadm-basic.images.tar.gz
##解压
tar zxvf kubeadm-basic.images.tar.gz
3️⃣ 然后将这些镜像导入docker,这里我直接写了给脚本导入–master
[root@master ~]# cat docker.sh #!/bin/bash
ls /root/kubeadm-basic.images >> /root/images.txt
cd /root/kubeadm-basic.images
for i in $(cat /root/images.txt)
dodocker load < $i
done
[root@master ~]# chmod +x docker.sh
4️⃣执行脚本
[root@master ~]# bash docker.sh
fe9a8b4f1dcc: Loading layer 43.87MB/43.87MB
d1e1f61ac9f3: Loading layer 164.5MB/164.5MB
Loaded image: k8s.gcr.io/kube-apiserver:v1.15.1
fb61a074724d: Loading layer 479.7kB/479.7kB
c6a5fc8a3f01: Loading layer 40.05MB/40.05MB
Loaded image: k8s.gcr.io/coredns:1.3.1
8a788232037e: Loading layer 1.37MB/1.37MB
30796113fb51: Loading layer 232MB/232MB
6fbfb277289f: Loading layer 24.98MB/24.98MB
Loaded image: k8s.gcr.io/etcd:3.3.10
aa3154aa4a56: Loading layer 116.4MB/116.4MB
Loaded image: k8s.gcr.io/kube-controller-manager:v1.15.1
e17133b79956: Loading layer 744.4kB/744.4kB
Loaded image: k8s.gcr.io/pause:3.1
15c9248be8a9: Loading layer 3.403MB/3.403MB
00bb677df982: Loading layer 36.99MB/36.99MB
Loaded image: k8s.gcr.io/kube-proxy:v1.15.1
e8d95f5a4f50: Loading layer 38.79MB/38.79MB
Loaded image: k8s.gcr.io/kube-scheduler:v1.15.1
Loaded image: k8s.gcr.io/kube-apiserver:v1.15.1
Loaded image: k8s.gcr.io/coredns:1.3.1
Loaded image: k8s.gcr.io/etcd:3.3.10
Loaded image: k8s.gcr.io/kube-controller-manager:v1.15.1
Loaded image: k8s.gcr.io/pause:3.1
Loaded image: k8s.gcr.io/kube-proxy:v1.15.1
Loaded image: k8s.gcr.io/kube-scheduler:v1.15.1
4️⃣ 查看
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-apiserver v1.15.1 68c3eb07bfc3 2 years ago 207MB
k8s.gcr.io/kube-controller-manager v1.15.1 d75082f1d121 2 years ago 159MB
k8s.gcr.io/kube-proxy v1.15.1 89a062da739d 2 years ago 82.4MB
k8s.gcr.io/kube-scheduler v1.15.1 b0b3c4c404da 2 years ago 81.1MB
k8s.gcr.io/coredns 1.3.1 eb516548c180 2 years ago 40.3MB
k8s.gcr.io/etcd 3.3.10 2c4adeb21b4f 2 years ago 258MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 3 years ago 742kB
5️⃣在把脚本和解压后的镜像目录传输到node1,2节点在执行同样操作,我这里就不演示了
6️⃣在master创建kubeadm设置yaml模板
kubeadm config print init-defaults > kubeadm-config.yaml
7️⃣ 修改它的配置参数
[root@master ~]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.100.10 ##这里修改为本机ipbindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: mastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.1 ##注意
networking:dnsDomain: cluster.localpodSubnet: "10.244.0.0/16" ##这里添加ip地址,因为fannl的网络插件和这个一样serviceSubnet: 10.96.0.0/12
scheduler: {}
##添加以下,把默认的调度改为ipvs
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates :SupportIPVSProxyMode: true
mode: ipvs
8️⃣ 初始化kubeadmn
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
9️⃣ 下面是初始化介绍
**--config :指定文件**--experimental-upload-certs: 自动颁发证书 1.13.8才有这个命令初始化操作主要经历了下面 15 个步骤,每个阶段均输出均使用[步骤名称]作为开头: [init]:指定版本进行初始化操作。[preflight]:初始化前的检查和下载所需要的 Docker 镜像文。。 [kubelet-start]:生成 Kubelet 的配置文件/var/lib/kubelet/config.yaml,没有这个文件 Kubelet 无法启动,所以初始化之前的 Kubelet 实际上启动失败。 [certificates]:生成 Kubernetes 使用的证书,存放在/etc/kubernetes/pki 目录中。 [kubeconfig]:生成 KubeConfig 文件,存放在/etc/kubernetes 目录中,组件之间通信需 要使用对应文件。 [control-plane]:使用/etc/kubernetes/manifest 目录下的 YAML 文件,安装 Master 组件。 [etcd]:使用/etc/kubernetes/manifest/etcd.yaml 安装 Etcd 服务。 [wait-control-plane]:等待 control-plan 部署的 Master 组件启动。 [apiclient]:检查 Master 组件服务状态。 [uploadconfig]:更新配置。 [kubelet]:使用 configMap 配置 Kubelet。[patchnode]:更新 CNI 信息到 Node 上,通过注释的方式记录。[mark-control-plane]:为当前节点打标签,打了角色 Master,和不可调度标签,这样默 认就不会使用 Master 节点来运行 Pod。[bootstrap-token]:生成的 Token 需要记录下来,后面使用 kubeadm join 命令往集群中 添加节点时会用到。[addons]:安装附加组件 CoreDNS 和 kube-proxy。
网络拉取
1️⃣ 配置kubeadm配置文件
[root@master ~]# kubeadm config print init-defaults > kubeadm.yaml
[root@master ~]# vim kubeadm.yaml
[root@master ~]# cat kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.200.10bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: mastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers ##修改拉取镜像仓库
kind: ClusterConfiguration
##版本号需要修改为15
kubernetesVersion: v1.15.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: "10.244.0.0/16"
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates :SupportIPVSProxyMode: true
mode: ipvs
2️⃣ 初始化kubeadmn
kubeadm init --config kubeadm.yaml
3️⃣ 假如初始化失败就用下面方法(加入节点失败也通用)
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
后序操作
1️⃣ 按照提示复制创建kubelet和api的缓存文件(执行完成kubeadm init操作后面会有这个直接复制即可)
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
2️⃣ 查看节点, 如果是NotReady 因为网络没有创建
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady master 3m6s v1.15.1
3️⃣ 布置flannel
[root@master ~]# mkdir flannel
[root@master ~]# cd flannel
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged 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
4️⃣ 查看flannel组件
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5c98db65d4-kvkbl 0/1 ContainerCreating 0 46m
coredns-5c98db65d4-qjhm2 0/1 ContainerCreating 0 46m
etcd-master 1/1 Running 0 45m
kube-apiserver-master 1/1 Running 0 45m
kube-controller-manager-master 1/1 Running 0 45m
kube-flannel-ds-bfw2x 1/1 Running 0 37m
kube-proxy-tvbgm 1/1 Running 0 46m
kube-scheduler-master 1/1 Running
5️⃣ 看网卡
ifconfig
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450inet 10.244.0.0 netmask 255.255.255.255 broadcast 10.244.0.0ether 02:eb:0e:38:30:4e txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看移除master节点污点
⭐️ 移除后就可以在master节点启动pod和存储镜像了
1️⃣ 查看
kubectl describe node master
Taints: node-role.kubernetes.io/master:NoSchedule ##NoSchedule就代表不可调度
NoSchedule :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上 PreferNoSchedule :表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上 NoExecute :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去
2️⃣ 修改
[root@master ~]# kubectl edit node master
spec:podCIDR: 10.244.0.0/24taints:- effect: PreferNoSchedule ##原来是NoSchedulekey: node-role.kubernetes.io/master
3️⃣ 再次查看
kubectl describe node master
Taints: node-role.kubernetes.io/master:PreferNoSchedule
子节点加入
1️⃣ 查看加入命令,在各个node中使用
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.100.10:6443 --token 9nx4cb.2zjgaeo5ju98fnq3 --discovery-token-ca-cert-hash sha256:4d4eb15f1f4c36f1283b0a319f74b8e79110d263830d41d82c82b3c2dbe326b2
2️⃣ 查看
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 65m v1.15.1
node1 NotReady <none> 13s v1.15.1
node2 NotReady <none> 5s v1.15.1
3️⃣ 移除node
kubectl delete node [node名]
4️⃣ 查看加入节点命令
kubeadm token create --print-join-command
相关文章:
二、k8s快速入门之docker+Kubernetes平台搭建
centosmaster192.168.100.10centosnode1192.168.100.20centosnode2192.168.100.30 除特殊说明命令都需要在三台都执行 ⭐️ k8s 的指令: kubeadm:用来初始化集群的指令kubelet: 在集群中的每个节点上用来启动Pod和容器kubectl: 用来与集群通信的命令行…...
k8s的发展历史
Kubernetes(通常缩写为 K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它的发展历史可以追溯到多个关键的里程碑: 1. 起源(2013 年) Kubernetes 的起源可以追溯到 Google 的内部项…...
Pytorch lightning多机多卡训练通讯问题(NCCL error)排查
一、问题 单机多卡可以正常训练模型,多机多卡数据加载完成后卡住不动,排查两台机器可以ping通,表明网络没有问题,查看bug信息是NCCL通信问题。报错信息大致如下: torch.distributed.DistBackendError: NCCL error in: …/torch/c…...
React如何实现Vue的keepAlive功能
前言 在React中,默认情况下组件在被卸载后会销毁状态,这与Vue的keep-alive功能不同。在Vue中,keep-alive组件可以缓存组件状态,在路由切换时重新挂载。实现这一功能在React中并不简单,但我们可以借助一个第三方库——…...
在 Ubuntu 22.04 LTS 上安装 NVM (Node Version Manager) 管理和切换不同版本的 Node.js npm
安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash# nvm --version 0.40.1安装 Node.js 的不同版本 列出所有可用的 Node.js 远程版本 nvm ls-remotenvm install v18.20.4# node --version v18.20.4# nvm current v18.20.4npm 是 …...
如何搭建题库管理小序❓
土著刷题小🍊序不仅能够作为组织考试的利器,它同样可以帮助教育培训机构构建一个强大且高效的题库管理系统。 下面跟随我们的指导,一起来看看如何利用土著刷题小🍊序轻松快捷地建立起自己的题库,并享受其所带来的诸多好…...
Spring Boot框架下校园社团信息管理的创新实践
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
vscode clangd for cuda 插件配置
这里写目录标题 1. 下载插件clangd,并且安装server到host2. 配置3. 安装调试插件 1. 下载插件clangd,并且安装server到host 步骤 extension下载 altshiftp, 下服务,如果下不下来请考虑用🪜 下载好后check一下,检查是否正常 正常的标志 注意…...
软件测试学习笔记丨SeleniumPO模式
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22525 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…...
研发效能DevOps: Vite 使用 Vue Router
目录 一、实验 1.环境 2.初始化前端项目 3.安装vue-router 4.Vite 使用 Vue Router 二、问题 1.运行出现空页面 2.Vue Router如何禁止页面回退 一、实验 1.环境 (1)主机 表1 主机 系统 软件版本备注Windows11VS Code1.94.2Node.jsv18.20.4(LT…...
记第一次本地编译seatunnel源码
拉取代码 git clone https://github.com/apache/seatunnel.git 使用版本 我们生产环境用的是2.3.5版本,所以基于2.3.5-release分支代码进行编译。 maven package过程 遇到的第一个问题:‘com.sun.tools.javac.tree.JCTree com.sun.tools.javac.tree…...
《云主机配置全攻略》
《云主机配置全攻略》 一、云主机配置的重要性二、配置云主机的关键要素(一)CPU 的选择(二)内存的考量(三)硬盘的抉择(四)带宽的确定(五)机房线路的考虑&…...
RHCE nginx架构和安装
nginx架构和安装 nginx架构和安装1.1 nginx架构1.2 安装nginx1.1.1 本地安装1.1.2 官网安装1.1.3 源码安装 1.3 控制服务1.4 页面自定义 nginx架构和安装 nginx是多进程组织模式,而且是一个由 Master 主进程和 Worker 工作进程组成 1.1 nginx架构 1.2 安装nginx …...
Jmeter自动化实战
一、前言 由于系统业务流程很复杂,在不同的阶段需要不同的数据,且数据无法重复使用,每次造新的数据特别繁琐,故想着能不能使用jmeter一键造数据 二、创建录制模板 可参考:jmeter录制接口 首先创建一个录制模板 因为会有各种请求头,cookies,签名,认证信息等原因,导致手动复制…...
构建高效的Java SOCKS5代理:从零开始的网络转发实现
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
spring-boot(绑定配置文件及应用)
配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好; YAML&#x…...
Mac OS 搭建MySQL开发环境
Mac OS 搭建MySQL开发环境 文章目录 Mac OS 搭建MySQL开发环境一、安装Mysql:二、配置环境变量三、安装Navicat 本地环境: Mac OS Sequoia15.0.1(M3 Max) 目标状态: 下载安装Mysql,配置相关环境。 一、安装Mysql&…...
windows下安装python库wordCloud报错
换电脑安装wordcloud半天安装失败,记录一下遇到的坑,也给大家节省点时间。 方法1: 错误呢就是下面这个,说没c编译器,要不就去他给的地址上安装一下,我安装了一下好像没什么用,也没太敢勾选&am…...
Spring IOC 自动装配(注入)
注解⽅式注⼊ Bean 对于 bean 的注⼊,除了使⽤ xml 配置以外,可以使⽤注解配置。注解的配置,可以简化配置⽂件, 提⾼开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专⻔的解释器&#…...
Go使用SIMD指令——以string转为整数为例
本文Go使用SIMD指令采用如下方式: C编写对应的程序clang编译成汇编c2goasm将上述生成的汇编转为go的汇编 准备工具 clang。直接使用apt-get install clang安装即可c2goasm。 go get -u github.com/minio/c2goasm来进行安装asm2plan9s。 go get -u github.com/min…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
