官方文档k8s1.30安装部署高可用集群,kubeadm安装Kubernetes1.30最新版本

文章目录

  • 节点架构
  • 一、准备开始(每一台机器都执行)
    • 1️⃣ 检查所需端口(可以直接关闭防火墙放开所有端口)
      • 端口和协议
        • 控制面
        • 工作节点
      • 关闭防火墙
      • 关闭 SELinux
    • 2️⃣ 安装containerd容器
      • containerd部署
        • containerd切换为国内源
    • 3️⃣ 设置`/etc/hosts`
  • 二、安装 kubeadm、kubelet 和 kubectl(每一台机器都执行)
  • 三、使用 kubeadm 创建集群
    • 初始化控制平面节点
    • 初始化高可用节点
    • 安装网络插件
    • 加入主节点和 node 节点
      • 重新生成加入节点命令
        • 加入 node 节点
        • 加入 master 节点
  • 四、安装图形化界面
  • Tpis:
    • container镜像解决方案
    • master控制节点踢出后重新加入集群发现etcd报错
    • helm安装

节点架构

# 负载均衡,负载三个主节点
172.25.14.100 lbserver

# 控制节点
172.25.14.101 master1
172.25.14.102 master2
172.25.14.103 master3

# 服务运行节点
172.25.14.111 node1
172.25.14.112 node2
172.25.14.113 node3
172.25.14.114 node4
172.25.14.115 node5

一、准备开始(每一台机器都执行)

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。
  • CPU 2 核心及以上。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
    # 确保每个节点上 MAC 地址和 product_uuid 的唯一性
    ip link # 获取网络接口的 MAC 地址
    sudo cat /sys/class/dmi/id/product_uuid # 校验 product_uuid 唯一性
    
  • 交换分区的配置。kubelet 的默认行为是在节点上检测到交换内存时无法启动。 kubelet 自 v1.22 起已开始支持交换分区。自 v1.28 起,仅针对 cgroup v2 支持交换分区; kubelet 的 NodeSwap 特性门控处于 Beta 阶段,但默认被禁用。
    # 关闭交换分区
    sudo swapoff -a
    
    # 永久关闭交换分区
    vim /etc/fstab
    
    在这里插入图片描述

1️⃣ 检查所需端口(可以直接关闭防火墙放开所有端口)

端口和协议

当你在一个有严格网络边界的环境里运行 Kubernetes,例如拥有物理网络防火墙或者拥有公有云中虚拟网络的自有数据中心, 了解 Kubernetes 组件使用了哪些端口和协议是非常有用的。

控制面
协议方向端口范围目的使用者
TCP入站6443Kubernetes API server所有
TCP入站2379-2380etcd server client APIkube-apiserver, etcd
TCP入站10250Kubelet API自身, 控制面
TCP入站10259kube-scheduler自身
TCP入站10257kube-controller-manager自身

尽管 etcd 的端口也列举在控制面的部分,但你也可以在外部自己托管 etcd 集群或者自定义端口。

工作节点
协议方向端口范围目的使用者
TCP入站10250Kubelet API自身, 控制面
TCP入站30000-32767NodePort Services†所有

所有默认端口都可以重新配置。当使用自定义的端口时,你需要打开这些端口来代替这里提到的默认端口。

一个常见的例子是 API 服务器的端口有时会配置为 443。或者你也可以使用默认端口, 把 API 服务器放到一个监听 443 端口的负载均衡器后面,并且路由所有请求到 API 服务器的默认端口。

关闭防火墙

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

关闭 SELinux

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

2️⃣ 安装containerd容器

启用 IPv4 数据包转发

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo 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

使用以下命令验证 net.ipv4.ip_forward 是否设置为 1:

sudo sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

containerd部署

github下载
蓝奏云下载:https://grafies.lanzoum.com/iDTv81xw593e
蓝奏云所有文件下载地址:https://grafies.lanzoum.com/b0hbz5joh 密码:dvl2

