k8s集群部署与配置心得

数通畅联 数通畅联     2023-02-21     711

关键词:

K8S云平台是目前公司核心产品的主推部署方式,通过云平台进行产品、方案部署,可以加快部署效率,特别是针对集群式、高可用部署,云平台具有天然的优势。云平台部署模式在满足常规部署的同时,也提供了对于服务器资源的监控、运维的辅助,能协助运维人员快速进行服务器升级、扩容、启停等操作,降低运维难度。

最近参与了实际项目的K8S集群部署工作,参考已有的部署文档顺利地完成云平台部署,所以在原有的集群部署方案基础上对相关内容进行了梳理,同时也总结了在云平台部署时UMC产品的一些配置内容。 

1基础环境 

基础环境主要是对服务器进行一些配置工作,以满足K8S云平台部署的需要,由于本次部署采用的是Centos7系统,因此以Centos7为例进行说明,包括各服务器之间的通信、防火墙策略以及一些系统参数等。 

1.1主机名称 

1.为了便于K8S集群各台服务器之间的通信,对主机名称进行修改。 

2.修改hosts文件,添加主机名与IP对应: 

1.2安全策略 

本文的服务器安全主要针对于服务器防火墙进行处理,包括防火墙端口的开放以及IP白名单配置,以保证云平台部署和后续运行时各服务器之间的通信,以及部署后外部访问的需要。 

1.2.1防火墙端口 

1.编辑public.xml: 

2.添加80端口: 

3.保存退出,重启防火墙: 

注意:这里采用直接修改配置文件的方式,也可以通过firewall-cmd命令添加。 

1.2.2防火墙白名单 

1.编辑trusted.xml: 

2.添加各服务器IP:  

注意:10.244.0.0/16为K8S内部通信IP。 

3.保存退出,重启防火墙: 

1.3其他配置 

服务器一些其他参数的配置,K8S基础环境(非高可用)的部署主要是处理网络映射以及selinux和swap模块,以屏蔽K8S集群部署时的异常信息。 

1.3.1网络映射 

添加配置文件,将桥接的IPv4流量传递到iptables的链; 

1.编辑k8s.conf文件:

2.添加配置: 

  

3.添加完毕后执行生效: 

  

1.3.2selinux 

1.修改selinux配置文件: 

2.关闭selinux: 

3.立即生效: 

1.3.3swap 

1.临时关闭swap: 

2.修改配置文件: 

3.永久关闭swap: 

2软件安装 

主要是安装K8S云平台必要的一些资源,如docker、K8S组件以及一些配置参数,这一部分的内容不论是高可用部署还是非高可用部署都需要安装。 

2.1安装Docker 

在K8S集群的各台服务器上部署Docker并进行设置启动项。 

1.所有服务器都需要安装; 

2.非root用于在命令前加“sudo”,并且输入root账户服务器密码; 

3.系统没有wget时需要先安装:yum -y install wget。 

2.2添加yum源 

在/etc/yum.repos.d目录下创建kubernetes.repo文件; 

2.3安装K8S组件 

安装kubeadm、kubelet、kubectl等K8S组件; 

kubeadm: 部署集群用的命令; 

kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期; 

kubectl: 集群管理工具(可选,只要在控制集群的节点上安装即可)。 

2.4修改Cgroup 

修改cgroup driver,消除相应的警告信息; 

1.查看Cgroup; 

  

2.修改Cgroup; 

3.重新加载docker; 

4.修改验证; 

 

3集群配置 

主要是在服务器端配置K8S的集群环境,包括Master和Worker节点上软件的部署,集群的启动及节点的加入,同时部署网络插件以实现集群节点的通信。 

3.1部署Master 

Master是K8S集群部署的关键,集群部署大部分工作都是在Master上处理,包括集群的部署、初始化以及启动,一般Worker节点只是在Master部署完成后加入集群即可。 

3.1.1部署步骤 

1.在/opt目录下创建kubeadm-config.yaml; 

  

参数解释: 

2.通过阿里源预先拉镜像; 

