IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> K8S云平台部署过程说明 -> 正文阅读

[系统运维]K8S云平台部署过程说明

近期由于工作原因,在项目支持的过程中,进行了一次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?

注意:其他服务器于此部署类似。?

4.1.4启动Redis?

全部修改完毕后,在第一台机器上执行,启用Redis节点,以下命令:?

注意:如果关闭xshell后redis进程停止了,则用下命命令启动:?

第二台机器上执行,启用Redis节点,以下命令:

第三台机器上执行,启用Redis节点,以下命令:?

4.1.5Redis集群?

在server1上执行。?

4.1.6Redis验证?

server1执行?

之后左侧变成“XXX.XXX.X.241:7000>”表示进入了Redis的节点之后:?

回显显示设置值成功。?

同样在server2执行?

查看Redis中的信息。?

同时可以通过确认集群信息也可以在这里执行:?

cluster info ? ?//查看集群信息?

cluster nodes ?//查看节点信息?

如果集群报错,可以通过在每个节点下做以下两个命令;然后重新创建集群?

flushall ? ? ? //清空?

cluster reset ? //重置集群?

4.2nginx部署?

4.2.1前置条件?

Nginx需要很多前置包,所以在安装nginx前需要更新前置安装包。?

4.2.2步骤说明?

1.将nginx安装包上传到,/usr/local目录中,如下:?

2.解压这三个安装包?

3.接着进入 nginx-1.14.2目录中?

进行编译安装:?

编译:?

这样代表nginx已经编译安装完成。?

可以通过以下命令检测Nginx是否安装完成:

4.2.3启动nginx?

重启命令:?

4.3keepalived部署?

4.3.1安装步骤?

1.通过以下命令安装Keepalived?

2.设置为系统服务?

修改keepalived配置,主从机不同的地方通过黄色高亮显示:?

注意备份:cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak?

根据下文进行配置:?

注意:5台都要部署,分为两组,一组为master1、master2、master3组成的一个虚拟IP,一组是由worker1、woeker2组成的一个虚拟IP。?

4.3.2启停服务?

开启:systemctl start keepalived.service?

5软件安装?

软件安装部分,特指部署K8S所涉及的相关软件内容,通过部署这些软件内容,实现K8S的功能建立实现。?

5.1安装haproxy?

1.安装?

2.修改haproxy配置?

黄色:服务器机器名?

绿色:服务器ip?

3.开机默认启动haproxy,开启服务?

4.检查服务端口情况:?

查看haproxy状态?

注意:如果出现启动失败情况,显示不能绑定IP,系统文件处理添加如下

注意:所有master服务器都要进行部署配置。?

5.2安装Docker?

??

注意:所有服务器都要进行部署。??

5.3添加阿里云UUM软件源?

在/etc/yum.repos.d目录下vi kubernetes.repo?

复制如下代码直接执行即可?

注意:所有服务器都要安装。?

5.4安装kubeadm、kubelet、kubectl?

5.4.1安装方法?

5.5修改Cgroup Driver?

修改cgroup driver是为了消除初始化集群时提示的告警:?

查看:?

docker info | grep Cgroup?

编辑service文件:?

追加下方红色字体代码:?

重新加载docker?

再次查看?

docker info | grep Cgroup?

6集群部署?

以下内容主要就是针对master和worker的加入,构建内部集群。?

6.1部署Master?

在master1上,准备集群配置文件,在/opt目录下创建kubeadm-config.yaml?

??

1.kubernetes拉取镜像?

注意:如果服务器断网,需要提前加载镜像包,上传服务器之后,通过?

的方式加载镜像,镜像列表如下(可以通过:docker images命令查询)?

2.执行节点初始化?

3.Master初始化完毕后最下面这个必须记录下来,后面node服务器加入需要用到?

??

按提示执行命令:

4.查看:?

kubectl get nodes?

kubectl get pods -n kube-system?

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

6.2CNI网络插件?

安装flannel?

安装结果:?

查看pods:?

kubectl get pods -n kube-system?

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

安装所需要的文件如下:?

6.3加入master节点?

在master2和master3上执行,向集群添加新master节点,执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示,更换为自己的IP和token。?

查看:?

可以看到,集群中已经有3台master节点了。?

6.4加入node节点?

在woker1和worker2执行,向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示,更换为自己的IP和token。?

到master节点查看node状态,都显示ready:?

?

6.5配置Ingress-nginx?

6.5.1镜像上传?

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

6.5.2YAML修改?

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

hostNetwork: true?

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

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

上传到master服务器,路径自己能找到就行。?

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

加入红框部分,如下图:?

参考模板文件如下:?

6.5.3允许master节点部署pod?

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

输出如下:?

node “K8S” untainted?

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

6.5.4执行mandatory.yaml?

kubectl apply -f mandatory.yaml?

6.5.5确认Ingress-nginx容器?

确认Ingress-nginx容器正常运行:?

kubectl get pod -n ingress-nginx -o wide?

6.5.6开启指定变量?

上传文件configmap.yaml,然后调整相应参数,在该目录下执行以下命令?

kubectl apply -f configmap.yaml?

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?

6.6drdb高可用?

6.6.1安装相关支撑程序?

在master1和master2安装?

到 http://oss.linbit.com/drbd 下载drbd-9.0.19-1.tar.gz、drbd-utils-9.12.1.tar.gz,再将drbd-9.0.19-1.tar.gz、drbd-utils-9.12.2.tar.gz上传到虚拟机/usr/local目录,再装一些支撑软件?

