K8S怎么设置本地私有仓库

一、docker本地仓库搭建

Docker仓库主要用于存放Docker镜像,Docker仓库分为公共仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下:

  • 节省网络带宽,针对于每个镜像不用去Docker官网仓库下载;
  • 下载Docker镜像从本地私有仓库中下载;
  • 组件公司内部私有仓库,方便各部门使用,服务器管理更加统一;
  • 可以基于GIT或者SVN、Jenkins更新本地Docker私有仓库镜像版本。

官方提供Docker Registry来构建本地私有仓库,目前最新版本为v2,最新版的docker已不再支持v1,Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如下为在192.168.0.123服务器上构建Docker本地私有仓库的方法及步骤:

1、下载Docker registry镜像,命令如下:

docker pull registry

2、启动私有仓库容器,数据存到data

mkdir -p /data/registry
docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry docker.io/registry

默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下。

3、上传镜像到本地私有仓库

docker push 192.168.2.101:5000/busybox 
docker push 192.168.2.101:5000/centos76 
docker push 192.168.2.101:5000/nginx

报错信息:

[root@etcd-node2 ~]# docker push 192.168.2.101:5000/nginx
The push refers to a repository [192.168.2.101:5000/nginx]
Get https://192.168.2.101:5000/v1/_ping: http: server gave HTTP response to HTTPS client

解决办法:

vim /etc/docker/daemon.json 
{
        "insecure-registries":["192.168.2.101:5000"]
}
systemctl restart docker

4、检测本地私有仓库

curl -XGET http://192.168.2.101:5000/v2/_catalog
curl -XGET http://192.168.2.101:5000/v2/busybox/tags/list

5、客户端使用本地私有仓库

修改配置文件重启docker服务(一)

这种方法不知道为什么在执行docker pull nginx的时候不从本地仓库下载,推荐使用第二种方法

vim /etc/docker/daemon.json 
{
        "insecure-registries":["192.168.2.101:5000"]
}
systemctl restart docker

修改docker配置文件(二)

vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.2.101:5000'
ADD_REGISTRY='--add-registry 192.168.2.101:5000'
systemctl restart docker

测试

至此,docker本地仓库搭建完成。

二、kubernetes Pods配置本地私有仓库

构建完Kubernetes集群环境,接下来创建应用Pods,根据企业的需求可以创建Nginx、Tomcat、CentOS应用,创建应用最后提前将镜像如果使用外网仓库,会非常慢,建议将公共仓库改为私有仓库,这样可以快速启动不同的应用。

如果使用公共仓库,可能报超时,此时可以用kubectl describe和kubectl logs命令定位原因,发现原因是无法从gcr.io(Google Container-Registry)拉取镜像,可以改成其他可访问的地址,也可以创建Docker私有镜像。

三、kubernetes使用本地仓库

kuberbetes-controller.yaml文件分享

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
    spec:
      containers:
      - name: kubernetes-dashboard
        image: 10.168.1.21:5000/kubernetes-dashboard-amd64:latest
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        args:
          - --apiserver-host=http://10.168.1.20:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30

dashboard-service.yaml文件分享

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090

创建

[root@master opt]# kubectl create -f dashboard-controller.yaml 
deployment "kubernetes-dashboard" created
[root@master opt]# kubectl create -f dashboard-service.yaml 
service "kubernetes-dashboard" created

查看

修改kubelet配置文件

#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.168.1.21:5000/pod-infrastructure:latest"

重启服务

systemctl restart kubelet

测试

从上图可以看出,镜像成功从本地调取!!!

发表评论

后才能评论