# 上传到服务并解压缩到/usr/local 下
tar Cxzvf /usr/local containerd-1.7.16-linux-amd64.tar.gz

# 下载服务启动文件
wget -O /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
systemctl daemon-reload
systemctl enable --now containerd

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

# 安装CNI插件
wget https://github.com/containernetworking/plugins/releases/download/v1.4.1/cni-plugins-linux-amd64-v1.4.1.tgz
sudo mkdir -p /opt/cni/bin
sudo tar Cxzvf /opt/cni/bin/ cni-plugins-linux-amd64-v1.4.1.tgz
containerd切换为国内源

如果kubeadm init有问题,可以删除/etc/containerd/config.toml文件

# 创建containerd目录
mkdir /etc/containerd

#mv /etc/containerd/config.toml /etc/containerd/config.toml.bak

# 恢复默认配置文件
containerd config default > /etc/containerd/config.toml

# 切换为国内源
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/containerd/config.toml

# 重启服务
systemctl daemon-reload
systemctl restart containerd

3️⃣ 设置/etc/hosts

cat <<EOF | sudo tee /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.14.101 master1
172.25.14.102 master2
172.25.14.103 master3

172.25.14.111 node1
172.25.14.112 node2
172.25.14.113 node3
172.25.14.114 node4
172.25.14.115 node5
EOF

二、安装 kubeadm、kubelet 和 kubectl(每一台机器都执行)

你需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

添加 yum仓库,修改 v1.30版本可以安装其他版本

# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

安装 kubelet、kubeadm 和 kubectl,并启用 kubelet 以确保它在启动时自动启动

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。


三、使用 kubeadm 创建集群

拉取需要的镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

初始化控制平面节点

# 创建初始化配置文件
kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml

# 修改为国内阿里源
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/kubernetes/init-default.yaml

# 设置 apiServerIP 地址. 请自行替换172.25.14.101为自己宿主机IP
sed -i 's/1.2.3.4/172.25.14.101/' /etc/kubernetes/init-default.yaml

初始化单节点 kubeadm init --image-repository registry.aliyuncs.com/google_containers


初始化高可用节点

利用 kubeadm 创建高可用集群

你可以使用 --kubernetes-version 标志来设置要使用的 Kubernetes 版本。 建议将 kubeadm、kebelet、kubectl 和 Kubernetes 的版本匹配。

这个 --control-plane-endpoint 标志应该被设置成负载均衡器的地址或 DNS 和端口。

这个 --upload-certs 标志用来将在所有控制平面实例之间的共享证书上传到集群。 如果正好相反,你更喜欢手动地通过控制平面节点或者使用自动化工具复制证书, 请删除此标志并参考如下部分证书分配手册。

kubeadm init --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs

其中"LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"为api-server负责均衡的IP和端口
如果api-server 负责均衡地址为172.25.14.100:6443

# 代理了下面 api-server 服务地址
172.25.14.101:6443
172.25.14.102:6443
172.25.14.103:6443

完整的高可用初始化命令为

kubeadm init --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint "172.25.14.100:6443" --upload-certs

初始化完成后出现以下界面
在这里插入图片描述

开始使用集群前,您需要以普通用户身份运行以下命令:

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

或者,如果您是 root 用户,可以直接设置环境变量:

export KUBECONFIG=/etc/kubernetes/admin.conf

接下来,您应该向集群部署一个 Pod 网络。

# 如果你没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:
kubeadm token list
# 默认情况下,令牌会在 24 小时后过期。如果要在当前令牌过期后将节点加入集群, 则可以通过在控制平面节点上运行以下命令来创建新令牌
kubeadm token create
# 查看集群状态,此时 coredns 服务为Pending状态,我们需要安装网络插件
kubectl get pods --all-namespaces

安装网络插件

蓝奏云所有文件下载地址:https://grafies.lanzoum.com/b0hbz5joh 密码:dvl2

# 进入kubernetes配置文件目录
cd /etc/kubernetes/

