官方文档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
EOFsudo 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 master3172.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 c89f1873fe75b408e2eceaad6eeead9400109fbd736112bc50a5d0485ca5272dPlease 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.gzmv 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-usernamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: 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.gzmv 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.mzph.cn/news/834108.shtml

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

相关文章

安卓开发--环境配置

本次项目选择使用 Andrio Studio 进行开发。虽然这款软件版本更新也很快。不过开发一款APP的技术流程是大差不差的。我几年前的安卓笔记放到现在还是能用。 现在CSDN网上写一个笔记留作以后参考&#xff0c;开始吧&#xff01;&#xff01;&#xff01; 1 安装 Andrio Studio …

npm 安装 pnpm 时 报错 npm ERR! Unexpected token ‘.‘

问题 一个项目用的是 pnpm 安装的依赖&#xff0c;node 的版本是 16.16.0&#xff0c;nvm 的版本是 1.1.7&#xff0c;然后全局安装 pnpm 报错如下&#xff1a; 解决 我看网上的一些解决方案是说 nvm 版本过低导致&#xff0c;下面我们按照这个方向处理。 实首先下载 nvm-up…

使用凌鲨建立软件研发技能学习小组

凌鲨(OpenLinkSaas)的团队功能除了提供论坛功能&#xff0c;还能记录团队成员的成长记录。 使用方法 打开团队功能 团队功能在默认情况下是关闭的&#xff0c;你可以在登录后打开团队功能开关。 创建学习团队 日报/周报/个人目标一般是企业团队需要&#xff0c;建议关闭。 …

Shell生成支持x264的ffmpeg安卓全平台so

安卓 FFmpeg系列 第一章 Ubuntu生成ffmpeg安卓全平台so 第二章 Windows生成ffmpeg安卓全平台so 第三章 生成支持x264的ffmpeg安卓全平台so&#xff08;本章&#xff09; 文章目录 安卓 FFmpeg系列前言一、实现步骤1、下载x264源码2、交叉编译生成.a3、加入x264配置4、编译ffmp…

Redis 哨兵机制

文章目录 哨兵机制概念相关知识铺垫主从复制缺陷哨兵工作流程选举具体流程理解注意事项 哨兵机制概念 先抽象的理解&#xff0c;哨兵就像是监工&#xff0c;节点不干活了&#xff0c;就要有行动了。 Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#…

MVC WebAPI

创建项目 创建api控制器 》》》 web api 控制器要继承 ApiController 》》》 数据会自动装配 及自动绑定 》》》清除xml返回格式 //清除XML返回格式 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 》》》跨越问题

【汇编语言小练习输入两个数字然后输出它们的和】

这个程序是用汇编语言编写一个简单的程序&#xff0c;它将从键盘输入两个数字&#xff0c;然后输出它们的和。 .MODEL SMALL .STACK 100H.DATAINPUT_MSG1 DB Enter the first number: $INPUT_MSG2 DB 13, 10, Enter the second number: $RESULT_MSG DB 13, 10, The sum is: $N…

2024服贸会,参展企业媒体宣传报道攻略

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 2024年中国国际服务贸易交易会&#xff08;简称“服贸会”&#xff09;是一个重要的国际贸易平台&#xff0c;对于参展企业来说&#xff0c;有效的媒体宣传报道对于提升品牌知名度、扩大…

FPGA第二篇,FPGA与CPU GPU APU DSP NPU TPU 之间的关系与区别

简介&#xff1a;首先&#xff0c;FPGA与CPU GPU APU NPU TPU DSP这些不同类型的处理器&#xff0c;可以被统称为"处理器"或者"加速器"。它们在计算机硬件系统中承担着核心的计算和处理任务&#xff0c;可以说是系统的"大脑"和"加速引擎&qu…

社区奶柜:小本创业,大有可为

社区奶柜&#xff1a;小本创业&#xff0c;大有可为 在快节奏的现代生活中&#xff0c;人们对健康、便捷生活方式的追求日益增长。社区奶柜加盟项目&#xff0c;正是应运而生&#xff0c;它不仅满足了居民对于新鲜、营养乳制品的日常需求&#xff0c;也为寻求创业机会的您铺设…

