首页 运维干货kubernetes二进制部署单master节点

kubernetes二进制部署单master节点

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

1、安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 三台机器,操作系统 CentOS7.7(mini)
  • 硬件配置:2GBRAM,2vCPU+,硬盘30GB+
  • 集群中所有机器之间网络互通,且可访问外网。
  • 采用NAT网络模型(依自己情况而定)

2、安装规划

(1)服务器规划

角色 IP
master 192.168.50.128
node0 192.168.50.128
node1 192.168.50.131
node2 192.168.50.132

(2)软件环境

软件 版本
Docker 19.03.12
kubernetes 1.18.6
etcd 3.4.9

(3)软件规划

主机 安装组件
master kube-apiserver,kube-controller-manager,kube-scheduler,etcd
node1 kubelet,kube-proxy,etcd
node2 kubelet,kube-proxy,etcd

3、初始化系统

3.1、分步骤操作

(1)配置主机名

master节点设置:

node1从节点设置:

node2从节点设置:

根据自己的节点命名情况来设置即可。

(2)添加hosts

所有的节点都要添加hosts解析记录

hosts字段中IP为所有etcd节点的集群内部通信IP,有几个etcd节点,就写多少个IP。当然,为方便后期扩容可以多些几个预留的IP。

(2)生成证书

gencert: 生成新的key(密钥)和签名证书
-initca:初始化一个新ca
-ca:指明ca的证书
-ca-key:指明ca的私钥文件
config:指明请求证书的json文件
-profile:与config中的profile对应,是指根据config中的profile段来生成证书的相关信息

(3)证书分发至其他etcd服务器

将前面两步创建的证书都分发给其他etcd节点。

写一个shell脚本,先在目标主机创建存放etcd证书的目录,接着复制证书

补充:事实上只需要分发ca.pem公钥即可,ca-key.pem是私钥,很多组件不需要,除非你确保使用它,你才分发到服务器上面,以免造成私钥泄露。不过我们不需要考虑太多,所以把私钥也分发到了服务器上面。

4.4、部署Etcd集群

以下在节点1操作,部署完成后,将节点1生成的所有的文件拷贝到节点2和节点3

(1)解压Etcd包并拷贝二进制执行程序

(2)创建Etcd配置文件

写个脚本执行方便

(2)安装docker-ce组件

列出所有可以安装的版本

这里我们安装18.09版本的docker-ce

(3)启动docker并设置开机自启动

查看版本号,检测docker是否安装成功

上面的这种查看docker client的版本的。建议使用下面这种方法查看docker-ce版本号,这种方法把docker的client端和server端的版本号查看的一清二楚。

(4)更换docker的镜像仓库地址

默认的镜像仓库地址是docker官方的,国内访问异常缓慢,因此更换为个人阿里云的源。

(2)部署kube-apiserver

创建kube-apiserver配置文件

  • ##### 生成token文件:

(6)授权kubelet-bootstrap用户允许请求证书

6.4、部署kube-controller-manager

kube-controller-manager(k8s控制器管理器)是一个守护进程,它通过kube-apiserver监视集群的共享状态(kube-apiserver收集或监视到的一些集群资源状态,供kube-controller-manager或其它客户端watch), 控制器管理器并尝试将当前的状态向所定义的状态迁移(移动、靠近),它本身是有状态的,会修改集群状态信息,如果多个控制器管理器同时生效,则会有一致性问题,所以kube-controller-manager的高可用,只能是主备模式,而kubernetes集群是采用租赁锁实现leader选举,需要在启动参数中加入 --leader-elect=true

(1)创建controller-manager配置文件

(5)启动并设置开机启动

(6)部署CNI容器网络

CNI,全名叫做:容器网络接口。是CNCF旗下的一个项目,由一组用于配置容器的网络接口的规范和库组成。CNI主要用于解决容器网络互联的配置并支持多种网络模型。

7.3、批准kubelet证书申请并加入集群

(1)查看kubelet证书请求

此命令可以看到所有请求,所有为pending状态,则是需要批准的。

(2)批准申请

把上面的命令的NAME字段的值拿过来。

  • 查看节点

注意:这里的STATUS状态值还是notReady,是因为网络插件还没有部署好。接着往下即可。

7.4、部署kube-proxy服务

kube-proxy是什么,这里就不得不提前说下service,service是一组Pod的抽象集合,它相当于一组Pod的负载均衡器,负责将请求分发到对应的pod,kube-proxy就是负责service的实现的,当请求到达service时,它通过label关联到后端并转发到某个Pod;kube-proxy提供了三种负载均衡模式:用户空间、iptables、ipvs,我们采用的是iptables负载均衡模式。

(1)创建kube-proxy配置文件

拷贝到配置文件指定的路径下:

(5)创建kube-proxy服务启动脚本

(6)启动并设置开机启动

7.5、授权apiserver访问kubelet

在执行kubectl exec、run、logs 等命令时,apiserver会转发到kubelet。这里定义 RBAC规则,授权apiserver调用kubelet API”

