kubernetes(2)k8s环境搭建:kubeadm安装、二进制方式安装

news/2024/5/19 4:23:06/文章来源:https://blog.csdn.net/yyuggjggg/article/details/126921760

环境平台规划

k8s里面之前我们了解过,主要的内容是master和node,所有这里可以划分为

  1. 单master集群
  2. 多master集群

单master集群

在这里插入图片描述

缺点:master挂掉后,便不能去管理node节点了

多master集群

与之前的区别便是多了master

在这里插入图片描述

服务器硬件要求

测试环境

master:cpu至少两核,内存4g以上,硬盘至少20g以上

node:cpu至少4核以上,内存8g+,硬盘40g+

生产环境

master:cpu至少8核,内存16g以上,硬盘至少100g以上

node:cpu至少16核以上,内存64g+,硬盘500g+

搭建方式

概述

常见的有两种方式
方式1,Kubeadm :

  1. Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。
  2. 不需要我们再去做额外的处理,只需要使用上面的两个命令去见操作
  3. 官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
  4. Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查

方式2,二进制包,

  1. 从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。
  2. 如果想更容易可控,推荐使用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

下面便去搭建一个单master集群

方式一:kubeadm

了解

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:

  1. 创建一个 Master 节点 kubeadm init
  2. 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >

第一步:服务器环境(安装三台虚拟机)

要求

- 一台或多台机器,操作系统 CentOS7.x-86_x64
- 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止 swap 分区

详细的自己去百度

这三台虚拟机中,有两台作为node,另一台作为master

第二步:对虚拟机的环境初始化

三台机器都需要做下面的步骤

关闭防火墙

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

关闭selinux

# 关闭selinux# 永久
sed -i 's/enforcing/disabled/' /etc/selinux/config# 临时关闭
setenforce 0 

关闭swap

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

根据规划设置主机名

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

设置主机名

hostnamectl set-hostname k8smaster
hostnamectl set-hostname k8snode1
hostnamectl set-hostname k8snode2

在master添加hosts

只是这种master的机器上设置

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.44.146 k8smaster
192.168.44.145 k8snode1
192.168.44.144 k8snode2
EOF

将桥接的IPv4流量传递到iptables的链

三个机器上都需要去设置

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

时间同步

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

第三步:所有节点安装Docker、kubeadm、kubelet

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

安装Docker

下载

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

安装

$ yum -y install docker-ce-18.06.1.ce-3.el7

设置为开机自启

$ systemctl enable docker && systemctl start docker

查看docker的version

$ docker --version
Docker version 18.06.1-ce, build e68fc7a

更换阿里云的docker仓库

$ cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

查看是否更新成功

$ docker info

如果是下面的内容则证明修改成功

附:添加阿里云YUM软件源

方便后面去下载等

$ 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

安装kubeadm,kubelet和kubectl

由于版本更新频繁,这里指定版本号部署:

安装kubeadm,kubelet和kubectl

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

设置成开机启动

systemctl enable kubelet

第四步:部署Kubernetes Master

只是需要在192.168.31.61(Master节点上面)执行。

  1. 对master节点进行初始化操作,这时候docker便会去拉取对应的镜像

    kubeadm init \--apiserver-advertise-address=192.168.44.146 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.18.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16
    

    上面的命令执行完后,出现下面的信息则证明执行成功了
    在这里插入图片描述

    查看docker的镜像
    在这里插入图片描述

  2. 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

  3. 使用kubectl工具:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    在这里插入图片描述

    查看node节点

    kubectl get nodes
    

    在这里插入图片描述

第五步:将节点加入到master中

在之前master初始化后,会出现下面的内容,下面所使用的命令便是直接复制的这一段内容
在这里插入图片描述

在192.168.1.12/13(在Node节点上)执行。

  1. 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

    $ kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
    
  2. 上面的token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

    kubeadm token create --print-join-command
    

现在回到master服务器上,使用命令查看节点信息,可以发现节点已经完成了添加,现在这些节点的状态不太对,所以还需要去配置一下网络
在这里插入图片描述

第六步:部署CNI网络插件

1、下载

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。

2、安装yum源

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

3、查看是否运行起来了

kubectl get pods -n kube-system

在这里插入图片描述

4、查看节点是否都成功运行了
在这里插入图片描述

