<文章感谢 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主要功能
- 基于角色访问控制
在企业中, 通常有不同的开发团队负责不同的项目, 镜像像代码一样, 每个人角色不同需求也不同, 因此就需要访问权限控制, 根据角色分配相应的权限.
比如: 开发人员需要对项目构建这就用到读写权限(pull/push), 测试人员只需要读权限(pull), 运维一般管理镜像仓库, 具备权限分配能力, 项目经理具备所有权限
- Guest: 对指定项目只读权限
- Developer: 开发人员, 读写项目权限
- Admin: 项目管理, 所有权限
- Anonymous: 当用户未登陆时,该用户视为匿名, 不能访问私有项目, 只能访问公开项目
2.镜像复制
可以将仓库中的镜像同步到远程Harbor, 类似于MySQL的主从复制功能
3.镜像删除和空间回收
Harbor支持在web界面删除镜像, 回收无用的镜像, 释放磁盘空间
4.审计
对仓库的所有操作都有记录
- REST API
具备完整的API, 方便与外部集成
3.Harbor高可用方案
方案一: 共享存储
多个实例共享数据共享一个存储, 任何一个实例持久化存储的镜像, 其他实例都可以读取到, 通过前置负载均衡分发请求
方案二: 复制同步
利用镜像复制功能, 实现双向复制保持数据一致, 通过前置负载均衡分发请求
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
安装
[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(见配置文件)
三: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: 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 >