# 下载 yaml 文件到kubernetes配置文件目录
wget https://docs.projectcalico.org/manifests/calico.yaml

# 如果上面初始化主节点时修改过POD的IP,去掉注释,替换为修改的pod的IP
kubectl apply -f /etc/kubernetes/calico.yaml

需要修改的地方为,如果上面初始化主节点时修改过POD的IP,去掉注释,替换为修改的pod的IP,我这里没有修改过,所以不用替换
在这里插入图片描述



加入主节点和 node 节点

在 master1 初始化时,有生成的加入 master 节点和 node 节点的命令

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join master1:6443 --token iain2r.id7zulwl6weslham \
        --discovery-token-ca-cert-hash sha256:3e0a5577e578215df4e7c243e9f843a00382bb6913f0c31b6eec0c3b67369c49 \
        --control-plane --certificate-key c89f1873fe75b408e2eceaad6eeead9400109fbd736112bc50a5d0485ca5272d

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join master1:6443 --token iain2r.id7zulwl6weslham \
        --discovery-token-ca-cert-hash sha256:3e0a5577e578215df4e7c243e9f843a00382bb6913f0c31b6eec0c3b67369c49 

重新生成加入节点命令

如果已经遗忘,可以使用下面命令重新生成加入节点命令

生成 token,node 节点加入直接执行就可以了

# 生成加入节点的 token
[root@master1 ~]# kubeadm token create --print-join-command
kubeadm join 172.25.14.101:6443 --token iobz8n.rqo9u0yuok99otlj --discovery-token-ca-cert-hash sha256:64d2335ede8c3f8866095888db0b809ba44e2f2208d0861d70cb15ff4586a5b1 
加入 node 节点

在要加入的node 节点执行

[root@node1 tar]# kubeadm join master1:6443 --token fng8dv.8b7bcnosokbx2jjo --discovery-token-ca-cert-hash sha256:3e0a5577e578215df4e7c243e9f843a00382bb6913f0c31b6eec0c3b67369c49
[root@node1 tar]# mkdir ~/.kube
[root@node1 tar]# cp /etc/kubernetes/kubelet.conf  ~/.kube/config
加入 master 节点

如果需要添加master节点,使用 kubeadm init phase upload-certs --upload-certs 重新生成certificate-key(这里需要注意老版本 需要用 kubeadm init phase upload-certs --experimental-upload-certs 生成)

[root@master1 ~]# kubeadm init phase upload-certs --upload-certs
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
c16782bf98ebdaf1ee1592c6d332826f67d579f2fac981c5e72486772adce9ac

然后加 master 节点:用上面生成的 work join 命令和后面生成的生成的--certificate-key 值拼接起来执行

[root@master3 ~]# kubeadm join 172.25.14.101:6443 --token iobz8n.rqo9u0yuok99otlj --discovery-token-ca-cert-hash sha256:64d2335ede8c3f8866095888db0b809ba44e2f2208d0861d70cb15ff4586a5b1 --control-plane  --certificate-key c16782bf98ebdaf1ee1592c6d332826f67d579f2fac981c5e72486772adce9ac 

master3 加入节点

# master3 执行上面命令加入节点
[root@master3 ~]# kubeadm join 172.25.14.101:6443 --token iobz8n.rqo9u0yuok99otlj --discovery-token-ca-cert-hash sha256:64d2335ede8c3f8866095888db0b809ba44e2f2208d0861d70cb15ff4586a5b1

在这里插入图片描述

完成后显示上面图片状态,所有主节点加入后必须要执行下面命令

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

四、安装图形化界面

helm安装
GitHub 下载地址
蓝奏云所有文件下载地址:https://grafies.lanzoum.com/b0hbz5joh 密码:dvl2

# 下载 helm
wget https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz
tar xvf helm-v3.14.4-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm && rm -rf linux-amd64

当您已经安装好了Helm之后,您可以添加一个chart 仓库。从 Artifact Hub中查找有效的Helm chart仓库。

$ helm repo add bitnami https://charts.bitnami.com/bitnami

