6-kubernetes私服

<文章感谢 xingdian >

文章目录

kubernetes私服

一:Registry

生产环境下,势必不能够每个机器都导入一遍从海外下载回来的镜像,这方法都不是可以长期使用的。

可以通过搭建本地的私有镜像仓库(docker registry,这个镜像可以在国内直接下载)来解决这个问题。

1.部署docker registry

1.1 拉取registry镜像(master节点部署)

[root@master ~]# docker pull docker.io/registry

1.2 启动registry

[root@master ~]# docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true   -v /home/data/registrydata:/tmp/registry registry

其中,/home/data/registrydata是一个比较大的系统分区,今后镜像仓库中的全部数据都会保存在这个外挂目录下。

里边的 /tmp/registry 在我下载的镜像中对应的是:/var/lib/registry,如果不确定是那个目录,大家最好使用 docker inspect registry查看一下Image相关的信息!

2.更改名称并推送

[root@node-1 ~]# docker images
REPOSITORY  TAG   IMAGE ID   CREATED   SIZE
nginx   latest   f35646e83998  8 days ago          133MB
k8s.gcr.io/kube-proxy v1.19.2  d373dd5a8593 4 weeks ago 118MB
[root@node-1 ~]# docker tag nginx:latest 10.0.1.10:5000/nginx:v1
[root@node-1 ~]# docker push 10.0.1.10:5000/nginx:v1
The push refers to repository [10.0.1.10:5000/nginx]
Get https://10.0.1.10:5000/v2/: http: server gave HTTP response to HTTPS client
报错了,不要着急,想想之前学习的docker技术
[root@node-1 ~]# cat /etc/docker/daemon.json 
{ "insecure-registries":["10.0.1.10:5000"] }
[root@master ~]# vim /etc/systemd/system/multi-user.target.wants/docker.service
--insecure-registry http://10.0.1.86:5000
[root@node-1 ~]# docker push 10.0.1.10:5000/nginx:v1

二:Harbor

1.Harbor简史

Harbor是由VMware公司开源的容器镜像仓库, 事实上, Harbor是在Docker Registry上进行了相应的企业级拓展, 从而获得了更加广泛的应用, 这些企业级拓展包括: 管理用户界面、基于角色访问控制、AD/LDAP集成以及审计日志, 足以满足基本企业需求.

2.Harbor主要功能

  1. 基于角色访问控制

在企业中, 通常有不同的开发团队负责不同的项目, 镜像像代码一样, 每个人角色不同需求也不同, 因此就需要访问权限控制, 根据角色分配相应的权限.

比如: 开发人员需要对项目构建这就用到读写权限(pull/push), 测试人员只需要读权限(pull), 运维一般管理镜像仓库, 具备权限分配能力, 项目经理具备所有权限

6-kubernetes私服

- Guest: 对指定项目只读权限

- Developer: 开发人员, 读写项目权限

- Admin: 项目管理, 所有权限

- Anonymous: 当用户未登陆时,该用户视为匿名, 不能访问私有项目, 只能访问公开项目

2.镜像复制

可以将仓库中的镜像同步到远程Harbor, 类似于MySQL的主从复制功能

3.镜像删除和空间回收

Harbor支持在web界面删除镜像, 回收无用的镜像, 释放磁盘空间

4.审计

对仓库的所有操作都有记录

  1. REST API

具备完整的API, 方便与外部集成

3.Harbor高可用方案

方案一: 共享存储

多个实例共享数据共享一个存储, 任何一个实例持久化存储的镜像, 其他实例都可以读取到, 通过前置负载均衡分发请求

6-kubernetes私服

方案二: 复制同步

利用镜像复制功能, 实现双向复制保持数据一致, 通过前置负载均衡分发请求

6-kubernetes私服

4.Harbor组件

组件 功能

harbor-adminserver 配置管理中心

harbor-db MySQL数据库

harbor-jobservice 负责镜像复制

harbor-log 记录操作日志

harbor-UI Web管理页面和API

nginx 前端代理, 负责前端页面和镜像的上传/下载/转发

redis 会话

registry 镜像

5.部署

环境准备

10.0.1.13 harbor-master

10.0.1.14 harbor-client

部署harbor

安装docker(省略)

安装docker-compose

[root@harbor ~]# curl -L https://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
[root@harbor ~]#  chmod a+x /usr/local/bin/docker-compose

安装最新harbor

[root@harbor ~]# wget https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz
[root@harbor ~]# tar xf harbor-offline-installer-v2.1.0.tgz -C /usr/local/
修改配置文件,将hostname改为ip地址,关闭https功能
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# cp harbor.yml.tmpl  harbor.yml
[root@harbor harbor]#  vim harbor.yml

6-kubernetes私服

安装

[root@harbor harbor]# ./prepare
[root@harbor harbor]# ./install.sh

服务管理

[root@harbor harbor]# docker-compose up -d 启动
[root@harbor harbor]# docker-compose stop 停止
[root@harbor harbor]# docker-compose restart 重新启动

6.浏览器访问

http://10.0.1.13

用户名:admin

密码:Harbor12345(见配置文件)

6-kubernetes私服

三:Harbor使用

1.创建用户

6-kubernetes私服

2.创建项目

6-kubernetes私服

为项目添加管理用户

6-kubernetes私服

3.仓库管理

用户添加复制的目标仓库,一般添加远程可用的仓库,这里选用的是docker官方仓库

6-kubernetes私服

4.创建复制规则

6-kubernetes私服

另外一台机器:(这里选用的是kubernetes集群master节点或者是安装了docker的节点)

修改docker启动文件
[root@master ~]# vim /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.0.1.13 --containerd=/run/containerd/containerd.sock
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
登出原有账户:
[root@master ~]# docker logout
Removing login credentials for https://index.docker.io/v1/
登录私有仓库:
[root@master ~]# docker login 10.0.1.13
Username: xingdian
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

5.上传项目到私仓

[root@master ~]# docker tag redis:latest 10.0.1.13/kubernetes/redis:v1
[root@master ~]# docker push  10.0.1.13/kubernetes/redis:v1

浏览器查看,看的镜像说明成功!

6.扩展

k8s集群使用harbor私有仓库中的镜像

1.使用命令创建一个secret

注意:

–docker-server 是私有仓库地址

–docker-username 是私有仓库用户名

–docker-password 是私有仓库对用用户名的密码

[root@master ~]# kubectl create secret docker-registry regcred --docker-server=10.11.67.119 --docker-username=diange --docker-password=QianFeng@123

2.创建pod的yaml文件

[root@master ~]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: xingdian
  labels:
    app: xingdian
spec:
  containers:
    - name: diandian
      image: 10.11.67.119/xingdian/nginx@sha256:2963fc49cc50883ba9af25f977a9997ff9af06b45c12d968b7985dc1e9254e4b 
      ports:
      - containerPort: 80
  imagePullSecrets:
    - name: regcred

3.创建pod

[root@master ~]# kubectl create -f nginx.yaml

4.查看pod

[root@master ~]# kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
xingdian   1/1     Running   0          10m

rt: 80
imagePullSecrets:
- name: regcred


3.创建pod

```bash
[root@master ~]# kubectl create -f nginx.yaml

4.查看pod

[root@master ~]# kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
xingdian   1/1     Running   0          10m

<文章感谢 xingdian >

上一篇:利用 Harbor 搭建企业级私有镜像仓库


下一篇:Docker之私有镜像仓库Harbor搭建