简单Kubernetes(k8s)集群的安装部署过程——采用kubeadm方式安装

目录

一、介绍

二、虚拟机安装

三、虚拟机初始化

四、容器及必要工具安装

五、节点部署

六、CNI网络插件安装与集群测试


一、介绍

这篇博客是我的学校课程云计算平台技术及应用的实践作业,相关内容也可供大家在学习时参考。

Kubernetes,简称k8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用。本文的目标是在自己的电脑上安装部署一个简单的k8s集群。 k8s集群部署需要在linux操作系统上进行,因此我们需要安装linux操作系统。由于集群会涉及不止一台服务器,因此建议使用虚拟机。

K8s集群部署常见的安装方式有两种,分别是kubeadm方式和二进制方式,本文将采用kubeadm方式。我部署的集群是一个简易的小型集群,由一个master节点和两个node节点组成,需要在自己的机器上创建三个linux操作系统的虚拟机。

下面详细介绍一下我自己的安装过程。

二、虚拟机安装

虚拟机安装使用的软件是VMware Workstation。软件的使用和安装比较简单,这里直接省略。

为了组建集群,我们需要创建多个虚拟机,我创建了三个虚拟机,并安装了linux操作系统,其中一台虚拟机作为master,两台虚拟机作为node。下面以当作master的虚拟机创建为例介绍一下虚拟机安装。

首先需要下载linux操作系统安装包,可以去官网The CentOS Project下载,或者在其它博客找镜像链接。我在官网下载的CentOS-7版本,参考的一些k8s部署教程也都建议使用CentOS-7的系统版本。

接下来,在VMware Workstation主页新建一个虚拟机。我们选择典型配置,下一步以后选择安装程序光盘映像文件。之前已经下载了linux操作系统的安装映像文件,浏览文件存储的目录将其选中。点击下一步,下面根据弹窗要求填写用户名、密码、虚拟机名称等等信息。一共需要填写三个名字,为了简单我全部起名1021041318k8s-master,如下图所示。你可以根据自己需要自行规划信息填写,这些信息将决定你的虚拟机名称和登录账户名、密码。虚拟机创建位置可以自行选择。

 

接下来要配置虚拟机的一些虚拟硬件参数。参考了一些k8s部署教程,我们选择设置单CPU、CPU内核2个、内存2G、硬盘20G,网络连接方式选NAT。如下图所示。设置完成以后直接创建。

 至此我们创建了虚拟机1021041318k8s-master,它的一些虚拟硬件参数如下图所示。

我还创建了两个虚拟机,分别是1021041318k8s-node1和1021041318k8s-node2,它们的相关参数如下图所示。

 

以上就是虚拟机的创建。我们还需要打开每一个虚拟机,开启以后,虚拟机会自动进行linux操作系统的安装,无需人工干预。完成以后输入密码即可登录虚拟机。

三、虚拟机初始化

在进行初始化以前,我们还要做一些准备工作。我们需要保证机器联网,自己创建的虚拟机和主机之间以及虚拟机之间可以互相通信。打开虚拟机,桌面右键打开终端后即可打开一个命令交互窗口,后续的k8s安装都是在这里进行。我们可以使用ifconfig命令查看当前虚拟机的ip地址,使用“ping+空格+目标ip”即可检查当前虚拟机是否可与目标机器通信。按照前面的设置,三台虚拟机和自己的主机之间应该都是可以互相通信的,可以自行检查。

由于虚拟机网络选择了NAT模式,虚拟机ip地址通常是自动分配的,也就是虚拟机重启以后ip可能会变。虚拟机ip地址存在一个租用时间的概念,在半个小时或更长时间以后,ip才会过期(租用时间可自行设置),所以你重启虚拟机以后可能会发现ip没变,但经过很长时间以后ip还是会变。在虚拟机初始化过程中会涉及不同虚拟机的ip,如果ip改变可能需要重新设置,产生麻烦,所以我们需要将三台虚拟机的动态ip改为指定的静态ip。

以虚拟机1021041318k8s-master为例介绍一下如何修改静态ip。打开命令交互窗口,输入命令su,以获取root权限,否则修改配置文件保存退出时会提示权限不够。输入su命令以后要输入密码,直接输入即可,因为密码被隐藏了所以不会显示。接下来输入命令vim /etc/sysconfig/network-scripts/ifcfg-ens33。在我的机器上,vim后面需要空格,否则找不到目录。如下图所示。因为权限问题会有一串提示,选择E强行修改即可。

