YAZONG 我的开源

Kubernetes(六)(迁移Kubernetes前准备)(6.2/3)Harbor高可用部署(上-下)

  , , ,
0 评论0 浏览

安装docker


[root@node-1/2/3 ~]# pwd
/root
[root@node-1/2/3 ~]# cat docker_install.sh
yum remove docker \
             docker-client \
             docker-client-latest \
             docker-common \
             docker-latest \
             docker-latest-logrotate \
             docker-logrotate \
             docker-engine
yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
[root@node-1/2/3 ~]# chmod +x docker_install.sh
[root@node-1/2/3 ~]# ./docker_install.sh
[root@node-1/2/3 ~]# docker --version
Docker version 20.10.21, build baeda1f
#启动docker
[root@node-1/2/3 ~]# systemctl enable docker
[root@node-1/2/3 ~]# systemctl restart docker
[root@node-1/2/3 ~]# systemctl status docker

安装docker-compose

#下载"https://pan.baidu.com/s/1dZvRlh92ftjFd0M94JBS-w"
[root@node-1/2/3 ~]# cp docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
[root@node-1/2/3 ~]# ll /usr/local/bin/docker-compose
-rw-r--r-- 1 root root 11750136 Nov  9 15:32 /usr/local/bin/docker-compose
[root@node-1/2/3 ~]# chmod +x /usr/local/bin/docker-compose
[root@node-1/2/3 ~]# ll /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 11750136 Dec 24 21:52 /usr/local/bin/docker-compose
[root@node-1/2/3 ~]# docker-compose --version
docker-compose version 1.22.0, build f46880fe
[root@node-1/2/3 ~]# docker-compose version
docker-compose version 1.22.0, build f46880fe
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

配置docker镜像加速器

#配置阿里云镜像加速器

image.png

[root@node-1 ~]# mkdir -p /etc/docker
[root@node-1 ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uuy3rgxh.mirror.aliyuncs.com"]
}
EOF
[root@node-1 ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://uuy3rgxh.mirror.aliyuncs.com"]
}
[root@node-1 ~]# sudo systemctl daemon-reload
[root@node-1 ~]# sudo systemctl restart docker

安装harbor

#只在node-2和node-3这俩工作worker节点执行

image.png

选择离线下载方式:
“https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0.tgz”

[root@node-2/3 ~]# pwd
/root
[root@node-2/3 ~]# ll harbor-offline-installer-v1.6.0.tgz 
-rw-r--r-- 1 root root 694863055 Dec 24  2021 harbor-offline-installer-v1.6.0.tgz
[root@node-2/3 ~]# tar -zxvf harbor-offline-installer-v1.6.0.tgz
[root@node-2/3 ~]# cd harbor
#高可用双主复制,域名到底解析到哪个点呢,并且在复制的时候还是要通过hostname去复制的,同样的域名找不到同样的hostname的另一个节点了。
#以后还是设置合理的别名吧。这里个人还是倾向用别名。
[root@node-2 harbor]# vim harbor.cfg 
hostname = 172.16.1.22
[root@node-3 harbor]# vim harbor.cfg 
hostname = 172.16.1.23
#邮箱、数据库和redis的配置暂不修改。
#UI控制台的密码默认值暂不修改。
harbor_admin_password = Harbor12345
[root@node-2-3 harbor]# vim docker-compose.yml
#volumes属性镜像的存储目录,这是最主要的,配置了harbor最主要的镜像。一些属性等配置到/data目录,要把/data这个目录放在当前磁盘具有最大空间的目录去。要注意不要和自己设计的目录相冲突。可以设置个软链接。
[root@node-2-3 harbor]# df -h
[root@node-2-3 harbor]# mkdir /data

#安装harbor
[root@node-2/3 harbor]# /bin/sh install.sh

image.png

[root@node-2/3 harbor]# ps -ef|grep harbor

image.png

[root@node-2/3 harbor]# docker ps

image.png

[root@node-2/3 harbor]# docker images

image.png

