当前位置: 首页 > news >正文

从零开始搭建k8s集群详细步骤

声明:本文仅作为个人记录学习k8s过程的笔记。

节点规划:

两台节点为阿里云ECS云服务器,操作系统为centos7.9,master为2v4GB,node为2v2GB,硬盘空间均为40GB。(节点基础配置不低于2V2GB)

主机名节点ip角色部署组件
k8s-master172.23.83.164masteretcd, kube-apiserver, kube-controller-manager, kubectl, kubeadm, kubelet, kube-proxy, flannel
k8s-node1172.23.83.165nodeskubectl, kubelet, kube-proxy, flannel

 组件版本:

查看发行版:lsb_release -a

查看Linux内核:uname -r

组件版本说明
CentOS7.9.2009
KernelLinux 3.10.0-1160.119.1.el7.x86_64
etcd3.3.15使用容器方式部署,默认数据挂载到本地路径
coredns1.6.2
kubeadmv1.16.2
kubectlv1.16.2
kubeletv1.16.2
kube-proxyv1.16.2
flannelv0.11.0

安装步骤:

1.修改hostname解析(所有节点)

  • 修改 hostname
     

hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-node1

(bash后立即生效)

或 vim /etc/hostname (重启后生效)

  • 添加hosts解析
$ cat >>/etc/hosts<<EOF
172.23.83.164 k8s-master
172.23.83.165 k8s-node1
EOF

或vim /etc/hosts 添加

172.23.83.164 k8s-master
172.23.83.165 k8s-node1

 2.调整系统配置(所有节点)

如果节点间无安全组限制(内网机器间可以任意访问),可以忽略,否则,至少保证如下端口可通: k8s-master节点:TCP:6443,2379,2380,60080,60081UDP协议端口全部打开 k8s-slave节点:UDP协议端口全部打开

  • 设置iptables
iptables -P FORWARD ACCEPT
  • 关闭swap
swapoff -a
# 防止开机自动挂载 swap 分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  • 关闭selinux和防火墙
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
  • 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.max_map_count=262144
EOF
modprobe br_netfilter
  • 时间同步
yum install ntpdate -yntpdate time.windows.com
  • 开启ipvs
yum -y install ipset ipvsadm
cat > /etc/sysconfig/modules/ipvs.modules <<EOF 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack_ipv4 
EOF

授权、运行:

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

检查是否加载 :

lsmod | grep -e ipvs -e nf_conntrack_ipv4
  • 设置yum 源
$ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
$ yum clean all && yum makecache

3.安装docker(我安装是18.09.9,最新版本的环境搭建不成功)(所有节点)

 ## 查看所有的可用版本
$ yum list docker-ce --showduplicates | sort -r
##安装旧版本 yum install docker-ce-cli-18.09.9-3.el7  docker-ce-18.09.9-3.el7
## 安装源里最新版本
$ yum install docker-ce
## 配置docker加速
$ mkdir -p /etc/docker
vi /etc/docker/daemon.json
{"insecure-registries": [    "172.23.83.164:5000" ],                          "registry-mirrors" : ["https://8xpk5wnt.mirror.aliyuncs.com"]
}
## 启动docker
$ systemctl enable docker && systemctl start docker

4.部署kubernetes

(所有节点)

$ yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes
## 查看kubeadm 版本
$ kubeadm version
## 设置kubelet开机启动
$ systemctl enable kubelet 
  • 初始化配置文件(以下步骤均只在master执行)
kubeadm config print init-defaults > kubeadm.yaml

修改kubeadm.yaml文件内容如下(修改api地址、镜像源、pod网段)

---
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 172.23.83.164  # apiserver地址,因为单master,所以配置master的节点内网IPbindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: k8s-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
kubernetesVersion: v1.18.0
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16  # Pod 网段,flannel插件需要使用这个网段serviceSubnet: 10.96.0.0/12
scheduler: {}
  • 下载镜像

 # 查看需要使用的镜像列表,若无问题,将得到如下列表
$ kubeadm config images list --config kubeadm.yaml
registry.aliyuncs.com/google_containers/kube-apiserver:v1.16.0
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.16.0
registry.aliyuncs.com/google_containers/kube-scheduler:v1.16.0
registry.aliyuncs.com/google_containers/kube-proxy:v1.16.0
registry.aliyuncs.com/google_containers/pause:3.1
registry.aliyuncs.com/google_containers/etcd:3.3.15-0
registry.aliyuncs.com/google_containers/coredns:1.6.2# 提前下载镜像到本地
$ kubeadm config images pull --config kubeadm.yaml
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.16.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.16.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.16.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.16.0
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.1
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.3.15-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:1.6.2

  • 初始化master节点
