KubeOperator技术方案

总体介绍

KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划、部署和运营生产级别的 Kubernetes 集群。

KubeOperator 提供可视化的 Web UI,支持离线环境,支持物理机、VMwareOpenStackFusionCompute 等 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 部署和管理门槛,内置 KubePiWebkubectl
  • 按需创建: 调用云平台 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 借鉴公有云厂商的思路和概念,并应用到 VMwareOpenStackFusionCompute 等私有云平台上面。例如,在 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

OpenStack

FusionCompute

上传

  • 模版文件需要上传至 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. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  2. unity小地图技术方案总结

    技术方案 一:从顶视图获取实时小地图(优点实现快容易对地图进行放大缩小操作而且地图,缺点是不好对地图做出修改,只能在顶部加个另外的相机层来遮盖) 1.创建Redertexture并改名为smallma ...

  3. iOS多线程技术方案

    iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...

  4. Facebook存储技术方案:找出“暖性BLOB”数据

    Facebook公司已经在其近线存储体系当中彻底弃用RAID与复制机制,转而采用分布式擦除编码以隔离其所谓的“暖性BLOB”. 暖性?BLOB?这都是些什么东西?大家别急,马上为您讲解: BLOB—— ...

  5. 分布式锁1 Java常用技术方案(转)

    转:http://www.cnblogs.com/PurpleDream/p/5559352.html#3450419 前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临 ...

  6. Android基于WIFI实现电脑和手机间数据传输的技术方案研究

    Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案: 一种是通过ftp协议实现,Android手机作为数据传输过程中的ftp服务器: 一种是通过http协议实现.Andro ...

  7. Binder Proxy技术方案

    Binder Proxy技术方案 作者 低端码农 时间 2014.08.23 0x0 看到有多朋友尝试通过hook系统进程system_process的ioctl,以企图截获系统的IPC通讯.这个方法 ...

  8. 技术方案:在外部网址调试本地js(基于fiddler)

    1 解决的问题 1)        场景1:生产环境报错 对前台开发来说,业务逻辑都在js中,所以报错90%以上都是js问题. 如果生产环境出现报错,但是测试环境正常.这时修改了代码没有环境验证效果, ...

  9. 分布式锁2 Java非常用技术方案探讨之ZooKeeper

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...

  10. 全面解密QQ红包技术方案:架构、技术实现、移动端优化、创新玩法等

    本文来自腾讯QQ技术团队工程师许灵锋.周海发的技术分享. 一.引言 自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年).刷一刷红包(2016 年)和 AR 红包(2017 年)几个 ...

随机推荐

  1. canvas-screenshot 视频截屏功能,选择视频的一个区域,进行截图

    预览地址:http://pengchenggang.gitee.io/canvas-screenshot/ 参考资料:https://www.canvasapi.cn/ <!DOCTYPE ht ...

  2. Libcurl & Log4cplus 移植和使用 以及 Jsoncpp 简单使用

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. [STM32 HAL]一种可能不错的DMA处理串口数据方案

    [STM32 HAL]一种可能不错的DMA处理数据方案 原文链接:https://blog.csdn.net/youmeichifan/article/details/51750435?spm=100 ...

  4. 浅析三维模型OBJ格式轻量化压缩文件大小的技术方法

    浅析三维模型OBJ格式轻量化压缩文件大小的技术方法 在减小三维模型OBJ格式轻量化文件大小方面,有许多技术和方法可以使用.下面我将介绍一些常用的方法来减小OBJ文件的大小. 1.优化顶点数量:减少OB ...

  5. Python实现简易版Netcat

    Netcat Netcat是一种网络工具,也称为"nc",可用于在计算机网络之间进行TCP/IP或UDP连接.它可以用于连接到其他计算机上的端口,发送和接收数据,扫描端口以及创建服 ...

  6. 如何从容的打包上传图片对象--File,Blob,BASE64详解及转换方法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 File() File() 构造器创建新的 File 对象实例. 语法 var myFile = new File(bits, name[ ...

  7. 如何打造一个花里胡哨的Github个人主页?

    1.介绍 2.使用 2.1.创建一个同名仓库 2.2.引用模板 2.3.为内容添加有趣模块 2.3.1.徽章badge 2.3.2.waka 时间展示 2.3.3.展示 GitHub stars 等信 ...

  8. 聊一下Button事件、命令、行为的触发顺序

    1.我们新建一个xaml <StackPanel Width="200" Margin="20"> <Button Height=" ...

  9. KingbaseES 优化之sql优化方法

    金仓数据库在sql层面提供了多种优化手段,但是这些的前提时需要保证我们的统计信息准确,优化器已经在正确信息下选择了它认为的最优的执行计划, 优化手段包括 •使用索引 索引解决的问题用于在进行表的扫描时 ...

  10. 金仓数据库kbcrypto 插件实现sm加密算法

    首先介绍一下sm4 算法 SM4 算法是对称加密算法,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述.SM4 算法密钥长度固定为128bit,加密解密采用相同的密钥,加解密速度较快 ...