從harbor部署到在k8s中使用

今天實現harbor 對鏡像的管理,參考的:https://www.cnblogs.com/wdliu/p/10250385.html

一、概述

  harbor是什麼呢?英文單詞的意思是:港灣。港灣用來存放集裝箱(貨物的),而docker的由來正是借鑑了集裝箱的原理,所以harbor是用於存放docker的鏡像,作爲鏡像倉庫使用。官方的說法是:Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器。

  harbor鏡像倉庫是由VMware開源的一款企業級鏡像倉庫,它包括權限管理(RBAC)、LDAP、日誌審覈、管理界面、自我註冊、鏡像複製等諸多功能。

二、harbor安裝部署

2.安裝Docker、Docker-Compose

docker安裝

#軟件包安裝

yum install -y yum-utils  device-mapper-persistent-data lvm2
#添加yum源
yum-config-manager \
--add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
#查看可安裝版本
yum list docker-ce --showduplicates | sort -r
#安裝最新穩定版本docker-ce
yum install docker-ce -y
#啓動docker
systemctl start docker
#查看docker版本
docker version 

安裝docker-compose

#安裝pip

CentOS:
yum install epel-release -y
yum install python-pip -y

Ubuntu:
apt-get install python-pip -y

#安裝docker-compose
pip install docker-compose 

3.harbor離線安裝

  harbor提供在線安裝和離線安裝兩種方式,官方提供的安裝包地址在https://github.com/goharbor/harbor/releases,在線安裝包下載Harbor online installer,離線安裝下載Harbor offline installer,本教程使用離線方式安裝,這裏我使用最新版本v1.7.1。

解壓

tar zxvf harbor-offline-installer-v1.7.1.tgz

默認情況下解壓的目錄下會提供harbor.cfg配置文件,修改地方:

hostname = 192.168.122.31  

默認的 harbor_admin_password = Harbor12345

 我安裝的時候,是harbor.cfg 文件中hostname 變了一下,其他的不用動,ldap 設置要變的話,安裝會不成功。下面看一下安裝的結果:

[root@test3 harbor]# ./install.sh

。。。。。

Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registryctl        ... done
Creating harbor-db          ... done
Creating harbor-adminserver ... done
Creating redis              ... done
Creating registry           ... done
Creating harbor-core        ... done
Creating harbor-portal      ... done
Creating harbor-jobservice  ... done
Creating nginx              ... done

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://192.168.122.1.
For more details, please visit https://github.com/goharbor/harbor .

[root@test3 harbor]# docker-compose ps
       Name                     Command                       State                                        Ports                             
---------------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (health: starting)                                                                  
harbor-core          /harbor/start.sh                 Up (health: starting)                                                                  
harbor-db            /entrypoint.sh postgres          Up (health: starting)   5432/tcp                                                       
harbor-jobservice    /harbor/start.sh                 Up                                                                                     
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (health: starting)   127.0.0.1:1514->10514/tcp                                      
harbor-portal        nginx -g daemon off;             Up (health: starting)   80/tcp                                                         
nginx                nginx -g daemon off;             Up (health: starting)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp,                  
                                                                              0.0.0.0:80->80/tcp                                             
redis                docker-entrypoint.sh redis ...   Up                      6379/tcp                                                       
registry             /entrypoint.sh /etc/regist ...   Up (health: starting)   5000/tcp                                                       
registryctl          /harbor/start.sh                 Up (health: starting)  

登陸hostname中修改的地址,即可登陸到harbor,如果你配置的是域名,請修改host文件,默認登陸用戶名密碼是:admin/Harbor12345

我是登入的安裝harbor 的地址: 192.168.122.31, 成功了,我的harbor.cfg 裏設置的地址是:192.168.122.1 ,具體原因我再來研究一下。

注意: 要是重起docker 引起 harbor 服務不能用,可以重起一下harbor:

docker-compose down

docker-compose up -d

4.Harbor的架構:

