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 年)几个 ...
随机推荐
- canvas-screenshot 视频截屏功能,选择视频的一个区域,进行截图
预览地址:http://pengchenggang.gitee.io/canvas-screenshot/ 参考资料:https://www.canvasapi.cn/ <!DOCTYPE ht ...
- Libcurl & Log4cplus 移植和使用 以及 Jsoncpp 简单使用
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- [STM32 HAL]一种可能不错的DMA处理串口数据方案
[STM32 HAL]一种可能不错的DMA处理数据方案 原文链接:https://blog.csdn.net/youmeichifan/article/details/51750435?spm=100 ...
- 浅析三维模型OBJ格式轻量化压缩文件大小的技术方法
浅析三维模型OBJ格式轻量化压缩文件大小的技术方法 在减小三维模型OBJ格式轻量化文件大小方面,有许多技术和方法可以使用.下面我将介绍一些常用的方法来减小OBJ文件的大小. 1.优化顶点数量:减少OB ...
- Python实现简易版Netcat
Netcat Netcat是一种网络工具,也称为"nc",可用于在计算机网络之间进行TCP/IP或UDP连接.它可以用于连接到其他计算机上的端口,发送和接收数据,扫描端口以及创建服 ...
- 如何从容的打包上传图片对象--File,Blob,BASE64详解及转换方法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 File() File() 构造器创建新的 File 对象实例. 语法 var myFile = new File(bits, name[ ...
- 如何打造一个花里胡哨的Github个人主页?
1.介绍 2.使用 2.1.创建一个同名仓库 2.2.引用模板 2.3.为内容添加有趣模块 2.3.1.徽章badge 2.3.2.waka 时间展示 2.3.3.展示 GitHub stars 等信 ...
- 聊一下Button事件、命令、行为的触发顺序
1.我们新建一个xaml <StackPanel Width="200" Margin="20"> <Button Height=" ...
- KingbaseES 优化之sql优化方法
金仓数据库在sql层面提供了多种优化手段,但是这些的前提时需要保证我们的统计信息准确,优化器已经在正确信息下选择了它认为的最优的执行计划, 优化手段包括 •使用索引 索引解决的问题用于在进行表的扫描时 ...
- 金仓数据库kbcrypto 插件实现sm加密算法
首先介绍一下sm4 算法 SM4 算法是对称加密算法,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述.SM4 算法密钥长度固定为128bit,加密解密采用相同的密钥,加解密速度较快 ...