第七步:测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

  1. 拉取nginx镜像

    kubectl create deployment nginx --image=nginx
    

    在这里插入图片描述

  2. 暴露端口,使通过网络可以去进行访问

    kubectl expose deployment nginx --port=80 --type=NodePort
    
  3. 查看状态

    $ kubectl get pod,svc
    

    在这里插入图片描述

打开浏览器,进行访问
在这里插入图片描述

方式二:二进制方式搭建k8s集群

第一步:选择服务器(两台虚拟机)

要求

- 一台或多台机器,操作系统 CentOS7.x-86_x64
- 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止 swap 分区

在这里选择了两台虚拟机,一台作为master,一台作为node

第二步:初始化服务器(两台虚拟机初始化)

关闭防火墙

临时关闭防火墙

systemctl stop firewalld

永久关闭防火墙

systemctl disable firewalld

关闭 selinux

永久关闭

sed -i 's/enforcing/disabled/' /etc/selinux/config 

临时关闭

setenforce 0 

关闭 swap

临时关闭

swapoff -a 

永久关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab 

根据规划设置主机名

hostnamectl set-hostname <hostname>

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

在 master 添加 hosts

cat >> /etc/hosts << EOF
192.168.44.147 m1
192.168.44.148 n1
EOF

将桥接的 IPv4 流量传递到 iptables 的链

先执行下面的命令

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后进行生效生效

sysctl --system 

时间同步

先进行进行安装

yum install ntpdate -y

然后进行时间同步

ntpdate time.windows.com

第三步:为etcd和apiserver生成自签证书

准备 cfssl 证书生成工具

cfssl 是一个开源的证书管理工具,使用 json 文件生成证书,相比 openssl 更方便使用。

找任意一台服务器操作,这里用 Master 节点

  1. 首先,依次执行下面的命令,将对应的包下载并移动到对应的目录

    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64mv cfssl_linux-amd64 /usr/local/bin/cfsslmv cfssljson_linux-amd64 /usr/local/bin/cfssljsonmv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
    
  2. 进入上面移动到的目录下面,查看文件
    在这里插入图片描述

  3. 执行脚本,查看执行后的情况
    在这里插入图片描述

  4. 查看下面的脚本文件内容,可以发现两行内容,第一行的内容便是对证书进行初始化操作
    在这里插入图片描述

  5. 初始化证书

    cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
    

    在这里插入图片描述

  6. 初始化操作结束后,会生成两个文件,查看这两个文件

    ls *pem
    

    在这里插入图片描述

  7. 查看json文件

    cat server-csr.json
    

    在这里插入图片描述

  8. 修改上面hosts里面的ip,改为当前的网络ip
    在这里插入图片描述

  9. 执行之前脚本里面的第二行内容

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
    

    在这里插入图片描述
    查看进行结果
    在这里插入图片描述
    在这里插入图片描述

  10. 查看server相关的内容

    ls server*
    

    如下,这些便是最终生成的证书文件
    在这里插入图片描述

第四步:部署etcd集群

  1. 从 Github 下载二进制文件
    下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz

  2. 将下载的tar.gz解压,并查看其解压的内容
    在这里插入图片描述
    在这里插入图片描述
    将etcd.service这个文件复制到system里面

    cp etcd.service /usr/lib/systemd/system/
    

    在这里插入图片描述

  3. 将ssl目录下面的证书替换为之前生成的证书
    删除ssl目录下面的内容
    在这里插入图片描述
    将之前生成的证书文件复制过来

    cp /root.TLS/etcd/{ca.server,server-key}.pem ssl/
    

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

  4. 查看etcd的配置文件,并修改目录里面的etcd.conf配置文件
    在这里插入图片描述
    修改为如下的ip,现在只是两台

在这里插入图片描述

  1. 将当前etcd里面的内容发送到其他的服务器中去

    scp -r etcd root@192.168.44.148:/opt/
    

    在这里插入图片描述
    进入发送到的服务器中,查看是否发送成功
    在这里插入图片描述
    证明发送成功了

  2. 将之前生成的其他文件也一起发送到node节点中
    在这里插入图片描述

  3. 在其他节点中分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP
    在这里插入图片描述
    进行修改
    在这里插入图片描述

  4. 在master节点上设置:启动并设置开机启动
    重加载

    systemctl daemon-reload
    

    执行

    systemctl start etcd
    

    设置开机启动

    systemctl enable etcd
    
  5. 查看状态
    master
    在这里插入图片描述
    node

    在这里插入图片描述

第五步:为APIServer自签证书

