Kubernetes私服
一:Registry
docker官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。
在生产环境下我们可以通过搭建本地的私有镜像仓库(docker registry 镜像可以在国内直接下载)来解决需要经常向国外下载镜像问题,以此方便我们的工作。
1.部署docker registry
参考下面步骤:
–拉取registry镜像(master节点部署)
[root@master ~]# docker pull docker.io/registry
–启动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
报错了,不要着急
[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上进行了相应拓展, 而此得到更广泛的应用,。添加的拓展包括:WebGUI页面、RABC角色访问控制、AD/LDAP集成以及审计日志,足以满足基本企业需求。
2.Harbor主要功能
1. RABC基于角色访问控制
在企业中, 通常有不同的开发团队负责不同的项目,而镜像像代码一样, 每个人角色不同需求也不同, 因此就需要访问权限控制, 根据角色分配相应的权限。
如:开发人员需要对项目构建这就用到读写权限(pull/push), 测试人员只需要读权限(pull), 运维一般管理镜像仓库,具备权限分配能力,项目经理具备所有权限。
- Guest: 对指定项目只读权限
- Developer: 开发人员, 读写项目权限
- Admin: 项目管理, 所有权限
- Anonymous: 当用户未登陆时,该用户视为匿名, 不能访问私有项目, 只能访问公开项目
2.镜像复制
将仓库中的镜像同步到远程Harbor, 类似于MySQL的主从复制功能
3.镜像删除和空间回收
Harbor支持web界面删除镜像, 释放空间
4.审计
对仓库的所有操作都有记录
5. REST API
具备完整的API, 方便与外部集成
3.Harbor高可用方案
方案一: 共享存储
多个实例共享数据共享一个存储, 任何一个实例持久化存储的镜像, 其他实例都可以读取到, 通过前置负载均衡分发请求
方案二: 复制同步
利用镜像复制功能, 实现双向复制保持数据一致
4.Harbor组件
组件 功能
harbor-adminserver 配置管理中心
harbor-db MySQL数据库
harbor-jobservice 负责镜像复制
harbor-log 记录操作日志
harbor-UI Web管理页面和API
nginx 前端代理, 负责前端页面和镜像的上传/下载/转发
redis 会话
registry 镜像
5.harbor部署
环境
10.0.1.13 harbor-master
10.0.1.14 harbor-client
部署harbor仓库,见下文
安装docker(参考–Docker容器化技术理解和使用)
安装docker-compose(参考–详解Docker Compose)
PS.Harbor是通过docker compose来部署的,这也是为什么在装Harbor之前,需要安装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
安装
[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.浏览器访问web页面
浏览器输入 http://IP
用户名:admin
密码:Harbor12345(见配置文件)
三:Harbor使用
1.创建用户
创建–设置用户名邮箱,填写密码即可
2.创建项目
为项目添加管理用户
–同创建用户
3.仓库管理
用户添加复制的目标仓库,一般添加远程可用的仓库,可以使用docker官方仓库,也可以放其他仓库地址。
4.创建复制规则
另外一台机器:(这里选用的是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: vcc
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
浏览器查看,看的镜像说明成功!
harbor 企业扩展应用
在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=victory --docker-password=QianFeng@123
2.创建pod的yaml文件
[root@master ~]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: vcc
labels:
app: vcc
spec:
containers:
- name: cvv
image: 10.11.67.119/vcc/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
vcc 1/1 Running 0 10m