微服務探索之路03篇-docker私有倉庫Harbor搭建+Kubernetes(k8s)部署私有倉庫的映象

wuyubing發表於2022-01-25

目錄:

1.簡介

  第一篇提到的docker官方提供了映象倉庫是公共的,私有的是需要收費的,所以我們需要在自己的伺服器搭建私有映象倉庫,這樣也比較安全。docker官方提供的registry可以快速的搭建,但是它沒有介面管理和高階許可權控制,所以本文采用由 VMware 公司中國團隊為企業使用者設計的 Registry server 開源專案Harbor

2.安裝必須的依賴程式Docker Compose

  1. 執行curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose,下載Docker Compose到/usr/local/bin目錄下。
  2. 執行chmod +x /usr/local/bin/docker-compose,賦予檔案可執行許可權
  3. 執行docker-compose -v,檢視版本,如果正常出現版本號就是安裝成功了

以上三個步驟執行完如下圖:

3.安裝Harbor

  1. 開啟https://github.com/goharbor/harbor/releases,根據自己所需查詢版本號下載相應的版本,這裡直接使用目前最新版本

複製出來的連結如:https://github.com/goharbor/harbor/releases/download/v1.10.10/harbor-offline-installer-v1.10.10.tgz

  1. 找個目錄下載上面找到的包,如切換到根目錄下cd,然後執行下載wget https://github.com/goharbor/harbor/releases/download/v1.10.10/harbor-offline-installer-v1.10.10.tgz;(如果下載速度很慢可以本地下載完再傳到伺服器)
  2. 解壓tar zxvf 壓縮包的名字
  3. 進入解壓後的目錄cd harbor
  4. ,先備份一下主配置檔案cp harbor.yml harbor.yml.bak,然後開啟修改配置檔案vim harbor.yml;修改檔案中的內容如下圖:

6. 執行安裝./install.sh,出現如下介面就安裝成功了

7. 開啟ip:埠進入Harbor登入介面,賬號預設是admin,密碼Harbor12345密碼在上面的harbor.yml配置檔案中可以找到,安裝的時候也可以直接修改掉。

  1. 建立私有倉庫,先建立系統使用者

然後新增專案成員名稱要對應

  1. 修改docker配置vim /etc/docker/daemon.json增加私有倉庫地址,插入一行:"insecure-registries": ["http://ip:埠"]

  2. 重啟docker服務先執行systemctl daemon-reload再執行systemctl restart docker,重啟docker服務後需要執行一下docker-compose up -d啟動一下harbor

溫馨提示:

以下涉及到的程式碼和映象需要結合第一篇裡的怎麼打包映象和推送映象

4.客戶端登入及推送映象至私有倉庫

  1. 登入docker login http://ip:埠 --username 使用者名稱 --password 密碼,登入遇到強制https錯誤,因為我們這邊沒有配置Harbor的https支援所以修改本地docker支援訪問http

本地docker重啟之後再重新執行登入,提示登入成功字樣Succeeded如下圖 2. 給映象加上私有倉庫標籤docker tag 映象名:版本號 ip:埠/專案名/映象名:版本號,如圖 3. 執行推送docker push ip:埠/專案名/映象名:版本號 檢視harbor映象倉庫可以看到剛才推送的映象了

5.kubernetes(k8s)部署映象

  1. 生成64位的Secret串base64 -w 0 ~/.docker/config.json(必須先執行登入docker才會生成config.json檔案,這邊我們是在伺服器執行一下登入,因為本地的是win10登入之後沒找到config.json在哪)

  2. 在k8s介面上直接建立新資源 上圖程式碼如下:

apiVersion: v1
kind: Secret
metadata:
  name: wyb01
  namespace: test
data:
    .dockerconfigjson: ewoxxxxxxxxxxxxxxxxxxxxxxxTwq
type: kubernetes.io/dockerconfigjson
  1. 檢視建立的Secret
  1. 建立部署的資源複製下面的配置根據需求修改
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wyb01
  namespace: test
  labels:
    name: wyb01
spec:
  replicas: 2
  selector:
    matchLabels:
      name: wyb01
  template:
    metadata:
      labels:
        name: wyb01
    spec:
      imagePullSecrets:
      - name: wyb01
      containers:
      - name: wyb01
        image: ip:埠/wyb01/testzeta:1.0.0
        ports:
        - containerPort: 35678
        imagePullPolicy: Always

---

kind: Service
apiVersion: v1
metadata:
  name: wyb01
  namespace: test
spec:
  type: NodePort
  ports:
    - port: 35678
      targetPort: 35678
      NodePort: 30002
  selector:
    name: wyb01

修改完之後上傳執行

執行成功後你會發現pods裡面多了兩個因為上面的配置檔案裡replicas這個設定為2了,這邊pod幾個就是根據這個引數生成的,可以根據需求自己調節

  1. 檢視叢集對外埠號,我們在配置裡設定了30002,由於這個埠已經被佔用所以系統隨機給了一個如下圖訪問的時候以系統給的為準

http://伺服器ip:對外埠成功之後訪問自己的網站就可以看到網站內容了

本章結束


以下為遇到錯誤的記錄和解決方案如下:

  1. 部署成功了訪問的時候訪問不到,原因是部署yaml檔案裡埠設定錯誤,容器埠設定應該跟生成映象的Dockerfile裡的埠保持一致,本文的dockerfile埠設定的是35678,所以配置裡的埠都是35678;如果是從第一篇文章裡複製的你可能就設定為3100,那yaml就得對應的設定為3100。

  2. 如果沒有裝Kubernetes Dashboard,可以直接建立yaml檔案然後用kubectl create -f xxxx.ymal替代介面上建立資源的步驟

  3. 執行docker ps -a可能看到很多個狀態為exited的容器;如果都是沒用的就執行docker rm $(sudo docker ps -qf status=exited)清理他們

相關文章