有许多的node节点,及一个master节点,master节点的入口称为apiserver,在访问过程中,apiserver是通过https的方式进行访问的,所有需要对其做一个证书的自签,有下面的两种方式进行访问

  1. 添加可信赖的ip列表
  2. 发送请求时,携带ca证书进行发送

    一些场景中不能携带,所以一般使用第一种方式

方式一实现的步骤:

  1. 进入下面的目录中
    在这里插入图片描述

  2. 查看两个json文件内容
    kube-proxy-csr.json
    在这里插入图片描述
    server-ccsr.json,这里面便展示了可信赖的ip列表
    在这里插入图片描述

  3. 修改server-ccsr.json文件内容,添加可信赖的ip列表,上面的是修改过的
    在这里插入图片描述

  4. 执行下面的sh文件
    在这里插入图片描述
    执行完后,便会生成自签证书(pen文件),如下:
    在这里插入图片描述

第六步:部署master组件

在git上面现在对应的文件

下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1183
注:打开链接你会发现里面有很多包,下载一个 server 包(如下)就够了,包含了 Master 和 Worker Node 二进制文件。
在这里插入图片描述

将下载的文件放到linux的root目录下,解压二进制包
在这里插入图片描述
解压结果
在这里插入图片描述

6.1 目录结构查看及配置文件的修改

进入kubernetes目录,查看里面的内容,

  1. 进入bin目录:可以发现里面全是可执行的文件
    在这里插入图片描述

  2. 进入cfg,这里面全是组件的一些配置文件
    在这里插入图片描述

  3. 查看剩下的目录内容,logs和ssl目录里面的内容都为空
    在这里插入图片描述

  4. 将之前生成的证书文件复制到ssl目录下面
    在这里插入图片描述
    因为目前暂时不需要kube-proxy*文件,所以将这些都删除掉
    在这里插入图片描述

  5. 查看配置文件
    在这里插入图片描述
    查看kube-apiserver.conf文件,这个文件里面的内容需要修改
    在这里插入图片描述
    查看kube-controller-manager.conf文件,这个文件里面的内容不需要去修改
    在这里插入图片描述
    查看kube-sheduler.conf配置文件,这个文件也不需要去进行修改
    在这里插入图片描述

查看kube-apiserver.conf文件,该文件内容说明:
在这里插入图片描述
注:上面两个\ \ 第一个是转义符,第二个是换行符,使用转义符是为了使用 EOF 保留换行符。

  1. –logtostderr:启用日志
  2. —v:日志等级
  3. –log-dir:日志目录
  4. –etcd-servers:etcd 集群地址
  5. –bind-address:监听地址
  6. –secure-port:https 安全端口
  7. –advertise-address:集群通告地址
  8. –allow-privileged:启用授权
  9. –service-cluster-ip-range:Service 虚拟 IP 地址段
  10. –enable-admission-plugins:准入控制模块
  11. –authorization-mode:认证授权,启用 RBAC 授权和节点自管理
  12. –enable-bootstrap-token-auth:启用 TLS bootstrap 机制
  13. –token-auth-file:bootstrap token 文件
  14. –service-node-port-range:Service nodeport 类型默认分配端口范围
  15. –kubelet-client-xxx:apiserver 访问 kubelet 客户端证书
  16. –tls-xxx-file:apiserver https 证书
  17. –etcd-xxxfile:连接 Etcd 集群证书
  18. –audit-log-xxx:审计日志

修改 kube-apiserver.conf文件的内容步骤:更换配置文件的ip地址

  1. 位置1
    在这里插入图片描述

  2. 位置2
    在这里插入图片描述

  3. 位置3
    在这里插入图片描述

最后保存退出

6.2 启动并设置开机启动

在启动前面,先做下面的步骤:

  1. 将之前的kubernetes目录放到opt目录下面
    在这里插入图片描述
  2. 将剩余的service文件放到system目录里面去,变为可执行文件
    在这里插入图片描述
  3. 将kubectl这个目录放到system这个目录里面去
    在这里插入图片描述

最后,依次执行下面的三行命令:

systemctl daemon-reload
systemctl start kube-apiserver
systemctl enable kube-apiserver
  1. 启动,并查看进程,便发现启动成功了
    在这里插入图片描述
  2. 剩下的两个命令也是一样的操作
    在这里插入图片描述
  3. 设置开机启动
    for i in ${ls /opt/kubernetes/bin};do systemctl enable $i;done
    
    在这里插入图片描述

