环境
Ip | 主机名 | cpu | 内存 | 硬盘 |
---|---|---|---|---|
192.168.10.11 | master | 1cpu双核 | 2G | 40G |
192.168.10.12 | node01 | 1cpu双核 | 2G | 40G |
192.168.10.13 | node02 | 1cpu双核 | 2G | 40G |
192.168.10.18 | Harbor | 1cpu1核 | 1G | 40G |
虚拟机 centos7.9
master node01 node02 已部署k8s集群
版本 1.18.0
步骤
一 容器镜像仓库Harbor部署
1、docker-ce安装
(1)获取YUM源
[root@harbor ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
(2)安装并设置启动及开机自启动
[root@harbor ~]# yum -y install docker-ce-20.10.20
[root@harbor ~]# systemctl enable --now docker
2、下载一个docker-compose工具。
[root@harbor ~]# wget https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64
下载完成之后,移动到/usr/local/bin/目录(直接下载到环境变量目录)
[root@harbor ~]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
增加可执行权限
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
查看版本号,并验证命令可用
[root@harbor ~]# docker-compose -v
3、harbor离线模式安装
[root@harbor ~]# wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
将harbor包解压到/usr/local/下
[root@harbor ~]# tar xf harbor-offline-installer-v2.8.3.tgz -C /usr/local
4、拷贝文件,并修改文件
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml
将https的都注释掉,更改hostname为本机ip
5、安装harbor,安装完成自行启动
[root@harbor harbor]# docker load -i harbor.v2.8.3.tar.gz
或
./prepare
本质都是准备镜像
然后
[root@harbor harbor]# ./install.sh
全绿即可
6、访问地址与账号密码
http://192.168.10.18
默认账户密码:admin/Harbor12345
7、另外可以自行启动
--启动
docker-compose up -d
--停止
docker-compose stop
--重启
docker-compose restart
(1) 访问harbor UI界面
登入
二、Kubernetes集群使用harbor仓库
1.通过secret使用harbor仓库
(1)新建一个harbor私有仓库
新建
查看
(2)kubernetes集群所有节点配置harbor仓库
在配置文件中添加一行内容,可以通过http方式访问harbor服务,
如果有多行内容时,上行尾部加“逗号”
[root@master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://1dmptu91.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["http://192.168.10.18"]
}
[root@master ~]# systemctl restart docker
(3)上传nginx测试镜像到harbor仓库(harbor主机)
docker-compose down停止harbor,修改后再启动。
修改docker配置文件,添加如下内容,如果有多行内容时,上行尾部加“逗号”
[root@harbor harbor]# vim /etc/docker/daemon.json
{
"insecure-registries": ["http://192.168.10.18"]
}
[root@harbor harbor]# systemctl restart docker
[root@harbor ~]# docker pull nginx:1.20
[root@harbor harbor]# docker login 192.168.10.18
[root@harbor harbor]# docker tag nginx:1.20 192.168.10.18/test/nginx:1.20
[root@harbor harbor]# docker push 192.168.10.18/test/nginx:1.20
(4)创建docker-registry类型secret
[root@master ~]# kubectl create secret docker-registry harbor-secret --docker-server=192.168.10.18 --docker-username=admin --docker-password=Harbor12345
说明:
类型为docker-registry
–docker-server指定harbor仓库的IP
–docker-username指定harbor仓库的登录用户名
–docker-password指定harbor仓库的登录密码
验证查看
[root@master ~]# kubectl get secrets | grep harbor-secret
[root@master ~]# kubectl describe secrets harbor-secret
(5)创建pod并使用secret
[root@master ~]# vim pod-harbor.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-harbor
spec:
containers:
- name: c1
image: 192.168.10.18/test/nginx:1.20
imagePullSecrets: # 定义镜像下载使用的secrets
- name: harbor-secret # 与上面的secret名称一致
(6)验证pod
[root@master ~]# kubectl describe pod pod-harbor
可以看到是从192.168.10.18/test/nginx:1.20拉取的镜像
2.通过serviceaccout使用harbor仓库
编写yaml文件时添加imagePullSecrets的这2行配置,可以把secret配置到serviceAccount中进行调用也可以。
(1) 创建serviceAccount(服务账号)
[root@master ~]# vim serviceaccount-harbor-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: harbor-sa
namespace: default
[root@master ~]# kubectl apply -f serviceaccount-harbor-sa.yaml
[root@master ~]# kubectl get sa | grep harbor-sa
(2) 修改serviceaccount添加使用harbor-secret
[root@master ~]# kubectl describe serviceaccounts harbor-sa
可以看到新添加的账号不具备镜像下载权限
添加权限
[root@master ~]# kubectl patch serviceaccount harbor-sa -n default -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'
[root@master ~]# kubectl describe serviceaccounts harbor-sa
确认已更新
(3)修改yaml使用serviceAccount
[root@master ~]# vim pod-harbor.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-harbor
spec:
serviceAccount: harbor-sa # 原来的2句换成使用harbor-sa这个serviceAccount
containers:
- name: c1
image: 192.168.10.18/test/nginx:1.20
(4)删除先前的重新创建pod验证
[root@master ~]# kubectl delete pod pod-harbor
记得删除pod所在node节点上的nginx镜像
我这里是node01
[root@node01 ~]# docker rmi 192.168.10.18/test/nginx:1.20
[root@master ~]# kubectl apply -f pod-harbor.yml
[root@master ~]# kubectl get pods
[root@master ~]# kubectl describe pods pod-harbor
实验完成