基于kubernetes 部署 Harbor 仓库
第一步:配置所有节点的Docker的daemon.json文件。
vim /etc/docker/daemon.json "insecure-registries":["https://hub.atguigu.com"]
![](https://img2020.cnblogs.com/blog/1110371/202006/1110371-20200610163223610-725172547.png)
重启docker
systemctl restart docker
需要再找一台机器,安装Harbor。(就是再找一台上面hub.atguigu.com的机器)
如果本地有docker-compose文件,跳过第一步:
1、linux里面,放入docker-compose文件
mv docker-compose /usr/local/bin/ #挪动docker-compose文件
chmod a+x /usr/local/bin/docker-compose
2、往linux里面放入harbor-offline-installer-v1.2.0文件
也可以从网上down
一、Harbor 安装(尚硅谷资料)
安装:Harbor 官方地址:官方地址:https://github.com/vmware/harbor/releases
1、解压软件包
下载解压
tar xvf harbor-offline-installer-<version>.tgz https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-offline-installer-v1.2.0.tgz
本地直接解压
tar -zxvf harbor-offline-installer-v1.2.0.tgz
mv harbor /usr/local/ #移动harbor目录到系统目录里
2、配置harbor.cfga
必选参数
- hostname:目标的主机名或者完全限定域名:目标的主机名或者完全限定域名
- ui_url_protocol::http或https。默认为。默认为http
- db_password:用于db_auth的的MySQL数据库的根密码。更改此密码进行任何生产用途数据库的根密码。更改此密码进行任何生产用途
- max_job_workers:(默认值为:(默认值为3)作业服务中的复制工作人员的最大数量。对于每个映像复制作业,)作业服务中的复制工作人员的最大数量。对于每个映像复制作业,工作人员将存储库的所有标签同步到远程目标。增加此数字允许系统中更多的并发复制作业。但是,由于每个工工作人员将存储库的所有标签同步到远程目标。增加此数字允许系统中更多的并发复制作业。但是,由于每个工作人员都会消耗一定数量的网络作人员都会消耗一定数量的网络/ CPU / IO资源,请根据主机的硬件资源,仔细选择该属性的值资源,请根据主机的硬件资源,仔细选择该属性的值
- customize_crt:(:(on或或off。默认为。默认为on)当此属性打开时,)当此属性打开时,prepare脚本将为注册表的令牌的生成脚本将为注册表的令牌的生成/验证创验证创建私钥和根证书建私钥和根证书
- ssl_cert::SSL证书的路径,仅当协议设置为证书的路径,仅当协议设置为https时才应用时才应用
- ssl_cert_key:SSL密钥的路径,仅当协议设置为密钥的路径,仅当协议设置为https时才应用时才应用
- secretkey_path:用于在复制策略中加密或解密远程注册表的密码的密钥路径:用于在复制策略中加密或解密远程注册表的密码的密钥路径
修改harbor.cfg文件的hostname和ui_url_protocol。(都是在harbor的机器上执行linux命令)
cd harbor/ vim harbor.cfg
查看证书存放的位置:
创建证书存放的目录
mkdir -p /data/cert/ #创建证书存放目录 cd !$
3、创建 https 证书以及配置相关目录权限
什么是CSR以及CSR的作用和生成
cd /data/cert/
openssl genrsa -des3 -out server.key 2048 #生成私钥,需要输入密码,两次密码要一致 openssl req -new -key server.key -out server.csr #创建证书签名请求文件,输入上面刚输入过的私钥密码 cp server.key server.key.org #备份私钥 openssl rsa -in server.key.org -out server.key #把密码退掉,重新生成私钥,linux里面有密码不支持,私钥里面就不包含密码了 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #通过证书签名请求文件和签名私钥创建证书
chmod -R 777 /data/cert #给证书赋予权限
4、运行脚本进行安装
cd - ./install.sh
在master和node机器添加harbor机器的ip和hostname解析
echo "192.168.0.82 hub.atguigu.com" >> /etc/hosts #特别注意:用>>追加,不是>替换
harbor机器上也同样增加ip和hostname的设置
客户端windows也同样设置hosts文件,
start notepad "C:\Windows\System32\drivers\etc\hosts"
harbor机器上执行一下docker ps,看一下harbor是否启动了。如果本地linux之前已经运行了nginx,需要关闭之前的nginx的docker,在启动harbor的nginx就可以了。
5、访问测试
请注意,默认管理员用户名认管理员用户名/密码为密码为:admin / Harbor12345
vim harbor.cfg #密码存放在这个文件里
密码:
客户端windows浏览器里访问:https://hub.atguigu.com
默认有一个项目名称为:library
每台master和node的linux机器上测试仓库是否可以正常访问
docker login https://hub.atguigu.com 输入用户名:admin 密码:Harbor12345
Login Succeeded
Login Succeeded
Login Succeeded
6、上传镜像进行上传测试、上传镜像进行上传测试
a、指定镜像仓库地址
每个master和node上设置好了。没有设置好,在设置一次。
vim /etc/docker/daemon.json { 。。。。 "insecure-registries":["https://hub.atguigu.com"] }
b、下载测试镜像
docker pull nginx:latest
c、给镜像重新打标签,先复制harbor里面的镜像路径
重新打标签
docker tag nginx:latest hub.atguigu.com/library/nginx:latest
d、登录Harbor仓库
docker login hub.atguigu.com
e、进行上传,复制推送镜像地址并修改
docker push hub.atguigu.com/library/nginx:latest
改标签+推送
推送成功可以从浏览器里看到
7、删除本地镜像和仓库里下载的镜像文件,命令为:
docker rmi -f nginx:latest hub.atguigu.com/library/nginx:latest
8、使用Harbor私有镜像仓库下载镜像文件,命令为:
docker pull hub.atguigu.com/library/nginx:lastest
9、删除本地镜像仓库里下载的私有镜像仓库文件
docker rmi -f hub.atguigu.com/library/nginx:latest
10、删除私有服务器镜像仓库的镜像文件
在master上面运行pod进行测试,看看k8s和harbor仓库是否联通
[root@k8s-master01 ~]# kubectl run nginx-deployment --image=hub.atguigu.com/library/nginx:latest --port=80 --replicas=1 [root@k8s-master01 ~]# kubectl get deployment #等同于 kubectl get rs
[root@k8s-master01 ~]# kubectl get pod -o wide #详细信息
在node1上,看看nginx是否在docker里面运行成功,注意还有一个“/pause”的docker,只要运行一个pod就会有一个pause
[root@k8s-node01 ~]# docker ps -a | grep nginx
在master机器上访问nginx服务器
[root@k8s-master01 ~]# curl 10.244.1.3 #为node1的ip地址
删除pod,测试一下--replicas=1是否管用
kubectl get pod kubectl delete pod nginx-deployment-77d6d48c9b-twhj5
又重新运行了一个新的nginx,注意后面的值改变了了。
扩容为三个nginx的pod
[root@k8s-master01 ~]# kubectl get deployment [root@k8s-master01 ~]# kubectl scale --replicas=3 deployment/nginx-deployment
查看pod的数量和所运行的node节点信息
[root@k8s-master01 ~]# kubectl get pod -o wide
node1
[root@k8s-node01 ~]# docker ps -a | grep nginx
node2
[root@k8s-node02 ~]# docker ps -a | grep nginx
现在master上面有三个node节点了,之前的一个80端口没法用了。怎么访问nginx呢?需要设置expose
kubectl get svc kubectl get deployment kubectl expose deployment nginx-deployment --port=30080 --target-port=80 #设置外部访问端口为30080 kubectl get svc curl 10.99.10.46:30080 #访问ip+port,注意ip地址已经不是上面刚刚用80端口访问的那个ip
每次访问10.99.10.46:30080的时候都是轮训的方式获取页面信息
验证轮训的ip
[root@k8s-master01 ~]# ipvsadm -Ln | grep 10.99.10.46 [root@k8s-master01 ~]# ipvsadm -Ln [root@k8s-master01 ~]# kubectl get pod -o wide
以上都是在master机器访问的,如果是外部客户端访问怎么实现呢?
[root@k8s-master01 ~]# kubectl get svc [root@k8s-master01 ~]# kubectl edit svc nginx-deployment #编辑nginx-deployment
将ClusterIP改成NodePort
[root@k8s-master01 ~]# kubectl get svc
看一下master机器端口映射,会出现一个新的端口
[root@k8s-master01 ~]# netstat -anpt | grep :30141
外部浏览器访问:http://192.168.4.86:30141/
用另外两个node的ip也可以访问了:http://192.168.4.87:30141/,http://192.168.4.88:30141/
以上内容摘自https://www.cnblogs.com/qiyebao/p/13047739.html,此处仅做记录