本地用vagrant和ansible搭建k8s集群踩的坑
2019-11-10 本文已影响0人
无知者云
源代码请访问:https://github.com/davenkin/local-k8s-cluster
- 国内无法下载k8s,解决办法:采用阿里的源解决:
- name: add Kubernetes apt-key
apt_key:
url: https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
state: present
- name: Add Kubernetes' APT repository
apt_repository:
repo: deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
state: present
- vagrant为每台机器都配置了NAT对应的IP地址,所有机器都为
10.0.2.15,并且是k8默认识别的IP,导致很多k8s的服务都绑定到了这个地址,这也是很多问题的源头。 - 在
sudo kubeadm init --pod-network-cidr=10.244.0.0/16时,没有加--apiserver-advertise-address=非10.0.2.15的IP地址参数,导致api server监听了该默认的10.0.2.15地址,而该地址只有本地才能访问,因此其他woker在kubadm join时无法成功。解决方法:加上apiserver-advertise-address参数,比如:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.28.128.228
- 所有Node的INTERNAL-IP均为默认的
10.0.2.15,导致集群无法工作。通过kubectl get nodes -o wide可以查看。解决办法:修改所有机器上的kubelet配置:
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
添加:
Environment="KUBELET_EXTRA_ARGS=--node-ip=[ip from above, e.g. 172.28.128.228]"
到:
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_EXTRA_ARGS=--node-ip=[ip from above, e.g. 172.28.128.228]"
然后重启kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
更多相关信息,参考这里。
- Flannel默认情况只能使用
10.244.0.0/16网段,使用网段将报错。解决办法:在创建集群时只能使用:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.28.128.228
- Flannel默认情况也使用了
10.0.2.15,导致跨node之间通信不成功,解决办法:
在master节点上,先删除掉之前的Flannel:
kube delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后下载Flannel配置文件:
curl -o kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
添加iface=enp0s8到kube-flannel.yml文件中,如下:
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.10.0-amd64
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=enp0s8
这里的enp0s8为你要使用的IP地址所对应的网卡名称,通过ifconfig -a可以查看。
另外,安装cluster之前需要做的:
- 所有node禁用SELinux
setenforce 0
- 禁用swap分区
swapoff -a
或者直接编辑/etc/fstab文件,永久删除swap行。
- 禁用防火墙
对于centos:
systemctl disable firewalld
systemctl stop firewalld
对于ubuntu:
sudo ufw disable
- 更新Iptables
对于centos:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system