【云原生】centos7搭建安装k8s集群 v1.25版本详细教程实战
文章目录
- 前言
- 一. 实验环境
- 二. k8s 的介绍
- 三 . k8s的安装
- 3.1 搭建实验环境
- 3.1.1 硬件层面的要求
- 3.1.2 软件层面环境配置
- 3.2 docker的安装
- 3.2.1 搭建docker
- 3.2.2 部署 cri-dockerd
- 3.3 部署k8s
- 3.3.1 配置添加阿里云的yum源
- 3.3.2 安装kubeadm kubelet kubectl
- 3.3.3 k8s-master节点初始化
- 3.3.4 执行成功后,会有加入节点的代码,然后复制到其他节点进行加入。
- 四. 在已经安全完的k8s上进行测试
- 4.1 安装配置网络
- 4.2 安装配置nginx测试
- 总结
前言
大家好,又见面了,我是沐风晓月,本文是专栏【云原生实战】专栏的第5篇文章,主要讲解如何从零开始安装kubernetes。
专栏地址:【云原生实战】 , 此专栏是沐风晓月对云原生学习的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
原本我是写一篇文章叫 prometheus监控kubernetes实战,结果发现kubernetes就写了半天近一万字,所以把从零开始搭建kubernetes实战单独拿出来作为一篇文章吧。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
在这里插入图片描述
一. 实验环境
本次的实验环境见下表:
操作系统 | 服务器IP | hostname |
---|---|---|
centos7.6 | 192.168.1.41 | k8s-master |
centos7.6 | 192.168.1.42 | k8s-node42 |
如何查看相应的参数:
- 查看操作系统:
[root@mufenggrow ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
- 查看hostname
## 修改hostname
[root@mufenggrow ~]# hostnamectl set-hostname mufenggrow41
[root@mufenggrow ~]# bash
# 查看hostname
[root@mufenggrow41 ~]# hostname
mufenggrow41
- 查看ip
[root@mufenggrow41 ~]# ifconfig |grep inet |awk 'NR==1{print $2}'
192.168.1.41
二. k8s 的介绍
Kubernetes 也称为 K8s,是Google开发的用于自动部署、扩缩和管理容器化应用程序的开源容器编排器技术。
k8s官网地址:https://kubernetes.io
在大流量,高并发的场景,如何实现应用的快速部署。 比如批量启动20台nginx,又如何在流量结束之后,关闭这些nginx服务。
一个容器宕机了,如何快速发现并立即启动一台新的容器去填补, 这些容器的管理问题,就是容器编排。
能做容器编排的工具有好几个,但k8s肯定是占主导地位的。
搭建k8s的方式,我们再这里选择了kubeadm的方式来部署。kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
- 创建一个Master 节点kubeadm init
- 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>
三 . k8s的安装
3.1 搭建实验环境
搭建实验环境,包含软件层面和硬件层面:
3.1.1 硬件层面的要求
- 两台centos7的操作系统
- k8s-master cpu核心数为2
- 两台主机可以ping通且能ping通外网
- 硬盘设置为30G以上
查看cpu的核心数:
[root@mufenggrow ~]# lscpu |grep "CPU(s)"
CPU(s): 2
On-line CPU(s) list: 0,1
也可以用:
[root@mufenggrow ~]# cat /proc/cpuinfo |grep "cpu cores"
cpu cores : 2
cpu cores : 2
3.1.2 软件层面环境配置
这里需要主要的是,用几台服务器操作,我们就需要设置几台服务器的环境:
1) 设置主机名见名知意
让192.168.1.41为k8s-master,设置主机名
[root@mufenggrow ~]# hostnamectl set-hostname k8s-master
[root@mufenggrow ~]# bash
[root@k8s-master ~]# hostname
k8s-master
192.168.1.42 为k8s-node 设置主机名
[root@mufeng ~]# hostnamectl set-hostname k8s-node42
[root@mufeng ~]# bash
[root@k8s-node42 ~]# hostname
k8s-node42
2) 设置/etc/hosts 一对一的映射关系
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@k8s-master ~]# cat >>/etc/hosts<< EOF
192.168.1.41 k8s-master192.168.1.42 k8s-node42
EOF
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.41 k8s-master
192.168.1.42 k8s-node42
3) 设置时间同步
我这里只截取了一台服务器执行的代码,因为两台要同步做,所以另一台执行的是一样的,需要两台同步执行一样的操作:
[root@k8s-master ~]# systemctl start chronyd
[root@k8s-master ~]# systemctl enable chronyd
[root@k8s-master ~]# date
2023年 02月 15日 星期三 10:46:09 CST
[root@k8s-master ~]#
4) 关闭防火墙和selinux
[root@k8s-master ~]# systemctl stop firewalld
[root@k8s-master ~]# setenforce 0
这里要注意: setenforce 0 只是临时关闭,如果要永久关闭需要到配置文件中设置
配置文件路径: /etc/selinux/config
- 禁用swap空间
kubernetes要求每个节点都要禁用swap设备
临时关闭:
[root@k8s-master ~]# swapoff -a
永久关闭:
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
#/dev/mapper/centos-swap swap
永久关闭需要重启系统。
6) 修改内核参数
# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
重新加载配置
# sysctl --system
3.2 docker的安装
因为k8s最终的管理是容器,所以我们需要再这里先安装docker,每台机器都需要安装。
3.2.1 搭建docker
1) 设置 repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
若没有yum-config-manager 需要先安装
[root@k8s-node42 ~]# yum install yum-utils
2) 设置国内镜像并重启daemon
# mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://ywrd8tun.mirror.aliyuncs.com"]
}
EOF
- 下载docker的repo包,并安装
[root@k8s-node42 ~]# yum install wget
[root@k8s-master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
3) 开始安装:
[root@k8s-node42 ~]# yum install -y docker-ce
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
[root@k8s-master ~]# docker --version
Docker version 23.0.1, build a5ee5b1
3.2.2 部署 cri-dockerd
从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为kubernetes的容器运行时了,即从kubernetesv1.24开始不再使用docker了。
但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim(垫片)。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。
技术的发展得益于人,受限于人。
开源地址 https://github.com/Mirantis/cri-dockerd
下载地址 https://github.com/Mirantis/cri-dockerd/releases
下载并上传进行解压
#使用rz命令上传
# rz
[root@k8s-node42 ~]# ls
anaconda-ks.cfg cri-dockerd-0.3.1.amd64.tgz
[root@k8s-node42 ~]# tar xf cri-dockerd-0.3.1.amd64.tgz
[root@k8s-node42 ~]# cp cri-dockerd/cri-dockerd /usr/bin/
[root@k8s-node42 ~]# chmod +x /usr/bin/cri-dockerd
[root@k8s-node42 ~]#
配置启动文件,如下:
cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
⽣成 socket ⽂件,执行如下命令
cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
启动 cri-docker 并设置开机⾃动启动
[root@k8s-node42 ~]# systemctl daemon-reload
[root@k8s-node42 ~]# systemctl enable cri-docker --now
Created symlink from /etc/systemd/system/multi-user.target.wants/cri-docker.service to /usr/lib/systemd/system/cri-docker.service.
[root@k8s-node42 ~]# systemctl is-active cri-docker
active
[root@k8s-node42 ~]#
3.3 部署k8s
3.3.1 配置添加阿里云的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
3.3.2 安装kubeadm kubelet kubectl
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
查看版本并设置开机自启动
[root@k8s-master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.0", GitCommit:"a866cbe2e5bbaa01cfd5e969aa3e033f3282a8a2", GitTreeState:"clean", BuildDate:"2022-08-23T17:43:25Z", GoVersion:"go1.19", Compiler:"gc", Platform:"linux/amd64"}
[root@k8s-master ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@k8s-master ~]#
到目前位置,所有的操作都是在全部节点上操作的。接下来我们开始初始化k8s-master的节点,此操作只在k8s-master上执行:
3.3.3 k8s-master节点初始化
kubeadm 使用 eth0 的默认网络接口(通常是内网IP)做为 Master 节点的 advertise address .所以这里的IP地址要设置为你自己的IP地址:
kubeadm init \
--apiserver-advertise-address=192.168.1.41 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.0 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=172.17.0.0/16 \
--cri-socket /var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
注释:
--apiserver-advertise-address=192.168.1.41
这个参数就是master主机的IP地址--image-repository=registry.aliyuncs.com/google_containers
这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers--kubernetes-version=v1.25.0
这个参数是下载的k8s软件版本号--service-cidr=10.10.0.0/12
无需更改--pod-network-cidr=172.17.0.0/16
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node.
该参数指明了 Pod 网络的 CIDR,以用于 Node 相关配置
若执行中出现问题,想要重新执行,可以先运行:
[root@k8s-master ~]# kubeadm reset -f
3.3.4 执行成功后,会有加入节点的代码,然后复制到其他节点进行加入。
按照下图提示,在k8s-master上创建必要的文件,然后在用最后的join把别的加点加入
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
尤其注意最后一条,cri-socket ,这条容易漏掉。
kubeadm join 192.168.1.41:6443 --token 9rmt8j.2pqoh7drm68ns249 \--discovery-token-ca-cert-hash sha256:ff558174c47aba532fef2920f80e1f48976d4712a970eba1a7fac0428c8373ab--cri-socket /var/run/cri-dockerd.sock
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane 5m5s v1.25.0
k8s-node42 NotReady <none> 75s v1.25.0
[root@k8s-master ~]#
接下来需要配置网络:
四. 在已经安全完的k8s上进行测试
4.1 安装配置网络
上传需要的网络包
在每个节点上都要上传
每个节点手动通过docker离线加载镜像:
37 docker load -i calico~cni~v3.24.3.tar.gz 38 docker load -i calico~kube~controllers~v3.24.3.tar.gz 39 docker load -i calico~node~v3.24.3.tar.gz
在master安装 网络插件:
[root@k8s-master ~]# kubectl apply -f calico.yaml
poddisruptionbudget.policy/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
再次执行,这里显示的就是ready
4.2 安装配置nginx测试
创建nginx服务
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
暴露端口:
[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@k8s-master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-76d6c9b8c-hw6bz 1/1 Running 0 16sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 17m
service/nginx NodePort 10.15.105.20 <none> 80:32587/TCP 7s
测试:
[root@k8s-master ~]# curl 127.0.0.1:32587
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
总结
以上就是无坑版本最新的k8s实战的全部过程了,耗时4个小时,终于完成。看到这里的小伙伴给点个三连呀。
每日鸡汤: 人活到极致,一定要素与简
✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!\textcolor{green}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!\textcolor{green}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!
相关文章:
【云原生】centos7搭建安装k8s集群 v1.25版本详细教程实战
文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…...
c语言指针
指针 指针是存放地址的变量,也可以说指针地址。 对于定义p(这里的话,只是定义,说明p是指针),p作为一个指针去指向存放数据的位置,而p意思是取(p指向的内存位置的数据)&…...
5.33 综合案例2.0 -ESP32拍照上传阿里云OSS
综合案例2.0 - ESP32拍照上传阿里云OSS案例说明连线功能实现1.阿里云平台连接2.OSS对象存储服务3.ESP32-CAM开发环境4.代码ESP32-CAM开发板代码HaaS506开发板代码测试数据转图片方法案例说明 使用ESP32拍照,将照片数据上传阿里云OSS(通过4G网络上传)。 …...
java无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…...
测试用例设计工作中的应用
1. 等价类划分 常见的软件测试面试题划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为假设干等价类,在每一个等价类中取一…...
leetcode 困难 —— 数字 1 的个数(简单逻辑题)
(害,做题是真的慢,这面试给我这题我估计就傻了) 题目: 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。 题解: 首先看看整数范围 0 < n < 10^9 不能遍历࿰…...
关于JSON
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body> <script> /* 1、JSON的英文全称:Java…...
Apifox-接口调用、自动化测试工具
Apifox简介 Apifox 的定位是Postman Swagger Mock JMeter,具有API文档管理、API调试、API Mock、API 自动化测试等功能。可以通过一种工具解决之前使用多种工具的数据同步问题。高效、及时、准确! 安装 Apifox的安装非常方便,直接下载安…...
Vue一个项目兼容每个省份的个性化需求
开发环境及打包指令 后拼上省份区划"serve:henan": "yarn && vue-cli-service serve -o --encryptSM2 --zone41","serve:hunan": "yarn && vue-cli-service serve -o --encryptSM2 --zone43","serve:guizhou&quo…...
npm install报错 npm ERR! 的解决办法
以下是四种常见的npm ERR及解决方式错误一、npm ERR! A complete log of this run can be found in:npm ERR!C:\Users\nanyi\AppData\Roaming\npm-cache_logs\2021-09-17T08_58_23_413Z-debug.l查看错误日志,错误日志就在上面展示的C:\Users…这里如果发现错误日志里…...
echarts修改饼图,环形图的圆环宽度,大小
echarts修改环形图的圆环宽度,大小 环形图圆环的大小需要通过series-pie. radius属性来修改 radius 饼图的半径。 Array.<number|string>:数组的第一项是内半径,第二项是外半径。每一项遵从上述 number string 的描述。 把数组的第…...
小白系列Vite-Vue3-TypeScript:010-封装svg
上一篇我们介绍了ViteVue3TypeScript项目中mockjs的安装和配置i。本篇我们来介绍封装SVG图标组件。svg特征Preloading所有图标都是在项目运行时生成的,只需要操作一次dom即可。高性能内置缓存,仅在文件被修改时才会重新生成。安装插件vite-plugin-svg-ic…...
卷严重、难度高、激励少,如何适应空投市场新变化
自从空投交互从2020年开始之后,不少人都开始加入到空投交互的行列中,一些项目也因为“格局”的因素,在项目正式上线前都会给早期参与者空投代币,以此吸引大家的关注。但是在越来越多的人加入到撸空投行列之中后,现在整…...
基于Java与JSP的文件上传和下载
概念 当用户在前端页面点击文件上传后,用户上传的文件数据提交给服务器端,实现保存。 文件上传步骤 提交方式: 提供form表单,method必须是post。因为post请求无数据限制。 <form method"post"></form>…...
Gromacs中的g_mmpbsa计算带电底物与蛋白的结合能不准确
g_mmpbsa计算带电底物与蛋白的结合能总是不准确 TOC 在做的两个项目中,利用g_mmpbsa计算带电底物与蛋白的结合能结果非常不可靠,底物带两个硫酸根离子,g_mmpbsa在计算带电的底物与酶的结合能时总是不准确,因此后续若底物带电&…...
【mmrotate】旋转目标检测之训练DOTA数据集
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 mmrotate训练DOTA数据集记录 1. 正文 1.1 数据准备 数据介绍部分,参考DOTA数据介绍,官方提供了裁剪工具development kit。这里…...
图基本概念
图:顶点和边的集合。无向图:每条边都是无方向的有向图:每条边都是有方向的完全图:任意两个点都有一条边相连稀疏图:有很少边或弧的图稠密图:有较多边或弧的图网:边/弧带权的图邻接:有…...
机器学习基础
一、基本概念 1 学习的概念 1975年图灵奖获得者、1978年诺贝尔经济学奖获得者、著名学者赫伯特.西蒙 (Herbert Simon) 曾下过一个定义: 如果一个系统,能够通过执行某个过程,就此改进了它的性能,那么这个过程就是学习.由此可看出,…...
FreeRTOS-Tickless低功耗模式 | FreeRTOS十四
目录 说明: 一、低功耗模式简介 1.1、STM32低功耗模式 二、Tickless模式 2.1、Tickless模式如何功耗 2.2、Tickless模式设计思想 2.3、为了降低功耗,又不影响系统运行,怎么能做到呢? 三、Tickless模式修改配置 3.1、配置…...
实现了统一消息中心的微服务基础框架 JVS,快点赞收藏
一、开源项目简介基于JVS(基于spring cloud封装)的基础开源框架,实现了基于多对多租户能力的管理系统。二、基础框架实现功能支持数据管理支持分布式定时任务支持分布式日志采集支持系统监控支持动态配置中心支持模板消息支持链路跟踪支持邮件…...
VMware 安装 OpenWrt 旁路由并配置 PassWall
1、准备 OpenWrt 镜像包 我已经转好了 vmdk 格式的,更多的可以去恩山论坛下载 OpenWrtvmdk格式-虚拟化文档类资源-CSDN下载 也可以在这个平台在线定制 OpenWrt固件下载与在线定制编译 2、网络选择 NAT 模式 3、创建虚拟机,选择自定义方式 4、一直下…...
R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案
本文介绍在利用R语言的GD包,实现自变量最优离散化方法选取与执行、地理探测器(Geodetector)操作时,出现各类报错信息、长时间得不到结果等情况的解决方案。 在之前的文章R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散…...
嵌入式开发:你需要知道的5种简单
传达嵌入式软件体系结构设计意图通常伴随着基于嵌入式开发人员经验的假设。你可以从资源受限的基于微控制器的系统的角度来看架构设计。如何设计架构将取决于系统的嵌入式软件分类。有许多不同的方法可以对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整…...
MVC与MVVM
MVC与MVVM举例说明MVCMVVM两者比较MVC <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>mvc案例</title><link rel"styleshe…...
Cortex-M0异常和中断
目录1.概念2.异常类型3.异常优先级定义4.向量表5.异常流程概述接受异常请求压栈和出栈异常返回指令末尾连锁延迟到达6.EXC_RETURN7.异常入口流程的细节压栈取出向量并更新PC寄存器更新8.异常退出流程的细节1.概念 异常是能够引起程序流偏离正常流程的事件,当异常发…...
数据库(6)--存储过程
一、学习目标 熟悉存储过程的定义和使用,熟练运用 select ,update ,insert ,delete 命令完成对学生信息数据库的查询、更新、添加、删除操作。 二、学习内容 学生(学号,年龄,性别,系名) 课程(…...
c++ 指针、引用和常量
指针、引用和常量的关系_夜悊的博客-CSDN博客 1. ① 指针是对象,引用不是对象(在此可以理解为变量,一个变量是一个对象) 指针不必须初始化引用只是为一个已经存在的对象所起的另一个名字(别名)ÿ…...
1、HAL库UART 中断|DMA 自动回显接收数据
1、实现代码: stm32f4xx_hal_conf.h文件开启UART宏定义 #define HAL_UART_MODULE_ENABLED添加stm32f4xx_hal_uart.c和stm32f4xx_hal_dma.c到自己工程; 编写好的代码:usart_Driver.c /***************************************************…...
NPOI - ConditionalFormattingRule
NPOI 给xls(xlsx)创建条件格式 获取 XSSFSheetConditionalFormatting 对象 初始化 IWorkbook _workbook new XSSFWorkbook(); ISheet _dataSheet _workbook.GetSheet("template"); ISheetConditionalFormatting fcs _dataSheet.SheetConditionalFormatting;调用…...
JavaのString类这一篇就够了(包含StringBuffer_Builder)
1.🥗String类简介 在我们写代码的时候,String总是充斥着前前后后。 但你会不会经常力不从心, “这个*** 字符串怎么** 转换不成功啊” “*** 这个字符串到底是常量还是对象啊” “这*** 字符串内存结构到底* * * 是什么啊” “为啥我的字符串…...
网站搭建 保定/搜索百度网址网页
作说明及PC端控制软件https://share.weiyun.com/5HFmWGl或https://pan.baidu.com/s/1SXz5BsYJiAF-eUpFG_2l-g 提取码: kixh或https://drive.google.com/open?id1-JViWLBOIzaHTdwdONX2RP8S4EgWxoNDDIY的矢量网络分析仪,参考了日本edy555的相关设计,修改了部分电路&a…...
电商网站类型/百度seo快速见效方法
1:基于相同IP不同Port的虚拟主机vim /etc/httpd/conf/httpd.conf更改Listen字段(此设置表示使用80以及8888端口)更改虚拟主机部分为:保存以上设置创建目录以及页面文件:(注:在/etc/httpd/conf/httpd.conf 中有DirectoryIndex inde…...
html企业网站怎么做/网络推广都需要做什么
创建工程 修改字符串资源 打开/res/values/strings.xml文件。 点击Add按钮,添加字符串,输入字符串的name 和value 新建的工程含有三个已有字符串 新建颜色资源color.xml 使用资源颜色和字符串资源 颜色:R.color.red_gb 字符串:R.s…...
环保网站建设/北京网站建设公司报价
使用mybatis标签规避空where一、where标签案例1、原始sql2、简单if标签判断是否为空3、使用where标签后逻辑代码二、Select注解中当参数为空则不添加该参数的判断一、where标签案例 List<FilterUsersListQueryResDTO> filterUsers(Param("filterUsersQueryDTO"…...
wordpress显示作者列表/产品推广建议
作者 | CDA数据分析师进行到这一步就可以开始正式的烹饪了。前面我们列举了不同纬度的分析指标,这一章我们主要看看这些指标都是怎么计算出来的。一、算术运算算术运算就是基本的加减乘除,在Excel或Python中数值类型的任意两列可以直接进行加、减、乘、除…...
苏州北京网站建设/页面关键词优化
安装Linux(如果之前已经有Linux,不用安装,直接安装Hadoop) 参考链接:厦门大学Hadoop安装教程_单机/伪分布式配置 1尝试新建一个名为hadoop的用户并且设置密码(同时添加管理员权限):…...