Advanced private K8S
之前又一次部署了k8s之后,还没真正开始使用,现在有机会了,要部署一个app,并发布到线上。
困难1:build for ARM64
找一个树莓派,或者M1电脑,或者在x64上折腾qemu模拟arm64,或者aws上开一个ARM64的VM。最后一个最好!
困难1-2:image registry
暂时放在了docker hub上,public repository,在ARM上编译完直接push到了docker hub。
困难2:CNI没成功
CNI是k8s的网络插件,在集群初始化后还需要选择一个CNI部署才能用k8s。然鹅我选择了Flannel这个CNI,需要在初始化k8s时指定pod network cidr,我肯定是没指定的,于是我又进行了一遍kubeadm init,就为了传这个参数
困难3:ingress
选了nginx-ingress,功能估计够用
困难4:load balancer
之前选的metallb,现在依然打算选这个
困难5:另一个网段
我想给k8s使用192.168.2.0/24这个段,而我家网络都在192.168.1.0/24中。所以需要BGP。主要参考了这篇文章:https://ieevee.com/tech/2019/06/30/metallb.html
一切准备完毕后,我已经可以通过 192.168.2.1来访问到nginx ingress了,然后就是让外网流量进来访问到nginx ingress。
在openwrt路由器上使用port forwarding,因为只能使用这个,或者可以把nginx ingress完全暴露给外部,完全暴露就是说,不管从外界访问到我的任何端口,都转发给nginx ingress,目前没有必要,因为我还把plex暴露出去,就使用的是特定端口暴露。所以我只把8088和8443转到了nginx ingress的80和443端口上。为啥是8088和8443?因为联通不让用80和443啊,还有8080也被封了。
困难6:TLS
装了cert-manager,加上letsencrypt,用DNS01作为验证方式,可以签发HTTPS证书了。
需要修改ingress

保存后certmanager就开始给签发证书了,但我遇到一个问题,cert manager无法拿到cloudflare api token,我把token放在了default namespace中的secret,但它需要被放在cert-manager namespace,或者要指定namespace。
困难7:zram
不知道什么时候,3个working node的swap都有了2g,让原本内存本就不富裕的rock64更加雪上加霜,后来发现是zram设置了4个用来swap的空间,各500mb,这让默认的k8s不能工作了,因为failSwapOn默认是true,代表了发现swap开着,就不启动。本想开启一下NodeSwap特性,但很麻烦。。。需要修改配置,修改启动参数,还是想着怎么把swap去掉吧,最终发现:sudo systemctl disable zram-config