纯步骤
基于上次已经搭建好的K8S多节点,搭建K8S的harbor私有仓库


文章目录

  • 一:harbor服务端配置
  • 二:Node节点 配置
  • 三:master节点配置



开一台服务器,搭建harbor

一:harbor服务端配置

需安装 Python、 Docker 和Docker Compose、harbor
1:基本环境配置

固定IP地址
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改并添加:
dhcp改为static
添加:
IPADDR=192.168.195.80
NETMASK=255.255.255.0
GATEWAY=192.168.195.2
DNS1=192.168.195.2

# systemctl restart network
# systemctl stop NetworkManager
# systemctl disable NetworkManager
# iptables -F
关闭核心防护
# setenforce 0
# vi /etc/selinux/config
改为 SELINUX=disabled
# hostnamectl set-hostname harbor
# su

2:首先部署docker环境

安装依赖包
# yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# yum install docker-ce -y
# systemctl start docker
# systemctl enable docker

镜像加速配置
现在需要从公有仓库里拉取镜像,由于长城防火墙及网络问题,必须使用镜像加速,才能快速拉取镜像
访问网站https://help.aliyun.com/document_detail/60750.html
生成加速地址"https://elxy356o.mirror.aliyuncs.com"

# cd /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
 {
"registry-mirrors": ["https://elxy356o.mirror.aliyuncs.com"]
  }
EOF

# ls 可看到daemon.jsp

# systemctl daemon-reload      重新加载

开启路由转发
# vim /etc/sysctl.conf
末行插入:
net.ipv4.ip_forward=1

# sysctl -p  生效
重启网络和docker
# service network restart
# systemctl restart docker

docker引擎环境部署完成

3:下载harbor安装程序、下载compose

#rz -E
把harbor-offline-installer-v1.2.2.tgz、docker-compose包复制过来
# chmod +x docker-compose
# mv docker-compose /usr/bin
# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
# cd /usr/local/harbor
# ls
修改harbor配置文件(改为harbor IP地址)
# vim harbor.cfg
改为:hostname = 192.168.195.80

启动安装
# sh install.sh

k8s jenkin harbor elk 架构实战 k8s搭建harbor_私有仓库


修改配置文件

k8s jenkin harbor elk 架构实战 k8s搭建harbor_tomcat_02


安装完成,有一个网址http://192.168.195.80,就是harbor的图形界面

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_03


登录进去,创建项目project

账号是admin

密码是Harbor12345

账户和密码在配置文件中已经定义,可以查看配置文件

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_04


创建一个项目

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_05

二:Node节点 配置

1:node节点配置连接私有仓库
node1 node2节点同步操作

注意,后面的逗号不要忘了添加
# vim /etc/docker/daemon.json
添加:
"registry-mirrors": ["https://05vz3np5.mirror.aliyuncs.com"],
"insecure-registries":["192.168.195.80"]

# systemctl restart docker
pod管理的好处,重启后docker容器状态还是UP状态

2:node节点登录harbor私有仓库
注意:在用harbor私有仓库下载镜像,创建资源时,要保证node处于harbor登陆状态

# docker login 192.168.195.80
输入 admin
输入 Harbor12345

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_06


k8s jenkin harbor elk 架构实战 k8s搭建harbor_私有仓库_07


示例1:在node1节点上传镜像到私有仓库,供其他node节点下载

3:node1节点上传镜像到harbor

从公有仓库下载镜像 (相当于原材料)
# docker pull tomcat:8.0.52
打标签
# docker tag tomcat:8.0.52 192.168.195.80/project/tomcat
推送到私有仓库
# docker push 192.168.195.80/project/tomcat

在harbor图形界面查看,可看到project项目中已上传镜像192.168.195.80/project/tomcat

k8s jenkin harbor elk 架构实战 k8s搭建harbor_私有仓库_08


k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_09


4:node2节点从私有仓库下载192.168.195.80/project/tomcat镜像

测试 下载node1刚刚上传到私有仓库的镜像
# docker pull 192.168.195.80/project/tomcat
# docker images

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_10


在harbor图形界面查看,可看到project项目中镜像192.168.195.80/project/tomcat 被下载1次

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_11


示例2: 用yaml文件格式创建tomcat(用harbor私有仓库拉取镜像)

5:node节点查看并复制用户凭证序列号

# cat .docker/config.json | base64 -w 0
复制凭证序列号
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy44IChsaW51eCkiCgl9Cn0=

(1)删除上面示例中的tomcat镜像

(2)两个node节点的用户凭据是相同的,因为登录的是同一个harbor私有仓库

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_12


k8s jenkin harbor elk 架构实战 k8s搭建harbor_tomcat_13

三:master节点配置

6:在master节点创建secret资源

# vim registry-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: registry-pull-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy44IChsaW51eCkiCgl9Cn0=
type: kubernetes.io/dockerconfigjson
    
创建secret资源
# kubectl create -f registry-pull-secret.yaml
查看secret资源
# kubectl get secret

k8s jenkin harbor elk 架构实战 k8s搭建harbor_tomcat_14


k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_15


7:在master节点创建pod资源

从harbor私有仓库中下载镜像

# vim tomcat-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: my-tomcat
        image: 192.168.195.80/project/tomcat
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_16

创建pod资源
# kubectl create -f tomcat-deployment.yaml
# kubectl get pods -w

详细查看pod资源(包含创建过程)
# kubectl describe pod my-tomcat-559834-nprvn
# kubectl describe pod my-tomcat-435743-fdbscx

# kubectl get pod -o wide
# kubectl get pods,svc,deployment

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_17


详细查看pod(包含创建过程)

#kubectl describe pod my-tomcat-7f9c8876b4-cjs2p
#kubectl describe pod my-tomcat-7f9c8876b4-gh6ss

k8s jenkin harbor elk 架构实战 k8s搭建harbor_私有仓库_18


k8s jenkin harbor elk 架构实战 k8s搭建harbor_tomcat_19


查看pod资源创建到哪个node节点

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_20

在harbor图形界面查看,可看到project项目中镜像192.168.195.80/project/tomcat 显示被下载3次

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_21

遇到问题:

第一次创建pod资源时出error

pod资源为Pending状态

k8s jenkin harbor elk 架构实战 k8s搭建harbor_tomcat_22


详细查看pod(包含创建过程),创建失败

#kubectl describe pod my-tomcat-7f9c8876b4-cjs2p
#kubectl describe pod my-tomcat-7f9c8876b4-gh6ss

k8s jenkin harbor elk 架构实战 k8s搭建harbor_docker_23


查看节点状态,变成了NotReady状态

k8s jenkin harbor elk 架构实战 k8s搭建harbor_tomcat_24


经检查:是因为keepalived的VIP消失了,重新启动nginx和keepalived后,负载均衡Lb1的VIP地址有了,再次查看节点状态 变成了Ready状态,随之,pod资源也创建成功了