当添加完成,您将可以看到可以被您安装的charts列表:

$ helm search repo bitnami
NAME                             	CHART VERSION	APP VERSION  	DESCRIPTION
bitnami/bitnami-common           	0.0.9        	0.0.9        	DEPRECATED Chart with custom templates used in ...
bitnami/airflow                  	8.0.2        	2.0.0        	Apache Airflow is a platform to programmaticall...
bitnami/apache                   	8.2.3        	2.4.46       	Chart for Apache HTTP Server
bitnami/aspnet-core              	1.2.3        	3.1.9        	ASP.NET Core is an open-source framework create...
# ... and many more

部署 Dashboard UI

# 添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard
# 使用 kubernetes-dashboard Chart 部署名为 `kubernetes-dashboard` 的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

修改service的type类型为NodePort,使其可以外部访问

kubectl edit svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard

在这里插入图片描述

# 找到端口,在安全组放行
[root@master1 kubernetes]# kubectl get svc -A |grep kubernetes-dashboard
kubernetes-dashboard   kubernetes-dashboard-api               ClusterIP   10.103.55.225    <none>        8000/TCP                        3m50s
kubernetes-dashboard   kubernetes-dashboard-auth              ClusterIP   10.103.219.197   <none>        8000/TCP                        3m50s
kubernetes-dashboard   kubernetes-dashboard-kong-manager      NodePort    10.98.238.74     <none>        8002:32313/TCP,8445:31643/TCP   3m50s
kubernetes-dashboard   kubernetes-dashboard-kong-proxy        NodePort    10.109.52.96     <none>        443:31374/TCP                   3m50s
kubernetes-dashboard   kubernetes-dashboard-metrics-scraper   ClusterIP   10.99.201.33     <none>        8000/TCP                        3m50s
kubernetes-dashboard   kubernetes-dashboard-web               ClusterIP   10.104.253.8     <none>        8000/TCP                        3m50s

访问: https://集群任意IP:端口 https://172.25.14.101:31374

创建访问账号,准备一个yaml文件; vim /etc/kubernetes/dashadm.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
kubectl apply -f /etc/kubernetes/dashadm.yaml

获取访问令牌

kubectl -n kubernetes-dashboard create token admin-user

输入到仪表盘中
在这里插入图片描述







参考资料:
安装 kubeadm
利用 kubeadm 创建高可用集群
Kubeadm init 错误 - API 服务器未运行
安装 containerd
etcd cluster is not healthy 将一个master控制节点踢出后重新加入集群发现报错










Tpis:

container镜像解决方案

在这里插入图片描述
/etc/containerd/config.toml这个文件里面,找到sandbox_image = "registry.k8s.io/pause:3.6"
改为sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
在这里插入图片描述
然后重启服务


master控制节点踢出后重新加入集群发现etcd报错

【k8s】 etcd cluster is not healthy 将一个master控制节点踢出后重新加入集群发现报错
kubernets将一个master控制节点踢出后重新加入集群发现报错

error execution phase check-etcd: etcd cluster is not healthy: failed to dial endpoint https://172.25.14.103:2379 with maintenance client: context deadline exceeded
To see the stack trace of this error execute with --v=5 or higher

报错结果显示etcd集群运行不正常,其实在kubeadm join加入集群时打开 -v=5 选项,提高日志等级就可以发现,提示刚刚踢出的master节点etcd无法连接。原因是将master节点踢出后,etcd集群并未将其踢出etcd集群,需要我们手动进行移除。
下载etcdctl命令行工具

export RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d '"' -f 4)
wget https://github.com/etcd-io/etcd/releases/download/${RELEASE}/etcd-${RELEASE}-linux-amd64.tar.gz
tar xvf etcd-${RELEASE}-linux-amd64.tar.gz
cd etcd-${RELEASE}-linux-amd64
sudo mv etcd etcdctl etcdutl /usr/local/bin

登陆一台现有的master机器并查看现有的etcd集群列表