现在可以进入logs目录查看日志信息
在这里插入图片描述
下面便是启动信息
在这里插入图片描述

现在便可以在~目录下,直接使用kubectl命令了,如下
在这里插入图片描述

6.3 授权 kubelet-bootstrap 用户允许请求证

直接执行下面的这段命令即可

kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

第七步:部署node组件

下面的操作都是在node节点下进行的

7.1 docker安装

docker下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

安装步骤:

  1. 解压压二进制包

    tar zxvf docker-19.03.9.tgz
    

    在这里插入图片描述

  2. 移动目录
    将docker这个文件移动到usr的bin目录下

    mv docker/*  /usr/bin/
    

    将docker.service移动到system目录下

    mv docker.service /usr/lib/systemd/system
    

    将daemon.json文件放到etc目录下的docker文件夹里面

    mkdir /etc/docker
    mv daemon.json /etc/docker/
    

    在这里插入图片描述

  3. 修改配置文件的内容,设置为阿里云镜像

    {"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    
  4. 启动并设置开机启动

    systemctl daemon-reload
    

    启动

    systemctl start docker
    

    开机启动

    systemctl enable docker
    

    在这里插入图片描述

7.2 kubelet、kube-proxy

解压之前下载的kubernetes-node-linux-amd64.tar.gz包,后面会有这些文件
执行步骤:

  1. 解压并移动对应的文件
    将service可执行文件移动到system目录下面
    在这里插入图片描述
    将kubernetes移动到opt目录下去
    在这里插入图片描述

  2. 修改kubernetes里面的配置文件
    修改bootstrap.kubeconfig文件里面
    在这里插入图片描述
    将配置文件里面的ip修改为当前master节点的ip
    在这里插入图片描述
    修改kub-proxy.conf配置文件内容
    在这里插入图片描述
    将配置文件里面的ip修改为当前master节点的ip
    在这里插入图片描述
    修改kubelet.conf配置文件
    在这里插入图片描述
    修改主机名称为当前node节点的主机名称n1
    在这里插入图片描述
    修改kubelet.proxy-config.yml文件
    在这里插入图片描述
    修改主机名称为当前node节点的主机名称n1
    在这里插入图片描述

  3. 查看是否还要遗漏的ip没有修改
    可以发现,都已经修改了
    在这里插入图片描述

  4. 在当前node节点中添加自签证书,这个自签证书从之前在master节点的中去获取
    查看master节点中自签证书
    在这里插入图片描述
    上面的自签证书是从master节点中的另一个目录复制过来的,这里我们进入之前生成自签证书的原目录去
    在这里插入图片描述
    将node节点对应的自签证书复制到node节点的服务器中
    在这里插入图片描述
    查看是否发送到node节点中
    在这里插入图片描述

  5. 启动kubelet并设置开机启动
    重启

    systemctl daemon-reload
    

    启动

    systemctl start kubelet
    

    设置开机启动

    systemctl enable kubelet
    

    在这里插入图片描述

  6. 启动kube-proxy并设置开机启动
    重启

    systemctl daemon-reload
    

    启动

    systemctl start kube-proxy
    

    设置开机启动

    systemctl enable  kube-proxy
    

    在这里插入图片描述

  7. 批准 kubelet 证书申请并加入集群
    在master节点查看授权请求,会发现这里有一个授权请求

    kubectl get csr
    

    在这里插入图片描述
    对这个授权请求进行批准,后面的名字是上面查看授权请求的NAME

    kubectl certificate approve node-csr-xxx
    

    在master节点查看节点,我们便发现之前的node节点已经被添加进去了

    kubectl get c
    

    在这里插入图片描述
    这里由于网络插件还没有部署,节点会没有准备就绪 NotReady

第七步:部署CNI集群网络

首先准备好 CNI 二进制文件:
下载地址:
https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tg
这个链接好像过期了,各位到时候自己在网上找吧

下面的操作都在node节点下进行
操作步骤如下:

  1. 创建bin和net.d目录

    mkdir /opt/cni/bin /etc/cin/net.d -p
    

    在这里插入图片描述

  2. 进入cni目录
    在这里插入图片描述

  3. 将解压cni内容移动到之前的cni目录下

    tar cni-xxx -C /opt/cni/bin/
    

    在这里插入图片描述
    在上面的bin目录下查看解压后的内容
    在这里插入图片描述

现在开始在master节点进行操作

  1. 下载文件

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
  2. 执行该文件

    kubectl apply -f kube-flannel.yml
    

    在这里插入图片描述

  3. 查看状态

    kubectl get pods -n kube-system
    

    在这里插入图片描述
    查看node节点状态,现在node节点便成为了准备的状态了
    在这里插入图片描述

第八步:测试kubernetes集群

首先,下载nginx镜像

kubectl create deployment nginx --image=nginx

其次,对外暴露一个端口

kubectl expose deployment nginx --port=80 --type=NodePort

然后,查看

kubectl get pod,svc

在这里插入图片描述

最后,在浏览器使用任意一个node节点的ip便可以去访问了
在这里插入图片描述

总结

在这里插入图片描述

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

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

相关文章

Prometheus监控进程

Prometheus监控进程 process-export主要用来做进程监控&#xff0c;比如某个服务的进程数、消耗了多少CPU、内存等资源。 一、process-exporter使用 ‍ 1.1 下载 process-exporter process-exporter GibHUB地址 process-exporter 下载地址 process-exporter可以使用命令行…

图解LeetCode——854. 相似度为 K 的字符串(难度:困难)

一、题目 对于某些非负整数 k &#xff0c;如果交换 s1 中两个字母的位置恰好 k 次&#xff0c;能够使结果字符串等于 s2 &#xff0c;则认为字符串 s1 和 s2 的 相似度为 k 。 给你两个字母异位词 s1 和 s2 &#xff0c;返回 s1 和 s2 的相似度 k 的最小值。 二、示例 2.1…

C语言手写HTTPD网站服务器

网站服务器&#xff08;HTTPD&#xff09;已经有很多版本&#xff0c;但是大部分对初学者都非常不友好。适合初学者学习的httpd服务器&#xff0c;最负盛名的当数tinyhttpd, 但是这个版本&#xff0c;是基于Linux系统的&#xff0c;而且配套的CGI也是使用perl语言写的&#xff…

宝塔面板修改secure_file_priv设置

1、secure_file_priv文件作用 mysql读取系统文件权限的设置参数 2、查询secure_file_priv设置 show variables like %secure%; 3、修改secure_file_priv设置 设置 secure_file_priv"/" 需要修改mysql配置文件my.cnf my.cnf文件有两个位置 /etc/my.cnf /www/serv…

线程安全简述

目录 1、线程是否安全 2、出现线程安全的原因如下&#xff1a; 3、原子性问题 4、synchronized关键字 1、锁对象 2、用法&#xff1a; 3、可重入锁 5、内存可见性 6、volatile关键字 7、JMM 1、线程是否安全 线程不安全就是一些代码在多线程的运行状态下&#xff0c…

一个基于.Net Core开发的适合外贸商城系统

今天给大家推荐一个适合外贸的商城系统。 项目简介 这是一个基于.Net Core开发的&#xff0c;兼容PC、平板、移动端的商城系统。被下载次数超过300w&#xff0c;拥有最活跃的成员&#xff0c;由专业团队开发与支持。支持PayPal、信用卡、发票支付。 技术架构 1、跨平台&…

Jmeter电商系统压测实战<二>

目录一、Jmeter优化tips二、Jmeter的使用建议-参数配置1. XX:MaxMataspaceSize&#xff08;jdk8的参数&#xff09;2. -Xmx2048m3. -Xms1g三、Jmeter插件1. 介绍及安装2. 常用插件四、Jmeter日志收集1. 概览2. elk&#xff0c;kibana和es的安装和配置3. Prometheus和Node Expor…

全系标配L2占比首次突破30%,「数据」赛道争夺战一触即发

智能驾驶的进阶战&#xff0c;无论是提升车型产品竞争力&#xff0c;还是为高阶功能和现有功能优化提供闭环数据迭代&#xff0c;全系标配已经成为主流趋势。 如果说智能化1.0阶段&#xff0c;车企拼的是技术的快速落地和高阶能力的标杆效应&#xff0c;那么2.0阶段就是拼规模…

python中validators库用法详解

首先安装validators库&#xff1a; pip install validators validators.between(value, minNone, maxNone) 验证一个数字value是否在最小值min和最大值max之间&#xff0c;value不仅仅可以是整数&#xff0c;也可以是其它数据类型&#xff0c;例如floats, decimals 和 dates。…

Three使用OimoPhysics实现物体相关物理特性实例

基础环境搭建&#xff1a; InstancedMesh()创建的立方体物品集合&#xff1a; boxes new THREE.InstancedMesh(new THREE.BoxGeometry(0.1, 0.1, 0.1),new THREE.MeshLambertMaterial(),100)const matrix new THREE.Matrix4()const color new THREE.Color()for (let i 0; i…

Win11 22H2 22621.521大版本更新!

注意&#xff01;注意&#xff01;Win11 22H2 22621.521大版本更新啦&#xff0c;此次更新带来了不小的优化和改进&#xff0c;包括带有标签的更新文件资源管理器、更丰富的开始菜单和任务栏体验、增强的搜索功能、对改进的安全性和无密码登录的支持等等。 让每个人都能更轻松、…

生成网络论文阅读styleGAN1(一):论文速览

研究什么内容 研究如何把生成图片当中的内容拆分开 研究方法 为了把各种风格分开先得把控制信息分开输入&#xff0c;于是作者就分开输入了&#xff0c;在PGGAN的基础上分开输入&#xff0c;取得了好的效果。 个人理解 1.这里能取得好效果的主要原因是PGGAN的逐渐提升像素…

多模块间通信存在完美的设计么?

一、前言 在 App 的使用中&#xff0c;常常会有一些功能的依赖&#xff0c;比如评论需要用户登录、支付需要用户实名绑定银行卡等。从代码开发角度而言&#xff0c;如果我们的项目使用了多模块&#xff0c;那么也就会出现模块依赖的场景&#xff0c;比如评论模块依赖登录模块提…

企业复杂的数据治理需求,TempoDF让数据开发更简单!

伴随着企业的发展以及信息化建设的不断深入&#xff0c;业务之间不关联、数据之间彼此独立、流程之间相互封闭的现象越来越普遍&#xff0c;“数据孤岛”问题愈发严重&#xff0c;已成为制约企业发展的桎梏。 为了实现企业全局数据的系统化运作管理&#xff0c;不少企业开始着…

PDF转换成PPT后格式混乱,可能这个没做好

PDF转换成PPT后格式混乱怎么处理?这类问题其实对于经常使用PPT的朋友们来说并不陌生。我们有时候需要把一篇PPT演讲稿转换成PDF文档&#xff0c;但在操作过程中常常不仅过程复杂且效果不理想。有时甚至在转化之后出现格式混乱&#xff0c;影响了阅读体验不说&#xff0c;还会让…

WPF 图片头像自由剪切器实时截图细节放大器

本文参考博文&#xff1a;WPF 自定义图片剪切器 - 头像剪切&#xff08;扩展与完善、实时截图&#xff09; 在网上找了好久都找不到合适的截图框架&#xff0c;只能用WPF 自定义图片剪切器 - 头像剪切&#xff08;扩展与完善、实时截图&#xff09;_孤夜一点星的博客-CSDN博客…

《uni-app》表单组件-form表单

本文分享的Form组件为uni-app的内置组件Form&#xff0c;非扩展组件&#xff0c;两者在用法上其实大同小异&#xff0c;只是扩展组件的属性以及事件更多…没有本质上的区别&#xff5e; 《uni-app》表单组件-form表单一. 简介二. 基础用法三. submit事件四. reset事件五. repor…

虚拟机是什么意思?

&#x1f308; 个人主页&#xff1a;python老鸟的博客 &#x1f506; 所属专栏&#xff1a;Python基础教程 ❤️ 刷题 &#x1f449; Python练习题库&#xff0c;不断更新中~~ &#x1f64f; 如果觉得博主文章对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注 …

安卓APT技术讲解(下)-实现安卓组件化的路由功能

前言&#xff1a; 组件化是安卓目前很流行的一门技术&#xff0c;其目的是避免复杂的业务逻辑交织到一起&#xff0c;相互影响。通过解耦&#xff0c;让每个子项目都是一个独立的工程&#xff0c;即使其余模块出现问题&#xff0c;也不会影响这个子模块的运行。 本篇系“利用A…

为k8s节点预留资源,防止pod占用资源过多导致雪崩

Kubernetes 的节点可以按照节点的资源容量进行调度&#xff0c;默认情况下 Pod 能够使用节点全部可用容量。这样就会造成一个问题&#xff0c;因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。除非为这些系统守护进程留出资源&#xff0c;否则它们将与 Pod 争…