首页 > 其他分享 >Kubernetes基于helm安装 harbor

Kubernetes基于helm安装 harbor

时间:2024-07-03 17:12:23浏览次数:1  
标签:ingress Kubernetes nginx harbor -- helm openebs root

Kubernetes基于helm安装 harbor

之前harbor的安装都是借助docker完成一键安装部署,安装完成之后harbor组件均运行到一台机器上面,本文实践harbor在k8s环境中的部署。

准备工作

根据harbor官方要求:

  • Kubernetes cluster 1.20+
  • Helm v3.2.0+

结合ingress-nginx版本要求,建议K8S版本大于1.21.0-0进行实践。

部署一套K8S环境

本文使用的k8s环境如下:

# k8s版本及环境信息
root@master1:~# kubectl get node -o wide
NAME      STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION     CONTAINER-RUNTIME
master1   Ready    control-plane   25h   v1.28.2   192.168.0.61   <none>        Ubuntu 24.04 LTS   6.8.0-36-generic   containerd://1.7.12
node1     Ready    <none>          25h   v1.28.2   192.168.0.62   <none>        Ubuntu 24.04 LTS   6.8.0-36-generic   containerd://1.7.12
node2     Ready    <none>          25h   v1.28.2   192.168.0.63   <none>        Ubuntu 24.04 LTS   6.8.0-36-generic   containerd://1.7.12

# 操作系统信息
root@master1:~# cat /etc/issue
Ubuntu 24.04 LTS \n \l

root@master1:~# uname -a
Linux master1 6.8.0-36-generic #36-Ubuntu SMP PREEMPT_DYNAMIC Mon Jun 10 10:49:14 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

# helm版本
root@master1:~# helm version
version.BuildInfo{Version:"v3.15.2", GitCommit:"1a500d5625419a524fdae4b33de351cc4f58ec35", GitTreeState:"clean", GoVersion:"go1.22.4"}

部署openebs用于提供pv

参考我的另外一篇文章部署openebs,《Kubernetes云原生存储解决方案openebs部署实践-3.10.0版本(helm部署)》

本文部署的openebs信息如下:

root@master1:~# helm ls -n openebs
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
openebs openebs         1               2024-07-02 14:38:40.928808834 +0800 CST deployed        openebs-4.0.1   4.0.1
root@master1:~# kubectl get pod -n openebs
NAME                                              READY   STATUS    RESTARTS   AGE
openebs-localpv-provisioner-6b8bff68bd-vmwp7      1/1     Running   0          121m
openebs-lvm-localpv-controller-778b75449c-mmvw6   5/5     Running   0          121m
openebs-lvm-localpv-node-d2trc                    2/2     Running   0          121m
openebs-lvm-localpv-node-md5wh                    2/2     Running   0          121m
openebs-zfs-localpv-controller-6665568c7c-snw4q   5/5     Running   0          121m
openebs-zfs-localpv-node-mc8tv                    2/2     Running   0          121m
openebs-zfs-localpv-node-w6nns                    2/2     Running   0          121m
root@master1:~# kubectl get sc -n openebs
NAME               PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-hostpath   openebs.io/local   Delete          WaitForFirstConsumer   false                  121m

部署ingress-nginx用于暴露服务

参考我的另外一篇文章部署ingress-nginx,《ingress-nginx部署(helm方式)》

建议k8s版本不要太老,以下是在1.18.0部署最新的ingress-nginx,提示版本不兼容。

[root@k8s-master ~]# helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
>   --namespace ingress-nginx --create-namespace \
>   --set controller.service.type=NodePort
Release "ingress-nginx" does not exist. Installing it now.
Error: chart requires kubeVersion: >=1.21.0-0 which is incompatible with Kubernetes v1.18.0

本次环境部署的ingress nginx如下:

root@master1:~# helm ls -n ingress-nginx
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
ingress-nginx   ingress-nginx   1               2024-07-01 18:20:48.811046861 +0800 CST deployed        ingress-nginx-4.10.1    1.10.1
root@master1:~# kubectl get pod -n ingress-nginx
NAME                             READY   STATUS    RESTARTS       AGE
ingress-nginx-controller-dddq8   1/1     Running   1 (126m ago)   22h
ingress-nginx-controller-p7gd9   1/1     Running   1 (126m ago)   22h

部署harbor--ingress方式暴露服务

添加harbor helm仓库:

helm repo add harbor https://helm.goharbor.io

官方提供四种方式暴露Harbor service:

  • Ingress: 借助Ingress暴露服务,K8S集群中已经部署ingress nginx controller。
  • ClusterIP: 使用ClusterIP暴露服务,只能在集群内部进行访问。
  • NodePort: 使用NodePort暴露服务,通过NodeIP:NodePort进行访问。
  • LoadBalancer: 使用云供应商提供的LB进行访问。

