0%

从零开始搭建k8s集群环境(一)——搭建镜像存储服和镜像服

从零开始搭建 k8s 集群环境系列笔记:

标题很绕,镜像存储服和镜像服是两个概念:

  • 镜像存储服:docker registry,用来存(push)取(pull)自己的image的服务器
  • 镜像服:docker mirror,用来加速 Docker pull 镜像文件的服务器

为什么一来就先搭建 Docker 镜像服务器呢,这么说吧:如果你也在几天时间经过无数次搭建、重置K8s环境的体验,然后感受到国内镜像下载的龟速速度之后,你也会先搭一个本地的镜像服务器的。

  • 镜像存储服使用的是:VMware大厂的Harbor, 这里使用的是离线安装版,我已经受尽下载失败带来的羞辱了!!!另外,目前最新的 Harbor-v1.5.0 有一个巨大的不能忍的BUG,所以这里就用 Harbor-v1.4.0 做例子。
  • 镜像服使用的是:Registry,虽然 Harbor 内部也是 Registry,但由于 Harbor 部署为mirror模式就是去了 push 能力,所以 Mirror 单独起容器部署。

注:由于目前 Harbor 如果配置其内置的 Registry 为镜像模式, Harbor 会丧失 push 能力,所以目前只能分开配置存储服和镜像服。

硬件环境说明:

  • Master:VBox虚拟机/Centos_7.5-1804/192.168.56.100
  • Images:VBox虚拟机/Centos_7.5-1804/192.168.56.101
  • Node01:VBox虚拟机/Centos_7.5-1804/192.168.56.102

软件环境说明:

  • docker-ce-17.03.2
  • kubernetes-v1.9.0
  • harbor-v1.4.0

这里主要操作 Images 机器。

一、安装相关依赖

1、安装Docker

Docker 使用离线版 docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
下载地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

# 将安装 Docker 和依赖包
yum install -y docker-ce-*.rpm

启动docker

systemctl enable docker
systemctl restart docker

查看docker版本

$ docker version

Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64
 Experimental: false

2、安装docker-compose

直接下载

curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose 

python-pip安装

# 安装python-pip
yum -y install epel-release
yum -y install python-pip
# 安装docker-compose
pip install docker-compose

源码安装

wget https://github.com/docker/compose/archive/master.zip
unzip master.zip
cd compose-master
python setup.py install

查看docker-compose版本

$ docker-compose version

docker-compose version 1.13.0dev, build unknown
docker-py version: 2.2.1
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013

二、部署镜像私服Harbor

Harbor官方网址: https://github.com/vmware/harbor

1、下载Harbor离线安装包

wget https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-offline-installer-v1.4.0.tgz

官方镜像站:http://harbor.orientsoft.cn/

2、解压

tar zxvf harbor-offline-installer-v1.4.0.tgz

3、修改配置文件

cd harbor
vi harbor.cfg

