背景
Vagrant是VM的的管理工具,利用Vagrantfile配置文件可以方便创建管理VM镜像。
Kubeadm是Kubernetes官方推荐的K8S环境搭建工具,将K8S中的各个组件容器化提供服务。
尽管利用单节点的Minikube也可以学习,但某些场景终究无法满足要求,我们期望K8S集群部署在不同的机器上,
成本最低的便是利用VM搭建K8S集群,依靠如下文档完成K8S集群搭建。
https://kuboard.cn/install/install-k8s.html
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
环境
Cloud provider : local VirtualBox machines managed with Vagrant
OS : Centos 7.04 (VMs) Win10(Host)
Kernel (e.g. uname -a):Linux k8s-master 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Install tools: kubeadm v1.15.2
Others: Vagrant
问题
按上述文档安装过程中,遇到如下问题
calico pod 状态为CrashLoopBackOff,导致cni失败,进而导致Kuboard安装失败
查看资料发现是VM IP地址冲突导致。由于Virtualbox默认采用NAT模式,默认的eth0 的IP地址都是10.0.2.15,采用kubeadm init ,kubeadm join 默认使用eth0的地址,导致master, nodes的地址都是10.0.2.15,进而导致calico出现了问题。
解决
1. 创建VM时,为VM配置host-only private IP, 并将各个VM的地址写入/etc/host
例如:/etc/hosts
192.168.0.6 k8s-m
192.168.0.11 k8s-n1
192.168.0.12 k8s-n2
2. kubeadm init 和 kubeadm join时指定host-only的private IP
Master:
kubeadm init --apiserver-advertise-address=192.168.0.6 --apiserver-cert-extra-sans=192.168.0.6 --node-name k8s-m --pod-network-cidr=10.100.0.1/20 --upload-certs
Node:
kubeadm join 192.168.0.6:6443 --token 9vzg0l.u7r6f0prf1db70ik --discovery-token-ca-cert-hash sha256:d9199d91c1b0e08876582da7d0bd4a9e1d4c780fda8b0c50508ade5dbd8fed6f --node-name k8s-n1