事实上很多用户都不能成功,因为国内网络受限,所以可以这样子来做。
修改hosts文件,加上如下解析记录

(2)更换flannel镜像源

编辑镜像源,默认的镜像地址我们修改一下。把yaml文件中所有的quay.io修改为 quay-mirror.qiniu.com

此时保存保存退出。在master节点执行此命令。

这样子就可以成功拉取flannel镜像了。当然你也可以直接使用我提供给大家的kube-flannel.yml文件

  • 查看flannel是否正常

如果你想查看flannel这些pod运行是否正常,使用如下命令:

注意:稍等1-3分钟后,如果第三字段STATUS不是处于Running状态的话,并且STATUS字段数值一直在渐渐变大,说明flannel是异常的,需要排查问题所在。

  • 查看节点

目前节点状态是Ready,表示集群节点现在是可用的

(3)无法拉取镜像解决方法

如果有以下报错:

或者是

上面的这些都表示是网络问题不能拉取镜像,我这里给大家提前准备了flannel的镜像。导入一下就可以了。

7.7、部署CoreDNS解析插件

CoreDNS用于集群中Pod解析Service的名字,Kubernetes基于CoreDNS用于服务发现功能。

安装CoreDNS1.6.7(目前较新版本)。如果之前修改了PodIP的网段,那么这里需要自行修改此文件的ClusterIP参数。其他可保持不变

bash
spec:
selector:
k8s-app: kube-dns
clusterIP: 10.0.0.2 #根据自己情况修改此值

<pre><code class="line-numbers">#### (1)构建CoreDNS

bash
[root@master ~]# kubectl apply -f coredns.yaml

查看Pod状态

(2)解析测试

只要能出结果,解析就是没有问题的。

8、继续增加worker node

8.1、部署第二个node节点

(1)拷贝部署好的node相关文件到新节点

在master节点操作,把文件远程复制给node节点

(2)删除kubelet证书和kubeconfig

在node1节点上操作

(3)修改主机名

修改为--hostname-override-=node1

修改为hostnameOverride: node1

(4)启动并设置开机启动

(5)批准node节点申请

下面的是在master节点操作的

上面的CONDITIONPending状态的表示将要被加入集群的节点。所以记录前面的NAME字段

(6)查看node状态

稍等两分钟

8.2、部署第三个node节点

按照上面的前五步继续执行即可。做完之后如下所示:

至此,二进制单节点集群部署已经完成,接下来我们可以测试一下集群是否可用。

9、测试kubernetes集群

(1)、创建一个nginx的pod

现在我们在kubernetes集群中创建一个nginx的pod,验证是否能正常运行。

在master节点执行一下步骤:

现在我们查看pod和service

kubernetes二进制部署单master节点插图
打印的结果中,前半部分是pod相关信息,后半部分是service相关信息。我们看service/nginx这一行可以看出service暴漏给集群的端口是30249。记住这个端口。

然后从pod的详细信息可以看出此时pod在node2节点之上。node2节点的IP地址是192.168.50.132

(2)、访问nginx验证集群

那现在我们访问一下。打开浏览器(建议火狐浏览器),访问地址就是:http://192.168.50.132:30249
kubernetes二进制部署单master节点插图(1)

10、安装dashboard

10.1、创建dashboard

(1)创建并运行

先把dashboard的配置文件下载下来。由于我们之前已经添加了hosts解析,因此可以下载。

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:

大概在此文件的32-44行之间,修改为如下:

  • 运行此yaml文件

(2)测试是否正常

主要是看status这一列的值,如果是Running,并且RESTARTS字段的值为0(只要这个值不是一直在渐渐变大),就是正常的,目前来看是没有问题的。我们可以继续下一步。

查看此dashboard的pod运行所在的节点
kubernetes二进制部署单master节点插图(2)

从上面可以看出,kubernetes-dashboard-9774cc786-ccvcf运行所在的节点是node2上面,并且暴漏出来的端口是30001,所以访问地址是: https://192.168.50.132:30001

(3)浏览器访问URL

用火狐浏览器访问,访问的时候会让输入token,从此处可以查看到token的值。

kubernetes二进制部署单master节点插图(3)

把上面的token值输入进去即可进去dashboard界面。
kubernetes二进制部署单master节点插图(4)

不过现在我们虽然可以登陆上去,但是我们权限不够还查看不了集群信息,因为我们还没有绑定集群角色,同学们可以先按照上面的尝试一下,再来做下面的步骤

10.2、cluster-admin管理员角色绑定

再次使用输出的token登陆dashboard即可。

kubernetes二进制部署单master节点插图(5)kubernetes二进制部署单master节点插图(6)

本文链接:http://www.yunweipai.com/38941.html

网友评论comments

发表评论

电子邮件地址不会被公开。

暂无评论

Copyright © 2012-2020 YUNWEIPAI.COM - 运维派
扫二维码
扫二维码
返回顶部