kubeadm init --config kubeadm.yaml(成功会出现下述信息)

  • 按提示执行 
  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config 
  • node节点加入集群(node节点)
kubeadm join 172.23.83.164:6443 --token abcdef.0123456789abcdef \
>     --discovery-token-ca-cert-hash sha256:1d1fe362b31c06f38e1097fb6bbbf89cd4ad738cafc51d49ceb86e0654ab12b2

token有效期为24h,如过期可参考下文进行添加:

https://blog.csdn.net/weixin_58746210/article/details/139882088

  • 此时执行kubectl get nodes所有节点都在notready状态(没安装网络插件)

5.安装flannel插件(master)

  • 直接下载flannel的yml文件(我没成功过)
wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

下载不成功使用浏览器打开直接复制,vim kube-flannel.yml 粘贴即可,但是要注意格式要正确

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp.flannel.unprivilegedannotations:seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/defaultseccomp.security.alpha.kubernetes.io/defaultProfileName: docker/defaultapparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/defaultapparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:privileged: falsevolumes:- configMap- secret- emptyDir- hostPathallowedHostPaths:- pathPrefix: "/etc/cni/net.d"- pathPrefix: "/etc/kube-flannel"- pathPrefix: "/run/flannel"readOnlyRootFilesystem: false# Users and groupsrunAsUser:rule: RunAsAnysupplementalGroups:rule: RunAsAnyfsGroup:rule: RunAsAny# Privilege EscalationallowPrivilegeEscalation: falsedefaultAllowPrivilegeEscalation: false# CapabilitiesallowedCapabilities: ['NET_ADMIN']defaultAddCapabilities: []requiredDropCapabilities: []# Host namespaceshostPID: falsehostIPC: falsehostNetwork: truehostPorts:- min: 0max: 65535# SELinuxseLinux:# SELinux is unsed in CaaSPrule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: flannel
rules:- apiGroups: ['extensions']resources: ['podsecuritypolicies']verbs: ['use']resourceNames: ['psp.flannel.unprivileged']- apiGroups:- ""resources:- podsverbs:- get- apiGroups:- ""resources:- nodesverbs:- list- watch- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-systemlabels:tier: nodeapp: flannel
data:cni-conf.json: |{"cniVersion": "0.2.0","name": "cbr0","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-amd64namespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/osoperator: Invalues:- linux- key: beta.kubernetes.io/archoperator: Invalues:- amd64hostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.11.0-amd64command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.11.0-amd64command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-arm64namespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/osoperator: Invalues:- linux- key: beta.kubernetes.io/archoperator: Invalues:- arm64hostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.11.0-arm64command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.11.0-arm64command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-armnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/osoperator: Invalues:- linux- key: beta.kubernetes.io/archoperator: Invalues:- armhostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.11.0-armcommand:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.11.0-armcommand:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-ppc64lenamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/osoperator: Invalues:- linux- key: beta.kubernetes.io/archoperator: Invalues:- ppc64lehostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.11.0-ppc64lecommand:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.11.0-ppc64lecommand:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-s390xnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/osoperator: Invalues:- linux- key: beta.kubernetes.io/archoperator: Invalues:- s390xhostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: quay.io/coreos/flannel:v0.11.0-s390xcommand:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.11.0-s390xcommand:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
  • # 先拉取镜像,此过程国内速度比较慢
$ docker pull quay.io/coreos/flannel:v0.11.0-amd64
  • # 执行flannel安装
$ kubectl create -f kube-flannel.yml 

6.验证集群是否搭建成功

 如果成功,节点状态全部为ready

如果不成功,参考

http://t.csdnimg.cn/hP6Rk

相关文章:

从零开始搭建k8s集群详细步骤

声明&#xff1a;本文仅作为个人记录学习k8s过程的笔记。 节点规划&#xff1a; 两台节点为阿里云ECS云服务器&#xff0c;操作系统为centos7.9&#xff0c;master为2v4GB,node为2v2GB,硬盘空间均为40GB。&#xff08;节点基础配置不低于2V2GB&#xff09; 主机名节点ip角色部…...

大模型智能体可以用来实现哪些需求?

大模型智能体可以用来实现广泛的需求&#xff0c;以下是一些常见的应用场景&#xff1a; 自然语言处理&#xff08;NLP&#xff09;应用 文本生成&#xff1a;自动撰写文章、编写代码、生成新闻摘要。 对话系统&#xff1a;智能客服、虚拟助手、聊天机器人。 语言翻译&#xf…...

Vue 3 组合式 API 全面讲解:defineCustomElement

Vue 3 引入的组合式 API&#xff08;Composition API&#xff09;为开发者提供了更加灵活和强大的代码组织能力。除了常用的 defineComponent 用于定义普通组件外&#xff0c;Vue 3 还提供了 defineCustomElement 函数&#xff0c;允许开发者定义可在 Web Components 规范下使用…...

SwiftUI 6.0(iOS 18)监听滚动视图视口中子视图可见性的极简方法

概览 在 SwiftUI 的应用开发中,我们有时需要监听滚动视图中子视图当前的显示状态:它们现在是被滚动到可见视口(Viewport)?或仍然是隐藏在“未知的黑暗”中呢? 在 SwiftUI 早期版本中为了得偿所愿,我们需要借助一些“取巧”的手段。不过,从 SwiftUI 6.0(iOS 18)开始情…...

分享五种mfc140.dll丢失如何修复?五种修复错误的详细解决办法

在Windows操作系统中&#xff0c;DLL&#xff08;动态链接库&#xff09;文件扮演着至关重要的角色&#xff0c;它们为应用程序提供了共享的函数和资源。其中&#xff0c;mfc140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;对于许多使用Microso…...

MATLAB 手动实现投影密度法分割建筑物立面 (73)

专栏文章往期回顾,包含本文章 MATLAB 手动实现投影密度法分割建筑物立面 (73) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 从原始点云中,自动分割提取建筑物立面点云用于立面绘图,可以减少人为操作流程。这里从0开始,手动实现一种基于投影密度法的建筑物立…...

QT的基础数据类型(上)

本文将介绍几个QT中常用的数据类型 QString 是处理字符串的主要类 使用Unicode编码,每个字符是16位的QChar 初始化 QString的初始化方法有以下几种: //字符串常量初始化QString str1 = "Hello, World! str1";//使用构造函数初始化QString str2("Hello, Wo…...

【系统分析师】-综合知识-系统架构

1、设计模式 1&#xff09;观察者模式定义了对象间的一种一对多依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新【消息订阅】。在该模式中&#xff0c;发生改变的对象称为观察目标&#xff0c;被通知的对象称为观察者&…...

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…...

前端面试题-什么是JavaScript的闭包?有哪些应用场景?

定义: 一个函数能够访问其它函数内部定义的变量 形成的原理: (1)函数创建&#xff1a;在一个函数&#xff08;外部函数&#xff09;中定义另一个函数&#xff08;内部函数&#xff09;。 (2)内部函数访问&#xff1a;内部函数可以访问和修改外部函数中的局部变量。 (3)函数…...

Xilinx XAPP585相关

XAPP585中相关的状态机 第一个状态机&#xff1a;这里主要是在对时钟线延迟的基础上&#xff0c;通过BITSLIP操作&#xff0c;做时钟的对齐&#xff1b; 第二个状态机&#xff1a;这里对c_delay_in所做的操作&#xff0c;主要是对时钟线的延迟进行控制&#xff1b; delay_con…...

Java实现腾讯云人脸识别集成:如何为司机创建人脸模型

文章目录 一、场景介绍二、实现步骤三、代码解析四、总结 在现代的开发过程中&#xff0c;我们经常需要集成各种云服务来增强应用的功能。今天&#xff0c;我想和大家分享一个在Java中集成腾讯云人脸识别的实际案例——为司机创建人脸模型。这个功能通常用于司机管理系统中&…...

微信小程序电话号码授权

前端&#xff1a; 文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html uniapp调用的时候&#xff0c;要将bind用替换 <button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"…...

vue3 响应式 API:ref() 和 reactive()

在 Vue 3 中&#xff0c;响应式系统是其核心特性之一&#xff0c;它使得数据的变化能够自动触发视图的更新。 官方文档&#xff1a; 响应式 API&#xff1a;核心 要更好地了解响应式 API&#xff0c;推荐阅读官方指南中的章节&#xff1a; 响应式基础 (with the API preference…...

英智金融行业AI Agent,在金融领域全场景下的业务创新与应用实践

随着全球经济的数字化转型&#xff0c;金融行业也在迅速演变。传统的金融服务已经无法完全满足现代客户对快速、个性化和高效服务的需求。与此同时&#xff0c;市场竞争的加剧、监管环境的变化以及客户期望的提升&#xff0c;促使金融机构不断寻求新的技术来优化运营效率、提升…...

hyper-v安装window10操作系统

Hyper-V是微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。 目标&#xff1a;在window10的物理机上基于hyper-v运行虚拟window10。 准备条件 准备好window10操作系统&#xff0c;iso、wim、esd等都行&#xff0c;我这…...

华三(H3C)UIS3030 Uni-R4900服务器硬件监控指标解读

随着企业信息化建设的不断深入&#xff0c;服务器作为IT架构的核心组成部分&#xff0c;其稳定性和性能直接影响到业务的连续性和用户体验。为了保障服务器的稳定运行&#xff0c;监控易作为一款专业的监控软件&#xff0c;为华三&#xff08;H3C&#xff09;UIS3030和Uni-R490…...

opencv 控制鼠标键盘实现功能setMouseCallback

鼠标事件类型 OpenCV 支持多种鼠标事件类型&#xff0c;常见的包括&#xff1a; cv2.EVENT_LBUTTONDOWN&#xff1a;左键按下 cv2.EVENT_RBUTTONDOWN&#xff1a;右键按下 cv2.EVENT_MBUTTONDOWN&#xff1a;中键按下 cv2.EVENT_LBUTTONUP&#xff1a;左键释放 cv2.EVENT_RBUTT…...

【傅里叶分析】复数基础知识

【傅里叶分析】复数基础知识 复数复数的几何意义与点的对应与向量的对应 复数与极坐标辐角与辐角主值三角函数 参考文献 本文参考了网上的其他文章&#xff0c;已在文末参考文献中列出&#xff1b;如有侵权&#xff0c;请联系我删除。 复变函数是傅里叶分析的基础&#xff0c;而…...

从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革

前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;点击这里立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 前言 – 人工智能教程https://www.captainbed.cn/l…...

基于YOLOv10深度学习的草莓成熟度检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、人工智能

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…...

log4j日志配置%X{TransId}

log4j日志配置文件中的%X{TransId}是怎么动态获取值的 在Log4j中&#xff0c;%X{TransId} 是用来从MDC&#xff08;Mapped Diagnostic Context&#xff09;中获取值的占位符。MDC 是 Log4j 提供的一种机制&#xff0c;用于在同一个线程的不同日志记录中传递上下文信息。通过 M…...

PHP模拟高并发异步请求测试+redis的setnx处理并发和防止死锁处理

/** PHP并发异步请求测试* /test/curlMulti*/public function curlMultiAction(){$urls ["http://localhost:801/api/order/create","http://localhost:801/api/order/create","http://localhost:801/api/order/create","http://localhos…...

访问网站出现“此站点不安全”如何解决

在网络浏览中&#xff0c;我们经常会遇到浏览器地址栏出现“此站点不安全”的警告。这通常意味着网站没有使用SSL&#xff08;安全套接层&#xff09;加密来保护用户数据的安全。那么&#xff0c;如何通过获得并安装SSL证书来消除这一警告&#xff0c;确保网站的安全可靠呢&…...

同一台电脑同时连接使用Gitee(码云)和Github

1、添加对应的密钥 ssh-keygen -t rsa -C "your_emailexample.com" -f ~/.ssh/github_id-rsa //生成github秘钥 ssh-keygen -t rsa -C "your_emailexample.com" -f ~/.ssh/gitee_id-rsa //生成码云秘钥 2、在 ~/.ssh 文件里会生成对应的文件 文件夹里会…...

GORM 插入和批量插入操作介绍

GORM 是一个功能强大的 Go 语言 ORM 库&#xff0c;它提供了简单易用的 API 来执行数据库操作。本文将介绍如何使用 GORM 进行单条记录插入和批量插入操作。 单条记录插入 在 GORM 中&#xff0c;插入一条记录非常简单。首先&#xff0c;你需要定义一个模型&#xff0c;该模型…...

企业CAD图纸加密软件推荐!2024年好用的10款CAD图纸加密软件排行

在现代企业中&#xff0c;CAD图纸作为重要的设计和工程数据&#xff0c;其安全性和保密性至关重要。为了防止图纸被非法获取、篡改或滥用&#xff0c;选择一款高效的CAD图纸加密软件显得尤为重要。本文将为您推荐2024年市场上十款好用的CAD图纸加密软件&#xff0c;帮助企业保护…...

智能电梯标志新时代:墨水屏电子标签引领变革

电梯安全墨水屏标签的智能设备悄然出现在各大写字楼和住宅区的电梯中&#xff0c;引发了广泛关注。这款设备替代了传统的纸质电梯标志&#xff0c;通过手机蓝牙标签APP直接进行编辑刷新内容&#xff0c;并具备Type-C接口充电功能。 本文将深入探讨这一创新技术的应用前景及其对…...

使用nvm下载nodejs版本报错

这里写自定义目录标题 使用nvm下载nodejs版本报错&#xff1a;Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404问题原因解决办法 使用nvm下载nodejs版本报错&#xff1a;Error retrieving “http://npm.taobao.org/m…...

深入理解CSS的:valid和:invalid伪类:增强表单验证的艺术

在现代网页设计中&#xff0c;用户输入验证是一个重要的环节&#xff0c;它不仅关乎用户体验&#xff0c;也是数据准确性和安全性的保障。CSS3引入了两个强大的伪类选择器&#xff1a;:valid和:invalid&#xff0c;它们允许开发者通过CSS来增强表单输入的验证过程&#xff0c;而…...

稚晖君发布5款全能人形机器人,开源创新,全能应用

8月18日&#xff0c;智元机器人举行“智元远征 商用启航” 2024年度新品发布会&#xff0c;智元联合创始人彭志辉主持并发布了“远征”与“灵犀”两大系列共五款商用人形机器人新品——远征A2、远征A2-W、远征A2-Max、灵犀X1及灵犀X1-W&#xff0c;并展示了在机器人动力、感知、…...

【总结】冲击偶的概念与性质

冲击偶的概念与性质...

Hbase图形化界面

分享一个好用的hbase图形化界面 安装包&#xff1a;链接: https://pan.baidu.com/s/11Y2cDlme-P2xe--pYqy6MQ?pwdguag 提取码: guag 1、上传项目到linux 2、修改数据库配置信息 application-druid.yml 修改url、username、password为数据库连接信息 3、创建数据库(注意字符集…...

PhalApi:在宝塔一键安装部署PHP开源接口框架的教程

如何在宝塔上&#xff0c;一键安装部署PhalApi开源接口框架&#xff1f; 第一步&#xff0c;进入你的宝塔 - 软件商店。 第二步&#xff0c;切换到&#xff1a;一键部署&#xff1b; 第三步&#xff0c;搜索 phalapi&#xff1b; 第四步&#xff0c;点击 一键部署&#xff1…...

什么是BERT?工程快速入门

基本介绍 全称是Bidirectional Encoder Representations from Transformers。BERT翻译成中文通常被称为“双向编码器表征法”或简单地称为“双向变换器模型” Bidirectional&#xff1a;是双向神经网络&#xff0c;这个在学习 RNN 时候我们就了解到如何使用双向 RNN 让每一个…...

SQL - 事务

事务是代表单个工作单元的一组SQL语句&#xff0c;当我们需要对数据库进行多次更改的情况下&#xff0c;要使用事务&#xff0c;我们希望所有这些更改作为一个单元一起成功或失败事务属性 (ACID) 原子性(Atomicity)&#xff1a;事务中的所有操作要么全部完成&#xff0c;要么全…...

系统, 安装完以后只能进ubuntu

1.问题 在已经安装了Windows10系统的情况下&#xff0c;用U盘安装Ubuntu 16.04双系统&#xff0c; 安装完以后只能进ubuntu&#xff0c;在grub系统选择界面&#xff0c;Windows10操作系统的选项都没有。 2.解决办法 进入ubuntu系统&#xff0c;打开终端输入: sudo update-g…...

闲鱼功能全解析:闲置物品快速变现

咸鱼&#xff08;现已更名为闲鱼&#xff09;作为一款闲置交易平台&#xff0c;其功能设计旨在提供一个方便、安全的环境&#xff0c;让用户能够轻松地买卖二手物品。以下是对咸鱼&#xff08;闲鱼&#xff09;功能的详细分析 1. 商品发布与管理 商品发布&#xff1a;用户可以…...

牛客网SQL进阶129 :月均完成试卷数不小于3的用户

月均完成试卷数不小于3的用户爱作答的类别_牛客题霸_牛客网 0 问题描述 基于试卷作答记录表exam_record、试卷信息表examination_info &#xff0c;统计出 “月均完成试卷数”不小于3的用户作答的类别及作答次数&#xff0c;按次数降序输出。 1 数据准备 drop table if exis…...

Astro + Cloudflare Pages 快速搭建个人博客

目录 1 选择 Astro 模板2 使用代码3 修改代码4 上传 Github5 部署 Cloudflare Pages6 后续修改 最近我搭建完了我的个人网站&#xff0c;很多人问是怎么做的&#xff0c;今天就来写一篇教程吧。 全部干货&#xff0c;看完绝对能成功搭建自己的网站&#xff01;&#xff08;还不…...

Vue中<style scoped>与<style module>的深入解析与应用

在Vue开发中&#xff0c;样式管理是一个重要的环节。Vue提供了多种方式来帮助开发者更有效地管理组件样式&#xff0c;其中<style scoped>和<style module>是两个非常实用的特性。本文将深入探讨这两个属性的作用、原理以及使用场景&#xff0c;帮助读者更好地理解…...

Qt系列之数据库(二)代码篇

Qt 数据库开发是指在Qt框架下进行数据库操作的开发工作。Qt提供了一套强大的数据库模块&#xff0c;可以方便地与多种数据库进行交互&#xff0c;如SQLite、MySQL、PostgreSQL等。以下是一些关键点和步骤&#xff0c;帮助你进行Qt数据库开发&#xff1a; 1. 安装Qt数据库模块 …...

@RequstParam@PathVariable@RequestBody的区别

文章目录 概述RequestParam‌&#xff1a;PathVariable‌&#xff1a;RequestBody‌&#xff1a; 概述 ‌RequestParam、RequestBody和PathVariable是Spring框架中用于处理HTTP请求参数的注解&#xff0c;它们在处理请求参数的方式、适用场景和请求方法上有所不同。‌ Reques…...

Maven继承和聚合特性

目录 Maven继承关系 1.继承概念 父POM 子模块 2.继承机制 3.示例 4.继承作用 背景 需求 5.注意事项 Maven聚合关系 1. 定义与概念 2. 实现方式 3. 特性与优势 4. 示例 5. 注意事项 Maven继承关系 1.继承概念 Maven 继承是指在 Maven 的项目中&#xff0c;定义…...

python opencv实时视频输入

要在Python中使用OpenCV进行实时视频输入&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;需要安装OpenCV库。可以使用pip install opencv-python命令来安装OpenCV。 导入所需的库&#xff1a; import cv2创建一个VideoCapture对象来读取视频输入&#x…...

为什么头文件不能写using namespace

在C中&#xff0c;不建议在头文件中使用using namespace语句&#xff0c;主要有以下几个原因&#xff1a; 命名冲突&#xff1a;当在头文件中使用using namespace时&#xff0c;该命名空间中的所有名字都将被引入到包含该头文件的每个源文件中。这可能导致命名冲突&#xff0c…...

使用 preloadRouteComponents 提升 Nuxt 应用的性能

title: 使用 preloadRouteComponents 提升 Nuxt 应用的性能 date: 2024/8/19 updated: 2024/8/19 author: cmdragon excerpt: preloadRouteComponents 是提升 Nuxt 应用性能的一个简单而有效的工具。通过在适当的时候预加载路由组件&#xff0c;你可以为用户提供更快速、更流…...

mybatisPlus的@TableLogic逻辑删除注解导致联合索引失效的坑

文章目录 1.问题2.原因3.解决方法3.1 方法13.2 方法2 4. 建索引的几大原则4.1.最左前缀匹配原则&#xff0c;非常重要的原则4.2.和in可以乱序4.3.尽量选择区分度高的列作为索引4.4.索引列不能参与计算&#xff0c;保持列“干净”4.5.尽量的扩展索引&#xff0c;不要新建索引 5.…...

C# 隐式转换和显式转换

在C#中编程语言中&#xff0c;数据类型转换是一个重要的概念&#xff0c;C#提供了两种主要的转换方式&#xff1a;隐式转换和显式转换。理解下这两种转换方式对于编写健壮和可靠的代码至关重要。 隐式转换&#xff08;Implicit Conversion&#xff09; 定义 隐式转换是指的是…...

入门网络安全工程师要学习哪些内容

大家都知道网络安全行业很火&#xff0c;这个行业因为国家政策趋势正在大力发展&#xff0c;大有可为!但很多人对网络安全工程师还是不了解&#xff0c;不知道网络安全工程师需要学什么?知了堂小编总结出以下要点。 网络安全工程师是一个概称&#xff0c;学习的东西很多&…...