超全K8s集群构建指南,建议收藏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超全K8s集群构建指南,建议收藏相关的知识,希望对你有一定的参考价值。

参考技术A

1. 什么是kubernetes
 Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。


2. kubernetes核心组件说明
Kubernetes 集群中主要存在两种类型的节点,分别是 master 节点 ,以及 minion 节点

Minion 节点是实际运行 Docker 容器的节点,负责和节点上运行的 Docker 进行交互,并且提供了代理功能。

Master 节点负责对外提供一系列管理集群的 API 接口,并且通过和 Minion 节点交互来实现对集群的操作管理。

apiserver :用户和 kubernetes 集群交互的入口,封装了核心对象的增删改查操作,提供了 RESTFul 风格的 API 接口,通过 etcd 来实现持久化并维护对象的一致性。


scheduler :负责集群资源的调度和管理,例如当有 pod 异常退出需要重新分配机器时,scheduler 通过一定的调度算法从而找到最合适的节点。


controller-manager :主要是用于保证 replicationController 定义的复制数量和实际运行的 pod 数量一致,另外还保证了从 service 到 pod 的映射关系总是最新的。


kubelet :运行在 minion 节点,负责和节点上的 Docker 交互,例如启停容器,监控运行状态等。


proxy :运行在 minion 节点,负责为 pod 提供代理功能,会定期从 etcd 获取 service 信息,并根据 service 信息通过修改 iptables 来实现流量转发(最初的版本是直接通过程序提供转发功能,效率较低。),将流量转发到要访问的 pod 所在的节点上去。


etcd :key-value键值存储数据库,用来存储kubernetes的信息的。


flannel :Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署。


我们知道当我们启动 Docker 后会有一个用于和容器进行交互的 IP 地址,如果不去管理的话可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的 Docker 容器。


Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP 通信。


3. Kubernetes的核心概念

Pod
运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。


Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。

         
Replication Controller
Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。

集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。

Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。


Service
Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。

Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。


Label
Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的K/V键值对。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。

Node
Node是Kubernetes集群架构中运行Pod的服务节点(或agent)。

Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。


4. 前置条件设置
三台Centos7系统的虚拟机(1个master+2个node),三台机器上的防火墙,SELINUX全部关掉。我的实验坏境可以上网,默认的YUM源就可以用。


5. 部署规划
192.168.10.1 # master节点(etcd,kubernetes-master)
192.168.10.2 # node1节点(etcd,kubernetes-node,docker,flannel)
192.168.10.3 # node2节点(etcd,kubernetes-node,docker,flannel)


6. 开始安装

step1:在master上安装
yum install kubernetes-master etcd flannel -y


step2:在node上安装
yum install kubernetes-node etcd flannel -y


step3:etcd集群配置
在master节点上编辑etcd配置文件


在node1节点上编辑etcd配置文件


在node2节点上编辑etcd配置文件


到此etcd集群就部署完了,然后每个节点上启动
systemctl start etcd


step4:验证


step6:启动Master上的三个服务


step7:kubernetes node安装


node2 节点重复上述操作
step8:分别启动kubernetes node服务


7. 网络配置
因为kubernetes集群中网络部分是插件形式安装的,我们这里选用flannel
上述安装步骤已经install 了


为flannel创建分配的网络


8. 执行kubectl 命令检查
在master上执行下面,检查kubernetes的状态


9. 常用排错命令如下

以上是关于超全K8s集群构建指南,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章

半小时体验云原生:手把手教你在k8s上部署springboot应用——干货分享,建议收藏

K8s kubectl 常用命令总结,建议收藏!

一、自建k8s集群

两地三中心,搭建一套k8s集群还是各区域搭建各自k8s集群?

从零开始k8s

从零开始k8s