2024-04-14 分类: 网站建设
近期由于工作原因,在项目支持的过程中,进行了一次K8S的基础环境部署,云平台一直是公司的重要底座,而我由于一系列原因,一直没有亲自尝试,通过本次的机会,让我重新做了一遍,也找到了和以前部署传统环境一样的感觉,虽然还有些生疏和不解,但是迈出了这一步,也算是深入学习的开始。
环境部署是作为公司技术人员,必须要掌握的,我们的产品都是基于这个基本条件下进行搭建使用的,因此对于环境的了解,原理的学习,对于我们后续问题排查,产品问题定位都是有所帮助的。
集群架构其核心思想是让 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 争夺资源导致节点资源短缺。
部署架构目前提供了5台服务器,供开发和测试环境使用,具体分配情况已经使用情况如如下:
进行配置前一些必要内容的处理,包括主机名的修改,网络调整、以及系统配置、安全策略等的调整,保证后续安装过程中的顺利进行。
1.协调虚拟IP
部署高可用环境,需要两个虚拟IP的支持,一个用作内部集群的使用,另一个是用作外部集群使用,因此在与客户交互之初,就要协调好虚拟IP的网络情况,以便后续我们可以直接使用。
我们这边拿到的两个IP分别为122和123,整理我用122作为了内部集群,123为外部的集群。
2.修改主机名称
设置主机名,添加主机名与IP对应关系,如下:
修改5台虚拟机的hosts文件:
3.修改安全策略
安全策略的处理包括两个位置,一个是关闭selinux,一个是调整防火墙的策略,保证系统访问安全,同时保证后续部署过程中不会受到安全限制。
> > > > 关闭selinux
> > > > 防火墙处理
调整防火墙的端口,如下:
防火墙白名单添加,如下:
上述调整完成之后,将防火墙进行重启:
4.修改网络映射
将桥接的IPv4流量传递到iptables的链:
添加完毕后执行生效,如下:
5.其他系统配置
调整关闭swap,方法如下:
同时调整时间同步,启动chronyd系统服务(需要检查客户给出的服务器时间是否一致,不一致要进行调整),方法如下:
针对不是容器里面处理的产品,我们要进行部署,因为UMC产品是需要部署到容器外的,所以支持UMC的相关中间件也是要部署到环境上的,包括redis、nginx以及keepalived。
1.redis部署
> > > > 前置条件
1.更新linux自带的gcc 与make。
安装完成后会有提示“完毕!”并自动返回到命令行。
2.如果wget提示无此命令,安装wget。
1)检查wget是否安装:
如下显示则已经安装:
如果没有显示则表示没有安装,需要通过以下命令安装;
> > > > 安装步骤
安装命令如下:
注意:其他服务器安装方式和这个相同。
> > > > 配置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
注意:其他服务器于此部署类似。
> > > > 启动Redis
全部修改完毕后,在第一台机器上执行,启用Redis节点,以下命令:
注意:如果关闭xshell后redis进程停止了,则用下命命令启动:
第二台机器上执行,启用Redis节点,以下命令:
第三台机器上执行,启用Redis节点,以下命令:
> > > > Redis集群
在server1上执行。
> > > > Redis验证
server1执行:
之后左侧变成“XXX.XXX.X.241:7000>”表示进入了Redis的节点之后:
回显显示设置值成功:
同样在server2执行。
查看Redis中的信息。
同时可以通过确认集群信息也可以在这里执行:
cluster info //查看集群信息。
cluster nodes //查看节点信息。
如果集群报错,可以通过在每个节点下做以下两个命令;然后重新创建集群。
flushall //清空
cluster reset //重置集群
2.nginx部署
> > > > 前置条件
Nginx需要很多前置包,所以在安装nginx前需要更新前置安装包。
> > > > 步骤说明
1.将nginx安装包上传到,/usr/local目录中,如下:
2.解压这三个安装包:
3.接着进入 nginx-1.14.2目录中;
进行编译安装:
编译:
这样代表nginx已经编译安装完成。
可以通过以下命令检测Nginx是否安装完成:
> > > > 启动nginx
重启命令:
3.keepalived部署
> > > > 安装步骤
1.通过以下命令安装Keepalived。
2.设置为系统服务。
修改keepalived配置,主从机不同的地方通过黄色高亮显示:
注意备份:cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
根据下文进行配置:
注意:5台都要部署,分为两组,一组为master1、master2、master3组成的一个虚拟IP,一组是由worker1、woeker2组成的一个虚拟IP。
> > > > 启停服务
开启:systemctl start keepalived.service。
软件安装部分,特指部署K8S所涉及的相关软件内容,通过部署这些软件内容,实现K8S的功能建立实现。
1.安装haproxy
1.安装。
2.修改haproxy配置。
黄色:服务器机器名
绿色:服务器ip
3.开机默认启动haproxy,开启服务。
4.检查服务端口情况。
查看haproxy状态:
注意:如果出现启动失败情况,显示不能绑定IP,系统文件处理添加如下:
注意:所有master服务器都要进行部署配置。
2.安装Docker
注意:所有服务器都要进行部署。
3.添加阿里云UUM软件源
在/etc/yum.repos.d目录下vi kubernetes.repo
复制如下代码直接执行即可。
注意:所有服务器都要安装。
4.安装kubeadm、kubelet、kubectl
> > > > 安装方法
5.修改Cgroup Driver
修改cgroup driver是为了消除初始化集群时提示的告警:
查看:
docker info | grep Cgroup
编辑service文件:
追加下方红色字体代码:
重新加载docker:
再次查看:
docker info | grep Cgroup
以下内容主要就是针对master和worker的加入,构建内部集群。
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网络插件未安装,继续以下步骤。
2.CNI网络插件
安装flannel:
安装结果:
查看pods:
kubectl get pods -n kube-system
如果网络不通,使用flanneld-v0.12.0-amd64.docker手动在所有节点安装:
安装所需要的文件如下:
3.加入master节点
在master2和master3上执行,向集群添加新master节点,执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示,更换为自己的IP和token。
查看:
可以看到,集群中已经有3台master节点了。
4.加入node节点
在woker1和worker2执行,向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:这个在master init初始化时会有提示,更换为自己的IP和token。
到master节点查看node状态,都显示ready:
5.配置Ingress-nginx
> > > > 镜像上传
把nginx-ingress.tar上传到各个master上,路径自己能找到就行(如果下面的mandatory.yaml里配置指定master,这里可以只放到指定的master就可以),导入镜像:
> > > > YAML修改
1)编辑添加212行,表示使用主机网络。
hostNetwork: true
关于上面yaml文件中写入的“hostNetwork: true”具体解释:如果添加了此字段,意味着pod中运行的应用可以直接使用node节点端口,这样node节点主机所在网络的其他主机,就可以通过访问该端口来访问此应用。(类似于docker映射到宿主机的端口。)
2)编辑221行,修改镜像版本,改成上面导入的0.29.0。
上传到master服务器,路径自己能找到就行。
3)设置pod时间,通常情况云服务器的时区为世界标准时间,和中国标准时间相差8个小时。
加入红框部分,如下图:
参考模板文件如下:
> > > > 允许master节点部署pod
因为ingress-controller我们需要部署到master服务器上,而默认master不允许部署pod,所以使用如下方法解决:
输出如下:
node “K8S” untainted
输出error: taint “node-role.kubernetes.io/master:” not found错误忽略。
> > > > 执行mandatory.yaml
kubectl apply -f mandatory.yaml
> > > > 确认Ingress-nginx容器
确认Ingress-nginx容器正常运行:
kubectl get pod -n ingress-nginx -o wide
> > > > 开启指定变量
上传文件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.drdb高可用
> > > > 安装相关支撑程序
在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】的支持,但是系统上并没有这个命令。
> > > > 编译drbd-utils
> > > > 编译drbd
> > > > 安装drbd模块
> > > > 查看drbd版本及路径
> > > > 新磁盘分区
> > > > 配置drbd资源文件
vi /etc/drbd.d/drbd.res
> > > > 配置资源
> > > > 设置主节点
强制设置为主节点,在任一节点上执行:
再次查看:
drbdadm status
看到此时数据的状态为UpToDate(数据正在同步,单未完全同步),且已经同步42.28
主:
副:
> > > > 格式化新分区并挂载
查看:
lsblk
> > > > 设置drbd开机启动
7.NFS配置
针对NFS进行服务端和客户端的处理,通过客户端和服务端的关系,保证客户端可以访问服务端。
> > > > NFS服务端配置
1.安装NFS和rpc:
2.启动服务和设置开启启动:
3.建立共享文件夹:
4.设置共享:
5.启动NFS:
6.查看2049端口是否打开:
> > > > NFS客户端配置
1.在worker1和worker2也安装nfs,确保每个节点安装nfs(客户端上不需要启动nfs服务,只是为了使用showmount工具):
2.查看挂载配置:
3.在worker1上测试挂载是否成功:
挂载失败提示如下:
取消挂载:
4.在客户端创建目录,并挂载共享目录:
5.检查(有就行,和顺序无关):
8.镜像库搭建
镜像库主要进行存储镜像信息,
文章题目:cp网站搭建(cp网站搭建开发)
浏览地址:https://www.cdcxhl.com/news22/323522.html
成都网站建设公司_创新互联,为您提供手机网站建设、网站设计、品牌网站制作、定制网站、服务器托管、云服务器
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容