[root@master1 tar]# etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member list
7083115c92eb133, started, master1, https://172.25.14.101:2380, https://172.25.14.101:2379, false
46dbbda45a5f29a1, started, master2, https://172.25.14.102:2380, https://172.25.14.102:2379, false
b8a567692e712730, started, master3, https://172.25.14.103:2380, https://172.25.14.103:2379, false

现在将这台服务器的etcd从集群中移除

etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member remove b8a567692e712730

移除之后,新节点就可以正常加入集群了

helm安装

tar xvf helm-v3.14.4-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm && rm -rf linux-amd64

当您已经安装好了Helm之后,您可以添加一个chart 仓库。从 Artifact Hub中查找有效的Helm chart仓库。

$ helm repo add bitnami https://charts.bitnami.com/bitnami

当添加完成,您将可以看到可以被您安装的charts列表:

$ helm search repo bitnami
NAME                             	CHART VERSION	APP VERSION  	DESCRIPTION
bitnami/bitnami-common           	0.0.9        	0.0.9        	DEPRECATED Chart with custom templates used in ...
bitnami/airflow                  	8.0.2        	2.0.0        	Apache Airflow is a platform to programmaticall...
bitnami/apache                   	8.2.3        	2.4.46       	Chart for Apache HTTP Server
bitnami/aspnet-core              	1.2.3        	3.1.9        	ASP.NET Core is an open-source framework create...
# ... and many more

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

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

相关文章

C++青少年简明教程:C++程序结构

C青少年简明教程&#xff1a;C程序结构 一个简单的C程序源码如下&#xff1a; #include <iostream> using namespace std;int main() {cout << "Hello World" << endl;return 0; }下面解析一下。 1. #include <iostream> 这是一条预处理…

SSH隧道可以做什么?

SSH隧道是SSH协议服务端提供的一种扩展功能&#xff0c;一般仅在linux服务器的SSH服务端中提供&#xff0c;其它的如交换机、防火墙等网络设备中&#xff0c;虽然支持SSH协议&#xff0c;但多数并不提供SSH隧道功能。 所以&#xff0c;在通过SSH协议连接远程设备时&#xff0c…

Python远程连接Linux执行操作

一、任务要求 要使用Python编写代码来远程给Linux主机上传一个文件&#xff0c;可以使用paramiko库&#xff0c;这是一个实现了SSHv2协议的Python库&#xff0c;它支持SSH连接&#xff08;包括客户端和服务端&#xff09;&#xff0c;并且提供SFTP&#xff08;SSH File Transf…

VScode查看以十六进制查看文件的插件说明

找到插件并下载 打开指定的文件 选择打开方式即可 结果如下

STM32——GPIO输出(点亮第一个LED灯)

代码示例&#xff1a; #include "stm32f10x.h" // Device headerint main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitSt…

成为计算机视觉(CV)需要掌握哪些技术知识(综述)

在CV领域&#xff0c;深度学习和机器学习技术发挥着至关重要的作用&#xff0c;它们为图像识别、目标检测、图像分割等任务提供了强大的工具和方法。本文将综述CV中需要学习的深度学习和机器学习技术。 一、深度学习技术 卷积神经网络&#xff08;Convolutional Neural Netwo…

【吊打面试官系列】Java高并发篇 - 为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?

大家好&#xff0c;我是锋哥。今天分享关于 【为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里&#xff1…

被严重低估的后端技术面经,强到离谱!

前天加完班&#xff0c;回家路上翻了下粉丝群。发现群里最近在疯传一份叫《后端 offer 收割机养成指南》的资料。 本来感觉这个 title 看起来有点离谱&#xff0c;结果没想到仔细一看&#xff0c;这份资料竟然真的有点东西。内容收纳的很全&#xff0c;而且融合了很多今年的新…

软件测试从业人员怎么看待测试工作的前途?

