摘要:我們平時鏡像都是習慣于放在公共倉庫的,比如。但在企業里,我們經常會需要搭建公司自己的鏡像倉庫。這樣可以將數據持久化,當容器掛掉時鏡像不會丟失。下面會講解如何創建一個協議的高可用倉庫。于是我為集群添加了一個節點,來做集群的鏡像倉庫。
我們平時鏡像都是習慣于放在公共倉庫的,比如Dockerhub, Daocloud。但在企業里,我們經常會需要搭建公司自己的鏡像倉庫。
這篇文章講解如何用docker提供的registry鏡像來搭建自己的鏡像倉庫。
下面用registry:2.6.2鏡像創建docker倉庫。
將宿主機的5000端口映射到容器的5000端口。
將宿主機/mnt/registry掛在到容器的/var/lib/registry目錄,容器里的這個目錄就是存放鏡像的地方。這樣可以將數據持久化,當容器掛掉時鏡像不會丟失。
mkdir /mnt/registry docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2.6.2
docker倉庫是需要ssl認證的,由于現在沒有添加ssl認證,需要在docker客戶端添加參數:
vim /etc/sysconfig/docker # 在OPTIONS下添加--insecure-registry=:5000 OPTIONS="--selinux-enabled --log-driver=json-file --signature-verification=false --insecure-registry=10.34.31.13:5000" # 重啟docker systemctl restart docker
我們可以測試一下新建的倉庫是否可用。
docker push 10.34.31.13:5000/hello-world:v1
但這樣形式的倉庫可用性不高,比如我們有多個鏡像倉庫要使用,我們需要經常去修改--insecure-registry參數。
下面會講解如何創建一個https協議的高可用倉庫。
安裝openssl
yum install -y openssl
修改openssl.cnf文件
vim /etc/pki/tls/openssl.cnf # 找到v3_ca,在下面添加宿主機的IP地址 [ v3_ca ] subjectAltName = IP:10.34.31.13
如果沒有修改這個文件,最后生成的ssl證書使用時會報錯如下:
x509: cannot validate certificate 10.34.31.13 because it doesn"t contain any IP SANs
生成ssl證書
mkdir /certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/domain.key -x509 -days 1000 -out /certs/domain.cert # 生成證書的過程中需要填寫以下參數,在Conmmon那一欄填寫你為dokcer倉庫準備的域名 Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:10.34.31.13:5000 Email Address []:
創建docker倉庫
# 這里啟動方式跟上面差別不大,多了掛載/certs文件夾和添加了兩個certificate參數 docker run -d --restart=always --name registry -v /certs:/certs -v /var/lib/registry:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.cert -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 5000:5000 registry:2.6.2
配置docker客戶端
# 以后需要使用這個倉庫的機器,在客戶端像這樣配置一下就可以了 mkdir /etc/docker/certs.d/10.34.31.13:5000 cp /certs/domain.cert /etc/docker/certs.d/10.34.31.13:5000/ca.crt # 現在就可以測試一下了 docker push 10.34.31.13:5000/hello-world:v1使用kubernetes部署docker倉庫
上面的容器是由doker直接啟動的,由于我使用的是kubernetes集群,所以我希望一切容器都能由kubernetes來管理。
于是我為kubernetes集群添加了一個node節點,來做k8s集群的鏡像倉庫。
生成ssl證書
參考上面,在準備的node節點上生成ssl證書。
給node添加標簽
因為我只想在這臺節點上運行registry容器,所以需要給這臺節點添加標簽,便于k8s部署能只選到這臺節點。
# n3是這個節點的hostname.如果沒有添加k8s客戶端權限,可以在master節點上執行。 kubectl label node n3 bind-registry=ture
創建registry目錄,用于持久化images數據
mkdir /var/lib/registry
部署registry。dockerhub-dp.yaml我會在最后面貼出來。
kubectl create -f dockerhub-dp.yaml
配置docker客戶端
這個跟上面一個思路,端口稍有不同。
# 以后需要使用這個倉庫的機器,在客戶端像這樣配置一下就可以了 mkdir /etc/docker/certs.d/10.34.31.13:30003 cp /certs/domain.cert /etc/docker/certs.d/10.34.31.13:5000/ca.crt
為了訪問方便,我將registry service的端口設置為了NodePort,但k8s限制這個端口只能設置為30000以上,所有我這里設置為了30003。
dockerhub-dp.yamlapiVersion: apps/v1beta2 kind: Deployment metadata: name: docker-local-hub namespace: kube-system labels: app: registry spec: replicas: 1 selector: matchLabels: app: registry template: metadata: labels: app: registry spec: containers: - name: registry image: registry:2.6.2 ports: - containerPort: 5000 env: - name: REGISTRY_HTTP_TLS_CERTIFICATE value: "/certs/domain.cert" - name: REGISTRY_HTTP_TLS_KEY value: "/certs/domain.key" volumeMounts: - mountPath: /var/lib/registry name: docker-hub - mountPath: /certs name: certs nodeSelector: bind-registry: "ture" volumes: - name: docker-hub hostPath: path: /var/lib/registry type: Directory - name: certs hostPath: path: /certs type: Directory --- apiVersion: v1 kind: Service metadata: name: docker-local-hub namespace: kube-system labels: app: registry spec: selector: app: registry ports: - port: 5000 targetPort: 5000 nodePort: 30003 type: NodePort
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27233.html
摘要:我們平時鏡像都是習慣于放在公共倉庫的,比如。但在企業里,我們經常會需要搭建公司自己的鏡像倉庫。這樣可以將數據持久化,當容器掛掉時鏡像不會丟失。下面會講解如何創建一個協議的高可用倉庫。于是我為集群添加了一個節點,來做集群的鏡像倉庫。 我們平時鏡像都是習慣于放在公共倉庫的,比如Dockerhub, Daocloud。但在企業里,我們經常會需要搭建公司自己的鏡像倉庫。 這篇文章講解如何用d...
摘要:最近被業務折騰的死去活來,實在沒時間發帖,花了好多個晚上才寫好這篇帖子,后續會加油的利用技術棧打造個人私有云系列文章目錄利用技術棧打造個人私有云連載之初章利用技術棧打造個人私有云連載之集群搭建利用技術棧打造個人私有云連載之環境理解和練手利用 showImg(https://segmentfault.com/img/remote/1460000013077799); 最近被業務折騰的死...
摘要:最近被業務折騰的死去活來,實在沒時間發帖,花了好多個晚上才寫好這篇帖子,后續會加油的利用技術棧打造個人私有云系列文章目錄利用技術棧打造個人私有云連載之初章利用技術棧打造個人私有云連載之集群搭建利用技術棧打造個人私有云連載之環境理解和練手利用 showImg(https://segmentfault.com/img/remote/1460000013077799); 最近被業務折騰的死...
摘要:安裝修改修改的配置刪除啟動檢查或者如果沒有安裝,則參照安裝配置這篇文章來。按類型查看參考安裝有文件沖突怎么解決啊搭建單機開發環境安裝環境安裝配置以此為準集群中部署誤導 centos7安裝 systemctl disable firewalld systemctl stop firewalld yum install lvm2 yum install docker yum install...
摘要:擴展性好當集群的資源嚴重不足而導致排隊等待時,可以很容易的添加一個到集群中,從而實現擴展。用法,選擇盡可能使用這個節點鏡像,填寫,這個容器鏡像是我們的運行環境。更新文件,這里我們只是將中的鏡像更換成最新構建出的鏡像。基于Jenkins的CI/CD實踐[TOC]一、概要提到K8S環境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新興的drone等,考慮到大多公司...
閱讀 1595·2021-11-16 11:44
閱讀 7483·2021-09-22 15:00
閱讀 4507·2021-09-02 10:20
閱讀 1952·2021-08-27 16:20
閱讀 2397·2019-08-26 14:00
閱讀 2912·2019-08-26 11:44
閱讀 1645·2019-08-23 18:33
閱讀 1865·2019-08-22 17:28