3.查看镜像(共7个镜像); 

4.执行节点初始化; 

5.执行如下命令; 

6.查看nodes; 

 

7.查看pods; 

注意:node现在是NotReady状态,pod中coredns是Pending状态,是因为CNI网络插件未安装,继续3.2。 

3.1.2集群重置 

注意:如果修改过配置,修改完之后,需要重新初始化,重新搭建(没问题直接跳过)。 

注意:如果使用kubeadm reset命令重置集群,CNI插件也需要重新安装。 

3.2部署CNI插件 

CNI是集群各节点进行通信的网络插件,是集群部署时的必需步骤,只有部署网络插件才能建立集群,加入节点,当然网络插件不止一种,这里我们采用flannel插件。 

3.2.1资料准备 

直接使用下列文件: 

 

3.2.2安装过程 

1.安装flannel; 

2.再次查看nodes和pods(需要等待flannel初始化完成); 

注意:quay.io国内无法访问,可能会报错Init:ImagePullBackOff,需要多等待一会进行重试。 

如果网络完全不通,使用flanneld-v0.12.0-amd64.docker手动安装在所有节点上。 

注意:如果使用kubeadm reset命令重置集群,CNI插件也需要重新安装。 

3.3加入Node 

在192.168.1.222/223(Node)上执行。 

1.向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示。 

2.在192.168.1.221(Master)上查看nodes和pods。 

3.192.168.1.223(worker2)采用同样方式加入即可。 

注意:如果提示如下错误,需要删除/etc/kubernetes下面的manifests文件夹然后重新init和安装kube-flannel.yml,步骤同上: 

删除操作步骤: 

  

3.4部署Ingress 

Ingress也叫Ingress-nginx,实际是Nginx的一种实现,主要是用于K8S集群内部代理转发的需要。 

3.4.1镜像上传 

nginx-ingress.tar上传到192.168.1.221(Master)上,路径自己能找到就行(如果下面的mandatory.yaml里配置指定master,这里可以只放到指定的master就可以),导入镜像: 

3.4.2配置文件 

参考文件如下: 

 

1)编辑添加212行,表示使用主机网络; 

hostNetwork: true 

关于上面yaml文件中写入的“hostNetwork: true”具体解释:如果添加了此字段,意味着pod中运行的应用可以直接使用node节点端口,这样node节点主机所在网络的其他主机,就可以通过访问该端口访问应用。(类似于docker映射到宿主机的端口)。 

2)编辑221行,修改镜像版本,改成上面导入的0.29.0; 

上传到192.168.1.221(Master)服务器,路径自己能找到就行。 

3)设置pod时间,通常情况云服务器的时区为世界标准时间,和中国标准时间相差8个小时; 

加入红框部分,如下图: 

3.4.3节点部署 

1.因为ingress-controller我们需要部署到master服务器上,而默认master不允许部署pod,所以使用如下方法解决; 

输出如下:node “k8s” untainted。 

输出error: taint “node-role.kubernetes.io/master:” not found错误忽略。 

2.执行mandatory.yaml; 

3.确认Ingress-nginx容器; 

注意:Ingress-nginx部署后为Pending状态,需要添加标签后采用变成Running状态,可以通过UMC添加标签,所以只需要确认Ingress-nginx容器已经存在即可。 

3.4.4开启变量 

 

1.内部ingress-nginx,data参数说明: 

1)proxy-add-original-uri-header: "true"

作用:获取到ingress的完整路径。 

2)enable-underscores-in-headers: "true"

作用:允许ingress支持自定义变量。 

3)use-forwarded-headers: "true" 

作用:获取X-Forwarded-Proto,如https。 

2.外部nginx.conf配置追加: 

proxy_set_header proxy-by-outer-ng true 

作用:如果true,说明是外部nignx,不带ingress路径。 

如果false,不是外部nginx,需要加ingress路径。 

4NFS安装 

NFS主要是搭建共享资源库,用于产品部署后的资源共享,包括配置文件、日志文件以及Server部署的资源文件等。 