调查背景   工信部发布的2023年软件业经济运行情况显示&#xff0c;全年累计完成软件业务收入123258亿元&#xff0c;同比增长13.4%&#xff0c;增速较上年同期提高2.2个百分点。值得注意的是&#xff0c;亚太地区软件测试市场正在迅速崛起&#xff0c;预计到2026年复合年增长…

Django开发实战之单元测试和集成测试之编写测试用例以及代码覆盖率统计分析

这里分为了两种情况&#xff1a; E2E&#xff1a;接近真实使用情况&#xff0c;用例数量少 UT&#xff1a;执行速度快&#xff0c;用例数量多 1、整理测试点 1、注册功能 允许匿名访问URL&#xff1a;http://127.0.0.1:8000/accounts/register/get请求&#xff1a;返回htmlp…

Linux 用户进程启动与Systemd

Linux用户空间的启动 我们都知道&#xff0c;Linux在内核的初始化自身的流程结束后&#xff0c;就会将程序流的运行转到用户态&#xff0c;也就是进入init进程流之后&#xff0c;他会按照这个流程进行初始化&#xff1a; init进程初始化 基础的底层服务&#xff1a;比如说ude…

JavaScript 事件

在 Web 开发中&#xff0c;JavaScript 事件是至关重要的概念之一。通过事件&#xff0c;我们可以实现交互性和动态性&#xff0c;使用户与网页进行互动。本篇博客将介绍 JavaScript 事件的基础知识&#xff0c;并深入探讨一些高级技术。 1. 什么是事件&#xff1f; 事件是指用…

振弦采集仪在岩土工程监测中的性能评价及标准选择

振弦采集仪在岩土工程监测中的性能评价及标准选择 河北稳控科技振弦采集仪是一种重要的岩土工程监测仪器&#xff0c;用于测量振动场的频率、振幅和相位等参数。它在岩土工程施工和地震监测中具有重要的应用价值。本文将对振弦采集仪的性能评价及标准选择进行详细介绍。 首先&…

每日一练2024.5.9

题目&#xff1a; 给定一个非负整数数组 nums&#xff0c; nums 中一半整数是 奇数 &#xff0c;一半整数是 偶数 。 对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是 奇数 &#xff1b;当 nums[i] 为偶数时&#xff0c; i 也是 偶数 。 你可以返回 …

Java | Leetcode Java题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) {int n nums.length;if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return sl…

Python 全栈系列242 踩坑记录:租用算力机完成任务

说明 记一次用算力机分布式完成任务的坑。 内容 1 背景 很早的时候&#xff0c;做了一个实体识别模型。这个模型可以识别常见的PER、ORG、LOC和TIME几种类型实体。 后来&#xff0c;因为主要只用来做PER、ORG的识别&#xff0c;于是我根据业务数据&#xff0c;重新训练了模…

免费矢量图标汇总:一文掌握10个优质网站!

矢量图标是我们日常设计应用程序和网页过程中不可缺少的元素之一。通过小矢量图标&#xff0c;我们可以快速方便地实现视觉指导和功能划分。但在创作中&#xff0c;设计师往往需要花费大量的时间和精力来寻找不同网站的矢量图标&#xff0c;以满足他们的设计需求&#xff0c;这…

跨域问题(服务器和浏览器之间)待补充

一、为什么产生&#xff1a; 同源策略&#xff08;域名&#xff0c;协议&#xff0c;端口&#xff09;&#xff0c;安全问题 二、怎么解决&#xff1a; 1、cros:修改响应头 2、jp&#xff1a;采用js标签 3、代理&#xff08;创建服务器&#xff0c;定义规则&#xff0c;服…

就业班 第三阶段(zabbix) 2401--5.9 day1 普通集zabbix 5.0部署 nginx部署+agent部署

文章目录 环境一、zabbix 5.0 部署1、安装yum源2、安装相关软件3、数据库安装和配置mariaDB数据库mysql57数据库 安装mysql万能卸载mysql代码&#xff1a;启动mysql并初始化4、数据表导入5、修改配置&#xff0c;启动服务6、配置 web GUI7、浏览器访问注意数据加密的选项不要勾…