部署harbor仓库,使用ingress暴露服务。ingress-nginx使用的是NodePort方式暴露自身,需要在externalURL中配置其 NodePort 端口号:

# ingress-nginx NodePort https端口为30294
root@master1:~# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.102.230.242   <none>        80:30974/TCP,443:30194/TCP   21h
ingress-nginx-controller-admission   ClusterIP   10.110.51.58     <none>        443/TCP                      21h

# 查看部署openebs后storageclass为openebs-hostpath 
root@master1:~# kubectl get sc
NAME               PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-hostpath   openebs.io/local   Delete          WaitForFirstConsumer   false                  99m


# 执行helm安装,指定为ingress暴露,指定域名,externalURL,密码及StorageClaas
helm upgrade --install harbor harbor/harbor --namespace harbor --create-namespace \
  --set expose.type=ingress \
  --set expose.ingress.className=nginx \
  --set expose.ingress.hosts.core=harbor.test.com \
  --set expose.ingress.hosts.notary=notary.test.com \
  --set externalURL=https://harbor.test.com:30194 \
  --set harborAdminPassword="Harbor12345" \
  --set persistence.persistentVolumeClaim.registry.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.jobservice.jobLog.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.database.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.redis.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.trivy.storageClass="openebs-hostpath"

查看部署后的资源:

# 创建的pod
root@master1:~# kubectl get pod -n harbor -o wide
NAME                                 READY   STATUS    RESTARTS      AGE    IP              NODE    NOMINATED NODE   READINESS GATES
harbor-core-fb5ff9588-b8t6t          1/1     Running   2 (13m ago)   15m    10.244.154.33   node1   <none>           <none>
harbor-database-0                    1/1     Running   0             15m    10.244.154.43   node1   <none>           <none>
harbor-jobservice-85bf44bd57-5f2wg   1/1     Running   6 (12m ago)   15m    10.244.154.41   node1   <none>           <none>
harbor-portal-7c5d84cbb8-t6v22       1/1     Running   0             15m    10.244.154.34   node1   <none>           <none>
harbor-redis-0                       1/1     Running   0             15m    10.244.154.39   node1   <none>           <none>
harbor-registry-7f54fbf5f4-xdx![img](/i/l/?n=23&i=blog/1197007/202407/1197007-20240703165953782-1811560219.png)4t     2/2     Running   0             15m    10.244.154.42   node1   <none>           <none>
harbor-trivy-0                       1/1     Running   0             6m1s   10.244.154.45   node1   <none>           <none>

# 创建的pvc
root@master1:~# kubectl get pvc -n harbor
NAME                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
data-harbor-redis-0               Bound    pvc-83f38659-8ddb-43ec-9023-460d323c7d48   1Gi        RWO            openebs-hostpath   6m52s
data-harbor-trivy-0               Bound    pvc-50b8cd59-23c3-4d15-a0e3-31b7a62ed5d5   5Gi        RWO            openebs-hostpath   6m51s
database-data-harbor-database-0   Bound    pvc-8e8d04f2-21f7-4228-b0e7-331f352606e6   1Gi        RWO            openebs-hostpath   6m52s
harbor-jobservice                 Bound    pvc-beca09bd-d3b7-4d82-8e1e-785de4728f4e   1Gi        RWO            openebs-hostpath   6m52s
harbor-registry                   Bound    pvc-cd7048f3-2452-44e2-8c84-337b22ccb4ed   5Gi        RWO            openebs-hostpath   6m52s

# 查看ingress
root@master1:~# kubectl get ingress -n harbor![img](/i/l/?n=23&i=blog/1197007/202407/1197007-20240703170012789-243611492.png)
NAME             CLASS   HOSTS             ADDRESS          PORTS     AGE
harbor-ingress   nginx   harbor.test.com   10.102.230.242   80, 443   7m9s

客户端访问测试,在客户端配置域名解析,harbor.test.com解析到ingress-nginx节点IP,访问https://harbor.test.com:30194

harbor

用户名admin,密码Harbor12345

部署harbor--NodePort方式暴露服务

上述使用ingress方式部署依赖nginx-ingress控制器,如果为了简化部署,可以使用NodePort方式:

export node_ip=192.168.0.61
helm upgrade --install harbor harbor/harbor --namespace harbor --create-namespace \
  --set expose.type=nodePort \
  --set expose.tls.auto.commonName=$node_ip \
  --set externalURL='https://$node_ip:31234'
  --set harborAdminPassword="Harbor12345" \
  --set persistence.persistentVolumeClaim.registry.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.jobservice.jobLog.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.database.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.redis.storageClass="openebs-hostpath" \
  --set persistence.persistentVolumeClaim.trivy.storageClass="openebs-hostpath"

通过https://$node_ip:31234直接访问harbor。

客户端上传镜像验证

  1. 到处ca证书
kubectl -n harbor get secrets harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 -d >ca.crt
  1. 复制ca.crt到docker客户端所在机器

