之前做过使用docker来启动registry私库,在使用了Kubernetes之后,容器的形式都变成了Pod,也不会去想只有一个registry还是去使用docker来去启动,所以本文是作者本人自己去写的一些内容来做的registry以及验证。版权纯属于本博主

创建私库的本地存放目录,会将Pod内的存储目录映射到该目录

[root@node1 ~]# mkdir /opt/data/registry -p

编写启动registry的yaml文件

[root@node1 ~]# vim registry.yaml
---
# 先创建一个用于测试的namespace
apiVersion: v1
kind: Namespace
metadata:
  name: test
  labels:
    name: test
---
# 创建Deployment来启动registry的pod
apiVersion: apps/v1
kind: Deployment
metadata:
  name: registry-deployment  # Deployment的名字
  namespace: test  # 部署到指定的namespace
spec:
  replicas: 1 # 副本数量为1
  selector:
    matchLabels:
      app: registry  # label标签
  template:
    metadata:
      labels:
        app: registry
    spec:
      nodeSelector:  # 运行到指定节点,这里是指定到master节点
        node-role.kubernetes.io/master: ""
      restartPolicy: Always  # pod重启策略,无论遇到什么错误都重启pod
      hostNetwork: true  # 使用宿主机网络
      containers:    # 编写容器信息
      - name: registry
        image: registry:2  # 指定pod使用的镜像
        imagePullPolicy: IfNotPresent   # 镜像下载策略,本地没有则下载
        ports:
        - name: registry-port
          containerPort: 5000   # 容器内的端口号
          hostPort: 5000   # 宿主机中的端口号
          protocol: TCP   # 使用TCP协议
        volumeMounts:  # 指定容器内的存储目录,name不能使用下划线
        - name: registry-save
          mountPath: /var/lib/registry
      volumes:
      - name: registry-save
        hostPath:
          path: /opt/data/registry   # 将指定的容器内目录映射到宿主机的此目录

运行registry

如果要将registry部署在master节点,节点中的taint需要取消

[root@node1 ~]# kubectl taint node {master_node_name} node-role.kubernetes.io/master-
node/node1 untainted

开始部署

[root@node1 ~]# kubectl apply -f registry.yaml 
namespace/test created
deployment.apps/registry-deployment created

查看宿主机的5000端口是否启用

[root@node1 ~]# netstat -anput | grep 5000
tcp6       0      0 :::5000                 :::*                    LISTEN      127044/registry     

访问docker私库

因为使用了hostnetwork,所以可以直接访问宿主机的端口

[root@node1 ~]# curl http://192.168.1.11:5000/v2/_catalog
{"repositories":[]}

设置集群节点的默认仓库为创建的registry

三台节点都要更改

vim /usr/lib/systemd/system/docker.service 
# 14行的末尾添加--insecure-registry 192.168.1.11:5000
# 14行也就是以ExecStart开头的一行

重新加载docker配置文件,并重启服务

systemctl daemon-reload 
systemctl restart docker

测试使用一个image上传到registry

在master上进行操作

# 先下载两个镜像httpd/nginx
[root@node1 ~]# docker pull httpd
[root@node1 ~]# docker pull niginx

将下载的镜像更改标签

使用tag为镜像改个名字

注意:改名字要按照格式来私库ip:5000/镜像名

[root@node1 ~]# docker tag httpd:latest 192.168.1.11:5000/httpd
[root@node1 ~]# docker tag nginx:latest 192.168.1.11:5000/nginx

此时镜像名的作用:push到私库中(私库ip:5000)

上传到私库

[root@node1 ~]# docker push 192.168.1.11:5000/httpd
[root@node1 ~]# docker push 192.168.1.11:5000/nginx

在node节点查看下载

[root@node2 ~]# curl 192.168.1.11:5000/v2/_catalog
{"repositories":["httpd","nginx"]}
[root@node2 ~]# docker pull 192.168.1.11:5000/nginx

OK,Successful!~

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0