k8s开发环境准备 - 如何配置开发环境

下载源码 根据kubernetes github 方式可以 text 1 2 3 4 5 mkdir -p $GOPATH/src/k8s.io cd $GOPATH/src/k8s.io git clone https://github.com/kubernetes/kubernetes cd kubernetes make 如果有需要可以切换到对应的版本进行学习或者修改,一般kubernetes版本为对应tag text 1 2 3 git fetch origin [远程tag名] git checkout [远程tag名] git branch 配置goland kubernetes本身是支持 go mod 的,但源码这里提供了所有的依赖在 staging/src/k8s.io/ 目录下,可以将此目录内的文件复制到 vendor下。 bash 1 cp -a staging/src/k8s.io/* vendor/k8s.io/ 对于 k8s.io/kubernetes/pkg/ 发红的(找不到依赖的),可以将手动创建一个目录在 vendor/k8s.io/ 将克隆下来的根目录 pkg 复制到刚才的目录下。 goland中,此时不推荐使用go mod模式了,这里goland一定要配置GOPATH的模式。对应的GOPATH加入 {project}/vender即可。 这里可以添加到 goland中 project GOPATH里。

 ·  · 

通俗易懂的dbus数据结构

DBus中也是类似于静态语言,使用了“强类型”数据格式。在DBus上传递的所有数据都需要声明其对应的类型,下面整理了下,DBus中的数据类型,以及在DBus中声明的数据类型是什么意思。 dbus类型 说明 s string 字符串类型,可以声明 s: a array 数组,可以声明为 a: v variant,variant:: () 结构体,声明时为双括号中间的为类型,可以是多个,例如(ss) 即这个结构体内包含两个字符串属性 b 布尔值 SIGNATURE signature类型 y BYTE d DOUBLE t UINT64 x INT64 u UINT32 i INT32 q uint16 n INT16 {} 词典,这里声明为两个括号,中间为其对应的 key value,例如 {sv} 即 key是字符串类型,value是variant类型。 o OBJECT_PATH 对象路径 a{sv} : 是一个数组,为 一个键值对的词典,里面仅有一个 (ssssa{ss}as) 为一个结构体, 里面属性有7个 两个词典(数组),五个字符串类型 (sssbsasa(ss)asba(ssss)asasasasa(ss)b) 这个类型拆开为下:共16个属性 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ( s string s string s string b bool s string as array only one string a(ss) two string type in the array as array only one string b bool a(ssss) four string type in the array as array only one string as array only one string as array only one string as array only one string a(ss) two string type in the array b bool ) 对上述类型,python中就可以很灵活的声明...

 ·  · 

使用firewalld dbus接口配置iptables

firewalld,一个基于动态区的iptables/nftables守护程序,自2009年左右开始开发,CentOS7基于 firewalld-0.6.3 , 发布于2018年10月11日。主要的开发人员是托马斯·沃纳,他目前为红帽公司工作。这是因为为Federal 18 的默认防火墙机制, 随后在 Rhel7 和 Centos 7 中使用。 firewalld比旧的 iptable 机制有许多优势。值得注意的是,它解决了 iptable 要求每次更改时重新启动防火墙的问题,从而中断了任何状态连接。它还提供了丰富的 D-Bus 方法、信号和属性。 这里并不是从firewalld操作使用方式来介绍firewalld的改名,想反,是介绍firewalld D-Bus API来检索信息或更改设置。 firewalld被配置为系统 D-Bus 服务,注意看 systemd file中的" Type=dbus “参数。 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ cat /usr/lib/systemd/system/firewalld.service [Unit] Description=firewalld - dynamic firewall daemon Before=network-pre.target Wants=network-pre.target After=dbus.service After=polkit.service Conflicts=iptables.service ip6tables.service ebtables.service ipset....

 ·  · 

Linux高级IPC - DBus