docker运行时和客户端:

root@ubuntu:~# mkdir -p /etc/docker/certs.d/harbor.test.com:30194/

root@ubuntu:~# ls /etc/docker/certs.d/harbor.test.com:30194/
ca.crt

如果使用containerd,配置类似:

root@ubuntu:~# mkdir -p /etc/containerd/certs.d/harbor.test.com:30194/

root@ubuntu:~# ls /etc/containerd/certs.d/harbor.test.com:30194/
ca.crt
  1. 配置解析

echo "192.168.0.62 harbor.test.com" >>/etc/hosts

  1. 测试登录
root@ubuntu:~# docker login -u admin -p Harbor12345 https://harbor.test.com:30194
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/test/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  1. 推送镜像
root@ubuntu:~# docker push harbor.test.com:30194/library/kubemark:1.19.0
The push refers to repository [harbor.test.com:30194/library/kubemark]
c746c8a16e15: Pushed
f47163e8de57: Pushed
0d1435bd79e4: Pushed
1.19.0: digest: sha256:95effc616f84c0c3d3645ee489f57ec635002bcf5eec1f0892936f485110d529 size: 949

参考资料

  1. https://github.com/goharbor/harbor-helm

  2. https://goharbor.io/docs/2.5.0/install-config/harbor-ha-helm/

  3. https://blog.csdn.net/networken/article/details/126295863

标签:ingress,Kubernetes,nginx,harbor,--,helm,openebs,root
From: https://www.cnblogs.com/lldhsds/p/18282168

相关文章

  • 【云原生】Kubernetes-kubeadm升级版本
    一、版本升级当我们要用到新版本的一些功能和特性的时候或者当前版本太旧无法满足需要的时候势必要对Kubernetes集群进行升级。1.1、升级Master节点1.1.1、腾空节点[root@master~]#kubectlgetnodeNAMESTATUSROLESAGEVERSIONmaster......
  • 编译安装Kubernetes 1.29 高可用集群(7)--Metrics Server节点监控配置
    1.部署MetricsServer节点监控1.1在任意k8s-master节点上下载MetricsServer的创建文件https://github.com/kubernetes-sigs/metrics-server/releaseswgethttps://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml1.2修改单机版配置......
  • helm安装及配置
    helm安装及配置1.安装helmhelm下载地址:https://github.com/kubernetes/helm/releases根据helm和k8s配套关系,下载安装合适的helm版本。下面为版本配套关系:Helm版本支持的Kubernetes版本3.12.x1.27.x-1.24.x3.11.x1.26.x-1.23.x3.10.x1.25.x-1.22.x......
  • helm常用命令
    helm常用命令针对Kubernetes的Helm包管理器。官方文档:https://helm.sh/zh/docs/helm/helm/简介Kubernetes包管理器,Helm的一般操作:helmsearch:搜索charthelmpull:下载chart到本地目录查看helminstall:上传chart到Kuberneteshelmlist:列出已发布的chart环境变量:名称......
  • Kubernetes k8s pod 生命周期 init容器(初始化容器) 钩子配置
    目录Pod生命周期Init容器 初始化容器使用案例 初始化容器生产应用主容器 容器钩子:postStart和preStop文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘链接:https://pan.baidu.com/s/1RMVT8hj_rELprNeTlX10Vg ......
  • Karpor - 让 AI 全面赋能 Kubernetes!
    ......
  • 云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
    开源项目KubetoolsRecommenderSystemKubetoolsRecommenderSystem(Krs)是一个基于GenAI的工具,用于帮助管理和优化Kubernetes集群。buoybuoy是Kubernetes的声明式TUI仪表板。你可以在JSON文件中定义仪表板,它将从Kubernetes集群中获取信息并构建仪表板,以便在......
  • Kubernetes Node删除镜像
    目录KubernetesNode删除镜像步骤1:连接到节点步骤2:查看节点上的镜像列表步骤3:删除镜像步骤4:验证删除注意事项结论KubernetesNode删除镜像本篇博客将介绍如何在Kubernetes集群中删除节点上的镜像。Kubernetes是一个开源的容器编排平台,可用于以高效的方式管理容器化......
  • ingress-nginx部署-helm方式
    helm安装ingress-nginxIngress-NginxController支持多种方式安装:使用heml安装chart使用kubectlapply,使用YAML文件;详情可参考:https://kubernetes.github.io/ingress-nginx/deploy/本文实践使用helm安装ingress-nginx环境信息#k8s版本root@master1:~#kubectlgetno......
  • 【K8s】专题六(3):Kubernetes 稳定性之自动扩缩容
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!一、基本介绍在Kubernetes中,自动扩缩容是一种动态调整集群资源,以灵活应对应用程序资源需求变化的机制。自动扩缩容可以分为两个层面:Node层面:根据业务规模......