K8S实战笔记--1(k8s安装 + kuboard安装 + Devops迁移ECS)
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' 文件名
来对文件内容进行快速修改。将重复的命令制作成脚本执行,以加快工作效率。