内容摘要
安装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,查看监控信息;