近期由于工作原因,在项目支持的过程中,进行了一次K8S的基础环境部署,云平台一直是公司的重要底座,而我由于一系列原因,一直没有亲自尝试,通过本次的机会,让我重新做了一遍,也找到了和以前部署传统环境一样的感觉,虽然还有些生疏和不解,但是迈出了这一步,也算是深入学习的开始。
环境部署是作为公司技术人员,必须要掌握的,我们的产品都是基于这个基本条件下进行搭建使用的,因此对于环境的了解,原理的学习,对于我们后续问题排查,产品问题定位都是有所帮助的。
1集群架构
其核心思想是让 K8S master 节点中的各类组件具备高可用性,消除单点故障。
1.kube-apiserver:对外暴露了 K8S API,是整个集群的访问入口。由于 apiserver 本身无状态,可以通过启动多个实例并结合负载均衡器实现高可用。
2.etcd:用于存储 K8S 集群的网络配置和对象的状态信息,是整个集群的数据中心。可以通过启动奇数个 etcd 实例建立一个冗余的,可靠的数据存储层。
3.kube-scheduler:为新创建的 pod 选择一个供他们运行的节点。一个集群只能有一个活跃的 kube-scheduler 实例,可以同时启动多个 kube-scheduler 并利用领导者选举功能实现高可用。
4.kube-controller-manager:集群内部的管理控制中心。一个集群只能有一个活跃的 kube-controller-manager 实例,可以同时启动多个 kube-controller-manager 并利用领导者选举功能实现高可用。
另外,构建集群时还需要注意下列问题。
1)节点上 K8S 进程的可靠性。需要让 kubelet、kube-scheduler、kube-controller-manager 等进程在出现故障后能自动重启。
2)为 worker node 中的非 pod 进程预留资源,防止他们将与 pod 争夺资源导致节点资源短缺。
2部署架构
目前提供了5台服务器,供开发和测试环境使用,具体分配情况已经使用情况如如下:
3环境准备
进行配置前一些必要内容的处理,包括主机名的修改,网络调整、以及系统配置、安全策略等的调整,保证后续安装过程中的顺利进行。
3.1协调虚拟IP
部署高可用环境,需要两个虚拟IP的支持,一个用作内部集群的使用,另一个是用作外部集群使用,因此在与客户交互之初,就要协调好虚拟IP的网络情况,以便后续我们可以直接使用。
我们这边拿到的两个IP分别为122和123,整理我用122作为了内部集群,123为外部的集群。
3.2修改主机名称
设置主机名,添加主机名与IP对应关系,如下:
修改5台虚拟机的hosts文件
3.3修改安全策略
安全策略的处理包括两个位置,一个是关闭selinux,一个是调整防火墙的策略,保证系统访问安全,同时保证后续部署过程中不会受到安全限制。
关闭selinux
防火墙处理
调整防火墙的端口,如下:
防火墙白名单添加,如下:
上述调整完成之后,将防火墙进行重启。
3.4修改网络映射
将桥接的IPv4流量传递到iptables的链:
添加完毕后执行生效,如下:
3.5其他系统配置
调整关闭swap,方法如下:
同时调整时间同步,启动chronyd系统服务(需要检查客户给出的服务器时间是否一致,不一致要进行调整),方法如下:
4外围部署
针对不是容器里面处理的产品,我们要进行部署,因为UMC产品是需要部署到容器外的,所以支持UMC的相关中间件也是要部署到环境上的,包括redis、nginx以及keepalived。
4.1redis部署
4.1.1前置条件
1.更新linux自带的gcc 与make
安装完成后会有提示“完毕!”并自动返回到命令行
2.如果wget提示无此命令,安装wget
1)检查wget是否安装
如下显示则已经安装:
如果没有显示则表示没有安装,需要通过以下命令安装;
4.1.2安装步骤
安装命令如下:
注意:其他服务器安装方式和这个相同。
4.1.3配置Redis
1.在server1机器上 /usr/local/redis-5.0.4 目录下创建 redis_cluster 目录
命令如下:
2.在 redis_cluster 目录下,创建名为7000、7001的目录,并将 redis.conf 拷贝到这三个目录中
命令如下:
上方使用的是绝对路径进行复制,也可使用相对路径进行复制命令(需要在新建的redis_cluster目录下进行操作)如下:
3.分别修改这三个配置文件,修改如下内容
注意备份:cp /usr/local/redis-5.0.4/redis_cluster/7000/redis.conf /usr/local/redis-5.0.4/redis_cluster/7000/redis.conf.bak
注意:其他服务器于此部署类似。