0. 引言

在DevOps实战笔记–3,我们介绍了使用Jenkins流水线任务进行项目的自动化CI/CD,借助pipeline脚本(Jenkinsfile)可以方便地对项目进行统一的配置管理,并且将Jenkinsfile 存放在Gitlab中以便于后期维护。同时,我们对于K8S也有了初步的了解,限于实验机器的硬件条件,题主决定采用外部云服务器进行K8S的相关实验。本篇将从采购阿里云ECS服务器开始,对K8S集群的搭建进行讲解。

1. 搭建K8S集群并配置集群管理工具

1.1 Kuboard简介

Kuboard是一个K8S的多集群管理界面,在Github开源。使用Kuboard提供了多种认证方式,在Kuboard可以使用内建用户库、gitlab / github 单点登录或者 LDAP 用户库进行认证,避免管理员将 ServiceAccount 的 Token 分发给普通用户而造成的麻烦。使用内建用户库时,管理员可以配置用户的密码策略、密码过期时间等安全设置。并且,通过Kuboard可以使用图形界面进行工作负载的编辑,使用户从繁琐的YML文件中解放出来。

更多详情请见:Kuboard官网

1.2 购置ECS云服务器

国内主流的ECS供应商有:阿里云、华为云、腾讯云等。

阿里云:官网详情 华为云:官网详情 腾讯云:官网详情

读者可以根据自身条件选择合适的云服务器供应商,本次实验以阿里云服务器为例,通过阅读Kuboard官网的Kubernetes安装文档,根据其要求的规格进行服务器采购,具体的服务器规格为:2核4G的服务器至少两台(需要至少一台作为主节点、一台作为从节点)、CPU 必须为 x86架构、支持的操作系统为CentOS 7.8、 CentOS 7.9或 Ubuntu 20.04。

购置完成后,从对应供应商的web控制台中查看已经创建好的实例,使用SSH服务利用公网IP对服务器进行远程连接(服务器默认开启22端口)。在远程连接服务器时,可能出现如下错误:No supported authentication methods available [preauth]。解决方法为:查看 /etc/ssh/sshd_config是否配置了参数PasswordAuthentication为no,将其改为yes后利用systemctl restart sshd重启SSH服务。

1.3 安装K8S集群并搭建集群管理工具

Kubernetes + Kuboard安装难度相对较低,在Kuboard官网中,我们可以详细查阅Kuboard的安装文档:《Kuboard安装手册》,对应此安装文档,可以完成对应版本kuboard的安装。查看Kuboard v3.x版本说明,对比Kuboard兼容性列表,观察到Kuboard v3对大多数Kubernetes版本都有支持。值得一提的是,最新版本的Kubernetes已经舍弃了Docker并使用了其他的容器技术,鉴于本实验更多侧重于Docker容器技术的使用,建议选择Kubernetes v1.19版本。

1.4 将CI/CD服务迁移至云服务器

现将如下服务流程迁移至云服务器:Gitlab -> Jenkins -> Sonarqube -> Harbor,除此之外,需要的支撑服务为:jdk + maven + docker等。

迁移CI/CD的工作流程为:

进行jdk + maven的安装,将其加入环境变量,运行source profile使配置生效,更改MAVEN_HOME/conf下的settings.xml文件,在其中配置国内镜像加速地址,并修改原有jdk编译插件为1.8版本。 在创建ECS实例时,若未选择在实例中添加自定义docker镜像,可选择手动安装docker。在使用docker20.10.9及以下版本时,经docker-compose命令创建并运行容器时可能出现线程创建错误,将docker升级后解决。 使用docker安装gitlab,在云控制台安全组中放行对应端口以从浏览器访问web管理界面。 使用docker安装Jenkins,将jdk + maven移入Jenkins数据卷目录下,或在docker-compose.yml文件中手动写入映射,以便在容器中使用jdk + maven服务。在安全组中开放端口并访问web管理界面,使用admin账户登录Jenkins,在全局工具配置中配置映射完成后的jdk + maven。 使用docker安装sonarqube + postgres,注意sonarqube版本与jdk1.8的对应关系,开放端口以访问web管理界面。 从官网下载sonarscanner,解压并移入数据卷,更改其conf/下配置文件的IP地址,并将UTF-8设置为开启。 在Jenkins中安装插件:sonarqube scanner,在全局工具配置中添加sonarqube,并将从sonarqube管理页面生成的密钥加入Jenkins全局凭证。 从github下载Harbor,修改yml文件中harbor的域名,注释掉Https证书与私钥,运行prepare与install.sh安装harbor。 在etc/docker/daemon.json中配置docker镜像加速地址与harbor私库地址,配置完成后需要使用systemctl daemon-reload重新加载改文件,重启docker。 为在Jenkins容器内部也可使用docker服务,需要将docker可执行命令、私服配置与修改权限后的/var/run/docker.sock映射入容器内部。 在Jenkins的web管理界面中,需要安装的插件有:git parameter、publish over ssh、gitlab等。 Jenkins使用账密凭证连接gitlab与目标服务器,在publish over ssh中测试服务器连接时,passphrase中填写目标服务器密码。且在构建项目时,考虑到docker容器名称不可大写,故制作镜像时需注意引用的项目名中是否包含大写字符,同时建议jenkins pipeline项目命名与构建项目名称相同,否则执行推送至私库时会出现无法识别的镜像或非法的镜像名。在流水线生成器sshpublisher中对应执行的ssh命令需要使用双引号来引用变量,默认生成的单引号只会将$引用的变量识别为字符串。 现总结因按量计费导致的公网IP变化后,需要调整IP地址的个别文件: a. 用于启动gitlab的docker-compose.yml b. sonarscanner安装目录下:/conf/sonar-scanner.properties c. harbor安装目录下的harbor.yml d. harbor安装目录下的/common/config/core/env e. /etc/docker/daemon.json,需要重新进行加载 f. 在执行上述操作,并重启docker后,需要再次执行harbor下prepare与install.sh来对harbor进行初始化,否则可能出现docker无法登入harbor服务的问题。 使用sed -i 's/*原有内容/*修改后内容/g' 文件名来对文件内容进行快速修改。将重复的命令制作成脚本执行,以加快工作效率。

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: