kubernetes的又一次尝试

之前使用docker-swarm,刚开始觉得还不错,但发现经过一段时间后,或者timeout,或者内存过高崩溃,总之,各种各样。

因此,这段时间,我一直使用的是传统的方式,开了一大堆端口号。

这两天又重新拾起了kurbernetes, 使用的环境是ubuntu 16.04, kubeadm的版本是1.7.4。

整个的安装也还是哗哗的,很顺利的结束了。

calico的安装也是哗哗的,很顺利的样子。

pod 同样的结果。

开测!!!

悲剧的挂了,测试静态的页面访问,无问题,一切正常。

但涉及到数据库/redis就timeout了。看了日志,无法连接上。

进入容器,发现无法连接上数据库,redis,过程略,总之,无法连接主机所在的局域网上的主机,当然,除了部署所在的主机除外。

数据库在局域网上,redis也在局域网上。

calico查了许久,不知道如何解决。

iptables 看了下,这个我没有研究过,更加不懂。

总之,经过了一天的研究,反复重装了N次,一直如此。最后没办法了,iptables转发吧,这总可以了吧。

iptables转发很快的配置好了,在主机上测试,竟然不通,该开的都开了啊。

最终发现,这个测试不能在开转发本机上测试,使用其他主机访问转发的端口就无问题,但主机自身不可,泪奔阿。

然后,发现pod中也可以访问数据库了,也可以访问redis了,一切正常了。

从理论上而言,可能要将指定的端口打开,但我将iptables的所有的INPUT, OUTPUT, FORWARD都接受了,还是不可以。只有使用iptables转发指定的端口内容才可以。

总之,目前都正常了。小测了一下,在相同的环境下,和docker bridge的效率几乎不相上下,甚至会更好些。剩下的就看能撑多久了。之前测试时发现网络经常连着连着就不通了。这次还有待时间检验

docker-compose 奇怪的错误

在使用docker-compose的时候,突然碰到一个奇怪的错误:

Couldn’t connect to Docker daemon at http+docker://localunixsocket – is it running?

从网上找了个中方式都不行。

后来干脆忽视下,先整理目录。将docker-compose.yml中自动创建的data目录删除了。这个目录使我用来挂载到docker的container中的指定目录的。

然后, 之前的那个错误解决了!!!!

linux创建启动盘

  1. 磁盘必须具备 boot, lba标识
  2. 挂载(这里是第一个分区,fat32格式,磁盘沿用上一篇的磁盘镜像格式, 当前目录创建了一个boot的目录作为挂载点)
mount /dev/loop0p1 boot
  1. EFI可选,不知道具体效果,不知道如何测试区别
efibootmgr -w

其他的解释: 如果不做这一步,那么在主板 CSM 开启的混合模式下可能无法UEFI启动。

  1. efi 安装(需要64位efi安装的linux?),没有的话直接复制也可。efi的启动盘相对简单: 磁盘分区为boot+lba标识的fat32分区,自动加载efi/boot/bootx64.efi
grub-install --boot-directory boot/boot --efi-directory boot --removable /dev/loop0
  1. 由于第4步在efi平台只安装efi相关的内容,不将启动代码写入到相关的启动分区中,所以还需要在非efi启动的情况下重复第4点的操作。使用livecd也可以完成这一步
grub-install --boot-directory boot/boot --efi-directory boot --removable /dev/loop0
  1. 对于loop设备,比如目前用的其实是一个img文件,需要使用下面的方式
grub-install --boot-directory=boot/boot --efi-directory boot --removable --modules="ext2 part_msdos" /dev/loop0

注意第4点和第5点在不同环境下的输出

至此,同时支持bios和uefi的启动盘就制作完成了。

linux制作磁盘镜像

过程很简单,就几条语句

创建一个磁盘镜像

dd if=/dev/zero of=disk.img bs=512M count=1

如果不存在 /dev/loop0,一般都有

modprobe loop
losetup -f

关联loop0和镜像文件

losetup -Pf /dev/loop0 disk.img

然后可以将/dev/loop0作为普通磁盘磁盘一样进行操作。比如使用gparted进行操作

gparted /dev/loop0

取消关联

losetup -d /dev/loop0

绕口令: msys2中的emacs支持bash on windows的bash

这个是偶然发现的。

过程是这样的。

我知道emacs 25.2已经出来一段时间了。只是太忙,懒的换了。昨天有点时间,就决定升级下。

在gnu emacs的官方网站上,提到了msys2中如何安装emacs。

我在windows上用的是msys,大约是6年前左右的版本,现在是win10上的bash on windows的linux环境,因为很多脚本只能在完整的linux下运行,依赖太多。

msys2是个什么鬼,比msys更好吧,看着这么容易安装,就试试。

确实很容易安装,竟然有软件管理器,竟然可以安装emacs,试试。

安装后的emacs可以直接在windows上运行,非常不错。既然这样,我就将之前的emacs删除了,然后,将启动emacs的配置中关于msys的bash的路径删除了(exec-path),只所以删除,是因为我认为在msys2中安装的emacs已经解决了bash的问题,会使用msys2的bash了。

一个美丽的误会就这样产生了。

emacs启动的非常完美,shell的启动也非常的完美,但等等,为什么shell提示的路径是/mnt/c/work,而不是/c/work,而lsb_release -a出来竟然是ubuntu 16.04!!!.

然后,我可以在emacs的shell中运行我想要的任何命令。几乎和在linux上一样。

bash on windows在处理链接上,是有区别的。于是,我是用了下magit,或者直接用快捷键在emacs下调用make,发现emacs中提示的路径格式还是C:/这样的windows格式,于是,这种模式下就无法继续进行了。