What is IPC IPC [Inter-Process Communication] 进程间通信,指至少两个进程或线程间传送数据或信号的一些技术或方法。在Linux/Unix中,提供了许多IPC。Unix七大IPC: Pipe:无名管道,最基本的IPC,单向通信,仅在父/子进程之间,也就是将一个程序的输出直接交给另一个程序的输入。常见使用为 ps -ef|grep xxx FIFO [(First in, First out)] 或 有名管道(named pipe):与Pipe不同,FIFO可以让两个不相关的进程可以使用FIFO。单向。 Socket 和 Unix Domain Socket:socket和Unix套接字,双向。适用于网络通信,但也可以在本地使用。适用于不同的协议。 消息队列 Message Queue: SysV 消息队列、POSIX 消息队列。 Signal: 信号,是发送到正在运行的进程通知以触发其事件的特定行为,是IPC的一种有限形式。 Semaphore:信号量,通常用于IPC或同一进程内的线程间通信。他们之间使用队列进行消息传递、控制或内容的传递。(常见SysV 信号量、POSIX 信号量) Shared memory:(常见SysV 共享内存、POSIX 共享内存)。共享内存,是在进程(程序)之间传递数据的有效方式,目的是在其之间提供通信。 每种IPC都有不通的特点,每种方式对资源的使用及性能都是不通的 管道 I/O是最快的,但为单向通信,需要工作在 父/子 进程关系之间。 UNIX 套接字可以在本地连接不同的进程,并且具有更高的带宽,并且没有固有的消息边界。 TCP/IP套接字可以连接任何进程。并且可以通过网络连接,但是对资源会有更多的开销,同样的没有固定的消息边界。 Reference comparsion Unix/Linux IPC What is D-Bus 提到,D-Bus就不能不提一下freedesktop,而 D-Bus 仅仅作为freedesktop.org的一部分。 D-Bus 桌面总线 (Desktop Bus),的简写,也是Linux- IPC机制,不同于Unix 7大基础IPC的是,D-Bus是在这些IPC类型之上实现的中间件IPC,D-Bus使用了基础IPC中一种过多种,其设计的目的是在Linux桌面环境,提供服务的标准化。但目前并没有合入主线内核中。 作为中间件IPC,D-Bus的性能较低与其他IPC模式,因为在通信过程中会进行很多上下文切换,如果通过Dbus来发送消息,会先将其发送到内核,然后将其送回D-Bus。AF_BUS 补丁是新的套接字类型,用来减少D-Bus上下文的切换。 更多可参考:https://en.wikipedia.org/wiki/D-Bus D-Bus组成 D-Bus是 一个IPC的实现方式,在架构上分位三层。 Layer 1 libdbus:freedesktop机构提供的一个免费开源的一个由C语言编写的 low-level API 。是提供dbus功能的库。是高级API绑定的低级API。 Layer 2 dbus daemon:dbus实现的IPC守护进行,随Linux启动,通过不通进程对其的连接,实现了多进程间消息的路由(包含内核、网络、桌面等) Layer 3 Wapper libraries (high-level API): 对 low-level API libdbus的封装 ,例如 libdbus-qt libdbus-python github....

 ·  · 

elasticsearch mapping

索引管理 创建索引 直接创建索引 PUT newindex1,创建索引可以通过 number_of_shares 和 number_of_replicas 数量来修饰分片和副本的数量。 text 1 2 3 4 5 6 7 8 9 PUT newindex { "settings": { "index" : { "number_of_shares" : 2, "number_of_replicas": 1 } } } number_of_shares 分片数在创建索引后不能修改 number_of_replicas 副本数可以随时完成修改 删除索引 DEL index_name 打开/关闭索引 POST {index_name}/_close POST {index_name}/_open 关闭的索引无法进行【增删改查】操作 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "error" : { "root_cause" : [ { "type" : "index_closed_exception", "reason" : "closed", "index_uuid" : "3eCslZZ3Q9amlUyDtqTXWA", "index" : "newindex" } ], "type" : "index_closed_exception", "reason" : "closed", "index_uuid" : "3eCslZZ3Q9amlUyDtqTXWA", "index" : "newindex" }, "status" : 400 } 索引的映射 mapping mapping是定义文档及包含字段的存储与索引方式。可以理解为是elasticsearch的表结构,定义mapping,即在创建index时,自行判断每个字段的类型,而不是有ES自动自动判断每个纬度的类型。这种更贴合业务场景,如分词、存储。...

 ·  ·