一、简介
Kubernetes:
Kubernetes是一个可以移植、可扩展的开源平台,使用 声明式的配置 并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中(类似的还有 docker swarm / mesos等),Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。
Kuboard-Spray
Kuboard-Spray 是一款可以在图形界面引导下完成 Kubernetes 高可用集群离线安装的工具。
Kuboard
Kuboard 是一款免费的 Kubernetes 管理工具,提供了丰富的功能,结合已有或新建的代码仓库、镜像仓库、CI/CD工具等,可以便捷的搭建一个生产可用的 Kubernetes 容器云平台,轻松管理和运行云原生应用。您也可以直接将 Kuboard 安装到现有的 Kubernetes 集群,通过 Kuboard 提供的 Kubernetes RBAC 管理界面,将 Kubernetes 提供的能力开放给您的开发/测试团队。
Harbor
Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
二、前期环境准备
1. 设备清单
设备类型 | IP地址 | 域名/主机名 | os 版本 |
---|---|---|---|
Kuboard spray | 172.18.1.224 | kuboard-spray | centos7.9 |
Harbor/NFS: | 172.18.1.225 | myharbor.unite-puxi.local | centos7.9 |
Kubernetes Master node | 172.18.1.220 | k8s-m | centos7.9 |
Kubernetes Work node1 | 172.18.1.221 | k8s-n1 | centos7.9 |
Kubernetes Work node2 | 172.18.1.222 | k8s-n2 | centos7.9 |
CA server | 172.18.1.240 | ca.unite-puxi.local | windows server 2016 |
DNS sever | 172.17.1.1 | ad_query.unite-puxi.local | windows server 2012 |
2. Linux 系统环境准备
内核升级
centos 内核版本为3.10 ,但是kubernetes 1.24.3(后续简称k8s)安装环境对内核版本有要求,我们需要升级到最新的内核版本
#查看当前内核版本
uname -r
#添加内核rpm 下载源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
# 安装最新内核
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (5.4.206-1.el7.elrepo.x86_64) 7 (Core)'
# 升级内核后需要重新启动
reboot
# 查看当前内核版本
uname -r
5.4.197-1.el7.elrepo.x86_64
# 卸载旧内核
yum remove -y kernel kernel-tools
# 重启系统,可以发现旧内核已经没有了
reboot
• 升级系统依赖和常用工具
# 升级系统依赖$
yum update -y
# 安装常用工具
yum install -y nano net-tools wget bind-utils
修改主机名和IP 地址
我所有的Linux系统都是从模板复制的,所以需要修改主机名和IP地址,避免主机名和IP地址冲突
# 修改主机名
hostnamectl --static set-hostname kuboard-spray
# 修改网络信息
nano /etc/sysconfig/network-scripts/ifcfg-ens192
# 修改 root 用户的密码
passwd root
# 完成以上操作后,重启系统即可
reboot
三、kuboard-spray 部署及配置
1.安装docker
#检查系统是否安装旧版本docker
yum remove docker docker-common docker-selinux docker-engine
#检查docker 安装包
yum list installed | grep docker
#若存在旧的安装包进行删除
yum remove docker-ce.x86_64
#安装相关的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置docker 安装的yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看当前可安装的docker版本
yum list docker-ce --showduplicates | sort -r
#安装最新的docker版本
yum install docker-ce -y
#启动并加入开机自启动
systemctl start docker
systemctl enable docker
查看docker版本
docker version
#修改docker pull 镜像源
nano /etc/docker/daemon.json
{
"registry-mirrors": ["https://pn9i1n15.mirror.aliyuncs.com"]
}
systemctl restart docker
2.安装kuboard-spray v1.2.0
# 使用docker run 部署kuboard-spray v1.2.0
docker run -d \
--restart=unless-stopped \
--name=kuboard-spray \
-p 80:80/tcp \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray:v1.2.0-amd64
3.配置Kuboard-spay
加载资源包
默认部署的账号为admin,密码为Kuboard123
导入最新的k8s资源包
加载资源包
等待资源包加载完成
使用kuboard-spray 部署k8s 单Master节点集群
选取对应的资源包和设置好集群名称
添加节点,Master节点和etcd节点在同一台设备上,并且etcd节点应为奇数个,同时输入IP和密码;Work 节点输入IP和密码即可保存
点击确认,开始部署
等待部署完成,kuboard不仅可以部署一台全新的k8s平台出来,还会同步部署一个kuboard的管理组件在Master节点上,可以很容易的管理和使用k8s集群。
四、kuboard配置
登录kuboard 查看k8s 集群状态
默认用户:admin
默认密码:Kuboard123
使用集群的kuboard-admin查看集群状态,kuboard既有管理员权限,我们本次不涉及账号和角色的测试,所以后续操作都使用kuboard-admin.
存储类配置
容器应用的数据如需持久化,需要定义持久化存储用以保存应用数据。
部署NFS
在NFS 服务器端
#执行以下命令安装 nfs 服务器所需的软件包
yum install -y rpcbind nfs-utils
# 创建 exports 文件,文件内容如下:
nano /etc/exports
/root/nfs_root/ *(insecure,rw,sync,no_root_squash)
#执行以下命令,启动 nfs 服务
mkdir/root/nfs_root
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -r
执行测试
exportfs
在NFS 客户端(k8s master和work节点)
#执行以下命令安装 nfs 客户端所需的软件包
yum install -y nfs-utils
#执行以下命令检查 nfs 服务器端是否有设置共享目录
showmount -e 172.18.1.225
# 输出结果如下所示
Export list for172.18.1.225:
/root/nfs_root *
#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
mkdir /root/nfsmount
mount -t nfs 172.18.1.225:/root/nfs_root /root/nfsmount
# 写入一个测试文件
echo "hello nfs server">/root/nfsmount/test.txt
在 nfs 服务器上执行以下命令,验证文件写入成功
cat /root/nfsmount/test.txt
创建存储类
在kuboard上创建存储分类
部署监控及日志组件
这部分不做过多介绍,需要注意的就是,我们前面创建的存储分类是在这些组件创建时需要调用,这些组件也是以容器的形式部署在集群中,可以实时收集集群的使用情况
部署后效果图
概览:
资源监控套件
日志监控
部署一个nginx容器
填写基本信息
配置容器的名称和镜像名称以及映射的端口
部署完成后,容器处于running状态
测试访问
五、Harbor 部署及配置
Harbor部署
我们仍然使用docker 进行harbor的部署,对于docker部分,参照之前的配置
#关闭、禁用、卸载 firewalld 防火墙
systemctl stop firewalld &&systemctl disable firewalld &&yum -y remove firewalld
# 安装 iptables
yum install -y iptables iptables-services
# 启用 iptables
systemctl start iptables &&systemctl enable iptables
# 清空 iptables
iptables -F &&service iptables save
-----------------------------------------------------------------------
#安装 docker-compose
#安装 pip,可以使用yum install python-pip,但是 centos 7.9 默认源只有 python3-pip 版本的,所以我们采用源码安装
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py
python get-pip2.py
pip install docker-compose
------------------------------------------------
#下载 harbor 安装包
#下载地址:https://github.com/goharbor/harbor/releases
#导入到安装harborlinux中
#解压安装包
tar -zxvf harbor-offline-installer-v2.5.3.tgz
#生成harbor使用的证书请求文件和key
mkdir /root/certs
cp /etc/pki/tls/openssl.cnf v3.cnf
#修改v3.cnf文件
nano v3.cnf
req_extensions = v3_req # 取消注释
[ v3_req ] ###添加以下内容
subjectAltName = @alt_names
[alt_names]
DNS.1=myharbor.unite-puxi.local
DNS.2=unite-puxi.local
DNS.3=myharbor
#生成私钥和证书请求文件
openssl req -newkey rsa:4096 -sha256 -subj "/C=CN/ST=SHANGHAI/L=SHANGHAI/O=PUXI/OU=PUXI/CN=myharbor.unite-puxi.local" -config v3.cnf -nodes -keyout myharbor.key -out myharbor.csr
#在证书服务器上将CSR文件导入,生成harbor的服务器证书
--------------------------------------------------------------------------------------------
修改harbor的配置文件
cp harbor.yml.tmpl harbor.yml
nano /root/harbor/harbor.yml
hostname: myharbor.unite-puxi.local ###修改主机名
certificate: /root/certs/myharbor.crt ###修改harbor证书位置
private_key: /root/certs/myharbor.key ###修改harbor私钥位置
#执行harbor 安装
./install.sh
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating redis ... done
Creating harbor-db ... done
Creating registry ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
---------------------------------------------------------------------------------
#导入harbor 的CA证书,确保docker可以正确的登录到harbor,并且推送images
mkidr /etc/docker/certs.d/myharbor.unite-puxi.local
#在目录下导入CA.crt
[root@myharbor myharbor.unite-puxi.local]# ls
ca.crt
#重启doocker 服务
systemctl restart docker
在证书服务器上将CSR文件导入,生成harbor的服务器证书
Harbor 导入镜像
登录Harbor 创建project
#使用docker 登录Harbor
docker login myharbor.unite-puxi.local -u admin -p Harbor12345
#使用docker pull image
docker pull vulnerables/web-dvwa
#使用docker 为镜像打标签
docker tag vulnerables/web-dvwa myharbor.unite-puxi.local/mylab/vulnerables/web-dvwa
#使用docker 将镜像上传到Harbor中
docker push myharbor.unite-puxi.local/mylab/vulnerables/web-dvwa
我们可以在harbor 上看到我们上传的镜像
六、K8s 使用Harbor的本地镜像库部署一个容器
证书问题
由于最新的k8s1.24.3 不再使用docker 作为容器引擎,而是使用containerd 作为容器引擎。
所以集群在pull 镜像的时候不再使用docker pull ,而是使用nerdctl pull,但是此时nerdctl 在调用harbor时会出现证书报错问题,此时我们可以修改containerd的配置文件忽略证书报错。
#在所有的k8s节点忽略证书问题
nano /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."myharbor.unite-puxi.local"]
endpoint = ["https://myharbor.unite-puxi.local"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."myharbor.unite-puxi.local".tls]
insecure_skip_verify = true
#重启containerd进程
systemctl restart containerd
部署dvwa
创建secret
测试从harbor pull image 部署dvwa
访问dvwa
访问dvwa的容器日志
七、总结
这个文档主要偏向于部署,后续一些组件的详细应用有时间会详细学习并整理
参考链接:
https://kuboard.cn/