配置文件参数说明(转自:http://www.cnblogs.com/jicki/p/5737369.html)

## Configuration file of Harbor
# hostname 设置访问地址,支持IP,域名,主机名,禁止设置127.0.0.1
hostname = reg.mydomain.com

# 访问协议,可设置 http,https
ui_url_protocol = http

# 邮件通知, 配置邮件通知。
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false

# harbor WEB UI登陆使用的密码
harbor_admin_password = Harbor12345

# 认证方式,这里支持多种认证方式,默认是 db_auth ,既mysql数据库存储认证。
# 这里还支持 ldap 以及 本地文件存储方式。
auth_mode = db_auth

# ldap 服务器访问地址。
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com

# mysql root 账户的 密码
db_password = root123
self_registration = on
use_compressed_js = on
max_job_workers = 3 
verify_remote_cert = on
customize_crt = on

# 一些显示的设置.
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email = example@example.com

此处我们只修改 hostname=192.168.56.101(私有仓库主机ip)

4、更新生成相关配置文件

./prepare

5、安装

# 启动 Docker
systemctl restart docker
# 执行安装脚本
./install.sh

完成完成之后就可以在浏览器中输入:http://192.168.56.101 进入HarborWeb管理后台80docker-compose.yml 配置文件中nginx容器的默认端口),默认的帐号密码是admin, Harbor12345(如果你没有修改harbor.cfg 中的 harbor_admin_password

查看 compose 状态

docker-compose ps

没意外的话,应该全部状态都是UP

需要修改web访问端口的话,先在 harbor.cfghostname=192.168.56.101:5000,再把 docker-compose.yml 中的 80 端口改为 5000,如下(只贴修改部分)

proxy:
    image: vmware/nginx:1.11.5-patched
    container_name: nginx
    restart: always
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    ports:
      - 5000:80
      - 443:443
      - 4443:4443

更多关于 docker-compose 命令相关参数选项可 查看官网

6、上传镜像到私有仓库

因为是本地环境,所以基本都是使用 HTTP 协议;哪台主机需要上传镜像到刚搭建的私有仓库,就需要更改 docker 进程启动的相关参数

A、修改docker守护进程启动参数

参数新增 --insecure-registry 192.168.56.101

vi /etc/sysconfig/docker

OPTIONS='--selinux-enabled \
         --log-driver=journald \
         --signature-verification=false \
         --registry-mirror=https://olzwzeg2.mirror.aliyuncs.com \
        --insecure-registry 192.168.56.101'

注意:

--registry-mirror=https://olzwzeg2.mirror.aliyuncs.com

是用于 docker 镜像下载加速,如何设置镜像加速

B、重启docker进程

重启进程前应先停掉所有在运行的容器

systemctl restart docker

C、修改docker镜像tag标签

格式为: ip/项目名/image名字:版本号 (项目名为 harbor 中的项目名)

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              00f017a8c2a6        5 weeks ago         1.11 MB
$ docker tag docker.io/busybox:latest 192.168.56.101/library/busybox:latest

D、登陆并push

$ docker login 192.168.56.101:80
$ docker push 192.168.56.101/library/busybox:latest

上传完后在 harbor web 界面的 test 项目下则可以看到刚上传的镜像了

7、从私有仓库下载镜像

在需要下载镜像的机器上,同样需要修改 docker 进程参数(跟上传镜像到私有仓库一样操作进行修改)

docker pull 192.168.56.101/library/busybox:latest

8、管理

1、修改端口号

对于 http 发布方式,Harbor 默认使用 80 端口,需要修改端口按照如下方法:
修改 docker-compose.ymlnginx 的配置,将 80:80 的第一个 80 改为自定义的端口号。
修改 common/templates/registry/config.yml,在 auth 部分 $ui_url 后面加上自定义的端口号
修改完成后,运行下面的命令重新配置 Harbor

docker-compose down
./install.sh

对于第一次安装,直接修改完所有配置文件后执行 install.sh 就可以了。

2、停止/启动Harbor

docker-compose stop
docker-compose start

3、卸载Harbor

执行如下步骤彻底删除Harbor,以便重新安装:

sudo docker-compose down
rm -rf /data/database
rm -rf /data/registry

4、修改Harbor配置

首先删除 container,修改配置,然后运行 install.sh 重新启动container,命令如下:

docker-compose down
vim harbor.cfg
./install.sh

三、部署镜像服Registry

由于 Harbor 已经包含了 registry 的镜像,我这里就将就使用这个镜像来部署了。

配置

创建一个存储 registery 配置的文件夹:

mkdir registry

拷贝 harborregistry 的配置文件

cp harbor/common/config/registry/* registry/

config.yml 追加代理配置

cat>>registry/config.yml<<'EOF'
proxy:
  remoteurl: https://registry-1.docker.io
EOF

创建一个 docker-compose.yml 文件,内容如下:

version: '2'
services:
  registry:
    image: vmware/registry-photon:v2.6.2-v1.4.0
    container_name: registry-mirror
    restart: always
    volumes:
      - /data/registry:/storage:z
      - ../registry/:/etc/registry/:z
    networks:
      - harbor
    ports:
      - '5000:5000'
    environment:
      - GODEBUG=netdns=cgo
    command:
      ["serve", "/etc/registry/config.yml"]
networks:
  harbor:
    external: false

管理

# 启动
cd registry && docker-compose start
# 停止
cd registry && docker-compose stop

使用

同阿里云设置,地址改一下就OK。
我这里地址根据配置文件就是:

http://192.168.56.101:5000

如何设置镜像加速