当前位置: 首页 > 科技观察

这个K8S(Kubernetes)集群部署我觉得还可以

时间:2023-03-21 17:27:44 科技观察

文末转载自微信公众号“木小农”,作者木小农。转载本文请联系沐小农公众号。国内安装K8S的四种方式。Kubernetes的安装其实并不复杂,因为Kubernetes是Google的产品,是从Google官网下载的。但由于网络问题,在国内无法连接到其中央仓库进行下载安装。软件包只能通过其他方式安装。在国内,使用Kubeadmin通过离线镜像安装的安装方式有四种:Kubeadmin是K8S提供的管理控制台。通过这里的命令,可以非常方便的快速发布和更新我们的集群。部署使用阿里云公有云平台安装K8S:这个也很好用,不需要做任何设置,马上就可以使用,但是有一个缺点——需要花钱通过官方安装yum仓库:这个是最简单的,但是这个安装K8S的包是很老的版本了。据说比谷歌最新版本落后了十个版本。以二进制包形式安装K8S:以第三方提供的二进制包形式安装K8S,比如Kubeasz,是github上的一个开源项目,因为是第三方提供的,如果不仔细验证,它非常容易出错,你不知道后台存在什么样的缺陷。今天我们使用的是第一种方法,使用Kubeadmin通过离线镜像安装K8S。本文也将使用Kubeadmin向大家展示K8S的集群部署和安装。我已经为你准备好了环境和安装包。有兴趣的可以下载安装。环境准备结构图:1.1这里需要说明一下物理机系统。小农在本地虚拟机上安装测试。不会安装的请看下面我安装虚拟机的教程:虚拟机安装教程:安装linux虚拟机(CentOS)详细教程安装K9S需要2个处理器,否则会初始化失败后来1.2物理机操作系统使用Centos7.864位[root@localhost~]#uname-aLinuxlocalhost.localdomain3.10.0-1127.el7.x86_64#1SMPTueMar3123:36:51UTC2020x86_64x86_64x86_64GNU/Linux[root@localhost~]#cat/etc/redhat-releaseCentOSLinuxrelease7.8.2003(Core)1.3集群信息环境准备命令2.1设置时区三台机器需要执行:timedatectlset-timehanzoneAsia/S.2设置hostname129执行:hostnamectlset-hostnamemaster130执行:hostnamectlset-hostnamenode1131执行:hostnamectlset-hostnamenode22.3添加hosts网络主机配置三台主机都需要添加这个配置vi/etc/hosts192.168.137.129master192.168.137添加后.130node1192.168.137.131node2完成,我们在master上pingnode1[root@localhost~]#pingnode1PINGnode1(192.168.137.130)56(84)bytesofdata.64bytesfromnode1(192.168.137.130):icmp_seq=1ttl=64time=0验证。ms64bytesfromnode1(192.168.137.130):icmp_seq=2ttl=64time=0.382ms64bytesfromnode1(192.168.137.130):icmp_seq=3ttl=64time=0.321ms2.4生产环境关闭防火墙可以跳过这一步,这里只是为了方便我们在学习的时候使用SELINUX。Itisasecurity-enhancedLINUX,它是LINUX内置的一个安全增强模块,可以增强LINUX的安全性,但是这个设置起来太麻烦了,所以我们在学习过程中一般都会关闭这个关机命令:sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config设置为暂时生效:setenforce0禁用防火墙:systemctldisablefirewalld停止防火墙:systemctlstopfirewalld安装kubeadm部署工具首先我们要搞清楚一个概念,Kubeadm不是K8S本身。Kubeadm只是一个快速部署工具。安装这个工具可以帮助我们简化K8S部署的过程创建文件目录:mkdir/usr/local/k8s切换目录地址:cd/usr/local/k8s然后我们把安装包(kubernetes-1.14安装包开头有下载链接)放到k8s目录下【root@masterk8s]#lldrwxr-xr-x2rootroot335Nov611:17kubernetes-1.14切换到kubernetes目录[root@masterk8s]#cdkubernetes-1.14/[root@masterkubernetes-1.14]#lltotal986908-rw-r--r--1rootroot357Jul314:15admin-role.yaml-rw-r--r--1rootroot67Jul314:15daemon.json-rw-r--r--1rootroot67850818Jul314:15docker-ce-18.09.tar.gz-rw-r--r--1rootroot177698304Jul314:15flannel-dashboard.tar.gz-rw-r--r--1rootroot927Jul314:15init.sh-rw-r--r--1rootroot706070528Jul314:15k8s-114-images.tar.gz-rw-r--r--1rootroot79Jul314:15k8s.conf-rw-r--r--1rootroot58913350Jul314:15kube114-rpm.tar.gz-rw-r--r--1rootroot12306Jul314:15kube-flannel.yml-rw-r--r--1rootroot281Jul314:15kubernetes-dashboard-admin.rbac.yaml-rw-r--r--1rootroot4809Jul314:15kubernetes-dashboard.yaml-rw-r--r--1rootroot953Jul314:15worker-node.sh[root@masterkubernetes-1.14]#这里包括我们安装K8S的所有内容,其中kube114-rpm.tar.gz:是我们的Kubeadm集群管理工具的安装压力收缩包docker-ce-18.09.tar.gz:是我们的docker安装压缩包,安装到本地即可自动部署K8S镜像flannel-dashboard.tar.gz:监控集群状态要安装Docker,我们需要在所有三台机器上安装docker。本文以master节点进行演示。首先,docker-ce-18.09.tar。gz用于解压[root@masterkubernetes-1.14]#tar-zxvfdocker-ce-18.09.tar.gz[root@masterkubernetes-1.14]#cddocker在安装之前我们首先要确保原来的y??um源和docker依赖up日期。所以我们需要先执行如下命令,这一步的命令执行是在docker目录下执行的1.安装GCCyum-yinstallgccyum-yinstallgcc-c++2.卸载老版本docker依赖yumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotateddocker-logrotateddocker-selinuxdocker-engine-selinuxdocker-engine3。安装yum-utils组件:yuminstall-yyum-utilsdevice-mapper-persistent-datalvm24。添加yum源PSdocker官网地址:sudoyum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo阿里云地址:sudoyum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo5,更新yum索引:sudoyummakecachefast6,安装docker-ce:sudoyum安装docker-ce7,卸载旧版docker及依赖这一步不再赘述,就是卸载上一步安装docker-ceyumremoveddockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotateddocker中的docker-ce在我们的k8s包中-logrotateddocker-selinuxdocker-engine-selinuxdocker-engine8。执行我们的安装包中的文件:yumlocalinstall-y*.rpm到这里就代表我们的docker安装完成了启动docker:systemctlstartdocker设置docker自动启动:systemctlenableDocker确保cgroups在同一个命令中执行命令:[root@masterdocker]#dockerinfo|grepcgroupCgroupDriver:cgroupfscgroups是controlgroups的缩写,它为Linux内核提供了一种任务聚合和划分的机制。一些任务通过一组参数集组织成一个或多个子系统cgroups是实现IaaS虚拟化(kvm、lxc等)、PaaS容器沙箱(Docker等)的资源管理控制部分的底层基础。子系统是根据cgroup的任务划分功能,将任务按照指定的属性划分为一组,主要用于实现资源控制。在cgroup中,划分的任务组以层级结构组织起来,多个子系统形成一个类似于数据结构中多棵树的结构。Cgroup包含多个独立的子系统,每个子系统代表一个资源。我们只需要确认输入上面的命令后出现:CgroupDriver:cgroupfs当我们输入命令发现不是CgroupDriver:cgroupfs的结果时,那么我们需要执行如下命令:修改daemon.json:cat</etc/docker/daemon.json{"exec-opts":["native.cgroupdriver=cgroupfs"]}EOFsystemctldaemon-reload&&systemctlrestartdockerinstallkubeadmkubeadm是K8S官方提供的集群部署工具,通过它我们可以快速的帮助我们简化K8S的管理,为每个集群节点下的容器创建和切换目录:cd/usr/local/k8s/kubernetes-1.14解压kube114安装包:tar-zxvfkube114-rpm.tar.gz切换目录:cdkube114-rpm安装:yumlocalinstall-y*.rpm关闭swap区在linux系统中,swap区类似于我们windows的虚拟内存,作为windows的虚拟内存,其实就是用物理磁盘模拟内存。比如我们的系统内存比较小,那么当我们处理数据的时候,内存不够了,我们就会先把这些数据存储在硬盘上,用硬盘空间来模拟内存。虽然硬盘提取数据的速度比较慢,但总比内存不够好。在Linux系统中,交换区就是我们所说的虚拟内存。在这里,虚拟内存可能会对系统部署产生不必要的影响。在K8S环境下,使用的服务器一般都有足够的内存,所以我们一般不建议使用系统交换区,这样会降低我们系统的性能。这里选择关闭swap区关闭swap区:swapoff-a修改配置文件,永久关闭swap区:vi/etc/fstabswap一行注释配置bridge所谓配置bridge其实就是我们修改文件k8s.confiptables是linux中的一个网络工具,用来按照规则过滤我们的数据包,在k8s的.conf中添加如下两行来配置什么时候进行K8S容器之间的网络通信,什么时候bridge进行数据传播在输入的时候按照iptables的规则进行相应的处理,可以提高我们系统在网络传输过程中的安全性。打开方法:cat</etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1EOFsysctl--system我们执行完后,确保红框内的值为1镜像安装K8S切换目录:cd/usr/local/k8s/kubernetes-1.14加载本地镜像—k8s:dockerload-ik8s-114-images.tar.gz加载后,检查:dockerimages[root@masterkubernetes-1.14]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEk8s.gcr.io/kube-proxyv1。14.120a2d70351652yearsago82.1MBk8s.gcr.io/kube-apiserverv1.14.1cfaa4ad74c372yearsago210MBk8s.gcr.io/kube-controller-managerv1.14.1efb3887b411d2yearsago158MBk8s.gcr.io/kube-schedulerv1.14.18931473d5bdb2yearsago81.6MBk8s.gcr.io/coredns1.3.1eb516548c1802yearsago40.3MBk8s.gcr.io/etcd3.3.102c4adeb21b4f2yearsago258MBk8s.gcr.io/pause3.1da86e6ba6ca13yearsago742kB如果看过我之前的K8S入门同学,应该对这些东西不陌生。我不会在这里详细介绍它们。有兴趣的可以去看看这篇K8S(Kubernetes)的文章,我觉得我能看懂!!!加载本地镜像——集群可视化:dockerload-iflannel-dashboard.tar.gz同样,我们这里也可以使用dockerimages来查看。我们的K8S前期工作已经完成,但是是我们今天安装的集群环境,所以上面的步骤也必须在另外两台机器上安装。我们安装好后,另外两台机器使用的是docker镜像,也能出现上面的信息就说明我们安装完成了,这里就不做重复的工作了,大家可以自己安装,使用Kubeadm部署K8S集群master主服务配置以下步骤都是在129(master)服务器上执行的,请注意!!!master主服务器配置:kubeadminit--kubernetes-version=v1.14.1--pod-network-cidr=10.244.0.0/16versioin:versioncidr:iprangemustbewithin10.244安装成功后可以看到如下信息:No.Step:这些三行命令需要复制并手动运行##表示我们需要创建一个.kube目录mkdir-p$HOME/.kube##复制admin.conf到configsudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config##执行授权操作sudochown$(id-u):$(id-g)$HOME/.kube/configadmin.conf是kubeadm关于当前集群的核心配置文件,包括kubeadm集群信息,包括节点信息,可以看看第二步:这个命令需要我们在nod中运行e(130,131),让我们的节点信息加入master(129),我们可以先复制保存一下kubeadmjoin192.168.137.129:6443--tokenlg870y.lxik26ib84938ton\--discovery-token-ca-cert-hashsha256:6D8331FE88EAE9E89608D6DC414A9FE0A378B84FFA4FFA4044D7CACFDBBF5DE41871通过kubectl获取获取获取节点节点节点,因为目前没有执行第二步,所以目前我们的master中没有添加节点。那时我们看到圣atusisNotReady,它还没有准备好。为什么是这样?底层肯定有一些组件没有正常执行。我们可以使用以下命令检查有问题的pod:kubectlgetpod--all-namespaces如果我们处于状态(STATUS)看到CrashLoopBackOff。一般重新执行kubectlgetpod--all-namespaces命令几次,就会消失,但是如果一直存在,说明我们的硬件不够用,需要增加CPU和内存资源。我们可以用前两行来表示状态一直是Pending,其他都是Running。这是不正常的,那为什么只有前两个这样,而后者还好呢?不可避免地会出现这个问题。我们可以看到名字下面有一个coredns,代表我们基础中的网络应用。无法安装此基本网络应用程序,因为它缺少附加组件。这里,是因为缺少flannel网络组件,也就是pods我们只需要通过kubectl安装flannel网络组件即可:kubectlcreate-fkube-flannel.yml安装成功后,我们使用命令:kubectlgetpod--all-namespaces,不会出现Pending状态而且master也准备好了。节点从服务配置还记得主服务(master)初始化时复制的第二步命令吗?我们只需要在节点(130,131)节点中执行那个命令就可以了,PS:这个命令是我自己师傅生成的,需要换成自己的命令。如果忘记了这条命令,我们可以通过kubeadmtokenlist命令查看,然后替换下面的IP地址和token,不需要替换kubeadmjoin192.168.137.129:6443--tokenlg870y.lxik26ib84938ton\--discovery-token-ca-cert-hashsha256:6d8331fe88ae99e89608d6dc414a9fe0a378b84ffa4044d7cacfdbbf5de41871通过kubectl获取节点信息(包括master):kubectlgetnodes然后我们可以看到两个节点都添加了重启服务docker:systemctlrestartletdocker:systemctlsettingsstartletstartlet:kubeletsystemctlenablekubeletkubeadm/kubelet/kubectl区别kubeadm:是一个kubernetes集群快速构建工具kubelet运行在所有节点上,负责启动Pod和容器,并作为系统服务出现kubectl:kubectl是一个kubernetes命令行工具,提供了一个总结ofinstructionsK8S集群服务到此结束。其实安装K8S本身并不复杂,只是其中有很多坑。大家可能看到我的安装比较顺利,但是小农也有很多坑。呈现给大家,如果觉得文章对你有帮助,记得点赞关注,你的支持是我创作最大的动力。