回车以后进入下图所示的界面。

在这里我们需要修改第四行的dhcp,改成static,加入属性IPADDR、GATEWAY、DNS1,设置自己想要设置的ip、网关、域名解析器。改完以后如下图所示。

改完以后wq保存退出。最后使用service network restart命令以重启,让静态ip正式生效。如下图所示。

对其余两台虚拟机进行类似的操作,我所修改的ip地址具体如下。

虚拟机名称ip地址
1021041318k8s-master192.168.152.130
1021041318k8s-node1192.168.152.131
1021041318k8s-node2192.168.152.132

注意,这里建议对自己的虚拟机进行改名,使用“hostnamectl set-hostname+要改成的名字”这条指令进行改名。虽然三台虚拟机都是分别创建的,但是hostname仍然可能重名。我自己做的时候1021041318k8s-node1和1021041318k8s-node2两台虚拟机就重名了,它们的hostname并不是外面显示的主机名,而是相同的。这会导致最后加入node节点的时候只有其中一个能加入,另一台虚拟机会报错,想要修复这个问题会很麻烦,所以一定要提前改好hostname。

完成了上面的准备以后,就要开始虚拟机的初始化了。参考看网上教程,这里一共有六步操作,依次是:

(1)关闭防火墙

systemctl stop firewalld  # 临时systemctl disable firewalld  # 永久

(2)关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久setenforce 0  # 临时

(3)关闭swap

swapoff -a  # 临时sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

(4)在master添加hosts

cat >> /etc/hosts << EOF> 192.168.152.130 1021041318k8s-master> 192.168.152.131 1021041318k8s-node1> 192.168.152.132 1021041318k8s-node2> EOF

(5)将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --system  # 生效

(6)时间同步

yum install ntpdate -yntpdate time.windows.com

上面的步骤比较固化,按顺序依次输入指令即可。需要注意,如果权限不够,输入su指令,再输入密码解锁权限。前三步中的指令分为临时和永久,根据自己需要选择其一即可。第四步操作只需要在master机器上执行,其余操作在所有虚拟机上都要执行。第四步操作需要根据自己的设置,按照自己机器实际的ip地址和机器名输入信息,我写的是我自己设置的ip和机器名。

这里的操作很固化,可能比较繁琐,下面是我自己输入指令的截图,因为有些地方输入有误,所以可能会比较乱。具体如下图所示。

这里只展示master上面的命令执行,其余机器的操作和这里类似。

四、容器及必要工具安装

下面需要在三台虚拟机上安装docker、kubeadm、kubelet和kubectl,每台虚拟机都要安装这些。

(1)docker安装

按顺序在命令交互窗口,也就是虚拟机的终端里输入下面的指令:

#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo#yum -y install docker-ce-18.06.1.ce-3.el7#systemctl enable docker && systemctl start docker#docker –version

井号后面的都是一条指令,按顺序输入这些指令。第一条指令会下载docker,第二条指令进行相关下载和安装,第三条指令会将docker设置为开机自启动,最后一条指令查看docker版本。如果docker版本正常显示,说明安装成功。这些指令中已经预置了docker的版本,如果不修改的话,最后显示的docker版本是和我一样的。这里我参考了网上教程,所以安装的docker版本和教程里是一样的。后文会放图。

完成以上步骤后,还需要设置阿里云镜像仓库,不然之后下载一些工具的下载速度会很慢。需要输入以下指令:

cat > /etc/docker/daemon.json << EOF{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]}EOF

然后要重启docker,需要输入指令systemctl restart docker。

完成以上步骤以后,docker就装完了,三台机器都要按照,如果权限不够,还是要输入指令su,获取root权限。下面只展示master机器上的安装截图,其它虚拟机上的安装是完全一样的。

(2)镜像软件源设置和kubeadm,kubelet、kubectl的安装

下面还要对软件源做一些设置,前面已经做了一些工作,现在还要输入以下指令:

cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF

在三台虚拟机上都要进行这样的设置。完成以后,开始安装kubeadm,kubelet、kubectl。需要输入指令yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0,虚拟机会自动进行相关工具的下载和安装。指令已经设置了下载的版本,我也是参考的相关教程,安装的版本和教程是一样的,具体安装情况如下图所示。

