今天使用vmware16 +ubuntu20.04搭建单节点 kubernetes 1.22.2,踩了不少的坑,记录一下,希望能帮到大家。
先看一篇高质量的参考:
搭建目标:
在笔记上,通过wmware16,使用4台虚拟机(一台centos 7.9, 3台ubuntu 20.04)搭建k8s集群。涉及两个网络:
- 114网(内网):用于K8S集群,用于站内流量传输。
- 43网:用于上互联网,3台ubuntu 20.04为k8s集群机器,安装过程中可以连接互联网。
另外,在K8S集群外多搭建一台机器,名为:workstation, 用于
- 起到集群网关、防火墙的作用。
- 安装harbor,用于存放镜像。
网络拓扑图
搭建步骤:
详细的步骤就不写了,大致步骤如下:
- 第1步:打开手机热点。
这是一句正确的废话。
- 第2步:笔记本电脑连接热点后,设置其固定IP为:192.168.43.111.
在DOS中执行:ipconfig查看。
- 第3步:在vmware 16中创建1个虚拟机网络: 114网段,采用"仅主机模式"。
注意:43网是互联网,不用创建虚拟机网络,创建虚拟机时直接使用桥连模式即可。
完成后,笔记本window 10 的IP如下:
- 第4步:搭建workstation机器(这一步可选)。
这是我第3次搭建k8s集群,之前已经有一台centos 7 (主机名:workstation, 192.168.114.100/24),上面已经搭建了GitLab, Jenkins, Harbor-2.4等。Harbor上面存放了我很多已下载好的镜像,所以,我这次可以直接拿来用。
截图如下:
- 第5步:下载IOS.
下载地址:Ubuntu 20.04.4 LTS (Focal Fossa)https://releases.ubuntu.com/20.04/下载完成后如下:
- 第6步:在vmware16中,安装一台ubuntu20, 作为master节点。
网络设置下如:
在安装时,设置好一个固定的IP地址(192.168.114.30),43网段的使用dhcp协议,自动获取IP。
网络配置:
设置主机名为:u20-m
- 第7步:在master节点中,进行各种设置,包括:路由,root用户可以直接登录等。设置好后,master的路由如下:
路由教程,可以参考我这个文章:
查看一下网络设置的效果:
验证一下,确保master是可以上网的。
- 第9步:安装docker(master节点)
执行:
配置:
跑一个hello-world, 确保docker能拉镜像,能跑。
Harbor私服测试:
- 第7步:安装kubectl, kubelet等(master节点,主机名u20-m),指定版本号为:1.22.2-00
apt-get install -y kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00
- 第8步:在vmware克隆master节点,创建两台worker(主机名:u20-1, u20-2)
- 第9步:配置u20-1, u20-2网络:
- 第10步:准备一份kubeadm.yml文件,注意红框的设置。
注意:上图中,那个taints污点,我设置了master节点不参与POD调度。你可以根据你的需要,进行调整。
- 第11步:执行kubeadm init(master节点)。
kubeadm init --config=kubeadm.yml
- 第12步:使用kubeadm join,把另外两台加入到集群中。
- 第13步:安装calico网络
下载yaml文件:
$ wget -O 1-tigera-operator.yaml https://docs.projectcalico.org/manifests/tigera-operator.yaml
$ wget -O 2-custom-resources.yaml https://docs.projectcalico.org/manifests/custom-resources.yaml
修改:
执行:
kubectl apply -f 1-tigera-operator.yaml
kubectl apply -f 2-custom-resources.yaml
另外一份 1-tigera-operator.yaml有几千行,就不粘出来了,给大家看一下它的基本信息吧。
你可以在我的GITEE上找到这两份yaml文件:
https://gitee.com/wqhn2020/calico/blob/master/calico-v3.22.2/2-custom-resources.yaml
- 第14步:验证.
所有节点状态都是Ready。
所有pod都是Running状态:
问题:
问题1:多条default(0.0.0.0)路由,导致不能上网。
这是因为在安装ubuntu时,不小心多设置导致, 注释不需要用的网卡的gateway:
问题2: 安装指定的软件版本:
问题3. ubuntu开机等待网络设置问题
开机时,出现以下任务,等待约2分钟
解决办法如下:
问题4:安装完成后,win10不连接手机热点,43网段无法使用,将会导出calico的pod出现运行时错误。
问题原因:路由规则设置不对,导致数据包仍依赖43网段。
有两种解决办法:
解决办法1(推荐):修复各个节点的路由配置,尤其是default路由,使得所有数据包都从192.168.114.x网段出去。以master节点为例(其他workder节点配置类似)。操作步骤如下:
首先,设置网卡。
然后,在下面的文件中进行配置默认路由:
最后,重启。
重启后,效果路由表及网卡配置如下:
解决办法2:使用vmware的网络功能重新创建43网,然后在linux中设置固定IP。
修改原来的43网卡:
添加一张新网网卡:
完成后,master节点有3张网卡:
master节点的路由,应该是由手机热点的那张新网卡出去。
验证一下,确保两张新旧网卡都能正常工作:
问题5:如果k8s或calico插件安装失败,如何删除重来?
在master及所有worker节点上执行:
kubeadm reset -f
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd/
rm -rf /var/etcd
rm -rf $HOME/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/cni
rm -rf /opt/cni
然后回到kubeadm init那一步重新开始。
问题6:kubectl 或kubelet版本过高,与k8s数据平面对不上,怎么解决?
解决办法:
把旧的卸载了,然后指定版本安装:
apt-mark unhold kubelet kubeadm kubectl
apt-get remove -y kubelet kubeadm kubectl
apt-get install -y kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00