【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具
目录
一、K8S的网络类型:
1、K8S中的通信模式:
1.1、、pod内部之间容器与容器之间的通信
1.2、同一个node节点之内,不同pod之间的通信方式:
1.3、不同node节点上的pod之间是如何通信的呢?
2、网络插件一:flannel
cni的插件:
flannel插件:
1、flannel支持的数据转发方式:
2、UDP的工作模式:
3、UDP工作流程图:
4、vxlan模式:
5、vxlan工作流程:
3、CNI 网络组件:
1、部署 flannel
4、网络插件二:calico插件
1、概念
2、核心组件:
3、calico的工作原理:
4、工作流程
5、ipip模式和BGP模式:
6、部署 Calico:
二、K8S网络总结:
三、部署coredns组件:
1、概念
2、部署 CoreDNS
2.1、node节点操作
四、新master节点部署
1、部署配置
五、部署nginx实现负载均衡
1、部署nginx
2、部署keepalived服务
3、测试
六、基于Web的Kubernetes用户界面--Dashboard
1、部署Dashboard:
一、K8S的网络类型:
1、K8S中的通信模式:
1.1、、pod内部之间容器与容器之间的通信
在同一个pod中的容器时共享资源和网络,使用同一个网络命名空间。可以直接通信
1.2、同一个node节点之内,不同pod之间的通信方式:
每个pod都有一个全局的真实IP地址,同一个node节点之间的不同pod可以直接的使用对方pod的IP地址进行通信。
pod1和pod2是通过docker0的网桥来进行通信的
1.3、不同node节点上的pod之间是如何通信的呢?
2、网络插件一:flannel
cni的插件:
cni是一个标准接口,用于容器运行时调用网络插件,负责设置容器的网络命名空间,IP地址,路由等等参数
flannel插件:
功能:让集群之中不同节点的docker容器,具有整个集群唯一的虚拟IP地址
overlay的网络类型,在底层物理网络的基础之上创建一个逻辑的网络层。是二层+三层的集合。二层是物理网络(数据链路层),三层是逻辑上的网络层
overlay网络也是一种网络虚拟化的技术
1、flannel支持的数据转发方式:
1、UDP模式:默认模式,应用转发,配置简单,但是性能最差
2、vxlan:基于内核转发,也是最常用的网络类型(小集群都用这个模式)
3、hosts-gw:性能最好,但是配置麻烦
2、UDP的工作模式:
基于应用转发,flannel提供路由表,flannel封装数据包,解封装。
UDP是基于应用层,用户态
在每个node节点上都会有一个flannel的虚拟网卡,负责封装和解封装
3、UDP工作流程图:
4、vxlan模式:
使用的是overlay的虚拟隧道通信技术。是二层+三层的模式,和UDP不同。
vxlan:flannel提供路由表,内核封装解封装
用的flannel1.1接口,(ifconfig看到flannel1.1用的就是vxlan)
flannel.1提供vni
5、vxlan工作流程:
类似于三层交换机:
flannel:是每个发向容器的数据包封装,vxlan通过vtep打包数据,然后由内核封装成数据包,再转发到目标node节点,到了目标节点由内核解封装,解封装之后发送到目标pod。
无论是flannel还是udp对性能是有一定影响的(小集群不在乎)
3、CNI 网络组件:
1、部署 flannel
两个node节点操作
在 node01 节点上操作
上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中
cd /opt/
docker load -i flannel.tarmkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin在 master01 节点上操作
#上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络
cd /opt/k8s
kubectl apply -f kube-flannel.ymlkubectl get pods -n kube-system
kubectl get nodes
4、网络插件二:calico插件
1、概念
calico:采用直接路由的方式。BGP路由。不需要需改报文,统一直接通过路由表转发,路由表会很复杂,运行维护的要求比较高
BGP模式的特点:交换路由信息的外部网关协议,可以连接不同的node节点,node节点可能不是同一网段,BGP实现可靠的、最佳的、动态的路由选择。自动识别相邻的路由设备。
calico不使用overlay重叠网络,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发
2、核心组件:
felix:也是运行在主机上的一个个pod,一个进程。K8S daemonset的方式部署的pod
负责在宿主机上(node节点上)插入路由规则,维护calico所需的网络设备。网络接口管理,网络接口的监听,路由等等
daemonset:daemonset会在每个node节点部署相同的pod,后台的方式进行运行
BGP client:bird BGP的客户端,专门负责杂集群中分发路由规则的信息。每一个节点都会有一个BGP client
BGP协议广播的方式通知其他节点,分发路由的规则,实现网络互通
etcd:保存路由信息,负责整个网络元数据的一致性,保证整个网络状态的一致和准确
3、calico的工作原理:
路由转发,纯路由,没有交换
发现目标设备:BGP协议
通过路由表来维护每个pod之间的通信
一旦创建好pod之后,添加一个设备cali veth pair设备,是一个虚拟网卡设备
虚拟网卡:veth pair是一对设备,是一个虚拟的以太网设备。
一头连接在容器的网络命名空间(名称一般是eth0)
另一台连接在宿主机的网络命名空间 (名称一般是cali)
IP地址分配:veth pair连接容器的部分给容器分配一个IP地址,这个IP地址是一个唯一标识。宿主机也会被veth pair分配一个calico网络的内部IP地址。和其他节点上的容器进行通信
4、工作流程
veth设备,容器发出的IP地址通过veth pair设备到宿主机,宿主机根据路由规则的下一跳地址,发送到网关(目标宿主机节点),数据包到达目标宿主机,veth pair设备,目标宿主机也是根据路由规则,下一跳地址,转发到目标容器。
5、ipip模式和BGP模式:
ipip模式:
会生成一个Tunnel,所有的数据包封装都在Tunnel内部打包。封装的是宿主机ip、容器内部的IP地址
ipip的隧道:在隧道进行数据包的封装
BGP模式:
通过为ip路由表的前缀来实现目标主机的可达性
对比ipip模式,BGP模式没有隧道,BGP模式下,pod的数据包直接通过网卡发送到目的地
6、部署 Calico:
在 master01 节点上操作
上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络
cd /opt/k8s
vim calico.yaml#修改里面定义 Pod 的网络(CALICO_IPV4POOL_CIDR),需与前面 kube-controller-manager 配置文件指定的 cluster-cidr 网段一样- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16" #Calico 默认使用的网段为 192.168.0.0/16
kubectl apply -f calico.yamlkubectl get pods -n kube-system
kubectl get nodes
二、K8S网络总结:
常用的K8S网络类型:
flannel:配置简单,功能简单,基于overlay叠加网络实现,在物理层的网络上再封装一层虚拟的网络层
vxlan是虚拟三层网络,用的最多的模式。是基于vni +ip进行转发,flannel提供路由表,内核封装和解封装。
UDP是默认模式(只管发),一般不用,host配置复杂一般也不用
由于封装和解封装的过程,对数据传输的性能会有影响,没有网络策略配置的能力。
默认网段是:10.244.0.0/16
calico:功能强大,基于路由表进行转发,没有封装和解封装的过程。具备网络策略的配置能力。但是路由表维护起来比较复杂
模式:ipip模式和BGP模式
简单的小集群使用flannel即可
日后有扩容、配置网络策略选择calico
三、部署coredns组件:
1、概念
可以为集群中的service资源创建一个域名和ip进行对应解析的关系
service是对外提供访问的一个地址,现在加入DNS机制之后,可以直接访问它的服务名,
2、部署 CoreDNS
2.1、node节点操作
在所有 node 节点上操作
#上传 coredns.tar 到 /opt 目录中cd /optdocker load -i coredns.tar在 master01 节点上操作#上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNScd /opt/k8skubectl apply -f coredns.yamlkubectl get pods -n kube-system
DNS 解析测试
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
四、新master节点部署
1、部署配置
要先初始化,将上面的准备操作准备
从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root@20.0.0.62:/opt/scp -r /opt/kubernetes/ root@20.0.0.62:/optscp -r /root/.kube root@20.0.0.62:/rootscp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@20.0.0.62:/usr/lib/systemd/system/
修改配置文件kube-apiserver中的IP
vim /opt/kubernetes/cfg/kube-apiserverKUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://192.168.233.91:2379,https://192.168.233.93:2379,https://192.168.233.94:2379 \
--bind-address=192.168.233.92 \ #修改
--secure-port=6443 \
--advertise-address=192.168.233.92 \ #修改
在 master02 节点上启动各服务并设置开机自启
systemctl start kube-apiserver.servicesystemctl enable kube-apiserver.servicesystemctl start kube-controller-manager.servicesystemctl enable kube-controller-manager.servicesystemctl start kube-scheduler.servicesystemctl enable kube-scheduler.service
查看node节点状态
ln -s /opt/kubernetes/bin/* /usr/local/bin/kubectl get nodeskubectl get nodes -o wide #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
此时在master02节点查到的node节点状态仅是从etcd查询到的信息,
而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来
五、部署nginx实现负载均衡
配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
1、部署nginx
配置nginx的官方在线yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOFyum install nginx -y
//修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
stream {log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log /var/log/nginx/k8s-access.log main;upstream k8s-apiserver {server 20.0.0.61:6443;server 20.0.0.62:6443;}server { listen 6443;proxy_pass k8s-apiserver;}} #日志记录格式#$remote_addr: 客户端的 IP 地址。#$upstream_addr: 上游服务器的地址。#[$time_local]: 访问时间,使用本地时间。#$status: HTTP 响应状态码。#$upstream_bytes_sent: 从上游服务器发送到客户端的字节数。
检查配置文件语法
nginx -t 启动nginx服务,查看已监听6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx
2、部署keepalived服务
yum install keepalived -y
修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
创建nginx状态检查脚本
vim /etc/nginx/check_nginx.sh#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stopsystemctl stop keepalived
fichmod +x /etc/nginx/check_nginx.sh
启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
systemctl start keepalivedsystemctl enable keepalivedip a
3、测试
主nginx
ip addr
关闭主nginx测试高可用:
VIP漂移到备nginx上
测试故障恢复:
先启动nginx,再启动keepalived
VIP漂移回来了
修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/vim bootstrap.kubeconfigserver: https://20.0.0.100:6443vim kubelet.kubeconfigserver: https://20.0.0.100:6443vim kube-proxy.kubeconfigserver: https://20.0.0.100:6443
重启kubelet和kube-proxy服务
systemctl restart kubelet.servicesystemctl restart kube-proxy.service
在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
netstat -natp | grep nginx
在 master01 节点上操作
测试创建pod
kubectl run nginx --image=nginx
查看Pod的状态信息
kubectl get pods
kubectl get pods -o wide
READY为1/1,表示这个Pod中有1个容器
kubectl exec -it nginx bash
这时在master01节点上查看nginx日志
kubectl logs nginx-dbddb74b8-nf9sk
六、基于Web的Kubernetes用户界面--Dashboard
1、部署Dashboard:
仪表盘,kubernetes的可视化界面。在这个可视化界面上,可以对集群进行管理
安装dashhoard
在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8skubectl apply -f recommended.yaml创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-systemkubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin#获取token值
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
#使用输出的token登录Dashboard
https://20.0.0.63:30001
相关文章:
【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具
目录 一、K8S的网络类型: 1、K8S中的通信模式: 1.1、、pod内部之间容器与容器之间的通信 1.2、同一个node节点之内,不同pod之间的通信方式: 1.3、不同node节点上的pod之间是如何通信的呢? 2、网络插件一ÿ…...
Ubuntu 常用命令之 locate 命令用法介绍
🔥Linux/Ubuntu 常用命令归类整理 locate命令是在Ubuntu系统下用于查找文件或目录的命令。它使用一个预先构建的数据库(通常由updatedb命令创建)来查找文件或目录,因此它的查找速度非常快。 plocate 安装 locate 不是 Ubuntu 系统的原生命令/功能,要想在 Ubuntu 系统中…...
java中file类常用方法举例说明
java中file类常用方法举例说明 当使用 java.io.File 类时,以下是一些常用方法的举例说明: 创建文件或目录: // 使用路径名创建File实例 File file new File("C:\\Users\\UserName\\Documents\\example.txt");// 使用父路径和子路…...
机器学习分类模型
机器学习常见分类模型及特点 机器学习常见分类模型优缺点 决策树模型 决策树(Decision Tree)是一类常见的机器学习方法,可应用于分类与回归任务,这里主要讨论分类决策树。决策树是基于树结构来进行决策的。下图是使用决策树来决定…...
LaTeX符号大全:打破排版的边界
LaTeX符号大全:打破排版的边界 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一起探索一门极富表现力的排版艺术——LaTeX&…...
vue3-11
后端Java代码 src\router\a6router.ts文件 import { createRouter, createWebHashHistory } from vue-router import { useStorage } from vueuse/core import { Menu, Route } from ../model/Model8080 const clientRoutes [{path: /login,name: login,component: () > …...
【c语言】飞机大战2
1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话,…...
海康visionmaster-渲染控件:渲染控件加载本地图像的方法
描述 环境:VM4.0.0 VS2015 及以上 现象:渲染控件如何显示本地图像? 解答 思路:在 2.3.1 中,可以通过绑定流程或者模块来显示图像和渲染效果。因此,第一步, 可以使用在 VM 软件平台中给图像源模…...
【SD】一致性角色 - 同一人物 不同姿势 - 2
首先生成4张不同姿势的图片 masterpiece,high quality,(white background:1.6),(simple background:1.4),1gril,solo,black footwear,black hair,brown eyes,closed mouth,full body,glasses,jacket,long hair,long sleeves,lookig at viewer,plaid,plaid skirt,pleated shirt,…...
摩尔线程S80对于软件的支持
摩尔线程对软件的支持 时间:2024年1月1日 显卡型号:MTT S80 主板型号:七彩虹 igame z590 火神 V20 CPU: intel core i5 10400f 内存: 海盗船3600 16*2 存储: 致态1Tb nvme 显卡的驱动是最新的。 游戏 S…...
基数排序 RadixSort
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数 . 动态演示 :…...
Maven下载和安装的详细教程
文章目录 一、Maven下载和安装1.1 下载 Maven1.2 配置环境变量 参考资料 一、Maven下载和安装 1.1 下载 Maven 打开 Maven 的官方网站Maven – Download Apache Maven,下载最新版本的 Maven 在可选择的版本中,不同版本的区别在于: binary是已经编译过的…...
申请虚拟VISA卡Fomepay教程
fomepay 用下面的注册链接直达 https://gpt.fomepay.com/#/pages/login/index?dS21BA1 或者扫描下面图片的二维码直达注册 注册后尽量随用随充值不建议放大量现金在里面。...
java常见面试题:什么是装箱和拆箱?装箱和拆箱有哪些应用场景
装箱和拆箱是计算机科学中常用的术语,主要用于描述将数据从一种类型转换为另一种类型的操作。 装箱是将值类型转换为引用类型的过程。在装箱时,需要了解编译器内部的操作。首先,在托管堆中分配好内存,分配的内存量是值类型的各个…...
【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度
作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本文涉及的基础知识点 C算法:滑动窗口总结 字典树 map 离线查询 map map可以分成有序(单调)map和无序(哈希)map。还可分成单键map和多键map(允许重复的键)。本文用…...
机器学习部分相关概念
数据集(Data Set)即数据的集合,每一条单独的数据被称为样本(Sample)。 对于每个样本,它通常具有一些属性(Attribute)或者特征(Feature), 特征所具体取得值被称为特征值(Feature Value)。 西瓜数据集 色泽根蒂纹理青绿稍蜷模糊乌黑蜷缩清晰 …...
Apache DolphinScheduler 3.1.9 版本发布:提升系统的稳定性和性能
🚀我们很高兴宣布,Apache DolphinScheduler 的最新版本 3.1.9 已正式发布!此版本在 3.1.8 的基础上进行了关键的 bug 修复和文档更新,共计修复了 14 个 bug 和改进了 3 个文档。 主要更新亮点 本次更新重点解决了以下几个关键问题…...
go-carbon v2.3.1 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...
R_handbook_作图专题
ggplot基本作图 1 条形图 library(ggplot2) ggplot(biopics) geom_histogram(aes(x year_release),binwidth1,fill"gray") 2 堆砌柱状图 ggplot(biopics, aes(xyear_release)) geom_bar(aes(fillsubject_sex)) 3 堆砌比例柱状图 ggplot(biopics, aes(xyear_rele…...
关于Python里xlwings库对Excel表格的操作(二十五)
这篇小笔记主要记录如何【如何使用xlwings库的“Chart”类创建一个新图表】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2…...
2024 年软件工程将如何发展
软件开发目前正在经历一场深刻的变革,其特点是先进自动化的悄然但显着的激增。这一即将发生的转变有望以前所未有的规模简化高质量应用程序的创建和部署。 它不是单一技术引领这一演变,而是创新的融合。从人工智能(AI) 和数字孪生技术,到植根…...
【Git】git基础
Git 命令 git config --globle user.name ""git config --globle user.email ""git config -lgit config --globle --unset []git add []git commit -m ""]git log//当行且美观 git log --prettyoneline//以图形化和简短的方式 git log --grap…...
Linux中账号和权限管理
目录 一.用户账号和组账号: 1.用户账号类型: 2.组账号类型: 3.系统区别用户的方法 : 4.用户账号文件: 二.Linux中账户相关命令: 1.useradd: 2.passwd: 3.usermod:…...
Resnet BatchNormalization 迁移学习
时间:2015 网络中的亮点: 超深的网络结构(突破1000层)提出residual模块使用Batch Normalization加速训练(丢弃dropout) 层数越深效果越好? 是什么样的原因导致更深的网络导致的训练效果更差呢…...
Unity检测地面坡度丨人物上坡检测
Unity检测地面坡度 前言使用 代码 前言 此功能为,人物在爬坡等功能时可以检测地面坡度从而完成向某个方向给力或者完成其他操作 使用 其中我们创建了脚本GradeCalculation,把脚本挂载到人物上即可,或者有其他的使用方式,可自行…...
SASS循环
<template><div><button class"btn type-1">默认按钮</button><button class"type-2">主要按钮</button><button class"type-3">成功按钮</button><button class"type-4">信息…...
Java超高精度无线定位技术--UWB (超宽带)人员定位系统源码
UWB室内定位技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据,从而具有GHz量级的带宽。 UWB(超宽带)高精度定位系统是一…...
系列十一、解压文件到指定目录
一、解压文件到指定目录 1.1、需求 Linux的/opt目录有一个文件zookeeper-3.4.11.tar.gz,我现在想把该文件解压至/usr/local/目录,那么应该怎么做呢? 语法:tar -zxvf xxx -C /usr/local/ tar -zxvf zookeeper-3.4.11.tar.gz -C /u…...
PHP Swoole Client
PHP常用socket创建TCP连接,使用CURL创建HTTP连接,为了简化操作,Swoole提供了Client类用于实现客户端功能,并增加了异步非阻塞模式,让用户在客户端也能使用事件循环。 作为客户端使用,Swoole Client可以在F…...
《QDebug 2023年12月》
一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Q_REVISION 标记的信号槽或者 REVISION 标记的属性,在子类中访问 Q_REVISION 是 Qt 用来做版本控制的一个宏。以 QQuickWindow 为例,继承后去访问 REVISION 标记的 opacity 属性或者 Q_REVISION…...
wordpress函数表/百度手机助手苹果版
点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源简介: 表引擎在ClickHouse中的作用十分关键,直接决定了数据如何存储和读取、是否支持并发读写、是否支持index、支持的query种类、是否支持主备复制等。引言表引擎在ClickHouse中的…...
南通网站建设企业/服装品牌策划及营销推广方案
前言 想要通过java官网提供的java-1.0.2.jar 来解决音频文件wav 切割问题 下载 jar地址:JAVE - Download 安装 mvn install:install-file -Dfile/Users/chentong/Downloads/jave-1.0.2/jave-1.0.2.jar -DgroupIdjoinery -DartifactIdjave -Dversion1.0.2 -Dpackagingjar …...
济南建公司网站/谷歌推广教程
实现memcached的编译安装及将memcached添加为系统服务一.编译安装memcached[plain] view plain copy # yum install libevent libevent-devel -y //memcached借助libevent与客户端通信是来实现的,所以需要先安装libevent,libevent-devel # cd /usr/local/src # wg…...
wordpress虚拟币主题/怎么弄一个自己的网址
【摘要】2019年3月全国计算机等级考试即将开启,为了方便广大考生及时获取考试相关的信息,下面为您精心整理了2019年3月西北工业大学计算机等级考试准考证打印须知,希望广大考生及时关注,更多计算机等级考试的相关资讯,…...
wordpress 不同ip/有哪些网络营销公司
总览 #include <linux/module.h> int query_module(const char *name, int which,void *buf, size_t bufsize, size _t *ret); 描述 query_module请求和可加载模块有关的来自内核的信息.信息的细致的特性和格式依赖于 which参数,一些函数要求name参数来命名当前被加载的模…...
海淘网站建设的目的/阿拉营销网站
文本数据-转换编码-转成字节-发送数据转载于:https://www.cnblogs.com/mier001/p/4200419.html...