使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群
博客地址:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群
前言
Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析
无论任何情况下都推荐先花几个小时通读官方文档,来了解配置过程中的可选项,以及可能会遇到哪些问题
本文基于官方文档中 入门 - 生产环境 一章来整理部署流程
Kubernetes 文档 | Kubernetes
架构
- OS: Debian 12
- CGroup Driver: systemd
- Container Runtime: containerd
- CNI: Calico
- Kubernetes:
v1.32.0
注意
所有节点服务器都需要关闭 swap
- Other
- 说明
- 该服务器运行 K8S 外部应用,包括 Nginx、Nexus 等
- 该服务器运行的所有业务通过 docker-compose 管理
- 与 K8S 自身配置相关的步骤说明中的“所有节点”不包括该服务器
- Server
- vCPU:
2 - Memory:
4G
- vCPU:
- Network:
192.168.1.1002E:7E:86:3A:A5:20 - Port:
8443/tcp: 向集群提供 Kubernetes APIServer 负载均衡
- 说明
- Etcd
- Server
- vCPU:
1 - Memory:
1G
- vCPU:
- Network
- Etcd-01:
192.168.1.1012E:7E:86:3A:A5:21 - Etcd-02:
192.168.1.1022E:7E:86:3A:A5:22 - Etcd-03:
192.168.1.1032E:7E:86:3A:A5:23
- Etcd-01:
- Port:
2379/tcp: etcd HTTP API2380/tcp: etcd peer 通信
- Server
- Master
- Server
- vCPU:
4 - Memory:
8G
- vCPU:
- Network
- Master-01:
192.168.1.1042E:7E:86:3A:A5:24 - Master-02:
192.168.1.1052E:7E:86:3A:A5:25 - Master-03:
192.168.1.1062E:7E:86:3A:A5:26
- Master-01:
- Port:
179/tcp: Calico BGP4789/udp: VXLAN5473/tcp: Calico 管理界面6443/tcp: Kubernetes APIServer6666/tcp: Calico Felix10250/tcp: kubelet API
- Server
- Node
- Server
- vCPU:
4 - Memory:
8G
- vCPU:
- Network
- Node-01:
192.168.1.1072E:7E:86:3A:A5:27 - Node-02:
192.168.1.1082E:7E:86:3A:A5:28 - Node-03:
192.168.1.1092E:7E:86:3A:A5:29
- Node-01:
- Port:
179/tcp: Calico BGP10250/tcp: kubelet API
- Server
配置基础环境
说明
所有节点
apt update
apt upgrade
apt install curl apt-transport-https ca-certificates gnupg2 software-properties-common vimcurl -fsSL https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.32/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.listcurl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.ustc.edu.cn/docker-ce/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.listapt updateapt install containerd.iomkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.tomlsystemctl restart containerdapt install kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
开启 ipv4 转发
编辑 /etc/sysctl.conf,找到下方配置并取消注释
net.ipv4.ip_forward=1
执行 sysctl -p 应用配置
创建 crictl 配置
cat << EOF > /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
如果需要通过代理服务器访问容器仓库,需要为 containerd 配置代理服务
mkdir -p /etc/systemd/system/containerd.service.d
cat << EOF > /etc/systemd/system/containerd.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://username:password@proxy-server-ip:port"
Environment="HTTPS_PROXY=http://username:password@proxy-server-ip:port"
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
EOFsystemctl daemon-reload
systemctl restart containerd.service
已知问题
使用 systemd 作为 CGroup Driver 且使用 containerd 作为 CRI 运行时
需要修改 /etc/containerd/config.toml,添加如下配置
相关文章:配置 systemd cgroup 驱动 | Kubernetes
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]...[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true
执行 systemctl restart containerd
或参照另一篇文章的解决方案
相关文章:Why does etcd fail with Debian/bullseye kernel? - General Discussions - Discuss Kubernetes
cat /etc/default/grub# Source:
# GRUB_CMDLINE_LINUX_DEFAULT="quiet"# Modify:
GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0"
执行 update-grub 并重启
配置 etcd 节点
将 kubelet 配置为 etcd 的服务管理器
说明
所有 etcd 节点
apt update
apt install etcd-clientmkdir -p /etc/systemd/system/kubelet.service.dcat << EOF > /etc/systemd/system/kubelet.service.d/kubelet.conf
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
authentication:anonymous:enabled: falsewebhook:enabled: false
authorization:mode: AlwaysAllow
cgroupDriver: systemd
address: 127.0.0.1
containerRuntimeEndpoint: unix:///var/run/containerd/containerd.sock
staticPodPath: /etc/kubernetes/manifests
EOFcat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
Environment="KUBELET_CONFIG_ARGS=--config=/etc/systemd/system/kubelet.service.d/kubelet.conf"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_CONFIG_ARGS
Restart=always
EOFsystemctl daemon-reload
systemctl restart kubelet
为 kubeadm 创建配置文件
说明
Etcd-01 节点,由该节点向其他节点分发证书及配置
该节点同时作为 CA
生成 CA
kubeadm init phase certs etcd-ca
生成如下文件
/etc/kubernetes/pki/etcd/ca.crt/etc/kubernetes/pki/etcd/ca.key
为方便接下来的步骤操作,先将 etcd 节点信息导出为环境变量
export HOST0=192.168.1.101
export HOST1=192.168.1.102
export HOST2=192.168.1.103export NAME0="etcd-01"
export NAME1="etcd-02"
export NAME2="etcd-03"
为 etcd 成员生成 kubeadm 配置
HOSTS=(${HOST0} ${HOST1} ${HOST2})
NAMES=(${NAME0} ${NAME1} ${NAME2})for i in "${!HOSTS[@]}"; doHOST=${HOSTS[$i]}
NAME=${NAMES[$i]}mkdir -p /tmp/${HOST}cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml
---
apiVersion: "kubeadm.k8s.io/v1beta4"
kind: InitConfiguration
nodeRegistration:name: ${NAME}
localAPIEndpoint:advertiseAddress: ${HOST}
---
apiVersion: "kubeadm.k8s.io/v1beta4"
kind: ClusterConfiguration
etcd:local:serverCertSANs:- "${HOST}"peerCertSANs:- "${HOST}"extraArgs:- name: initial-clustervalue: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380- name: initial-cluster-statevalue: new- name: namevalue: ${NAME}- name: listen-peer-urlsvalue: https://${HOST}:2380- name: listen-client-urlsvalue: https://${HOST}:2379- name: advertise-client-urlsvalue: https://${HOST}:2379- name: initial-advertise-peer-urlsvalue: https://${HOST}:2380
EOF
done
为每个成员创建证书
kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST2}/
# Clear useless cert
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -deletekubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST1}/
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -deletekubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml# Clear ca key from member
find /tmp/${HOST2} -name ca.key -type f -delete
find /tmp/${HOST1} -name ca.key -type f -delete
将证书移动到对应的成员服务器
scp -r /tmp/${HOST2}/pki root@${HOST2}:/etc/kubernetes/
scp /tmp/${HOST2}/kubeadmcfg.yaml root@${HOST2}:~/scp -r /tmp/${HOST1}/pki root@${HOST1}:/etc/kubernetes/
scp /tmp/${HOST1}/kubeadmcfg.yaml root@${HOST1}:~/mv /tmp/${HOST0}/kubeadmcfg.yaml ~/rm -rf /tmp/${HOST2}
rm -rf /tmp/${HOST1}
rm -rf /tmp/${HOST0}
此时在三台 etcd 节点中的文件结构均应如下
/root
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd├── ca.crt├── ca.key # 仅 CA 节点既 etcd-01├── healthcheck-client.crt├── healthcheck-client.key├── peer.crt├── peer.key├── server.crt└── server.key
创建静态 Pod 清单
说明
所有 etcd 节点
kubeadm init phase etcd local --config=/root/kubeadmcfg.yaml
检查集群运行情况
将 ${HOST0} 替换为想要检查的节点 ip
ETCDCTL_API=3 etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://${HOST0}:2379 endpoint health
使用 kubeadm 创建高可用集群
说明
配置过程中需要完全重置控制平面节点的配置时,需要有至少一台能够访问集群的节点,在该节点上按如下流程操作
kubectl delete pods,nodes,namespaces,deployments,services --all --all-namespaces --force
kubectl delete -f tigera-operator.yaml --force
kubectl delete -f custom-resources.yaml --force
kubeadm reset --cleanup-tmp-dir -f
rm -rf /etc/cni/net.d/*
rm -rf ~/.kube
systemctl restart kubelet containerd
为 kube-apiserver 创建负载均衡
说明
本文中负载均衡使用 Nginx
Nginx 配置
http {...
}stream {upstream apiserver {server 192.168.1.104:6443 weight=5 max_fails=3 fail_timeout=30s; # Master-01server 192.168.1.105:6443 weight=5 max_fails=3 fail_timeout=30s; # Master-02server 192.168.1.106:6443 weight=5 max_fails=3 fail_timeout=30s; # Master-03}server {listen 8443;proxy_pass apiserver;}
}
为控制平面节点配置外部 etcd 节点
说明
任一 etcd 节点与主控制平面节点,本文中为Etcd-01与Master-01
从集群中任一 etcd 节点复制到主控制平面节点
scp /etc/kubernetes/pki/etcd/ca.crt /etc/kubernetes/pki/apiserver-etcd-client.crt /etc/kubernetes/pki/apiserver-etcd-client.key root@192.168.1.104:~
在主控制平面节点中将文件移动到指定位置
mkdir -p /etc/kubernetes/pki/etcd
mv ~/ca.crt /etc/kubernetes/pki/etcd/
mv ~/apiserver-etcd-client.crt /etc/kubernetes/pki/
mv ~/apiserver-etcd-client.key /etc/kubernetes/pki/
创建 kubeadm-config.yaml,内容如下
controlPlaneEndpoint: 负载均衡服务器etcdexternalendpoints: etcd 节点列表
networkingpodSubnet: pod ip cidr
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.32.0
controlPlaneEndpoint: 192.168.1.100:8443
etcd:external:endpoints:- https://192.168.1.101:2379- https://192.168.1.102:2379- https://192.168.1.103:2379caFile: /etc/kubernetes/pki/etcd/ca.crtcertFile: /etc/kubernetes/pki/apiserver-etcd-client.crtkeyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/24serviceSubnet: 10.96.0.0/16
初始化主控制平面
说明
主控制平面节点,本文中为Master-01
--upload-certs: 将控制平面间的共享证书上传到kubeadm-certsSecretkubeadm-certsSecret 和解密密钥将在两小时后失效- 如果要重新上传证书并生成新的解密密钥,需要在已加入集群的控制平面节点上执行
kubeadm init phase upload-certs --upload-certs
kubeadm init --config kubeadm-config.yaml --upload-certs
等待运行完成后应输出类似如下内容
...Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of control-plane nodes running the following command on each as root:kubeadm join 192.168.1.100:8443 --token 7r34LU.iLiRgu2qHdAeeanS --discovery-token-ca-cert-hash sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 --control-plane --certificate-key 03d66dd08835c1ca3f128cceacd1f31ac94163096b20f445ae84285bc0832d72Please 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 192.168.1.100:8443 --token 7r34LU.iLiRgu2qHdAeeanS --discovery-token-ca-cert-hash sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
先将控制台输出的以上内容保存,稍后将使用这些命令来将其他控制平面节点和工作节点加入集群
根据输出的提示,复制 kubeconfig 用于 kubectl
mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
应用 CNI 插件
由于该清单过大,kubectl apply 会产生如下报错,使用 kubectl create 或 kubectl replace
注意
确认custom-resources.yaml中calicoNetwork配置的 ip cidr 与集群podSubnet配置一致
# kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/refs/heads/release-v3.29/manifests/tigera-operator.yaml
# The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations: Too long: may not be more than 262144 bytes
wget https://raw.githubusercontent.com/projectcalico/calico/refs/heads/release-v3.29/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/refs/heads/release-v3.29/manifests/custom-resources.yaml
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml
输入以下内容查看控制平面组件 pod 启动状态
kubectl get pod -A
初始化其他控制平面
说明
除主控制平面节点外的其他控制平面节点,本文中为Master-02Master-03
使用kubeadm join命令加入集群的节点会将 KubeConfig 同步到/etc/kubernetes/admin.conf
依照上面输出的命令,分别在其他控制平面节点中执行
--control-plane: 通知kubeadm join创建一个新控制平面--certificate-key xxx: 从集群kubeadm-certsSecret 下载控制平面证书并使用给定的密钥解密
kubeadm join 192.168.1.100:8443 --token 7r34LU.iLiRgu2qHdAeeanS --discovery-token-ca-cert-hash sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 --control-plane --certificate-key 03d66dd08835c1ca3f128cceacd1f31ac94163096b20f445ae84285bc0832d72
根据输出的提示,复制 kubeconfig 用于 kubectl
mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
初始化负载节点
说明
所有负载节点
使用kubeadm join命令加入集群的节点会将 KubeConfig 同步到/etc/kubernetes/kubelet.conf
依照上面输出的命令,分别在负载节点中执行
kubeadm join 192.168.1.100:8443 --token 7r34LU.iLiRgu2qHdAeeanS --discovery-token-ca-cert-hash sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
相关文章:
使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群
博客地址:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群 前言 Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析 无论任何情况下都推荐先花几个小时通读官方文档,来了解配置过程中的可选项,以…...
易错点abc
在同一个输入流上重复创建Scanner实例可能会导致一些问题,包括但不限于输入流的混乱。尤其是在处理标准输入(System.in)时,重复创建Scanner对象通常不是最佳实践,因为这可能导致某些输入数据丢失或者顺序出错。 为什么…...
android智能指针android::sp使用介绍
android::sp 是 Android 中的智能指针(Smart Pointer)的实现,用于管理对象的生命周期,避免手动管理内存泄漏等问题。它是 Android libutils 库中重要的一部分,常用于管理继承自 android::RefBase 的对象。 与标准库中…...
水滴tabbar canvas实现思路
废话不多说之间看效果图,只要解决了这个效果水滴tabbar就能做出来了 源码地址 一、核心实现步骤分解 布局结构搭建 使用 作为绘制容器 设置 width=600, height=200 基础尺寸 通过 JS 动态计算实际尺寸(适配高清屏) function initCanvas() {// 获取设备像素比(解决 Re…...
地弹与振铃
地弹(Ground Bounce)和振铃(Ringing)是数字电路中常见的信号完整性问题,两者都与高速开关和寄生参数有关,但表现形式和成因不同。以下是它们的对比及解决方法: 1. 地弹(Ground Bounc…...
神经网络 - 激活函数(Sigmoid 型函数)
激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单࿰…...
DeepSeek-R1自写CUDA内核跑分屠榜:开启GPU编程自动化新时代
引言 在AI领域,深度学习模型的性能优化一直是研究者们关注的核心。最近,斯坦福和普林斯顿的研究团队发现,DeepSeek-R1生成的自定义CUDA内核不仅超越了OpenAI的o1和Claude 3.5 Sonnet,还在KernelBench框架中取得了总排名第一的好成…...
爬虫下载B站视频简单程序(仅供学习)
请输入视频链接:https://www.bilibili.com/video/BV1owFSeREoh (示例地址) 程序显示结果如下: 下载进度: 100.00% 下载完成 视频已保存到: ./video.mp4 核心功能 1. 视频信息解析…...
2.5 运算符2
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 2.5.3 赋值运算符 赋值运算符将值存储在左操作数指定的对象中。有两种赋值操作: 1、简单赋值,使用。其中第二…...
DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...
仿12306购票系统(3)
前面完成了乘车人登录功能的实现,本篇主要是控制台方面的管理 对于整体的控制台的设计,为了能够快速的检验,不进行登录拦截,在控制台的这个模块的controller层增加admin,以及在登录界面的拦截器排除掉admin. 车站 即…...
2025年2月个人工作生活总结
本文为 2025年2月工作生活总结。 工作记录 AI浪潮 AI非常火,春节至今,到处充斥着大量和AI、DeepSeek有关的新闻。领导也一再强调要用AI,甚至纳入到新一年的考核里。再往上,大领导开会的新闻稿里也作出要求,不能停下脚…...
【Python】网络爬虫——词云wordcloud详细教程,爬取豆瓣最新评论并生成各式词云
目录 一、功能介绍 二、关键技术 1、安装WordCloud 2、利用WordCloud 1、WordCloud的基础用法 **相关参数介绍** **WordCloud 提供的方法如下** 2、WordCloud的应用举例 3、设置停用词 4、WordCloud使用词频 三、程序设计的步骤 1、抓取网页数据 2、数据清洗 3、…...
第39天:安全开发-JavaEE应用SpringBoot框架Actuator监控泄漏Swagger自动化
时间轴: Java知识点: 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方组件使用等. 框架库:MyBatis,SpringMVC,SpringBoot…...
综合练习 —— 递归、搜索与回溯算法
目录 一、1863. 找出所有子集的异或总和再求和 - 力扣(LeetCode) 算法代码: 代码思路 问题分析 核心思想 实现细节 代码解析 初始化 DFS 函数 时间复杂度 空间复杂度 示例运行 输入 运行过程 总结 二、 47. 全排列 II - 力扣&a…...
c++ 中的 auto 与 const 关键字
总是看到这两个关键字,根据 AI 的回复进行了一些整理总结。 文章目录 **1. auto 关键字****基本用法****与指针、引用结合****与 const 结合****在函数返回值推导****auto 不能用于** **2. const 关键字****修饰变量****修饰指针****修饰函数参数****修饰成员函数**…...
.pem文件是什么
.pem 文件通常是一个 Privacy-Enhanced Mail 格式的文件,它是一个常见的 证书文件 格式,可以存储加密密钥、证书或其他加密数据。最常见的用途是 SSH 密钥 和 SSL/TLS 证书。 在 SSH 使用中,.pem 文件一般是 私钥 文件,用于通过公…...
【Java SE】Java中String的内存原理
参考笔记: Java String 类深度解析:内存模型、常量池与核心机制_java stringx、-CSDN博客 解析java中String的内存原理_string s1 new string("ab");内存分析-CSDN博客 目录 1.String初识 2.字符串字面量 3.内存原理图 4. 示例验证 4.…...
IDEA提示将方法形参更改为(什么什么类型),要检查对应的实体类中的字段类型是否正确
IDEA提示inviteCodeId应该是字符串,明显不对,后来检查发现是FakeRegistration类中把inviteCodeId定义为String类型了。...
DeepSeek-OpenSourceWeek-第五天-Launch of 3FS and Smallpond Framework
2025 年 2 月 28 日,DeepSeek 在开源周的最后一天宣布推出了 Fire-Flyer File System(3FS)和 Smallpond 数据处理框架。这些创新旨在提升数据访问和处理能力,特别是针对 AI 训练和推理工作负载。 Fire-Flyer File System (3FS) 3FS 是一种高性能的分布式文件系统,专为应对…...
【芯片设计】NPU芯片前端设计工程师面试记录·20250227
应聘公司 某NPU/CPU方向芯片设计公司。 小声吐槽两句,前面我问了hr需不需要带简历,hr不用公司给打好了,然后我就没带空手去的。结果hr小姐姐去开会了,手机静音( Ĭ ^ Ĭ )面试官、我、另外的hr小姐姐都联系不上,结果就变成了两个面试官和我一共三个人在会议室里一人拿出…...
初阶数据结构(C语言实现)——3顺序表和链表(3)
3.链表 3.1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的物理结构 1.从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续…...
Kubernetes故障排查实战指南
前言 在云原生时代,Kubernetes已成为容器编排的事实标准。然而,随着系统规模和复杂度的增加,故障排查变得越来越具有挑战性。本文将从实战角度,系统化介绍K8s故障排查方法和最佳实践。 © ivwdcwso (ID: u012172506) 一、故障排查方法论 1.1 三步排查法 问题定位:快…...
使用 VSCode 代替 BeyondStudio for NXP 开发 JN 5169
使用 VSCode 代替 BeyondStudio for NXP 开发 JN 5169 一、安装 VSCode二、搭建 NXP JN5169 ZigBee 3.0 开发环境和下载示例工程三、配置 VSCode1、配置环境变量 MYSYS_HOME2、VSCode 安装以下插件3、VSCode 配置头文件路径 四、编译工程1、JN-AN-1219 有 6 个构建选项2、修改 …...
Python常见面试题的详解24
1. 如何对关键词触发模块进行测试 要点 功能测试:验证正常关键词触发、边界情况及大小写敏感性,确保模块按预期响应不同输入。 性能测试:关注响应时间和并发处理能力,保证模块在不同负载下的性能表现。 兼容性测试:测…...
加载大数据时性能压力优化
1. 减少数据请求量 分页加载(Pagination) 原理:将数据拆分为多页,按需加载。实现: 传统分页(页码切换)。无限滚动(滚动到底部自动加载下一页,如社交媒体)。…...
动态自定义标签属性页面(Tomcat 9)
java文件 ,包名org.rain.tag package org.rain.tag; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.DynamicAttributes; import javax.servlet.jsp.…...
使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph
1. 编译环境准备 yum install cmake3 ln -s /usr/bin/cmake3 /usr/bin/cmake yum install gcc-c安装挂载依赖 yum -y install fuse fuse-devel fuse-libs执行以下命令,载入FUSE模块 modprobe fuse2. 下载源码包 hadoop-3.3.4-src.tar.gz解压后执行以下命令 打开…...
DBGPT安装部署使用
简介 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mul…...
How to use VRX on ubuntu20.04 with ROS1 Noetic?[2]
How to use VRX on ubuntu20.04 with ROS1 Noetic?[2] 1.Which topics2.Control1.1操作模拟船(1)命令行直接发布(2)启动键盘控制文件 3.Customer your VRX world3.1Which world parameters3.2改变风的参数 3.2.1更改默认参数&…...
