一、環境准備(可以不做)
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