完成以后还要输入指令systemctl enable kubelet,设置开机自启动。

至此docker、kubeadm、kubelet和kubectl的安装都完成了,每台虚拟机都要安装这些组件。 因为安装过程比较长,不方便放图,我只放了虚拟机1021041318k8s-master上面的安装过程截图,在其它机器上我也都安装了这些组件,这里不再详细展示。

五、节点部署

完成了前面的工作以后就要部署节点了,先配置master节点。仅在master虚拟机上执行以下命令:

kubeadm init --apiserver-advertise-address=192.168.152.130 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

这里的第一个ip地址192.168.152.130是我的master虚拟机的ip,是我自行设置的。后两个ip地址与自己机器的ip不冲突即可,我参考了网上教程,使用了教程里的ip。回车以后,如果一切正常,虚拟机会自动拖取镜像,需要等待其完成。具体如下图所示。

当我们看到提示信息Your Kubernetes control-plane has initialized successfully!时,说明操作成功了。如下图所示。

这样就是成功了。接下来有两步操作,根据上图中的提示信息,需要在master虚拟机上输入指令:

mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

做完以后,master节点就做好了,下面要把node节点拉入集群。在每一台node虚拟机上,输入如下指令:

kubeadm join 192.168.152.130:6443 --token ge7ur0.1h2fi0h977mcryee \--discovery-token-ca-cert-hash sha256:92632c59bf3f7ae557f77e052abdfd62a1ce1359ef327a0480a33ba8d1887a1a

这条指令在master机器上会有显示,是一个token性质的东西,是独一无二的,上面的指令是我的机器显示的token,参考的教程说明这条指令有24小时的时效,所以最好尽快使用这条指令。

如果没有问题,node加入成功,会显示下面的信息,如下图所示。

在将node拉入集群之前,一定要检查hostname是不是自己认为的那个,不是的话要修改。我自己做的时候,以为两个node节点hostname不一样,没有改名,导致加入第二个node的时候报错,提示node已经存在,产生了麻烦。

做完上面的步骤以后,可以在master虚拟机上输入指令kubectl get nodes,如果提示了下图所示的信息,说明这一阶段的工作成功了。

如图所示,两个节点都已经加入成功。

六、CNI网络插件安装与集群测试

出现上图所示的提示信息,就说明离线状态的小型k8s集群就已经配置好了。节点的STATUS显示是NotReady是因为还没有安装网络插件,需要下载CNI网络插件以配置网络服务。

下载CNI网络插件需要使用指令访问镜像地址,但是网上大部分地址都无法直接访问。我参考了网上的一种方法,链接是kube-flannel.yml(已修改镜像下载数据源)_Mr.Xu (徐刘)的博客-CSDN博客_kube-flannel。该方法的步骤是手动创建kube-flannel.yml文件,需要使用指令vim kube-flannel.yml。进入该空白文件以后,把链接里提示的代码内容复制粘贴进去,代码比较长,需要注意格式。粘贴完以后保存kube-flannel.yml文件,在外部的命令交互窗口里使用指令kubectl apply -f kube-flannel.yml,之后会有一连串的创建提示信息,等待其完成即可。这样操作就实现了CNI网络插件的安装。具体情况如下图所示。

接下来可以使用指令kubectl get pods -n kube-system检查一些最小单元的状态,也可以使用kubectl get nodes指令检查master和node节点的状态,我的检查结果如下图所示。

这里可以看到kube-flannel-ds-amd64-mk66t单元不是运行状态,只有这一个单元出了问题,导致node2节点无法联网,状态是NotReady。具体的原因可能是相关镜像获取失败,导致某些组件无法下载,因为很多镜像来源无法正常访问,所以这种情况经常发生。由于master和node1节点都已经能够正常联网,所以这里就不管了,直接开始进行后面的测试。

下面进行k8s集群联网测试。按顺序输入如下指令:

#kubectl create deployment nginx --image=nginx#kubectl expose deployment nginx --port=80 --type=NodePort#kubectl get pod,svc

输入和输出结果如下图所示。

可以看到STATUS的值是Running,说明已经开始工作了。

下面在自己的电脑上输入一个网址,不同机器ip不同,网址也不同,我的网址是http://192.168.152.131:30515/,如果能够看到下面图片所示的网页说明测试成功。

 到此,简单Kubernetes(k8s)集群的安装部署过程就全部结束了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部