介绍
本文主要介绍consul做为单纯的服务发现程序使用,在Kubernetes中安装的过程,以及碰到的问题和解决的方法。
一、环境介绍
项目 | 内容 | 备注 |
节点娄 | 3 | master/node1/node2 |
操作系统 | Centos7.5 | |
内存 | 2G | |
CPU | 2核 | |
硬盘 | 40G |
这次的安装是基于个人在天翼云上申请的主机上安装的,所以服务器的配置比较低,特别是存储空间,单机40G已经是所有空间,并且还需要被操作系统使用一部分,不过做为测试使用,已经足够了。
二、准备工作
1、安装NFS服务
由于Kubernetes集群的特性,其存储资源需要基于网络,NFS做为常用的网络文件系统,可很好的被它应用,便是要注意,NFS服务需要在每台NODE的宿主机上部署,否则会因为系统不支持NFS文件类型,而导致consul-server的pod启动失败。
2、存储卷的准备
由于Consul需要存储固化的数据,其在安装的时候会部署StatfullSet的组件,会通过pvc向pv申请存储资源,所以我需要事先为Kubernetes集群部署Storage Classes。否则,在部署Consul时,由于consul-server申请不到存储资源而无法启动。
3、Kubernetes节点的准备
由于Helm管理的Consul集群创建脚本默认是3(服务器)+2(客户端)的方案,所以Kubernetes最少需要3个节点,并且当只有3个节点为,并且master也是节点之一时,需要为master设置为可部署节点,否则consul集群会因为其中一个consul-server没有可部署节点而无法启动。
三、开始安装
1、nfs的安装
# 安装nfs服务:yum -y install nfs-utils (集群中的每个节点也要安装否则不支持)
yum install nfs-utils -y
# 启动nfs并设为开机自启
systemctl start nfs && systemctl enable nfs
# 创建共享挂载目录
mkdir -pv /data/k8s/{v1,v2,v3}
cat >/etc/export
这里注意 nfs-utils需要在每个节点上安装,以使系统能够支持NFS文件系统。下面的共享目录的设置,只需要在存储服务器上设置就可以了。
2、部署存储卷StorageClass
编写部署用的yaml文件
cat >nfs-client.yaml<
应用
kubectl apply -f nfs-client.yaml
创建account并绑定角色
cat >nfs-client-sa.yaml<
kubectl apply -f nfs-client-sa.yaml
创建storageclass,并部署到Kubernetes
cat >nfs-client-class.yaml<
3、为master节点配置为可部署节点
出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。如果希望将k8s-master也当作Node使用,可以执行如下命令:
kubectl taint node jaine-vpc01 node-role.kubernetes.io/master-
其中k8s-master是主机节点的hostname,如果要恢复Master Only状态,执行如下命令:
kubectl taint node k8s-master node-role.kubernetes.io/master=""
4、安装Consul
因为我的主机存储空间比较小,而默认的helm中配置的每个节点申请的存储空间是10G,所以需要改一下这个参数,我这里设置的是2G,另外,通过这个步骤,也同时把consul的web页面设置为启用,这些配置参数存储在config.yaml文件中:
cat >config.yaml<
通过helm安装consul
helm install consul -f config.yaml hashicorp/consul --set global.name=consul
通过上面的过程,安装基本完成,如果K8S中安装了ingress-nginx的话,可以通过规则访问consul-server的8500端口,就可以打开consul的ui界面,查看consul中注册服务的状态。
另外,consul的卸装方式如下:
helm delete consul
kubectl delete pvc -l chart=consul-helm
5、在consul中注册服务
编辑注册服务的json脚本,保存为test.json:
{
"ID": "test-service1",
"Name": "test-service1",
"Tags": [
"test",
"v1"
],
"Address": "127.0.0.1",
"Port": 8000,
"Meta": {
"X-TAG": "testtag"
},
"EnableTagOverride": false,
"Check": {
"DeregisterCriticalServiceAfter": "90m",
"HTTP": "http://test.com",
"Interval": "10s"
}
}
通过 http 接口注册服务:
# test.consul.local 是在本地hosts文件中指定的consul访问地址
curl -X PUT --data @test.json http://test.consul.local:8500/v1/agent/service/register
参考资料
1、Consul and Kubernetes Deployment Guide https://learn.hashicorp.com/tutorials/consul/kubernetes-deployment-guide?utm_source=consul.io&utm_medium=docs
2、k8s学习(十七) 配置并使用storageclass https://blog.csdn.net/u011943534/article/details/100887530
3、docker及k8s安装consul https://www.cnblogs.com/caibao666/p/11582909.html