环境:
Windows 10, vmware 16, CentOS 8
新人小白,从头开始,网上各种教程尝试,解决无数问题,一点一点摸索出来的结果。
3个虚拟机:
k8smaster | 192.168.137.10 | |
k8snode1 | 192.168.137.11 | |
k8snode2 | 192.168.137.12 |
虚拟机安装:
这个不细说,大家随意找教程,默认安装即可。先安装k8smaster。
注意事项:
这里安装完成后,不要着急配置,先处理一下网络。
在vmware的网络配置里修改vmnet1,ip设置为192.168.137.0 (重要,否则虚拟机无法上网,注意vmnet1是host only的模式,或者叫仅主机)
(菜单:编辑-->虚拟网络编辑器)
我这里自己创建了vmnet2,效果一样,注意网络选择192.168.137.0即可。
接下来在虚拟机的属性里将网络选择为vmnet1。下图(我自建了vmnet2,各位改成自己的vmnet1即可)
下一步也是重点:
打开windows的网络连接,打开vmnet1的网络,查看对应的ip,如果不是192.168.137.1,最好在前面重新创建vmnet2。如果提示ip冲突,将原有的vmnet1的ip改掉,再修改vmnet2的地址到137段。那以上以及以下的步骤的设置同时修改为vmnet2。
以上确认没问题了以后,打开你的主网络(联网能上网的网卡的ip),配置网络共享。
需要注意的是这里,如果上面配置的不是192.168.137网段,这里会强制修改,导致虚拟机不能上网。这里折腾了好久。另外这边网络共享一直不好用,也折腾了好久,最后是发现windows宿主机的防火墙没关,关掉防火墙就好用了。
以上,网络配置完成。
CentOS安装完成后,这样就可以从centOS里面上网了。包括ping,wget都可以ok。
可以测试几个点:
在CentOS内(k8smaster):
ping 192.168.137.1 (ping自己的网关)
ping 192.168.2.96 (这是我的windows主机ip,centos里也能ping通)
ping 192.168.2.1 (这是我主机的网络的网关,路由器网关,可以ping通)
ping www.baidu.com (这样外网能通,dns也ok啦)
安装完成后,用vmware的功能clone出来两份,分别放到k8snode1和k8snode2目录中。
登录的时候名字不对,可以修改一下:
下一步,在CentOS内将网络修改为静态IP地址。(3个环境都修改)
[#####@localhost ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth1
HWADDR=00:0C:29:BD:6B:EF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=7cc964a2-f6c9-4a0a-a24c-43fdfbb489e0
ONBOOT=yes
IPADDR=192.168.137.10
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=192.168.2.1
主要是 BOOTPROTO,从dhcp修改为static,然后加上最后4行。这是master的修改,另外给k8snode1和k8snode2分别修改,注意IPADDR按照文章最上面的ip写。别写错了。CentOS8的网络重启命令不太好用,干脆重启一下好了。另外用nmcli再次double check一下。
接下来挨个机器都配一下hostname
>hostnamectl set-hostname master
>hostnamectl set-hostname node1
>hostnamectl set-hostname node2
到此为止,几个主机配置就算完成了。
接下来进入正题,开始安装k8s。
主体我是参考的这篇文章,非常详尽。不过稍有过时,有些步骤不太一样
https://blog.csdn.net/witton/article/details/107085155
我的centos8没有podman(以下一连串的sudo操作,大家可以先su一下)
[root@master xxxxx]# sudo yum remove podman
No match for argument: podman
No packages marked for removal.
Dependencies resolved.
Nothing to do.
Complete!
关闭交换分区,并永久关闭,把/etc/fstab中的swap注释掉
sudo swapoff -a
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
关闭并永久禁用selinux
setenforce 0
sudo sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
关闭并停用防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
将如下内容保存到:/etc/yum.repos.d/kubernetes.repo
确认了一下,目前确实还没有8的,还是得用7代替。
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
原作者这边发现一些问题,花费不少精力解决,但我这边很顺利全部完成,没任何问题。看一下版本:
[root@master xxxxxx]# docker --version
Docker version 20.10.5, build 55c4c88
安装kubectl、kubelet、kubeadm,设置kubelet开机启动,启动kubelet。
sudo yum install -y kubectl kubelet kubeadm
sudo systemctl enable kubelet
sudo systemctl start kubelet
查看K8S版本以及安装结果
这边记住版本号,我这里安装的是1.20.4,后面要用到
这块没弄太懂,是挨个node执行啊,还是怎么弄,先挨个执行看看。
在这个之前,再确认几个事,我安装到这里也出现几个问题
1. 上面我安装docker没问题,就给跳过去了,但还是做一下
为了docker加速pull,设置阿里云加速:(否则后面kubernetes就下载很慢了)
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
文件内容:
{
"registry-mirrors" : ["https://mj9kvemk.mirror.aliyuncs.com"]
}
然后设置Cgroup为systemd。
编辑文件/usr/lib/systemd/system/docker.service
在ExecStart命令中添加 --exec-opt native.cgroupdriver=systemd
启动docker,查看Cgroup
systemctl daemon-reload
systemctl restart docker
docker info | grep Cgroup
如果docker没启动,启动一下
systemctl start docker.service
可以看到你的Crgroup已经是systemd了。
网络用原作者大大给的,就10.18段了。
kubeadm init --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=127.0.0.1 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.4 --pod-network-cidr=10.18.0.0/16
另外我这里还碰到一个问题,还不知道有没有影响。有个warning说docker版本太高了,最高只支持19.03
然后执行系统提示的内容:
接下来完全按照原作者大大的内容走
执行提示中的命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后看结果啦
kubectl get node
kubectl get pod --all-namespaces
发现node节点是NotReady,继续。因为coredns pod没有启动,缺少网络pod。
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
然后我发现这个命令也跑半天,然后告诉我无法建立ssl连接。干脆,翻个墙,宿主机拿下来,用文件共享放到CentOS上,然后直接执行命令跑本地文件(vmware的文件供共享,不多讲,到CentOS的这个位置找:/mnt/hgfs/Download,我给download目录给share过来了)
cd /mnt/hgfs/Download
kubectl apply -f calico.yaml
贴一下calico.yaml文件内容,太巨大了,看这里。上面步骤完事后,等几分钟,再执行kubectl get node,可以看到node起来了。
https://mp.csdn.net/editor/html/114502139
一步步照着做
recommended.yaml地址如下:https://mp.csdn.net/editor/html/114502391
一样用共享文件的方法放到CentOS中去。文件是修改后的版本,加上了nodePort配置。
然后创建POD,并查看kubernetes-dashboard
kubectl create -f recommended.yaml
kubectl get svc -n kubernetes-dashboard
这个地方跟原作者的有一点不一样,我没太弄明白,原作者的ip都是10.10段的,我这边是一个10.98段,一个10.100段,不知道有没有影响。
但到此为止,我们可以在windows宿主机上看网页啦,试试看。
https://192.168.137.10:30000/#/login
如果打不开,刷刷一下命令,直到所有节点都启动。我这边被卡在calico和dashboard启动不了,一直提示pullimagebackoff,最后通过kubectl delete -f recommended.yaml文件删除了最后2个deployment,又重新kubectl apply -f recommended.yaml,又等了一会才启动。
[root@master Downloads]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-6949477b58-2qw8f 1/1 Running 0 57m
kube-system calico-node-4rxkk 1/1 Running 0 57m
kube-system coredns-7f89b7bc75-8cs8s 1/1 Running 0 79m
kube-system coredns-7f89b7bc75-qs4wr 1/1 Running 0 79m
kube-system etcd-master 1/1 Running 1 80m
kube-system kube-apiserver-master 1/1 Running 1 80m
kube-system kube-controller-manager-master 1/1 Running 1 80m
kube-system kube-proxy-9b6q2 1/1 Running 1 79m
kube-system kube-scheduler-master 1/1 Running 1 80m
kubernetes-dashboard dashboard-metrics-scraper-79c5968bdc-nfvpz 1/1 Running 0 38s
kubernetes-dashboard kubernetes-dashboard-9f9799597-7ffc4 1/1 Running 0 38s
到此为止,master已经完成。
继续
昨天master完成,全部可以访问。windows宿主机在浏览器里输入地址已经可以打开k8s的登录页面。
今天就尝试一下node的部署。
因为之前的操作还是比较繁琐,我就尝试了一下将master虚拟机进行复制。这个简单说,在vmware里创建了一个快照,防止以后出问题时可以快速恢复。然后基于快照复制一份,起名k8snode4 (因为前面使用了node1和node2,所以这里用个新的),注意存放目录也修改成对应的k8snode4。
然后记得在k8smaster里做一件事:hosts里加上node4
>sudo vi /etc/hosts
192.168.137.14 node4
然后启动k8snode4,进入系统后做以下几件事:
hosts文件里加上node4
主机改名成node4
登录界面的名字改成node4
上面3个前文都有描述,翻一下,就不详细描述了。
ip地址配成192.168.137.14,这个稍微详细说一下。用vi打开,修改mac地址和ip地址,ip地址修改为对应mac地址(到vmware的网络你找你这个虚拟机的mac地址),ip地址填192.168.137.14
完成后最好重启一下k8snode4,然后检查一遍,没问题后继续。
到master上执行命令,获取node加入cluster的命令。注意这段别照抄我的,会出错的。你执行了这个指令后,用这个指令返回给你的信息。
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.137.10:6443 --token qgfftl.m5kwxe87ozghabtp --discovery-token-ca-cert-hash sha256:5b3a5c0a6b15c93c7e7821dccddfcc59b1eedd0e0f63786e4c668edf0d00c598
k8snode4上:
因为是从master上clone过来的系统,所以k8s的内容都在,所以要清理一下,然后再加入cluster上作为node使用
>kubeadm reset
>kubeadm join 192.168.137.10:6443 --token qgfftl.m5kwxe87ozghabtp --discovery-token-ca-cert-hash sha256:5b3a5c0a6b15c93c7e7821dccddfcc59b1eedd0e0f63786e4c668edf0d00c598
等一会后,会告诉你加入cluster成功,这时候到master上看一下
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 15h v1.20.4
node4 Ready 29m v1.20.4
完事
最后,说一下上面的网页登录,怎么取token
使用Token登录
1. 创建token
kubectl create sa dashboard-admin -n kube-system
2. 授权token 访问权限
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
3. 获取token
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo ${DASHBOARD_LOGIN_TOKEN}
然后拿返回来的token登录,就可以看到啦。
到此为止,k8s安装成功。
总结一下,本文我们最初是想装1个k8smaster,2个k8snode,最后因为偷懒,那2个k8snode1和k8snode2没安装,在k8smater安装完成后,通过vmware的clone,直接复制了k8snode4,大大节省了安装时间:),然后再不想偷懒的话,很快可以删掉原来的node1和node2,快速从node4马上克隆出来新的k8snode1和k8snode2,按照上面的几个步骤操作完,马上就是一个1master+3node的k8s集群。另外一个未解的docker版本太高的问题,暂时没发现问题。只是一个warning,说这个版本没在k8s的列表中。
本文到此为止,部署容器的操作另起灶台。
我也是k8s小白,也是摸着前人的脚步一步一步操作起来,终于成功了,也很开心。感谢前人的巨人肩膀。
欢迎评论区一起讨论。
参考:
https://blog.csdn.net/witton/article/details/107085155
http://blog.itpub.net/25854343/viewspace-2660392/