牧场主:5分钟内使用裸机进行Kubernetes

在交叉路口,乐队不变。

在我由于对Docker Swarm的伪简单性和持续不断的整理工作,对分布式文件系统的不太方便的工作,稍微潮湿的Web界面和狭窄的功能以及缺乏对“即开即用”的GitLab集成的支持而完全厌倦之后,决定部署您的Kubernetes群集在您自己的硬件上,即通过部署Rancher Management Server 2.0。

安装经验,容错方案,在haProxy下使用haProxy和两个仪表板:

输入数据:

主机服务器HP Proliant DL320e Gen8-2个。
VM Ubuntu服务器16.04、2Gb RAM,2vCPU,20Gb HDD-1个。 在每个主机上(VM-haProxy)。
VM Ubuntu服务器16.04、4Gb RAM,4vCPU,40Gb HDD,20Gb SSD-3个 在每个主机(VM-*-群集)上。
VM Ubuntu服务器16.04、4Gb RAM,4vCPU,100Gb HDD-1个。 在任何主机(VM-NFS)上。

网络图:

图1


入门:

VM-haProxy具有haProxy,fail2ban,iptables规则。 充当其后面所有计算机的网关。 我们有两个网关,一旦主机上的网关通信中断,所有机器都将切换到另一个。

这些节点(VM-haProxy)的主要任务是分配对后端的访问,平衡,转发端口并收集统计信息。

我的选择取决于haProxy,它是有关平衡和运行状况检查的更狭focused的工具。 为此,我喜欢配置指令的语法,并使用IP白名单和黑名单,以及使用多域SSL连接。

HaProxy配置:

haproxy.conf与评论
########################################################## #Global # ########################################################## global log 127.0.0.1 local0 notice maxconn 2000 user haproxy group haproxy tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull retries 3 option redispatch timeout connect 5000 timeout client 10000 timeout server 10000 option forwardfor option http-server-close ########################################################## #TCP # ########################################################## #    API  Kubernetes listen kube-api-tls bind *:6443 mode tcp option tcplog server VM-Master-Cluster Master:6443 ########################################################## #HTTP/HTTPS - Frontend and backend # ########################################################## #      "  ", frontend  backend. frontend http-in bind *:80 acl network_allowed src -f /path/allowed-ip #     IP.     . http-request deny if !network_allowed #       IP  . reqadd X-Forwarded-Proto:\ http mode http option httpclose acl is_haproxy hdr_end(host) -i haproxy.domain.ru acl is_rancher hdr_end(host) -i rancher.domain.ru acl is_kubernetes hdr_end(host) -i kubernetes.domain.ru use_backend kubernetes if is_kubernetes use_backend rancher if is_rancher use_backend haproxy if is_haproxy frontend https-in bind *:443 ssl crt-list /path/crt-list #    .        . acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed reqadd X-Forwarded-Proto:\ https acl is_rancher hdr_end(host) -i rancher.etraction.ru acl is_kubernetes hdr_end(host) -i kubernetes.etraction.ru use_backend kubernetes if is_kubernetes { ssl_fc_sni kubernetes.domain.ru } use_backend rancher if is_rancher { ssl_fc_sni rancher.domain.ru } # Backend  haProxy.    . backend haproxy stats enable stats uri /haproxy?stats stats realm Strictly\ Private stats auth login:passwd cookie SERVERID insert nocache indirect #  , , backend   dashboard rancher  kubernetes. backend rancher acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http redirect scheme https if !{ ssl_fc } server master master:443 check ssl verify none backend kubernetes acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http balance leastconn redirect scheme https if !{ ssl_fc } server master master:9090 check ssl verify none 


重要:所有计算机都必须通过主机名相互“了解”。

add-host-entry.pp用于在/ etc / hosts中添加主机名的人偶清单
 class host_entries { host { 'proxy01': ip => '10.10.10.11', } host { 'proxy02': ip => '10.10.10.12', } host { 'master': ip => '10.10.10.100', } host { 'node01': ip => '10.10.10.101', } host { 'node02': ip => '10.10.10.102', } host { 'node03': ip => '10.10.10.103', } host { 'node04': ip => '10.10.10.104', } host { 'node05': ip => '10.10.10.105', } host { 'nfs': ip => '10.10.10.200', } } 


VM-Master-Cluster是主控制机。 它与Puppet Master,GlusterFS Server,Rancher Server(容器),etcd(容器),控制管理器(容器)不同。 如果此主机断开连接,生产服务将继续工作。
VM-Node-Cluster-节点,工作程序。 工作机器,其资源将被组合到一个容错环境中。 没什么有趣的。

