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

目錄:

1.簡介

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

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

  1. 執行curl -L //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. 打開//github.com/goharbor/harbor/releases,根據自己所需查找版本號下載相應的版本,這裡直接使用目前最新版本

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

  1. 找個目錄下載上面找到的包,如切換到根目錄下cd,然後執行下載wget //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": ["//ip:埠"]

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

溫馨提示:

以下涉及到的程式碼和鏡像需要結合第一篇里的怎麼打包鏡像和推送鏡像

4.客戶端登錄及推送鏡像至私有倉庫

  1. 登錄docker login //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,由於這個埠已經被佔用所以系統隨機給了一個如下圖訪問的時候以系統給的為準


//伺服器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)清理他們