文章将在k8s集群二进制部署基础上部署harbor私有仓库,并使得k8s中的node节点使用harbor提供的镜像部署资源
harbor服务器地址为192.168.218.161
进行harbor服务器的初始化
# 设置时区
vim /etc/profile
TZ='Asia/Shanghai'
export TZ
source /etc/profile
# 同步时间
ntpdate ntp.aliyun.com
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
脚本安装docker
docker部署完成后
部署docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod 777 /usr/local/bin/docker-compose
docker-compose -v
docker引擎和docker-compose都是安装harbor的依赖
下面开始安装Harbor
# 上传harbor安装包,这里用的是1.8.2版本
tar -xf harbor-offline-installer-v1.8.2.tgz
mv harbor /usr/local/
cd /usr/local/harbor/
# 生成harbor的密钥
openssl genrsa -out docker.com.key 2048
openssl req -new -key docker.com.key -out docker.com.csr -subj "/CN=192.168.218.161"
openssl x509 -req -days 3650 -in docker.com.csr -signkey docker.com.key -out docker.com.crt
# 安装前,修改harbor配置文件
vim harbor.yml
注意,harbor的所需参数需在安装前修改,安装后修改是不起作用的
若需修改所需参数,需要修改配置文件后重新安装harbor
详细参照harbor仓库部署
开始安装
./prepare
./install.sh
使用浏览器访问页面
https://harbor-ip
harbor服务器本地登陆harbor
docker login -u admin -p https://127.0.0.1
默认密码为Harbor12345,在配置文件中可查看
下面配置k8s集群使用harbor
# node节点上修改docker的systemd文件
vim /usr/lib/systemd/system/docker.service
# 修改ExecStart,添加参数--insecure-registry harbor-ip
# 如下
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.218.161
# 或者修改daemon.json
# 添加参数如下
"insecure-registries": [ "192.168.218.161"]
# 重载系统文件
# 重启docker
systemctl daemon-reload
systemctl restart docker
node节点镜像测试
# 两个node节点都需要登陆harbor
[root@node01 ~]# docker login -u admin https://192.168.218.161
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
在harbor网页上创建k8s项目
若项目不存在,则会上传失败
# 准备测试镜像
# 命名格式为harbor-ip/项目/镜像名:标签
docker tag nginx:latest 192.168.218.161/k8s/nginx:test
# 上传镜像
docker push 192.168.218.161/k8s/nginx:test
在harbor网页上的k8s项目中,可以看到192.168.218.161/k8s/nginx:test已被成功上传
# 在另一台node节点上尝试拉取192.168.218.161/k8s/nginx:test
docker pull 192.168.218.161/k8s/nginx:test
# 结束后查看
docker images
配置k8s与harbor协同
在node节点能登陆、上传、拉取harbor镜像的前提下
# 创建用于登陆harbor的secret
# 注意修改IP地址和用户/密码
kubectl create secret docker-registry harbor-secret \
--docker-server=192.168.218.161 --docker-username=admin \
--docker-password=Harbor12345
# 查看创建的secret
kubectl get secret
# 查看serviceaccount
kubectl get sa
# 指定serviceaccount的secret为harbor的secret
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'
# 查看是否修改成功
kubectl describe sa default
下面测试k8s与harbor的协同
创建一个yaml文件,yaml文件中包含一个deployment资源
deployment资源使用了192.168.218.161/k8s/nginx:test这个镜像
并使用kubectl create -f命令创建这个deployment资源
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: 192.168.218.161/k8s/nginx:test
ports:
- containerPort: 80
创建完成后,使用kubectl get deploy查看deployment
使用kubectl get pod查看pod运行情况
若正常运行,则部署完成!