#在浏览器访问"http://10.0.0.22和http://10.0.0.23/",成功加载UI页面。

image.png

安装harbor代理nginx(单节点)

[root@node-1 ~]# mkdir nginx
[root@node-1 ~]# cd nginx
[root@node-1 nginx]# ll
total 0
[root@node-1 nginx]# docker pull nginx:1.13.12
[root@node-1 nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        1.13.12   ae513a47849c   4 years ago   109MB
[root@node-1 nginx]# mkdir -p /var/log/
[root@node-1 nginx]# cat nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
        worker_connections 1024;
}
stream {
        upstream hub {
                server 10.0.0.23:80;
				#这里一定要使用上述外网IP,不要使用下述内网IP,否则代理登入异常!
				#此时还未做harbor的双主复制,所以这里暂时只有一个节点!否则代理俩节点会导致harbor控制台操作异常!
                #server node-3:80;
        }  
server {
                listen 80;
                proxy_pass hub;
                proxy_timeout 300s;
                proxy_connect_timeout 5s;
        }
}


#编辑win10的 C:\Windows\System32\drivers\etc\hosts 文件加入。执行ipconfig /flushdns。
10.0.0.22 harbor-1
10.0.0.23 harbor-2
#三个节点也加入
[root@node-1/2/3 nginx]# cat /etc/hosts
10.0.0.22 harbor-1
10.0.0.23 harbor-2


[root@node-1 nginx]# cat restart.sh
#!/bin/sh
docker stop harbornginx;
docker rm harbornginx;
#把/root/nginx/nginx.conf挂载到容器默认的位置/etc/nginx/nginx.conf
docker run -idt --net=host --name harbornginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.13.12
[root@node-1 nginx]# chmod +x restart.sh
[root@node-1 nginx]# ./restart.sh
Error response from daemon: No such container: harbornginx
Error: No such container: harbornginx
649afc2924e4fc9f8bb87c679bf2a9da25c01dbfa9efb7871ef7f955a86a850e
[root@node-1 nginx]# ./restart.sh
harbornginx
harbornginx
06cb7216c8fd9c926138e1e9e3449a58fa1bf3cf785ef383702f423f333755d0
[root@node-1 nginx]# docker logs 06c