4.1服务端 

1.在192.168.1.221(Master)上安装NFS和rpc; 

2.启动服务和设置开启启动; 

3.建立共享文件夹; 

  

4.设置共享; 

说明: 

/opt/mnt/volumes 192.168.1.0/24(fsid=0,rw,async,no_root_squash

目录 授权给 网段 权限 

注意:192.168.1.0/24是Master的网段,如果需要修改,只修改前3个位置,保留最后一位是0,即可表示全网段可以访问。 

5.启动NFS; 

6.查看2049端口是否打开; 

  

4.2客户端 

1.在192.168.1.222/223(Worker)上也安装nfs,确保每个节点安装nfs(客户端上不需要启动nfs服务,只是为了使用showmount工具); 

2.查看挂载配置; 

  

3.在客户端创建目录,并挂载共享目录; 

4.检查(有就行,和顺序无关); 

5镜像库安装 

搭建镜像库,用于存储上传的镜像文件,包括系统镜像、产品Server、Redis镜像等。 

5.1部署安装 

1.将registry镜像pull下来; 

2.启动; 

  

5.2基础镜像 

1.上传基础镜像:base-centos-v3.0.tar; 

2.导入基础镜像;

5.3推送镜像 

1.查询docker镜像:docker images; 

2.通过对base-centos镜像打标,准备发布到Registry中; 

3.推送给Registry; 

注意:如果上传、获取本地镜像会提示如下报错,需要设置daemon.json文件。 

1.设置daemon.json文件; 

2.其他节点获取本地镜像会提示。 

由于Registry为了安全性考虑,默认是需要https证书支持的,但是我们可以通过一个简单的办法解决: 

注意:<ip>:Registry的机器ip地址,在安装registry的节点和客户端需要访问私有Registry的节点都需要执行此步操作。 

  

5.4查看镜像 

1.查看仓库有哪些镜像,运行如下命令: 

查看具体镜像标签(黄色是镜像名): 

6UMC配置 

UMC产品以及JDK、MySQL、Nginx、Redis的部署安装与配置可以参考相关部署手册,不做重点说明,这里主要介绍UMC中集群的配置与启动。 

6.1集群配置 

1.首先需要配置镜像仓库,打开UMC的镜像仓库,点击新增,配置地址: 

2.打开租户管理,新增一个租户,也可以使用默认的预置集团租户,在基础信息中选择刚才添加的镜像库地址: 

3.打开集群配置,新增一个集群,配置共享目录(部署NFS时的共享目录): 

4.先从192.168.1.221(Master)的/etc/kubernetes/admin.conf文件复制到本地,然后点击上传授权按钮上传文件: 

5.在节点信息中配置3台服务器的各个节点(Master、Worker1、Worker2): 

6.创建命名空间(可以先不建立,在集群配置时增加命名空间): 

7.创建标签,UMC初始化有预置标签信息,可以手动新增: 

8.新增镜像,并选择相应的产品,选择配置的镜像仓库: 

9.上传产品压缩包(rar格式),并根据按钮的高亮,构造镜像、推送镜像: 

6.2租户配置 

1.在租户配置功能下新增方案: 

2.在方案下新增环境: 

3.选择环境的集群名称: 

4.新增命名空间(和集群配置的命名空间同步): 

5.切换参数配置标签,配置数据库、Redis连接信息: 

6.生成并保存访问地址: 

7.依次点击Deploy、Service、Ingress的编辑按钮进行创建: 

8.访问测试: 

7分析总结 

K8S云平台部署模式是后续所有产品和方案统一采用的部署方案,通过云平台模式不仅可以降低产品部署、运维的难度,同时对于服务器的资源监控、统计分析也能发挥作用,实现集中的、一体化管理。 

7.1问题总结 

笔者是第一次在实际项目中整体进行K8S云平台的部署,虽然是第一次部署,但是借鉴于部署文档以及以往项目的部署经验,整体部署过程还是比较顺利的。但是在部署的过程中难免会遇到一些问题,后续梳理了一遍部署过程,出现的问题在文档中都有体现和说明,只是浏览文档不认真或者由于文档记录的相对简单,所以才忽略了。这也提醒了自己后续工作中一定要仔细认真,在做事情前最好有一个总体地了解,这样工作中才能尽量减少问题的发生。 

7.2产品方案 

UMC云平台实际是一个K8S的管理平台,通过Web端配置实现对K8S集群的配置、启停、监控、扩容等操作,并且通过UMC的管理功能可以将产品组件方案直接融合到平台中,实现不同产品、不同方案的快速部署,同时也提供租户、方案、环境等不同粒度的管控,可集中、可分散,并且通过命名空间有效地实现数据隔离。 

目前K8S部署都是采用手动部署的模式,即手动在服务器上部署一个个软件,后续部署方式会进行升级,提供一键部署方案,预置一键部署脚本,只需要在服务器执行脚本,就能对相关软件自动安装、自动部署集群、添加节点,大大提升部署速度,提高工作效率的同时,更能体现出专业性。 

7.3个人提升 

通过手动部署K8S集群,对K8S集群的相关组件,K8S内部的一些处理机制有了比较全面的了解,同时也加深了对于Linux系统及常用命令用法的认识,对于后续产品、环境部署、项目运维等工作也能更加方便有效,遇到问题也能更加准确地分析以及问题定位。 

对于一名项目经理来说,掌握项目管理的能力固然重要,但是对于技术能力也不能完全放下。无论是项目中遇到的技术问题,还是在实施过程中评估工作,了解技术,具备一定的技术能力将大大提升对项目的掌握,才能有效地推送项目进展。 

二进制部署k8s集群:部署kubelet(代码片段)

签发kubelet证书前面安装kube-apiserver的时候已经签发过证书,在前面签发证书的基础上签发kubelet证书,与前面签发的证书共用cat私钥文件与根配置文件ca-config.json。切换到192.168.0.102虚拟机。vi/opt/certs/kubelet-csr.jsonkubelet-csr.json文件... 查看详情

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点2018/1/4配置worker节点初始化加入集群切换worker节点连接到apiserver的LB入口调整集群中节点角色和调度策略初始化/etc/hosts###k8smaster@envDev10.10.9.67tvm-0010.10.9.68tvm-0110.10.9.69tvm-02k8sworker@envDev10.10.9.7 查看详情

云原生之kubernetes实战使用sealos部署k8s集群环境

【云原生之kubernetes实战】使用Sealos部署k8s集群一、Sealos介绍1.Sealos简介2.Sealos特性3.Sealos图示二、本地k8s节点环境1.节点规划2.节点系统版本三、下载Sealos工具包四、初始环境配置1.关闭防火墙和selinux2.配置host文件解析3.配置时间... 查看详情

云原生之kubernetes实战使用sealos部署k8s集群环境

【云原生之kubernetes实战】使用Sealos部署k8s集群一、Sealos介绍1.Sealos简介2.Sealos特性3.Sealos图示二、本地k8s节点环境1.节点规划2.节点系统版本三、下载Sealos工具包四、初始环境配置1.关闭防火墙和selinux2.配置host文件解析3.配置时间... 查看详情

kubeadm方式部署k8s集群(代码片段)

...存二、软件部署2.1内核配置2.2启动kubelet三、部署kubernetes集群3.1部署kubeadm(master节点执行)3.2安装Pod网络插件3.3添加node节点(每个node节点执行)四、部署dashboard一、基础配置1.1将master节点和node节点配 查看详情

k8s部署zookeeper集群

参考技术A记录Kubernetes使用StatefulSet方式部署Zookeeper集群。使用动态PVC,PVC创建过程略过Yaml文件包含configmap、service、StatefulSet。vimzookeeper-test.yaml更新资源清单查看创建的资源清单查看zookeeper配置查看集群状态Zookeeper集群部署完成... 查看详情

k8s集群安装部署实战详细手册(代码片段)

文章目录一、k8s集群搭建1.安装要求2.关闭防火墙、selinux、swap分区3.配置hostname、hosts、iptables4.配置k8s阿里源5.部署k8s的master和node节点6.安装网络插件(CNI)结尾一、k8s集群搭建1.安装要求3台以上机器,操作系统CentOS7.7... 查看详情

k8s集群安装部署实战详细手册(代码片段)

文章目录一、k8s集群搭建1.安装要求2.关闭防火墙、selinux、swap分区3.配置hostname、hosts、iptables4.配置k8s阿里源5.部署k8s的master和node节点6.安装网络插件(CNI)结尾一、k8s集群搭建1.安装要求3台以上机器,操作系统CentOS7.7... 查看详情

k8s部署nginx实现集群统一配置,自动更新nginx.conf配置文件总结(代码片段)

k8s部署nginx实现集群统一配置,自动更新nginx.conf配置文件总结大纲1nginx镜像选择2创建configmap保存nginx配置文件3使用inotify监控配置文件变化4Dockerfile创建5调整镜像原地址使用阿里云6创建deploy部署文件部署nginx7测试使用nginx配... 查看详情

k8s集群问题记录

k8s集群问题记录k8s学习方案问题解决思路主要学习路径:rancher(k8s)->rke->helm->kubectl->k8s常见命令总结:怎么解决简单就怎么解决例如rancher的安装使用helm安装有问题,官网有bug就使用docker的方式安装一样简便,只是个客... 查看详情

k8s集群架构的二进制部署——k8s集群学习的基础(代码片段)

K8S集群架构的二进制部署一、部署etcd二、部署docker引擎三、flannel网络配置四、部署master组件五、node节点部署一、部署etcdMaster上操作[root@192etcd-cert]#cd/usr/local/bin/[root@192bin]#rz-E(cfsslcfssl-certinfocfssljson)[root 查看详情

高可用集群篇--k8s部署微服务(代码片段)

高可用集群篇(五)--K8S部署微服务一、K8S有状态服务1.1什么是有状态服务1.2k8s部署MySQL1.2.1创建MySQL主从服务1.2.2测试主从配置1.2.3k8s部署总结(*)1.3k8s部署Redis1.4k8s部署ElasticSearch&Kibana1.4.1部署ElasticSearch1.5部署k... 查看详情

k8s部署apollo配置中心(代码片段)

...为配置中心。本实例介绍了如何采用K8S部署高可用的apollo集群。一、前提条件1、已经搭建了一个K8S集群2、一个可用的mysql数据库  apollo是需要用到mysql数据库的,所以必须要有一个可用的mysq 查看详情

rancher2.2.2-ha部署高可用k8s集群(代码片段)

...cher,确保用户始终可以访问RancherServer。当安装在Kubernetes集群中时,Rancher将与集群的etcd集成,并利用Kubernetes调度实现高可用。为确保高可用,本文所部署的Kubernetes集群将专用于运行Rancher,Rancher运行起来后,可再创建或导入集... 查看详情

kubernetes系列03—kubeadm安装部署k8s集群

...点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部署集群网络等。安装简易。 缺点: 查看详情

k8s集群中部署jenkins(代码片段)

...采用master和salve架构,我们通过将jenkins集成环境部署在k8s集群中,可以实现jenkinsslave按需创建、动态的伸缩。同时也提供了在k8s环境中应用的持续部署解决方案。一、准备docker镜像文件1、编译jenkinsserverdocker镜像,默 查看详情

k8s集群部署搭建

一.搭建环境win11 16G+1t    VMware虚机 4G+2G+2G二.拓扑图 master+2node三.ip划分四.前置条件配置完成,按照文档进行搭建即可,最终实现效果如下图  查看详情

rancher2.6部署k8s集群示例(代码片段)

...录1计算机准备2安装前准备3部署rancher4配置rancher5创建k8s集群6rancer2.6的更新点rancher2.6已经发布一段时间,与2.5还是有不少变动,而且目前只有英语文档。为了方便大家顺利使用,在此演示下rancher2.6部署k8s集群。本文... 查看详情