VM-NFS -NFS服务器(nfs-kernel-server)。 主要任务是提供缓冲区空间。 存储配置文件和所有文件。 不存储任何重要内容。 喝咖啡时,可以缓慢地纠正其跌落。

重要提示:所有环境机器都必须具备:docker.io,nfs-common,gluster-server。

must-have-packages.pp木偶清单,用于安装正确的软件
 class musthave { package { 'docker.io': ensure => 'installed', } package { 'nfs-common': ensure => 'installed', } package { 'gluster-server': ensure => 'installed', } } 


由于大量介绍了nfs-volume的安装和GlusterFS的配置,因此我将不对其进行描述。

如果您在规格说明中注意到有SSD磁盘,则它们为Gluster分布式文件系统的运行做好了准备。 创建分区,并存储在高速磁盘上。

注意事项 实际上,运行Rancher不需要类似镜像的环境。 以上所有都是我对集群的看法以及对我遵循的实践的描述。

要运行Rancher, 台计算机就足够了,它具有4CPU,4Gb RAM和10Gb HDD。

5分钟到Rancher。

在VM-Master-Cluster上,我们执行以下操作:

 sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher 

检查可用性:

 curl -k https://localhost 

如果您看到了API-恭喜您成功通过了一半。

再次查看网络图,我们记得我们将从外部通过haProxy进行工作,在配置中,我们发布了rancher.domain.ru链接,继续,设置您的密码。

下一页是Kubernetes集群创建页面。

图2


从“群集选项”菜单中,选择“绒布”。 我没有与其他网络提供商合作。 我不建议。

值得一提的是,如果您不打算在工作人员模式下使用管理器,我们已经安装了etcd和Control Plane复选框,则未安装工作程序复选框。
我们在局域网内工作,在NIC上使用相同的地址,因此在“公共和内部地址”字段中指示相同的IP。

复制上面的结果代码,然后在控制台中运行。

一段时间后,在Web界面中,您将看到有关添加节点的消息。 一段时间后,您将启动Kubernetes集群。

图3


要添加工作程序,请在Rancher Web界面中编辑集群,您将看到生成连接命令的菜单。

仅将复选框设置为工作程序位置,指定将来的工作程序的IP,复制命令并在所需节点的控制台中执行。

一段时间后,群集功率将增加,就像节点数一样。

安装Kubernetes仪表板:

转到“项目/命名空间”菜单。

安装后,您将看到与Kubernetes相关的名称空间将包含在项目外部。 要完全使用这些命名空间,必须将它们放置在项目中。

添加一个项目,随便命名。 使用“移动”上下文菜单将名称空间(牛系统,入口nginx,kube-public,kube系统)移至您创建的项目。 应该是这样的:

图4


直接单击项目名称,您将被带到工作负载控制面板。 我们将在这里讨论如何创建简单服务。

图5


点击右上角的“导入YAML”。 复制此文件的内容并将其粘贴到打开的窗口的文本框中,选择名称空间“ kube-system”,单击“导入”。

一段时间后,pod kubernetes-dashboard将启动。

转到pod编辑,打开端口发布菜单,设置以下值:

图6


在运行Pod的节点上检查访问权限。

 curl -k https://master:9090 

看到答案了吗? 出版物已完成,尚需到达管理部分。

在Rancher的群集管理主页上,有非常方便的工具,例如kubectl(群集管理控制台)和Kubeconfig File(包含API地址,ca.crt等的配置文件)。

我们进入kubectl并执行:

 kubectl create serviceaccount cluster-admin-dashboard-sa kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa 

我们创建了一个具有最高特权的服务帐户,现在我们需要一个令牌来访问仪表板。

查找创建的帐户的秘密:

 kubectl get secret | grep cluster-admin-dashboard-sa 

我们将在末尾看到带有特定哈希的帐户名称,将其复制并执行:

 kubectl describe secret cluster-admin-dashboard-sa-$( ) 

同样,我们记得所有内容都已通过haProxy成功发布。

我们点击链接kubernetes.domain.ru 。 输入收到的令牌。

欢喜:

图7


聚苯乙烯
总的结果是要感谢Rancher创建了一个直观的界面,一个易于部署的实例,简单的文档,快速移动的能力以及在集群级别的可伸缩性。 也许我在帖子开始时讲得太尖锐,Swarm厌倦了它,而是明显的发展趋势,这让我凝视着身边,而没有完成无聊的工作。 Docker创造了一个发展时代。 而且判断这个项目当然不适合我。

Source: https://habr.com/ru/post/zh-CN418691/


All Articles