K8S动手教程1:安装指南

内容摘要

安装K8S集群

访问dashboard

访问grafana

K8S是一个集群,包括多个节点,节点可以为:控制节点和工作节点,控制节点运行K8S系统组件,工作节点主要用于运行应用容器,当然也会运行部分系统组件。本指导将会指导大家安装1个节点和多个节点的测试环境,用于实验和学习。

安装Docker

在K8S集群每个节点上安装Docker,初始化容器环境。安装方法请参考Docker动手教程第1章的相关内容。最好的方法是使用自定义容器镜像在阿里云创建虚拟机,这样就不需要在每个节点上安装Docker环境了。

安装完成后,在每个节点上检查容器环境是否正常,运行命令:

systemctl status docker

如果出现上图状态,说明Docker运行正常。

K8S安装的过程很复杂,需要很多镜像,在国内由于网络的原因,一些组件下载失败,因此我制作了离线安装文件,可以快速简洁地构建测试环境。

获取离线安装文件

我将离线安装文件和容器环境做了一个自定义镜像,我可以在阿里云上共享给大家,不过需要大家提供自己的aliyunUid,请参考下图:

这是共享镜像的操作对话框。

如何获取aliyunUid?

登录阿里云控制台页面后,如下图:

请点击右上角的头像,进入下面的页面:

可以看到“账号ID”这一行,这就是aliyunUid了。

大家将自己的aliyunUid通过私信传给我,我共享我的自定义镜像给大家,以后大家就可以基于该镜像创建容器环境和K8S测试环境。

当你使用我制作的镜像构建环境时,你会发现原来可以这样简单!

当大家基于我的镜像创建虚拟机后,在根目录下可以看到如下压缩文件:

压缩文件名为:kube1.10.3min.tar.gz,这是kubernetes 1.10版本的离线安装压缩包。

初始化

在集群所有节点都放入离线安装压缩文件的前提下,初始化所有节点。

首先,请大家解压所有节点上的离线安装压缩文件,命令为:

tar -zxvf kube1.10.3min.tar.gz

解压可能会持续一会儿,因为这个压缩包有几百兆,过程如下图:

接下来运行初始化脚本,请大家使用 cd 命令进入 kube1.10.3 解压文件下,如下图:

在文件夹下有shell目录,进入其中,可以看到两个脚本文件:init.sh,master.sh。

执行 init.sh 脚本,命令为:

sh init.sh

执行过程会持续几分钟,请大家耐心等待,请看下面两个截图:

可以看出,该脚本在配置参数。

这是在加载离线的K8S系统使用镜像。

安装控制节点

初始化成功以后,大家可以安装主节点了。主节点只能有一个,当然生产环境下可以有多个,我们的测试环境用一个就可以了。主节点主要用于运行K8S系统组件。安装方法如下:

和init.sh同级的目录下,有master.sh脚本,使用如下命令运行该脚本:

sh master.sh

这是运行过程的部分截图,红色矩形框的内容提示了如何将其他节点加入到K8S集群中,方法是在其他节点运行该命令:

kubeadm join 172.18.151.255:6443 --token ufhjbp.4s1m6gkaivr93h7k --discovery-token-ca-cert-hash sha256:39e05aad645bac83024d581bd33b1e27d35e050bc54bbac723f46ea65dd4f035

下面显示了创建了哪些组件,这里大家不用深究这些组件的具体功能。

这样,主节点就安装成功了。

下面简单验证下集群是否正常,运行如下命令.

kubectl get nodes

大家可以看到只有一行数据,因为该命令查询的是集群当中有哪些节点,目前只有1个。下面分别解释下各列的内容:NAME:主机名;

STATUS:状态为Ready表示该节点是正常的;

ROLES:角色,该节点是master,管理节点,也可以叫控制节点;

AGE:年龄,即创建多长时间;

VERSION:K8S版本,现在版本是v1.10.3;

添加工作节点

工作节点能够加入的前提是:安装Docker环境,运行过init.sh脚本。

在工作节点执行上面的命令即可加入到集群中,如下图:

如果出现:"This node has joined the cluster" 字样表示添加成功。

使用的是 kubeadm join 命令,kubeadm 只一个K8S安装程序,大家感兴趣的话可以去百度学习下,这里不深究。

添加后,在控制节点上查询下,命令为: kubectl get nodes,结果如下图:

可以看到红色的一行,即是刚才添加的节点信息,注意ROLES为,添加成功。

单节点集群

实际上,我们在测试的时候可以只需要一个节点,即控制节点即可,但是需要将控制节点当成工作节点使用。运行如下命令即可做到这一点:

kubectl taint node master node-role.kubernetes.io/master-

如果不想将控制节点当工作节点使用,使用如下命令:

kubectl taint node master node-role.kubernetes.io/master="":NoSchedule

关于上面命令的意义这里先不讲,后面会详细讲解这部分的内容。

多节点集群

大家可以根据实际需要,将多个工作节点加入到集群中。在我们测试的时候不建议一次添加多个节点,因为浪费钱,可以根据实验需要加入。

访问dashboard

在K8S集群中,安装一个组件叫dashboard,我们可以通过它在浏览器中查看集群信息。

使用控制节点IP地址和端口32000既可在浏览器访问,但是请注意,要使用火狐浏览器。

如下图:

意使用https协议。如果出现上述页面,点击右边的高级按钮,如下图:

点击高级按钮后,弹出下面内容,点击接受风险并继续,进入网页:

选择 Kubeconfig 选项,点击跳过按钮,进入网页:

这就是dashboard的主页,大家可以看到K8S的大部分信息。

下面我们使用令牌的方式登录dashboard:

要使用令牌,必须现在环境中创建账户,请在控制节点根目录下,创建yaml文件,名字为user.yaml。内容如下:

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

name: admin

annotations:

rbac.authorization.kubernetes.io/autoupdate: "true"

roleRef:

kind: ClusterRole

name: cluster-admin

apiGroup: rbac.authorization.k8s.io

subjects:

- kind: ServiceAccount

name: admin

namespace: kube-system

---

apiVersion: v1

kind: ServiceAccount

metadata:

name: admin

namespace: kube-system

labels:

kubernetes.io/cluster-service: "true"

addonmanager.kubernetes.io/mode: Reconcile

如果有不懂yaml格式的,可以百度学习下。

运行上面的yaml文件,命令为:

kubectl create -f user.yaml

获取admin-token 的secret 名字:

kubectl -n kube-system get secret|grep admin-token |awk '{print $1}'

比如:admin-token-2bb9p

接着根据上面查询的结果获取token 的值:

kubectl -n kube-system describe secret admin-token-2bb9p

操作截图如下:

下面使用该token登录dashboard,如下图:

选择令牌选项,输入token信息,点击登录按钮即可登入dashboard主页。

访问grafana

grafana可以查看集群的监控信息,使用控制节点IP地址和端口32001可以访问,注意:使用http协议。

访问主页如下:

rafana展示了非常丰富的监控信息,包括CPU,内存,网络等信息,大家可以了解下。

到这里,K8S集群的安装部署就讲完了。

实验

安装一个3节点K8S集群:一个控制节点,两个工作节点;

创建令牌并使用令牌访问dashboard;

访问grafana,查看监控信息;