安装po4a-translate,编译drbd-utils的rpm包的时候,需要有命令【po4a-translate】的支持,但是系统上并没有这个命令?

6.6.2编译drbd-utils?

6.6.3编译drbd?

6.6.4安装drbd模块?

??

6.6.5查看drbd版本及路径?

6.6.6新磁盘分区?

6.6.7配置drbd资源文件?

vi /etc/drbd.d/drbd.res?

??

6.6.8配置资源?

6.6.9设置主节点?

强制设置为主节点,在任一节点上执行:?

再次查看?

drbdadm status?

看到此时数据的状态为UpToDate(数据正在同步,单未完全同步),且已经同步42.28?

主:?

副:

6.6.10格式化新分区并挂载?

查看:?

lsblk?

6.6.11设置drbd开机启动?

6.7NFS配置?

针对NFS进行服务端和客户端的处理,通过客户端和服务端的关系,保证客户端可以访问服务端。?

6.7.1NFS服务端配置?

1.安装NFS和rpc?

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

3.建立共享文件夹:?

??

4.设置共享:?

5.启动NFS?

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

??

6.7.2NFS客户端配置?

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

2.查看挂载配置:?

3.在worker1上测试挂载是否成功?

挂载失败提示如下:?

取消挂载:?

4.在客户端创建目录,并挂载共享目录?

5.检查(有就行,和顺序无关)?

6.8镜像库搭建?

镜像库主要进行存储镜像信息,供UMC后续使用。?

6.8.1搭建镜像库?

1.将registry镜像pull下来?

2.启动(全部复制)?

6.8.2上传镜像?

实例:?

在可以找到的位置上传基础镜像,然后通过本地上传命令进行镜像加载?

镜像推送到?

验证:?

1.可以拉取一个busybox镜像(因为体积小),进行实验?

2.打标,准备发布到Registry中?

3.推送给Registry?

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

设置daemon.json文件?

其他节点获取本地镜像会提示?

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

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

6.8.3查看镜像??

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

??

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

6.8.4拉取镜像?

拉取镜像?

6.8.5删除镜像?

1.配置hosts映射?

2.下载:?

3.查看:

?

4.授权:?

5.查找备份路径:?

find / -name registry?

如果没有这个路径,则是因为上传没有成功,不需要删除。?

6.设置镜像仓库的位置:?

7.删除:?

8.重启docker?

删除镜像之后要重启docker,不然还是会出现相同镜像push不成功的问题?

至此,K8S整体环境部署完毕。?

7心得体会?

本次环境的部署相对来说还是比较顺利,重要的一点就是随着文档体系的不断完善,很多问题都得以规避,因此在按照公司提供的标准部署文档来操作处理,问题也相对少了许多,大大的减少了自己研究处理的时间,自己也得以将大部分的时间用于了解和学习原理知识,由理解到部署,让自己的认识更加深刻。?

7.1能力提升?

之前自己一直没有切实的部署过云平台环境,对于其原理都是懵懵懂懂的,对于不同服务器怎么分配,分配好的服务器应该部署哪些东西,都是不了解的,因此就导致在实际使用过程中,也是屡屡出现问题,需要找同事协助解决,自己基本没有能力去解决。但是通过本次的部署学习,让我受益匪浅,对于哪些产品和软件应该部署在哪,为什么部署到那,都有所了解。并且针对一些问题的处理和解决,也渐渐的学会了如何排查,然后怎么处理,并且针对重大问题,如何进行集群重置,然后重新部署,自己也尝试了一下,总体来说,本次部署工作收获满满。?

7.2自我总结?

在云平台部署的过程中也出现了一些问题,主要也是自己在部署过程中不够仔细,拿来即用的原则不是可取的,因为每个人使用和理解都不一样。因此,有的时候理解上有偏差,就导致后续一系列问题的出现,因此,通过理解然后去解读,才能尽量减少这样问题的出现,并且不管什么情况下,都要有对大局的把控意识,例如对于标准文档,不应该拿过来就照着弄,而是应该整体看一下内容,把控整体的内容规划,然后再去弄,这样出现问题之后,相关联的问题就都能通过文档去定位,然后确认是什么问题,有针对性的去调整,避免遗漏,或知识获取不全的问题。?

7.3深入思考?

K8S的部署学习,是对云部署模式使用的一块敲门砖,我们对于云的了解,以前都是听说,而且感觉是高大上,遥不可及的,只有你真正的部署过,了解其中的原理了,你才能真实的感觉到,其实就哪些东西,所谓的云,也是离不开以前的部署模式的,只是使用的模式,以及使用的软件有所变化,类比以前传统环境部署的知识一样是通用的,而且有类似的地方,通过这种类比学习的方式,很快就能掌握云部署的技巧。因此对于新鲜事物不要惧怕,要敢于尝试,重在理解,只有这样才能突破现象看本质,学习的更加扎实。?

云平台的使用已经成为一种趋势,为了跟上时代的潮流、公司的脚步,我们应该将这种技能变成安身立命的本能,不仅仅是环境的部署上,还有环境的问题处理上,都要游刃有余,只有这样,才能适应后续项目的任务,在客户现场有更好的表现,给客户带来足够的安心,保证项目的顺利完成。?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 22:29:20  更:2021-10-13 22:29:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:30:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码