從安裝組件我們可以看出harbor主要依靠以下幾個組件:

  • Nginx(Proxy):用於代理Harbor的registry,UI, token等服務。
  • db:負責儲存用戶權限、審計日誌、Dockerimage分組信息等數據。
  • UI:提供圖形化界面,幫助用戶管理registry上的鏡像, 並對用戶進行授權。
  • jobsevice:負責鏡像複製工作的,他和registry通信,從一個registry pull鏡像然後push到另一個registry,並記錄job_log。
  • Adminserver:是系統的配置管理中心附帶檢查存儲用量,ui和jobserver啓動時候回需要加載adminserver的配置。
  • Registry:原生的docker鏡像倉庫,負責存儲鏡像文件。
  • Log:爲了幫助監控Harbor運行,負責收集其他組件的log,記錄到syslog中。

三、上傳鏡像

配置docker信任倉庫地址

  docker1.3.2版本開始默認docker registry使用的是https,我們設置Harbor默認http方式,所以當執行用docker login、pull、push等命令操作非https的docker regsitry的都會報錯。

 vi /etc/docker/daemon.json 

#修改爲
{"registry-mirrors": ["http://a58c8480.m.daocloud.io"],
"insecure-registries": ["10.1.210.33"]}

#重啓docker
systemctl restart docker

新建項目

  默認harbor只有一個公共的library項目,該項目的權限和docker hub一樣不需要認證就可以拉取鏡像,所以在實際的使用需要有權限認證的,這裏新建立項目project1:

上傳鏡像 

上傳鏡像之前需要登陸認證,使用docker login

關於上面docker login, 需要先去https://hub.docker.com/ 註冊一個id, 再登入: docker login:  (這次實驗是登入到192.168.122.31),不一樣。

[root@test3 docker]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: shenghp
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 下面試登入到主機: 192.168.122.31:

[root@test3 docker]# docker login 192.168.122.31
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

查看本地鏡像:

docker images

給要推送的鏡像打tag(這裏一nginx鏡像爲例子),可以使用docker tag --help查看使用方式

docker tag nginx:latest 10.1.210.33/project1/nginx:latest

推送鏡像

docker push 10.1.210.33/project1/nginx:latest

到project1下會看到該鏡像,並且下載次數是0

 

四、在k8s中使用harbor倉庫 

修改每個node上的docker認證倉庫

  將每個node節點上的docker同樣需要配置可信任倉庫

vi /etc/docker/daemon.json 

#修改爲
{"registry-mirrors": ["http://a58c8480.m.daocloud.io"],
"insecure-registries": ["10.1.210.33"]}


#重啓docker
systemctl restart docker

創建認證secret

  由於harbor採用了用戶名密碼認證,所以在鏡像下載時需要配置sercet

#創建
kubectl create secret docker-registry registry-secret --namespace=default  \
--docker-server=10.1.210.33 \
--docker-username=admin \
--docker-password=Harbor12345 


#查看secret
[root@master demo]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-gdwgn   kubernetes.io/service-account-token   3      2d18h
registry-secret       kubernetes.io/dockerconfigjson        1      116s

#刪除
kubectl delete secret registry-secret

部署示例

以一個部署一個nginx爲例子,其中需要把containers中的images鏡像指定爲harbor倉庫鏡像地址,並且使用創建的的secret。

# kubectl create -f nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels: 
    appname: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
        appname: nginx
  template:
    metadata:
      labels:
        appname: nginx
    spec:
      containers:
      - name: nginx
        image: 10.1.210.33/project1/nginx:latest  #鏡像地址
        ports:
          - containerPort: 80
      imagePullSecrets:        #使用的secret
       - name: registry-secret 

查看pod

查看pod鏡像拉去日誌,可發現使用的是harbor倉庫。

 

ref:

https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

https://blog.csdn.net/u010278923/article/details/77941995 

https://kubernetes.io/docs/concepts/containers/images/

發佈了648 篇原創文章 · 獲贊 44 · 訪問量 116萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章