一、环境准备(可以不做)
1、禁用swap分区
vim /etc/fstab
# 将下面的内容注释掉
#/dev/mapper/centos-swap swap
2、修改主机名及时间同步
# 设置主机名 hostnamectl set-hostname harbor # 时间同步 yum -y install ntp systemctl enable ntpd systemctl start ntpd ntpdate -u cn.pool.ntp.org hwclock --systohc timedatectl set-timezone Asia/Shanghai
3、关闭防火墙及升级内核
# 关闭防火墙 Selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config # 升级内核 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml -y&&sed -i s/saved/0/g /etc/default/grub&&grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
二、安装Docker、Docker-compose
1、安装Docker和Docker Compose
yum -y install yum-utils device-mapper-persistent-data lvm2 #紧接着配置一个稳定(stable)的仓库、仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 更新yum安装的相关Docker软件包&安装docker: yum update -y && yum install docker-ce #查看docker版本: docker -v # 安装docker-compose到 /usr/local/bin目录(在该目录下不需要配置环境变量) curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 赋权 chmod 755 /usr/local/bin/docker-compose # 查看docker-compose版本 docker-compose -v
2、设置开机启动并替换docker配置
# 设置开机启动并启动docker
systemctl enable docker
systemctl start docker
3、追加私有仓库域名到各个服务器
echo "192.168.124.22 hub.menglong.com" >> /etc/hosts
# 验证是否追加成功
cat /etc/host
4、将集群的各个node节点的映射也配置到各个服务器(K8S集群+镜像仓库)的hosts中
# 加载hostname: hostnamectl set-hostname hub.menglong.com # 验证: hostname
这里在本机上(windows)也设置一下域名,否则浏览器访问时就只能使用IP访问。
5、配置daemon.json
vi /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"insecure-registries": ["https://hub.menglong.com"]}
三、安装Harbor
1、下载Harbor
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.2.0.tgz # 移动到 /usr/local/src/ mv harbor-offline-installer-v1.2.0.tgz /usr/local/src/ tar xf harbor-offline-installer-v1.5.0.tgz
2、修改harbor配置文件harbor.cfg
修改以下内容
# 可以是IP或着域名,但是不能使用127.0.0.1和localhost
hostname = hub.menglong.com
# 协议用https
ui_url_protocol = https
3、根据harbor.cfg中配置的证书存放目录(ssl_cert配置的目录):mkdir -p /data/cert/
进入存放证书目录,开始创建证书(伪证书):
#首先生成证书私钥(这里会让输入key,直接输入即可,我输入的是menglong)
openssl genrsa -des3 -out server.key 2048
#证书的服务
openssl req -new -key server.key -out server.csr
#备份私钥
cp server.key server.key.org
#转换为证书
openssl rsa -in server.key.org -out server.key
#给证书签名
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
4、给所有的证书授权:
chmod 755 *
5、给K8S集群的每个节点配置镜像仓库地址(vi /etc/docker/daemon.json),添加如下内容
"insecure-registries": ["https://hub.menglong.com"]
6、重启K8S集群docker
systemctl daemon-reload && systemctl restart docker
四、访问Harbor及Harbor配置
直接访问IP即可,默认为80端口,如果要修改端口,可以修改docker-compose.yaml对应服务的映射
管理员用户名为admin,密码为harbor.cfg配置文件中配置的密码
1、创建用户:
2、新建项目:
3、镜像打包命令和上传
在项目可以新增人员,可以查看镜像打包命令和上传命令
打包和上传样例:
# 在K8S中登录镜像仓库: docker login https://hub.menglong.com # 打镜像: docker tag lcl-galaxy-k8s:v2.0 hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0 # 推送镜像: docker push hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0
镜像已经上传,可以将本地打包的镜像(hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0)删除
docker rmi -f c2d136b74fdd
4、拉取镜像
以刚才上传的镜像为例
docker pull hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0
说明:如果打开harbor不能访问,可以使用以下步骤排查:
# 1、查看harbor是否都处于up状态 docker-compose ps # 2、如果存在状态不是UP的,使用下面命令重启 coker-compose sown docker-compose up # 3如果还不能访问,有可能是证书设置的问题,可以删除harbor及其文件重新生成证书并重新配置harbor rm -rf harbor rm -rf /data/*
五、使用dockerfile创建镜像并上传
1、新建一个springboot项目,然后打包,并将jar包上传至服务器
创建dockerfile文件:vi dockerfile
FROM java:8 VOLUME /tmp ADD lcl-galaxy-k8s-0.0.1-SNAPSHOT.jar /lcl-galaxy-k8s.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/lcl-galaxy-k8s.jar"]
说明:ADD前的是上传的jar包,后面的是要生成的镜像名称,ENTRYPOINT中第一个参数是用来标识前端项目还是后端项目的
2、生成镜像
# 生成镜像 -t后面是镜像的名称 docker build -t lcl-galaxy-k8s . # 查看镜像 docker images
3、上传私有仓库
# 打镜像:
docker tag lcl-galaxy-k8s:v2.0 hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0
# 推送镜像:
docker push hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0
说明:实际生产上是在项目中添加dockerfile配置文件,然后使用jenkins进行部署。
六、验证使用镜像仓库部署Pod
从私服中拉取镜像运行一个pod:
kubectl run lcl-galaxy-k8s --image=hub.menglong.com/lcl-galaxy/lcl-galaxy-k8s:1.0 --port=8080
获取pod详细信息:
kubectl get pod -o wide
访问pod:curl 10.244.2.26:8080/k8s/test1