KubeOperator技术方案
KubeOperator技术方案
总体介绍︎
KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划、部署和运营生产级别的 Kubernetes 集群。
KubeOperator 提供可视化的 Web UI,支持离线环境,支持物理机、VMware、OpenStack 和 FusionCompute 等 IaaS 平台,支持 x86 和 ARM64 架构,支持 GPU,内置应用商店,已通过 CNCF 的 Kubernetes 软件一致性认证。
KubeOperator 使用 Terraform 在 IaaS 平台上自动创建主机(用户也可以自行准备主机,比如物理机或者虚机),通过 Ansible 完成自动化部署和变更操作,支持 Kubernetes 集群 从 Day 0 规划,到 Day 1 部署,到 Day 2 运营的全生命周期管理。
页面展示︎
组件项目︎
- KubePi: 一个现代化的 K8s 面板
- Web Kubectl: 在 Web 浏览器中运行 kubectl 命令
技术优势︎
- 简单易用: 提供可视化的 Web UI,极大降低 Kubernetes 部署和管理门槛,内置 KubePi 和 Webkubectl
- 按需创建: 调用云平台 API,一键快速创建和部署 Kubernetes 集群
- 按需伸缩: 快速伸缩 Kubernetes 集群,优化资源使用效率
- 按需修补: 快速升级和修补 Kubernetes 集群,并与社区最新版本同步,保证安全性
- 离线部署: 支持完全离线下的 Kubernetes 集群部署
- 自我修复: 通过重建故障节点确保集群可用性
- 全栈监控: 提供从Pod、Node到集群的事件、监控、告警、和日志方案
- Multi-AZ 支持: 将 Master 节点分布在不同的故障域上确保集群高可用
- 应用商店: 内置 KubeApps 应用商店
- GPU 支持: 支持 GPU 节点,助力运行深度学习等应用
主要概念
部署模式︎
- 手动模式: 用户需要自己准备物理机或虚拟机,存储可选择 NFS 持久化存储,外部 ceph 存储等
- 自动模式: 用户只需要绑定云平台(比如 VMware)账号信息,KubeOperator 会根据预先定义的部署计划来自动创建主机实现一键自动化部署
部署计划︎
自动部署模式下,部署计划定义了 Kubernetes 集群的部署细节,包括其部署模型、集群所在的区域、可用区、节点大小类型等
区域和可用区︎
区域(Region)和可用区(AZ)这两个术语来自公有云。每个区域完全独立。每个可用区完全隔离,但同一个区域内的可用区之间使用低时延链路相连。区域和可用区之间的关系如下图所示
对于公有云厂商提供的托管 Kubernetes 服务,master 节点由公有云厂商托管并维护,其 3 个master 节点会分布在同个区域下面的 3 个不同可用区上面,实现真正的高可用
KubeOperator 借鉴公有云厂商的思路和概念,并应用到 VMware、OpenStack 和 FusionCompute 等私有云平台上面。例如,在 VMware 云平台下,区域对应为 Datacenter,可用区对应于 cluster,或者 cluster 下面的 resource pool
注意事项
- 如果用户只有一个 vSphere 集群,那么可以在集群下面建立三个 resource pool,每个resource pool 对应于一个可用区
- 如果用户有三个 vSphere 集群,那么每个集群对应于一个可用区
- vSAN 集群不能被多个 vSphere 集群共享,所以 3 个 vSphere 集群,持久化存储仅支持集中存储。 具体请参考此文档
权限模型︎
支持通过在项目中设置用户权限等级来管理集群,分为系统管理员、项目管理员、集群管理员
系统管理员︎
默认的 admin 账号可以创建系统管理员
- 管理集群,安装、卸载、升级、扩容、缩容、备份、恢复等等所有集群相关操作
- 管理用户,添加系统管理员和普通用户
- 管理项目,创建新项目,给项目创建集群、指定项目管理员和集群管理员、授权资源等
- 管理版本,启用、禁用 k8s 版本、查看版本详情等
- 管理资源,添加集群所需主机、部署计划、备份账号等
- 系统设置,设置添加仓库、凭据、NTP、邮箱、License等
- 查看系统日志
项目管理员︎
- 管理集群,安装、卸载、升级、扩容、缩容、备份、恢复等所有集群相关操作
- 查看版本,查看版本详情
- 查看资源,查看集群所需主机、部署计划、备份账号等
- 查看项目,查看项目管理员和集群管理员、已授权资源等
- 查看系统日志
集群管理员︎
- 管理集群,查看集群概览、监控、日志、事件、添加工具、启用CSI扫描等相关操作
- 查看系统日志
系统架构
系统架构︎
组件说明︎
- kubeoperator_server: 提供平台业务管理相关功能的后台服务;
- kubeoperator_ui: 提供平台业务管理相关功能的前台服务;
- kubeoperator_kubepi: 提供 Dashboard 的功能;
- kubeoperator_kobe: 提供执行 Ansible 任务创建 Kubernetes 集群的功能;
- kubeoperator_kotf: 提供执行 Terraform 任务创建虚拟机的功能;
- kubeoperator_webkubectl: 提供在 Web 浏览器中运行 kubectl 命令的功能;
- kubeoperator_nginx: 平台统一入口,并运行控制台的 Web 界面服务;
- kubeoperator_mysql: 数据库管理组件;
- kubeoperator_nexus: 仓库组件,提供 Docker、Helm、Raw、Yum等资源仓库功能;
各个组件间的关系可参考下图
安装部署
硬件要求︎
最小化配置推荐配置
角色 | CPU核数 | 内存 | 系统盘 | 数量 |
---|---|---|---|---|
部署机 | 4 | 8G | 100G | 1 |
Master | 4 | 8G | 100G | 1 |
Worker | 4 | 8G | 100G | 1 |
软件要求︎
KubeOperator 部署机
需求项 | 具体要求 | 参考(以CentOS7.6为例) |
---|---|---|
操作系统 | 支持 Docker 的 Linux OS | cat /etc/redhat-release |
CPU 架构 | 支持 x86_64 和 aarch64 | uname -m |
kernel 版本 | >=Linux 3.10.0-957.el7.x86_64 | uname -sr |
swap | 关闭 | swapoff -a sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab |
防火墙 | 关闭 | systemctl stop firewalld && systemctl disable firewalld |
端口 | 所有节点防火墙必须放通 SSH(默认22)、80、8081-8083端口 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
SELinux | 关闭 | setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config |
K8s 集群节点
需求项 | 具体要求 | 参考(以CentOS7.6为例) |
---|---|---|
操作系统 | CentOS 7.4 - 7.9 RHEL 7.4 - 7.9 Ubuntu 20.04 / 18.04 Kylin v10 openEuler 22.03 EulerOS 2.5(x86_64) EulerOS 2.8(aarch64) | cat /etc/redhat-release |
CPU 架构 | 支持 x86_64 和 aarch64 | uname -m |
kernel 版本 | >=Linux 3.10.0-957.el7.x86_64 | uname -sr |
swap | 关闭。如果不满足,系统会有一定几率出现 io 飙升,造成 docker 卡死。kubelet 会启动失败(可以设置 kubelet 启动参数 --fail-swap-on 为 false 关闭 swap 检查) | swapoff -a sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab |
防火墙 | 关闭。Kubernetes 官方要求 | systemctl stop firewalld && systemctl disable firewalld |
SELinux | 关闭 | setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config |
时区 | 所有服务器时区必须统一,建议设置为 Asia/Shanghai | timedatectl set-timezone Asia/Shanghai |
安装说明︎
离线安装
请自行下载 KubeOperator 最新版本的离线安装包
# 解压安装包
tar zxvf KubeOperator-release-v3.16.0-amd64.tar.gz
# arm64 的包名是 KubeOperator-release-v3.16.0-arm64.tar.gz
cd KubeOperator-release-v3.16.0
# 运行安装脚本
/bin/bash install.sh
# 等待安装脚本执行完成后,查看 KubeOperator 状态
koctl status
在线安装
️安装完成后,检查服务状态。若有有异常,可以使用 koctl restart 命令进行重新启动
[root@kubeoperator ~]# koctl status
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------------------------
kubeoperator_kobe sh /root/entrypoint.sh Up (healthy) 8080/tcp
kubeoperator_kotf kotf-server Up (healthy) 8080/tcp
kubeoperator_kubepi kubepi-server Up (healthy) 80/tcp
kubeoperator_mysql /entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
kubeoperator_nexus sh -c ${SONATYPE_DIR}/star ... Up (healthy) 0.0.0.0:8081->8081/tcp, 0.0.0.0:8082->8082/tcp, 0.0.0.0:8083->8083/tcp
kubeoperator_nginx /docker-entrypoint.sh ngin ... Up (healthy) 0.0.0.0:80->80/tcp
kubeoperator_server ko-server Up (healthy) 8080/tcp
kubeoperator_ui /docker-entrypoint.sh ngin ... Up (healthy) 80/tcp
kubeoperator_webkubectl sh /opt/webkubectl/start-w ... Up (healthy)
️登录
地址: http://<ko服务器_ip>:80
用户名: admin
密码: kubeoperator@admin123
️帮助
koctl --help
升级说明︎
离线升级
# 离线升级需要提前下载离线安装包,并解压到 KubeOperator 部署机
# 进入升级包目录
cd KubeOperator-release-v3.16.0
# 运行安装脚本
./koctl upgrade
# 查看 KubeOperator 状态
koctl status
混合架构部署说明︎
️定义:混合架构是指使用 KubeOperator 部署同时包含 x86_64 和 arm64 架构节点的 Kubernetes 集群
如下图所示,混合部署需要提供 x86_64 和 arm64 架构的 Nexus 仓库,以便于集群部署时可以下载到对应架构的资源,之后在 KubeOperator 系统设置添加不同架构的仓库信息即可。
例如:
1.可以分别部署两台不同架构的 KubeOperator(一台 arm64,一台 x86_64)
2.使用 x86_64 架构的主机作为日常操作的主机
3.将 arm64 的主机作为 arm 仓库使用并添加到 x86_64 的 KubeOperator 系统设置中
系统设置
仓库︎
- CPU 架构: 支持 x86_64 和 aarch64
- 协议: 支持 http 和 https(需手动启用)
- 地址: 默认为部署 KubeOperator 的服务器 IP(将使用 IP:8081 来访问 nexus 仓库)
凭据︎
- 凭据为 KubeOperator 连接主机资产的凭证。支持添加 password 和 privatekey 两种方式的凭据
- 系统会初始化名称为 kubeoperator 的凭据(自动模式默认模版创建服务器的密码),默认密码为: KubeOperator@2019
密钥
- 1、在 KubeOperator 主机通过 ssh-keygen 命令生成 id_rsa 和 id_rsa.pub 密钥对
- 2、将 id_rsa.pub 公钥内容添加到目标主机 .ssh/authorized_keys 文件中
- 3、将 id_rsa 私钥内容添加到凭据密钥框中
NTP︎
- 支持配置多个 NTP 服务器地址
- 支持手动启用或禁用 NTP 服务器
Dashboard︎
此处为 admin 用户登录凭据,需要和 Dashboard 用户管理中设置的密码保持一致。
集群规划
手动模式
- 手动模式下,用户需要自行准备主机
- 本章节以手动模式部署一个开发测试用集群,每台服务器的用途和需求如下表:
角色 | 数量 | 操作系统 | 最低配置 | 推荐配置 |
---|---|---|---|---|
部署机 | 1 | CentOS 7.6 | 4C 8G | 4C 16G |
Master | 1 | CentOS 7.6 | 2C 4G | 4C 8G |
Worker | 1 | CentOS 7.6 | 2C 4G | 4C 8G |
添加主机︎
- 推荐使用全新的机器
- KubeOperator 部署机不能作为 Kubernetes 集群节点使用
主机列表︎
主机列表可以看到已添加主机的详细信息,包括 IP、CPU、内存、操作系统等
自动模式
- KubeOperator 推荐使用自动模式部署 Kubernetes 集群
- 在自动模式下,用户需要准备软件定义的 IaaS 云平台,比如 VMware vSphere、Openstack 和 FusionCompute 等
- 本章节以 VMware vSphere 平台作为示例,讲解整个 K8s 集群的规划、部署及管理过程,部署示意图如下图所示:
IP 池配置︎
IP 池在创建可用区时使用,池中的 IP 地址将分配给虚拟机
添加 IP 池︎
创建 IP 池要配置好子网掩码、起止 IP、网关和 DNS 等
查看 IP 使用情况︎
- 列表页点击 IP 使用情况可查看 IP 池中所有 IP 的状态(可达、可用和占用)
- 在 IP 池页面,可手动添加 IP 段、同步 IP 状态等
虚拟机配置︎
- 支持添加和修改虚拟机配置(CPU、内存)
- 默认 small、medium、large、xlarge、2xlarge 和 4xlarge 六种配置
自定义模版配置︎
- 支持 VMware vSphere 和 OpenStack 两种 IaaS 云平台
区域(Region)︎
- 与公有云中的 Region 概念相似,可以简单理解为地理上的区域
- 创建区域时,首先选择提供商,目前支持 VMware vSphere、OpenStack 和 FusionCompute
- 配置参数时,需要提供 vSphere 环境信息,包括 vCenter 主机,端口,用户名和密码(建议直接绑定带有管理员角色的用户)
- 单击【获取数据中心】,获取并绑定目标数据中心
可用区(Zone)︎
- 与公有云中的 AZ 概念相似,可以简单理解为 Region 中具体的机房
- 在 vSphere 体系中我们使用不同的 Cluster 或者同个 Cluster 下的不同 Resource Pool 来实现 Zone 的划分
- 选择可用区配置参数时,需要选择计算集群,资源池,存储类型以及网络适配器等信息,这些信息依赖于 vCenter 环境配置
- 支持已有模版、默认模版和自定义模版
部署计划(Plan)︎
- 用来描述在哪个区域下,哪些可用区中,使用什么样的机器规格,部署什么类型的集群的一个抽象概念
- 部署计划配置包括选择可用区(可用区可以单选或多选),并设置 Master 节点,Worker 节点的规格
- 多主多节点集群可以选择多个可用区的部署计划
默认模版︎
下载︎
默认模版
- 离线环境下,需要手动上传模版文件至 nexus 仓库
- 模版文件下载地址如下:
vSphere
- ovf: https://kubeoperator.fit2cloud.com/terraform/images/vsphere/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810.ovf
- vmdk: https://kubeoperator.fit2cloud.com/terraform/images/vsphere/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810-1.vmdk
OpenStack
- qcow2: https://kubeoperator.fit2cloud.com/terraform/images/openstack/kubeoperator_centos_7.6.1810-1.qcow2
FusionCompute
- ovf: https://kubeoperator.fit2cloud.com/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810.ovf
- vhd: https://kubeoperator.fit2cloud.com/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810/kubeoperator_centos_7.6.1810-vda.vhd
上传︎
- 模版文件需要上传至 binary-k8s-raw 仓库
- 仓库默认用户名/密码:admin/admin123
vSphere
- 需上传 ovf 和 vmdk 文件
- 文件路径:/terraform/images/vsphere/kubeoperator_centos_7.6.1810
OpenStack
- 需上传 qcow2 文件
- 文件路径:/terraform/images/openstack
FusionCompute
- 需上传 ovf 和 vhd 文件
- 文件路径:/terraform/images/fusioncompute/kubeoperator_centos_7.6.1810
集群部署
集群信息︎
- 项目: 选择集群所属项目
- 供应商: 支持裸金属(手动模式)和部署计划(自动模式)
- 版本: 支持版本管理中最新的两个 Kubernetes 版本
- 架构: 支持 AMD64 和 ARM64
- Yum 仓库: 支持替换、共存和不操作三种类型
Yum 仓库
- 替换: 此操作将会对 K8S 节点服务器原始 yum repo 文件进行备份,之后生成并仅使用 KubeOperator 的 yum repo
- 共存: 此操作将保持K8S节点服务器原始 yum repo 文件不变,同时生成并使用 kubeoperator 的 yum repo
- 不操作: 此操作将保持使用 K8S 节点服务器原始 yum repo 文件,不对K8S节点服务器的 yum repo 做任何操作
集群设置︎
- 容器网络: CIDR不能与目标IP段重叠,否则会造成初始化失败
- POD 数量上限/节点: 默认 256
- Service 数量上限/集群: 默认 256
- proxy 模式: 支持 iptables 和 ipvs
- dns 缓存: 支持开启 NodeLocal DNSCache
- kubernetes 审计: 支持开启日志审计功能
运行时设置︎
- 容器运行时: 支持 Docker 和 Containerd
- Docker 数据路径: 默认 /var/lib/docker
- Container 子网: 默认 172.17.0.1/16
容器网络设置︎
- 网卡名称: 多网卡环境需要指定使用的网卡名称,单网卡环境可不填
- 容器网络: 支持 flannel 、 calico 和 cilium
vxlan 和 ipip 网络模式
- 基于隧道,在任何网络环境下都可以正常工作
- 优势是对物理网络环境没有特殊要求,只要宿主机IP层可以路由互通即可
- 劣势是封包和解包耗费CPU性能,且额外的封装导致带宽浪费
host-gw 和 bgp 网络模式
- 基于路由,不适用于公有云环境
- 优势是没有封包和解包过程,完全基于两端宿主机的路由表进行转发
- 劣势是要求宿主机在2层网络是互通,且路由表膨胀会导致性能降低
cilium Overlay
- 支持 vxlan 和 geneve
- 基于封装的虚拟网络,产生所有主机。目前 VXLAN 和 Geneve 已经完成,但可以启用 Linux 支持的所有封装格式
- 此模式具有最小的基础设施和集成要求。它几乎适用于任何网络基础设施,因为唯一的要求是主机之间的IP连接,这通常已经给出
cilium Native Routing
- 使用 Linux 主机的常规路由表。网络必须能够路由应用程序容器的IP地址,此模式适用于高级用户,需要了解底层网络基础结构。
- 适用于(1. 原生 IPv6 网络、2. 与云网络路由器配合使用、3. 如果您已经在运行路由守护进程)
组件设置︎
- helm: 支持 v2 和 v3
- ingress 类型: 支持 nginx-ingress 和 traefik-ingress
- 安装 GPU 套件: 按需使用,默认选择禁用
节点信息︎
根据不同的节点角色选择目标主机(手动模式)
选择已授权部署计划,设置 Worker 节点数量(自动模式)
确认信息︎
日志︎
集群创建过程中为 Initializing 状态,点击可查看集群安装进度并支持查看当前任务的实时日志(支持手动暂停任务日志输出)
集群导入
基本信息︎
- 支持导入非 KubeOperator 创建的集群
- 导入非 KubeOperator 创建的集群不支持扩缩容、升级、备份等 Day2 操作
获取架构
选择集群节点的 CPU 架构类型(支持 amd64、arm64 和混合架构三种类型)
获取 Api Server
cat ~/.kube/config | grep server: | awk '{print $2}'
注意:如果 server IP 为 127.0.0.1,需要将 IP 替换为任意 master 节点 IP
获取 Router
装有 kube-proxy 的任意 K8s 集群节点的 IP 地址
kubectl -n kube-system get pod -o wide | grep kube-proxy
注意:获取任意节点的 IP 地址
获取 Token
KubeOperator 创建集群自建集群
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep ko-admin | awk '{print $1}') | grep token: | awk '{print $2}'
非 KubeOperator 创建集群︎
使用工具︎
仓库配置
- 工具中涉及到的镜像来源于 nexus 镜像仓库。在启用工具之前,需要在所有 K8s 集群节点上对 nexus 镜像仓库进行 http 授信。
vim /etc/docker/daemon.json
{
...
"insecure-registries" : [ "...", "kubeoperator-ip:8082", "..." ]
...
}
注意:kubeoperator-ip 为 KubeOperator 部署机 IP
# 重新启动 docker 服务使得配置生效
systemctl restart docker.service
KubeOperator 创建集群︎
获取容器运行时参数︎
Docker
# 集群任意节点执行
cat /etc/docker/daemon.json
{
...
"bip": "172.17.0.1/16", # Container 子网
"data-root": "/var/lib/docker", # Docker 数据路径
...
}
Containerd
# 集群任意节点执行
cat /etc/containerd/config.toml
...
root = "/var/lib/containerd" # Containerd 数据路径
...
获取容器网络参数︎
flannel/calico
网络模式
# 集群任意节点执行
kubectl -n kube-system
net-conf.json: |
{
"Network": "10.0.0.0/14",
"Backend": {
"Type": "vxlan" # 网络模式为 vxlan
}
}
...
}
多网络设置
# 集群任意节点执行
kubectl -n kube-system get daemonsets.apps kube-flannel-ds -o yaml
...
containers:
- args:
- --ip-masq
- --kube-subnet-mgr
- --iface=ens192 # 多网络设置为启用,网卡名称为 ens192
...
KubeOperator技术方案的更多相关文章
- 分布式锁1 Java常用技术方案
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...
- unity小地图技术方案总结
技术方案 一:从顶视图获取实时小地图(优点实现快容易对地图进行放大缩小操作而且地图,缺点是不好对地图做出修改,只能在顶部加个另外的相机层来遮盖) 1.创建Redertexture并改名为smallma ...
- iOS多线程技术方案
iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...
- Facebook存储技术方案:找出“暖性BLOB”数据
Facebook公司已经在其近线存储体系当中彻底弃用RAID与复制机制,转而采用分布式擦除编码以隔离其所谓的“暖性BLOB”. 暖性?BLOB?这都是些什么东西?大家别急,马上为您讲解: BLOB—— ...
- 分布式锁1 Java常用技术方案(转)
转:http://www.cnblogs.com/PurpleDream/p/5559352.html#3450419 前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临 ...
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案: 一种是通过ftp协议实现,Android手机作为数据传输过程中的ftp服务器: 一种是通过http协议实现.Andro ...
- Binder Proxy技术方案
Binder Proxy技术方案 作者 低端码农 时间 2014.08.23 0x0 看到有多朋友尝试通过hook系统进程system_process的ioctl,以企图截获系统的IPC通讯.这个方法 ...
- 技术方案:在外部网址调试本地js(基于fiddler)
1 解决的问题 1) 场景1:生产环境报错 对前台开发来说,业务逻辑都在js中,所以报错90%以上都是js问题. 如果生产环境出现报错,但是测试环境正常.这时修改了代码没有环境验证效果, ...
- 分布式锁2 Java非常用技术方案探讨之ZooKeeper
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...
- 全面解密QQ红包技术方案:架构、技术实现、移动端优化、创新玩法等
本文来自腾讯QQ技术团队工程师许灵锋.周海发的技术分享. 一.引言 自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年).刷一刷红包(2016 年)和 AR 红包(2017 年)几个 ...
随机推荐
- KEIL5新建工程0810
在保存各种项目的文件夹内创建一个项目文件夹1新建工程到文件夹1 选择芯片添加工程的必要文件(固件库) STM32程序是从启动文件开始,复制这些文件到文件夹A的新建Start文件夹下 stm32f10x ...
- [VueJsDev] 基础知识 - CommonJs VS ES Module
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html CommonJs VS ES Module ::: deta ...
- hire 聘用 受雇 租金 单词记忆
hire 基本解释 vt. 聘用:录用:雇用:租用 vi. 受雇:得到工作 n. 租金:酬金,工钱:[非正式用语] 被雇佣的人:销售部的两个新雇员 来自Proto-Germanic*hurjan,租, ...
- JavaFx 模拟键盘和鼠标事件
模拟键盘事件 可实现按键的模拟,包含快捷键 模拟按下ctrl+v示例代码: val robot = Robot() robot.keyPress(KeyEvent.VK_CONTROL) robot. ...
- shell实现简单的数组排序
c++代码 int nums[8]={1,2,1,3,4,2,5,6}; int length=8; for(int i=0;i<length;i++){ for(int j=i+1;j< ...
- vue2(脚手架、组件)
2.1 脚手架 使用前置: 第一步(没有安装过的执行):全局安装 @vue/cli npm install -g @vue/cli 第二步:切换到要创建项目的目录,然后使用命令创建项目 vue cre ...
- C# URL参数编码
string s = "lw123abc测试信息!@#¥%--&*()--+"; Console.WriteLine("原数据:\t\t" + s); ...
- kingbaseES V8R6 备份恢复案例 -- sys_rman备份“DSO support..."故障
案例说明: 在通过sys_rman执行备份时,出现"DSO support...."错误,如下图所示: sys_log日志: 适用版本: KingbaseES V8R6 一.问题分 ...
- KingbaseES V8R6集群运维案例---数据块故障自动修复(auto_bmr)
案例说明: 在Oracle11.2版本之后,DataGuard 若搭建实时应用日志的物理备库,那么在主库数据文件少 量坏块的情况下,可以利用ABCR技术快速修复坏块. Starting in Orac ...
- ET介绍——数值组件设计
类似魔兽世界,moba这种技能极其复杂,灵活性要求极高的技能系统,必须需要一套及其灵活的数值结构来搭配.数值结构设计好了,实现技能系统就会非常简单,否则就是一场灾难.比如魔兽世界,一个人物的数值属性非 ...