Kubernetes中安装Consul服务过程及问题解决

介绍

本文主要介绍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

你可能感兴趣的:(kubernetes,docker,consul)