cgo静态编译

go的非常大的优势在于编译后是无依赖的,然而,如果go里面掺杂了c的代码(多半是要借助现有的c的类库),编译后的程序就有依赖了,就不能随便拿走运行了,还要安装依赖才能运行。

其实,c的程序也可以运行时无依赖的,就是所谓的静态编译,这个需要依赖库提供静态库文件;于是,cgo也能静态编译,使得编译后的程序无依赖。

尽管如此,静态编译是稍微麻烦一些的,所有的依赖库都需要有静态库文件,最终可能还是编译失败。

尝试一下mylg的静态编译:

该工具依赖了libpcap

python 包管理工具之pip简介

  1. 安装python包
  2. 查看已安装的python包
  3. 显示指定包信息
  4. 查看指定包包含的所有文件的列表(以及包信息)
  5. 卸载包
  6. 搜索包
  7. 查看帮助
  8. 命令行自动补全
  9. 查看当前已安装包和版本号
  10. 检查已安装包完整性
  11. Done

相关问题:

  1. pip install aliyuncli 后发现依然没有aliyuncli命令
    1. 查看aliyuncli安装到哪里了
    2.  查看安装包中有没有aliyuncli这个命令(肯定是有的)
    3. 基本可知,aliyuncli相关命令安装在了 /home/phpor/.local/bin 下面,该路径应该没有在$PATH中,添加到$PATH就行了
    4. Done

Kubernetes,微服务以及 Service Mesh_Kubernetes中文社区

https://www.kubernetes.org.cn/2737.html

  • 软件开发的历史轨迹
  • sidecar模式的历史和现在
  • Kubernetes 提供了 ServiceAccount 的机制,自动在容器中注入调用 Kubernetes API 需要的 token,应用代码中无需关心认证问题,只需要部署的时候在 yaml 中配置好合适的 ServiceAccount 即可。这个是使用了指定的lib了吧,查一下
  • 方便选举
  • 对应dubbo的服务注册与发现最好也能支持k8s
  • 关于istio

Virtualbox 网络管理

场景:

如何实现Windows机器上配置多个IP地址?

 

思考:

Linux上可以通过ip命令创建各种虚拟设备、子设备、配置IP等; Windows上如何实现呢?

 

Virtualbox 可以帮助我们实现这个,不仅可以配置虚拟机内部的网络,也可以给宿主机添加虚拟网络设备,不必为了拥有一个单独的IP就去启动一个虚拟机。

操作方法:

图形版本:

  1. 打开virtualbox管理器,菜单【管理】 =》 【主机网络管理】:

    这里可以添加、删除、编辑虚拟网卡,这些网卡可以是同一个网段,也可以不是同一个网段
  2. 命令行版本:
    1. 添加:
      vboxmanage hostonlyif create

      是的,不需要任何参数了,创建完了不符合口味的话,可以再编辑

    2. 查看:
      vboxmanage list hostonlyifs
    3. 编辑:
      vboxmanage hostonlyif ifconfig <name> --ip 1.2.3.4 --netmask 255.255.255.0

      –netmask 缺省为 255.255.255.0

    4. 删除:
      vboxmanage hostonlyif remove  <name>

Powershell 命令行模式

在Powershell中设置:

使得Powershell中可以:

  • ctrl – D :  退出
  • ctrl – W:删除一个词
  • ctrl – A: 跳到行首
  • ctrl – E: 跳到行位
  • 等等,和使用bash的快捷键很相似了

 

话说,上面那行在哪里设置?

就是Powershell中直接输入: $PROFILE 回车,就是这个文件

 

参考:

rancher添加etcd节点的问题

rancher集群初始状态:

1个 master + etcd +worker

1个worker

kube-apiserver进程为:

etcd进程为:

修改:

添加一个 etcd + master,上面的进程为:

kube-apiserver:

etcd进程:

 

出现的问题:

  1. 原有的etcd进程要将新的etcd添加到集群中,但是,报错为:
  2. 由于添加出错,原有的etcd就不断尝试添加,但是该过程中2379的端口是不listen的,由于etcd出现问题,原有的kube-apiserver也就没法正常工作,所以,就算想删除新加的节点也是无计可施;
  3. 如何让etcd放弃添加新节点呢?
    这个问题的重要原因在于etcd节点从单节点扩展到双节点,两个节点是最不好的集群,其中一个出问题,另一个没法说了算

rancher 2 etcd节点扩展为3 etcd节点:

  1. 新etcd节点由于也属于集群节点,所以,需要部署 kubelet、kube-proxy、flannel,非master节点还需要部署nginx-proxy
  2. 新etcd节点上etcd的启动参数都没有问题,但是,还是报cluster ID mismatch,不过,容器中执行:

    后,重启容器就OK了
    总之,没有顺利扩展出来etcd节点过
  3. 虽然我们可以不使用rancher的办法扩展etcd节点,但是,由于rancher自动维护etcd节点添加到kube-apiserver的命令行参数里面,所以,自己手动扩展的etcd并不会被用上
  4. 3个etcd节点停掉一个的时候,etcdctl member list 看不到节点停掉的状态

思考:

  1. etcd新节点启动的时候应该  –initial-cluster-state=existing 才对吧? 否则,它怎么能知道自己需要加入到别的集群呢?
  2. 由于etcd新节点设置了  –initial-cluster-state=new ,而且初始的集群成员只有自己:

    所以,理所当然地启动起来就可以工作了,自己就是一个全新的集群了
  3. 由于新节点上kube-apiserver配置的etcd后端就是etcd新节点,所以,kube-apiserver 也不知道自己是需要维护原有集群,而不是新建集群的,所以就直接访问新的etcd开始初始化一个新的集群了
  4. 所以,rancher这里实现的是不是有问题?

WSL 共享ssh key

通过/etc/wsl.conf修改mount方式:添加 metadata选项

默认mount:

修改后:

原理:

本来,Windows的文件系统和Linux的文件系统是不一样的,Linux的文件的权限在Windows上是没有的,通过一个metadata选项就磨平了这个问题。

参考: