使用ansible命令部署k8s集群
1.部署ansible集群
使用python脚本一个简单的搭建ansible集群-CSDN博客
2.ansible命令搭建k8s:
1.主机规划:
| 节点 | IP地址 | 操作系统 | 配置 |
|---|---|---|---|
| server | 192.168.174.150 | centos7.9 | 2G2核 |
| client1 | 192.168.174.151 | centos7.9 | 2G2核 |
| client2 | 192.168.174.152 | centos7.9 | 2G2核 |
ansible清单文件内容如下
[clients_all]
server
client1
client2
[clients_master]
server
[clients_client]
client1
client2
2.配置yum源:
-
配置本地yum源:
# name是设备名,path是挂载点,state=unmounted如果目标路径已经挂载了设备,将其卸载重新挂载 ansible clients_all -m mount -a "src=/dev/cdrom path=/mnt/cdrom fstype=iso9660 opts=defaults state=mounted"# path是文件路径,line是要添加的行内容,insertafter=EOF是文件末尾添加,BOF是文件头部添加 ansible clients_all -m lineinfile -a "path=/etc/fstab line='/dev/cdrom /mnt/cdrom iso9660 defaults 0 0' insertafter=EOF"ansible clients_all -m shell -a 'echo "" > /etc/yum.repos.d/centos-local.repo'path修改文件的路径,block添加的文本内容,多行用\n隔开,create如果没有文件就创建,marker=插入的前后标签,如果重新执行就是替换文本 ansible clients_all -m blockinfile -a "path=/etc/yum.repos.d/centos-local.repo block='[centos7.9]\nname=centos7.9\nbaseurl=file:///mnt/cdrom\nenabled=1\ngpgcheck=0' create=yes marker='#{mark} centos7.9'"ansible clients_all -m shell -a "yum clean all && yum repolist" -
配置远程阿里源:
ansible clients_all -m yum -a "name=wget"ansible clients_all -m get_url -a "dest=/etc/yum.repos.d/CentOS-Base.repo url=http://mirrors.aliyun.com/repo/Centos-7.repo"ansible clients_all -m shell -a "yum clean all && yum repolist" -
配置扩展源:
ansible clients_all -m yum -a "name=epel-release"ansible clients_all -m shell -a "yum clean all && yum repolist"
3.安装必要工具:
ansible clients_all -m yum -a "name=bash-completion,vim,net-tools,tree,psmisc,lrzsz,dos2unix"
4.禁止防火墙和selinux:
-
禁止使用selinux
ansible clients_all -m selinux -a 'state=disabled' -
禁用iptables和firewalld服务,kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
ansible clients_all -m service -a "name=firewalld state=stopped enabled=false"# 可能没有安装iptables服务
ansible clients_all -m service -a "name=iptables state=stopped enabled=false"
5.时间同步:
-
所有节点:
ansible clients_all -m yum -a "name=chrony"ansible clients_all -m service -a "name=chronyd state=restarted enabled=true" -
修改master节点chrony.conf:
ansible clients_master -m lineinfile -a "path=/etc/chrony.conf regexp='^#allow 192.168.0.0\/16' line='allow 192.168.174.0/24' backrefs=yes" ansible clients_master -m lineinfile -a "path=/etc/chrony.conf regexp='^#local stratum 10' line='local stratum 10' backrefs=yes" -
修改node节点chrony.conf
ansible clients_client -m lineinfile -a "path=/etc/chrony.conf regexp='^server' state=absent"ansible clients_client -m lineinfile -a "path=/etc/chrony.conf line='server 192.168.174.150 iburst' insertbefore='^.*\bline2\b.*$'" -
所有节点:
ansible clients_all -m service -a "name=chronyd state=restarted enabled=true"ansible clients_all -m shell -a "timedatectl set-ntp true" -
查看:
[root@server ~]# ansible clients_client -m shell -a "chronyc sources -v" client2 | CHANGED | rc=0 >> 210 Number of sources = 1 .-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* server 3 6 17 6 +918us[+4722us] +/- 217ms client1 | CHANGED | rc=0 >> 210 Number of sources = 1 .-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* server 3 6 17 6 +961us[+4856us] +/- 217ms
6.禁用swap分区:
# backrefs=yes,当没有匹配到指定行则不做任何更改
ansible clients_all -m lineinfile -a "path=/etc/fstab regexp='^\/dev\/mapper\/centos-swap' line='#/dev/mapper/centos-swap swap swap defaults 0 0' backrefs=yes"
7.修改linux的内核参数:
-
编辑/etc/sysctl.d/kubernetes.conf,添加网桥过滤和地址转发功能
# path修改文件的路径,block添加的文本内容,多行用\n隔开,create如果没有文件就创建,marker=插入的前后标签,如果重新执行就是替换文本 ansible clients_all -m blockinfile -a "path=/etc/sysctl.d/kubernetes.conf block='net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1' create=yes marker='#{mark} kubernetes'" -
重新加载配置
ansible clients_all -m shell -a "sysctl -p" -
加载网桥过滤模块
ansible clients_all -m shell -a "modprobe br_netfilter" -
查看网桥过滤模块是否加载成功
ansible clients_all -m shell -a "lsmod | grep br_netfilter"
8.配置ipvs功能:
-
在kubernetes中service有两种代理模型,
-
一种是基于iptables的
-
一种是基于ipvs的
-
-
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
-
安装ipset和ipvsadm
ansible clients_all -m yum -a "name=ipset,ipvsadm" -
添加需要加载的模块写入脚本文件:
ansible clients_all -m blockinfile -a "path=/etc/sysconfig/modules/ipvs.modules block='#! /bin/bash\nmodprobe -- ip_vs\nmodprobe -- ip_vs_rr\nmodprobe -- ip_vs_wrr\nmodprobe -- ip_vs_sh\nmodprobe -- nf_conntrack_ipv4' create=yes marker='#{mark} ipvs'" -
为脚本文件添加执行权限
ansible clients_all -m file -a "path=/etc/sysconfig/modules/ipvs.modules mode='0755'" -
执行脚本文件
ansible clients_all -m script -a "/bin/bash /etc/sysconfig/modules/ipvs.modules" -
查看对应的模块是否加载成功
ansible clients_all -m shell -a "lsmod | grep -e ip_vs -e nf_conntrack_ipv4" -
重启linux服务
ansible clients_all -m reboot
9.安装Docker:
-
添加docker镜像到本地:
ansible clients_all -m get_url -a "dest=/etc/yum.repos.d/docker-ce.repo url=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo" -
然后输入命令:
ansible clients_all -m shell -a "yum install -y --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7" -
修改配置文件:
ansible clients_all -m file -a "path=/etc/docker state=directory"# Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs mkdir -p /etc/docker cat <<eof > /etc/docker/daemon.json { "storage-driver": "devicemapper", "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://ja9e22yz.mirror.aliyuncs.com"] } eofansible clients_all -m copy -a "src=/etc/docker/daemon.json dest=/etc/docker/daemon.json"cat << eof > /etc/sysconfig/docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false' eofansible clients_all -m copy -a "src=/etc/sysconfig/docker dest=/etc/sysconfig/docker" -
重启,并设置开机自启:
ansible clients_all -m service -a "name=docker state=restarted enabled=true"
10.安装k8s组件:
-
配置k8syum仓库:
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.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOFansible clients_all -m copy -a "src=/etc/yum.repos.d/kubernetes.repo dest=/etc/yum.repos.d/kubernetes.repo" -
安装kubeadm、kubelet和kubectl
组件 说明 kubeadm 搭建kubernetes集群的工具 kubelet 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器 kubectl 用来与集群通信的命令行工具。 ansible clients_all -m shell -a "yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y" -
编辑/etc/sysconfig/kubelet,配置kubelet的cgroup
cat <<eof > /etc/sysconfig/kubelet KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" eofansible clients_all -m copy -a "src=/etc/sysconfig/kubelet dest=/etc/sysconfig/kubelet" -
设置kubelet开机自启
ansible clients_all -m service -a "name=kubelet state=started enabled=true"
11.准备镜像集群:
-
在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
ansible clients_all -m shell -a "kubeadm config images list" -
下载镜像:此镜像在kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替代方案下载这些镜像
cat << eof > kubernetes_images_install.yaml --- - hosts: clients_allgather_facts: novars: images: - kube-apiserver:v1.17.4 - kube-controller-manager:v1.17.4 - kube-scheduler:v1.17.4 - kube-proxy:v1.17.4 - pause:3.1 - etcd:3.4.3-0 - coredns:1.6.5 tasks:- name: 拉取镜像shell: docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }}with_items: "{{ images }}"- name: 给镜像打标签shell: docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }} k8s.gcr.io/{{ item }}with_items: "{{ images }}"- name: 删除镜像shell: docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }}with_items: "{{ images }}" eofansible-playbook kubernetes_images_install.yaml
12.集群初始化:
-
在 master 节点:
-
创建集群
ansible clients_master -m shell -a "kubeadm init \ --kubernetes-version=v1.17.4 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --apiserver-advertise-address=192.168.174.150" | grep 'kubeadm join' # 集群入口指向master# 成功执行后将给出将node节点加入集群的命令 kubeadm join 192.168.174.150:6443 --token 2pmmsi.xv4534qap5pf3bjv \ --discovery-token-ca-cert-hash sha256:69715f25a2e7795f4642afeb8f88c800e601cb1624b819180e820702885b5eef -
创建必要文件
ansible clients_master -m file -a "path=$HOME/.kube state=directory"ansible clients_master -m shell -a "cp -i /etc/kubernetes/admin.conf $HOME/.kube/config" ansible clients_master -m file -a "path=$HOME/.kube/config state=touch owner=$(id -u) group=$(id -g)"
-
-
在 node 节点,将node节点加入集群(命令各不相同,需要在住master节点创建集群后获取命令)
ansible clients_client -m shell -a "kubeadm join 192.168.174.150:6443 --token 2pmmsi.xv4534qap5pf3bjv \ --discovery-token-ca-cert-hash sha256:69715f25a2e7795f4642afeb8f88c800e601cb1624b819180e820702885b5eef" -
在 master 节点,在查看集群状态 此时的集群状态为NotReady,这是因为还没有配置网络插件
[root@server ~]# ansible clients_master -m shell -a "kubectl get nodes" server | CHANGED | rc=0 >> NAME STATUS ROLES AGE VERSION client1 NotReady <none> 14m v1.17.4 client2 NotReady <none> 14m v1.17.4 server NotReady master 23m v1.17.4
13.安装网络插件:
-
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可
-
本次选择flannel
-
下面操作只需在 master 节点执行即可,插件使用的是DaemonSet的控制器,它会在每个节点上都运行
-
获取fannel的配置文件
ansible clients_master -m get_url -a "dest=./ url=https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml" -
部署flannel网络:
ansible clients_master -m shell -a "kubectl apply -f kube-flannel.yml" -
过一分钟左右查看各节点状态,变为Ready说明网络打通了:
[root@server ~]# ansible clients_master -m shell -a "kubectl get nodes" server | CHANGED | rc=0 >> NAME STATUS ROLES AGE VERSION client1 Ready <none> 20m v1.17.4 client2 Ready <none> 20m v1.17.4 server Ready master 29m v1.17.4 -
查看所有pod是否变为Running
[root@server ~]# ansible clients_master -m shell -a "kubectl get pod --all-namespaces" server | CHANGED | rc=0 >> NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-h7d2z 1/1 Running 0 3m3s kube-flannel kube-flannel-ds-hht48 1/1 Running 0 3m3s kube-flannel kube-flannel-ds-lk7qd 1/1 Running 0 3m3s kube-system coredns-6955765f44-4vg95 1/1 Running 0 29m kube-system coredns-6955765f44-kkndx 1/1 Running 0 29m kube-system etcd-server 1/1 Running 0 29m kube-system kube-apiserver-server 1/1 Running 0 29m kube-system kube-controller-manager-server 1/1 Running 0 29m kube-system kube-proxy-7x47c 1/1 Running 0 29m kube-system kube-proxy-pxx4l 1/1 Running 0 21m kube-system kube-proxy-v54j6 1/1 Running 0 21m kube-system kube-scheduler-server 1/1 Running 0 29m
相关文章:
使用ansible命令部署k8s集群
1.部署ansible集群 使用python脚本一个简单的搭建ansible集群-CSDN博客 2.ansible命令搭建k8s: 1.主机规划: 节点IP地址操作系统配置server192.168.174.150centos7.92G2核client1192.168.174.151centos7.92G2核client2192.168.174.152centos7.92G2核…...
【上海大学数字逻辑实验报告】四、组合电路(三)
一、 实验目的 掌握多路选择器74LS151的原理。掌握译码器74LS138的原理。学会在Quartus II上使用多路选择74LS151设计电路。学会在Quartus II上使用译码器74LS138设计电路。 二、 实验原理 多路选择器又称数据选择器或多路开关,它是一种多路输入单路输出的组合逻…...
centos安装node 、npm 、nvm
你好,这是Bing。我可以帮你用nodejs写一个http服务器。😊 根据我的搜索结果,你需要使用 require 指令来加载和引入 http 模块,然后使用 http.createServer 方法来创建一个服务器实例,最后使用 listen 方法来监听一个端…...
年终福利|鹅厂重磅AI绘画训练营带你玩转SD
2023年,AI绘画火遍全网,站在12月的中旬回望,这个AI时代必备技能你get了吗?如何掌握图像生成方法?怎样基于Stable Diffusion打造个人专属AI绘画模型,落地项目应用? 腾讯云开发者社区联合腾讯云AI…...
arXiv学术速递笔记12.8
文章目录 一、GSGFormer: Generative Social Graph Transformer for Multimodal Pedestrian Trajectory Prediction(GSGFormer:用于多通道行人轨迹预测的产生式社会图转换器)二、AnimateZero: Video Diffusion Models are Zero-Shot Image An…...
大模型元年压轴盛会定档12月28日,第十届WAVE SUMMIT即将启航
文章目录 1. 前言2. WAVE SUMMIT五载十届,AI开发者热血正当时3. 酷炫前沿、星河共聚!大模型技术生态发展正当时 1. 前言 回望2023年,大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态,大语言模型在突飞猛进中加速…...
基于conda环境使用mamba/conda安装配置QIIME 2 2023.9 Amplicon扩增子分析环境,q2cli主要功能模块介绍及使用
QIIME 2 2023.9 Amplicon Distribution介绍: 概述 qiime团队专门针对高通量扩增子序列分析退出的conda集成环境,包括了主要和常见的扩增子分析模块,用户可以单独使用各个模块,也可以使用各模块组成不同的分析流程。从2023.09版本…...
腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足
目录 前言 出现的问题: 解决方法: 编译安装: 极速安装 其他 我的其他博客 前言 说实话,本人也就是个穷学生买不起啥大的服务器啥的,整了个2核 2内存的服务器 用宝塔按mysql5.5是没问题的,一切换8.0就提醒内存不足…...
调用Win10隐藏的语音包
起因 在做一个文本转语音的Demo的时候,遇到了语音包无法正确被Unity识别的问题。明明电脑上安装了语音包但是代码就是识别不出来 原因 具体也不是非常清楚,但是如果语言包是在的话,大概率是Win10系统隐藏了。 确定语言包 首先查看%windi…...
【WPF】应用程序和已知安卓设备的局域网IP之间进行通信
要在WPF应用程序和已知安卓设备的局域网IP之间进行通信,可以使用Socket通信。以下是一个基本的示例: 在WPF应用程序中创建一个Socket对象并连接到安卓设备的IP地址和端口号: using System.Net.Sockets;// 创建一个Socket对象 Socket socket…...
linux Ubuntu下,第一个C++程序访问数据库,遇到的问题,及解决办法
在ubuntu下安装了mysql,mysql以后,编写了第一个访问数据库的程序: #include <iostream> #include <string> #include <cstdlib> //for system #include <mysql.h>using namespace std;int main() {mysqlpp::Connect…...
【Flink on k8s】- 7 - 在本地运行第一个 flink wordcount job
目录 1、环境准备 2、代码开发 3、启动运行 4、在控制台找到 web ui,查看监控...
velocity-engine-core是什么?Velocity模板引擎的使用
velocity-engine-core是什么?Velocity模板引擎的使用 1. 常见的模板引擎2. Velocity 的语法3.Velocity的使用 相信在日常开发中或多或少都听过或者使用过模板引擎,比如熟知的freemarker, thymeleaf等。而模板引擎就是为了实现View和Data分离而产生的。 而…...
【华为od】存在一个m*n的二维数组,其成员取值范围为0,1。其中值为1的元素具备扩散性,每经过1S,将上下左右值为0的元素同化为1。
存在一个m*n的二维数组,其成员取值范围为0,1。其中值为1的元素具备扩散性,每经过1S,将上下左右值为0的元素同化为1。将数组所有成员初始化为0,将矩阵的[i, j]和[m,n]位置上元素修改成1后,在经过多长时间所有元素变为1。 输入描述 输入的前两个数字是矩阵大小。后面是数字…...
docker学习(七、搭建mysql8.2主从)
一、主库搭建 1.构建主库镜像 # 运行mysql镜像,配置端口3307为主库 docker run -p 3307:3306 --name mysql-master --privilegedtrue -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc…...
消费升级:无人零售的崛起与优势
消费升级:无人零售的崛起与优势 随着人们生活水平的提高,消费内容正在从生存型消费转向以精神体验和享乐为主的发展型消费。社会居民的消费结构不断变迁,明显呈现消费升级趋势。个性化和多元化消费势头正在崛起,特别是无人零售的自…...
【开题报告】基于SpringBoot的煤炭企业安全宣传学习平台的设计与实现
1.选题背景 煤炭企业作为我国能源行业的重要组成部分,承担着国民经济的支撑和推动作用。然而,煤炭生产过程中存在较高的安全风险,煤矿事故频发,给人员生命财产安全带来严重威胁,也给社会稳定和经济发展带来不利影响。…...
机器连接和工业边缘计算
软件应用和IT创新是制造业投资的主要驱动力。解决方案架构应围绕特定标准进行整合,并采用架构蓝图和最佳实践来满足最终用户的需求。此外,边缘计算(Edge Computing)也将在制造业中加速部署。 边缘计算是制造业的下一个变革驱动力。…...
java系列-LinkedHashMap
1.插入新节点时,会将该节点加到链表尾部 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{/*** The head (eldest) of the doubly linked list.*/transient LinkedHashMapEntry<K,V> head;/*** The tail (young…...
【linux】查看CPU和内存信息
之前咱们一起学习了查看内存的和CPU的命令。 mpstat : 【linux】 mpstat 使用 uptime:【Linux】 uptime命令使用 CPU的使用率:【linux】查看CPU的使用率 nmon :【linux】nmon 工具使用 htop :【linux】htop 命令…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