[root@node-1 ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS              PORTS     NAMES
d633cd741ece   nginx:1.13.12   "nginx -g 'daemon of¡­"   About a minute ago   Up About a minute             harbornginx
[root@node-1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        1.13.12   ae513a47849c   3 years ago   109MB

#浏览器通过主节点访问	http://10.0.0.21/harbor/sign-in	可以正常访问,但是通过IP访问肯定不是一个好的访问方式。

image.png

#编辑win10的 C:\Windows\System32\drivers\etc\hosts 文件加入。执行ipconfig /flushdns。
10.0.0.21   hub.mooc.com
10.0.0.22   tomcat.mooc.com
10.0.0.22   api.mooc.com
#三个节点也加入
[root@node-1/2/3 nginx]# cat /etc/hosts
10.0.0.21   hub.mooc.com
10.0.0.22   tomcat.mooc.com
10.0.0.22   api.mooc.com

控制台harbor测试push/pull

#登录进去看里面的仓库(hub.mooc.com,admin/Harbor12345)

image.png

image.png

#公共项目是大家谁都可以push的,内网是没关系的。

image.png

#尝试用命令,push一个镜像上来,看是否能成功。
#在master节点,给这个nginx打个tag
[root@node-1 nginx]# docker images|grep nginx
nginx        1.13.12   ae513a47849c   4 years ago   109MB
[root@node-1 nginx]# docker tag nginx:1.13.12 hub.mooc.com/kubernetes/nginx:1.13.12
[root@node-1 nginx]# docker images|grep nginx
nginx                           1.13.12   ae513a47849c   4 years ago   109MB
hub.mooc.com/kubernetes/nginx   1.13.12   ae513a47849c   4 years ago   109MB
#push镜像。这里是http,443肯定不对,还需要对docker做配置。
[root@node-1 nginx]# docker push hub.mooc.com/kubernetes/nginx:1.13.12
The push refers to repository [hub.mooc.com/kubernetes/nginx]
Get "https://hub.mooc.com/v2/": dial tcp 10.0.0.21:443: connect: connection refused

#解决上述443问题。设置可以允许http来访问的registry。三个节点都加入。数组,可以有很多。要注意的是,不加入insecure-registries的话,那么后续的docker push/pull失效。
[root@node-1/2/3 ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uuy3rgxh.mirror.aliyuncs.com"],
  "insecure-registries": ["hub.mooc.com"]
}
EOF

#重启docker、nginx
[root@node-1/2/3 ~]# systemctl daemon-reload
[root@node-1/2/3 ~]# systemctl restart docker
[root@node-1 nginx]# ./restart.sh 
harbornginx
harbornginx
1aa2cad532e186548aeea31c1dd2df1facf63698855e50d39e86cb233494148d
[root@node-1 nginx]# docker logs 1aa
[root@node-1 nginx]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS     NAMES
1aa2cad532e1   nginx:1.13.12   "nginx -g 'daemon of¡­"   16 seconds ago   Up 15 seconds             harbornginx

#重新push。这里push拒绝,因为用户没有登录。
[root@node-1 nginx]# docker push hub.mooc.com/kubernetes/nginx:1.13.12
The push refers to repository [hub.mooc.com/kubernetes/nginx]
7ab428981537: Preparing 
82b81d779f83: Preparing 
d626a8ad97a1: Preparing 
denied: requested access to the resource is denied

image.png

#在浏览器创建比如pusher/Pusher12345的用户,并在kubernetes的成员中给予其赋予开发人员的角色。

image.png

是有push权限的。那么现在可以使用这个用户向kubernetes项目中push镜像了。


#登录后,重新push
[root@node-1 nginx]# docker login hub.mooc.com
Username: pusher
Password: Pusher12345
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
[root@node-1 nginx]# docker push hub.mooc.com/kubernetes/nginx:1.13.12
The push refers to repository [hub.mooc.com/kubernetes/nginx]
7ab428981537: Pushed 
82b81d779f83: Pushed 
d626a8ad97a1: Pushed 
1.13.12: digest: sha256:e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90 size: 948

#在其他节点尝试拉取镜像,如遇443失败,那么配置"/etc/docker/daemon.json"。
#这里如果在node-2拉取测试成功后记得删除,后面”双主复制”章节需要使用node-2测试。
[root@node-3 harbor]# docker pull hub.mooc.com/kubernetes/nginx:1.13.12
[root@node-3 harbor]# docker images|grep hub
hub.mooc.com/kubernetes/nginx   1.13.12         ae513a47849c   4 years ago   109MB

配置harbor双主复制(对照6-6)

#分别登录10.0.0.22/23两个节点的harbor控制台admin/Harbor12345。

image.png

下述在10.0.0.23测试同步到10.0.0.22。

仓库管理-新建目标。

image.png

image.png

image.png

镜像有三个过滤器。这里不选。

image.png

如果不选择过滤器的话,那么这个项目下的所有的镜像都会去同步,不会去做过滤。

规则可以有很多个,可以有很多个点。选择,可以看到当前很多的状态。这里只有一个点。

image.png

可以看到复制任务状态为finish以及创建时间、更新时间等。

image.png

此时到10.0.0.22控制台查看,已经把项目同步过去了,要注意的是在node-3新建的规则和目标这里是不会有的。

image.png

此时继续在10.0.0.22新建目标和复制规则。

image.png

image.png

image.png

看下效果,因为在node-3已经存在了相同的镜像,所以这里很快完成了。这里不会发生真正的传输,只会比对签名,一样就不会在做额外的工作了。

image.png

到这,harbor的第一个准备工作高可用就已经完成了。

image.png


标题:Kubernetes(六)(迁移Kubernetes前准备)(6.2/3)Harbor高可用部署(上-下)
作者:yazong
地址:https://blog.llyweb.com/articles/2022/11/10/1668010695331.html