利用DockerHub在Minikube中部署Registry镜像,并通过Service访问,实现本地镜像的推送和拉取
Minikube中部署Registry
-
安装Minikube(略)
-
Minikube中部署Registry
# reigstry-deployment.yml apiVersion: apps/v1 kind: Deployment metadata: name: registry namespace: default labels: app: registry-server spec: replicas: 1 selector: matchLabels: app: registry-server template: metadata: labels: app: registry-server spec: containers: - name: registry image: registry imagePullPolicy: Always ports: - containerPort: 5000
部署registry:
kubectl create -f reigstry-deployment.yml
-
将Registry公开为Service
# registry-service.yml apiVersion: v1 kind: Service metadata: name: registry-service namespace: default spec: selector: app: registry-server type: NodePort ports: - port: 5000 # 内部服务之间访问service的入口 targetPort: 5000 # 容器的端口 nodePort: 31000 # service暴露的端口
部署service:
kubectl create -f registry-service.yml
推送和拉取镜像
推送镜像
-
暴露Registry的端口给宿主机
minikube service <name>
<name>
为registry对应的service名,本文中为registry-service
结果如下:
|-----------|------------------|-------------|-------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|------------------|-------------|-------------------------| | default | registry-service | 5000 | http://172.17.0.3:31000 | |-----------|------------------|-------------|-------------------------| 🏃 Starting tunnel for service registry-service. |-----------|------------------|-------------|------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|------------------|-------------|------------------------| | default | registry-service | | http://127.0.0.1:39011 | |-----------|------------------|-------------|------------------------| 🎉 Opening service default/registry-service in default browser... 👉 http://127.0.0.1:39011 ❗ Because you are using a Docker driver on linux, the terminal needs to be open to run it.
其中
http://127.0.0.1:39011
是宿主机可以推送镜像的地址 -
将镜像标签设置对应上述仓库地址
以
grafana/grafana
为例:docker tag grafana/grafana:latest localhost:39011/grafana:latest
推送镜像:
docker push localhost:39011/grafana:latest
使用Registry中的镜像
容器镜像设置为localhost:<nodePort>/<imageName>
即可,nodePort为Registry-Service暴露的nodePort值,示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana-deployment
namespace: test
labels:
app: grafana-server
spec:
replicas: 1
selector:
matchLabels:
app: grafana-server
template:
metadata:
labels:
app: grafana-server
spec:
containers:
- name: grafana
image: localhost:31000/grafana
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3003