excel中图片url转为jpg

步骤 打开Excel&#xff0c;并按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;插入一个新的模块&#xff08;右键点击项目资源管理器中的模块 -> 插入 -> 模块&#xff09;。在新模块的代码窗口中&#xff0c;复制并粘贴以下示例代码。根据需要修改代码中的变量…

力扣2105---给植物浇水II(Java、模拟、双指针)

题目描述&#xff1a; Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行&#xff0c;从左到右进行标记&#xff0c;编号从 0 到 n - 1 。其中&#xff0c;第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐&#xff0c;最初是…

AS01_BAPI:BAPI_FIXEDASSET_OVRTAKE_CREATE_创建资产主数据

AS01_创建资产主数据 一、功能介绍 使用事务码AS01创建资产主数据 二、程序代码 程序代码&#xff1a; REPORT zfir002.TYPE-POOLS: slis, icon. TYPES: BEGIN OF ty_file,zanln TYPE anla-anln1, "资产编号anln2 TYPE anla-anln2, "资产次级编号bukrs …

FastAPI vs Flask: 选择最适合您的 Python Web 框架

文章目录 1. 简介2. 安装和设置3. 路由和视图4. 自动文档生成5. 数据验证和序列化6. 性能和异步支持结论 在 Python Web 开发领域&#xff0c;FastAPI 和 Flask 是两个备受欢迎的选择。它们都提供了强大的工具和功能&#xff0c;但是在某些方面有所不同。本文将比较 FastAPI 和…

Ubuntu 下串口工具:Minicom、CuteCom 和 Screen

在 Ubuntu 中&#xff0c;对于串口通信工具的选择&#xff0c;虽然没有一个绝对的 “最好用” 的排名&#xff0c;但根据用户反馈和工具的流行程度&#xff0c;Minicom、CuteCom 和 Screen 这三个工具通常被认为是较为受欢迎和实用的。 一、简介&#xff1a; Minicom&#xff…

【论文笔记】KAN: Kolmogorov-Arnold Networks 全新神经网络架构KAN,MLP的潜在替代者

KAN: Kolmogorov-Arnold Networks code&#xff1a;https://github.com/KindXiaoming/pykan Background ​ 多层感知机&#xff08;MLP&#xff09;是机器学习中拟合非线性函数的默认模型&#xff0c;在众多深度学习模型中被广泛的应用。但MLP存在很多明显的缺点&#xff1a;…

跨协议通讯无缝对接:Modbus-BACnet楼宇智能转换器深度解析

在现代化的建筑群里&#xff0c;智能楼宇管理系统如同神经系统&#xff0c;协调着各设备的运行。某大型商业综合体&#xff0c;集购物中心、办公区、酒店于一体&#xff0c;面对着来自不同供应商的设备&#xff0c;如何实现统一管理和高效通讯成了首要挑战。特别是其内部既有采…

ADC模-数转换原理与实现

1. 今日摸鱼计划 今天来学习一下ADC的原理&#xff0c;然后把ADC给实现 ADC芯片:ADC128S102 视频&#xff1a; 18A_基于SPI接口的ADC芯片功能和接口时序介绍_哔哩哔哩_bilibili 18B_使用线性序列机思路分析SPI接口的ADC芯片接口时序_哔哩哔哩_bilibili 18C_基于线性序列机的S…

neo4j-5.11.0安装APOC插件or配置允许使用过程的权限

在已经安装好neo4j和jdk的情况下安装apoc组件&#xff0c;之前使用neo4j-community-4.4.30&#xff0c;可以找到配置apoc-4.4.0.22-all.jar&#xff0c;但是高版本neo4j对应没有apoc-X.X.X-all.jar。解决如下所示&#xff1a; 1.安装好JDK与neo4j 已经安装对应版本的JDK 17.0…

MySQL数据库及数据表的创建

1.创建一个名叫 db_classes 的数据库&#xff1a; 创建一个叫 db_classes 的数据库MySQL命令&#xff1a; create database db_classes; 运行效果&#xff1a; 创建数据库后查看该数据库基本信息MySQL命令&#xff1a; show create database db_classes; 运行效果&#xff…