K8S 完全安装手册

环境:

Windows 10, vmware 16, CentOS 8

新人小白,从头开始,网上各种教程尝试,解决无数问题,一点一点摸索出来的结果。

3个虚拟机:

k8smaster 192.168.137.10  
k8snode1 192.168.137.11  
k8snode2 192.168.137.12  

 

虚拟机安装:

这个不细说,大家随意找教程,默认安装即可。先安装k8smaster。

K8S 完全安装手册_第1张图片

注意事项:

这里安装完成后,不要着急配置,先处理一下网络。

在vmware的网络配置里修改vmnet1,ip设置为192.168.137.0 (重要,否则虚拟机无法上网,注意vmnet1是host only的模式,或者叫仅主机)

(菜单:编辑-->虚拟网络编辑器)

K8S 完全安装手册_第2张图片

 

我这里自己创建了vmnet2,效果一样,注意网络选择192.168.137.0即可。

接下来在虚拟机的属性里将网络选择为vmnet1。下图(我自建了vmnet2,各位改成自己的vmnet1即可)

K8S 完全安装手册_第3张图片

下一步也是重点:

打开windows的网络连接,打开vmnet1的网络,查看对应的ip,如果不是192.168.137.1,最好在前面重新创建vmnet2。如果提示ip冲突,将原有的vmnet1的ip改掉,再修改vmnet2的地址到137段。那以上以及以下的步骤的设置同时修改为vmnet2。

K8S 完全安装手册_第4张图片

以上确认没问题了以后,打开你的主网络(联网能上网的网卡的ip),配置网络共享。

K8S 完全安装手册_第5张图片

K8S 完全安装手册_第6张图片

需要注意的是这里,如果上面配置的不是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目录中。

登录的时候名字不对,可以修改一下:

K8S 完全安装手册_第7张图片  K8S 完全安装手册_第8张图片

下一步,在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

安装K8S

1. 配置系统基本安装源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

2. 添加K8S安装源

将如下内容保存到:/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

3. 安装docker

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

4. 安装kubectl、kubelet、kubeadm

安装kubectl、kubelet、kubeadm,设置kubelet开机启动,启动kubelet。

sudo yum install -y kubectl kubelet kubeadm
sudo systemctl enable kubelet
sudo systemctl start kubelet

查看K8S版本以及安装结果

K8S 完全安装手册_第9张图片

这边记住版本号,我这里安装的是1.20.4,后面要用到

5. 初始化kubernetes集群

这块没弄太懂,是挨个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

K8S 完全安装手册_第10张图片

然后执行系统提示的内容:

K8S 完全安装手册_第11张图片

接下来完全按照原作者大大的内容走

执行提示中的命令:

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。

6. 安装calico网络

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

三、安装kubernetes-dashboard

一步步照着做

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

K8S 完全安装手册_第12张图片

完成后最好重启一下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/

你可能感兴趣的:(kubernetes,k8s,docker)