Docker是容器,但容器不是Docker。Docker是containerd的上层应用,Docker的流行带动了容器技术的应用。单机服务编排,docker + docker-compose的组合足以支撑。对于集群管理,还是K8S更合适。K8S可基于docker引擎,也可直接基于containerd的容器引擎。K3S是K8S的精简版,基于containerd。

折腾笔记

  • K8S的架构很清晰:
    ETCD/SQLite(数据库)+ApiServer(接口)+Controller(控制器)+Kubelet(守护进程)+KubeProxy(网络服务)
  • 可以用kubeadm快速搭建k8s集群,需要将基础镜像替换镜像仓库,参考AKS on Azure China Best Practices
  • kubeadm搭建的集群,控制节点的主机有taint
  • 内网IP和Service的核心是基于KubeProxy控制的iptables规则
  • kubeadm初始化后,默认没有网络插件。安装网络插件(如Flannel)后DNS才会运行
  • Pod的流量通过Flannel转发,flannel会进行封包解包,从而实现跨主机,错误排查参考记一次flannel vxlan的debug过程
  • 公网组建K8S集群,可以但没必要(速度慢,不安全)。公网组建集群的核心是要让Flannel封包后发送的地址指向目的主机的公网IP。
    如果主机的公网IP跟内网IP不一致,参考Cloud floating IP persistent,将公网IP绑定到相应网卡上
  • 没有负载均衡器又想暴露主机端口的话,可以使用裸机负载均衡器MetalLB, bare metal load-balancer for Kubernetes
  • K8S官方Dashboard功能较少,且需要以HTTPS访问
  • Rancher是个功能完善的面板,但安装相对复杂
  • SSL证书的内容可以存为Secret并挂载到Pod内
  • 自动签发证书可以用Cert-Manager,目前对阿里DNS支持不太好
    可以用acme.sh签发证书,并通过钩子保存成Secret
  • 要求不高的话k3s比kubeadm更好用
  • 单主机“集群”的效率比直接用docker低,耗费的资源更多

参考文章