Kubernetes(简称k8s)是一个开源的容器编排系统,用于自动化应用程序容器的部署、扩展和管理,Harbor是一个企业级的Docker Registry,可以帮助开发者和团队更好地管理和分发他们的容器镜像,本文将介绍如何在Kubernetes上部署Harbor。
一、准备工作
在开始部署Harbor之前,需要确保以下几点:
1. 安装并配置好Kubernetes集群,可以参考官方文档(-environment/tools/kubeadm/install-kubeadm/)进行安装。
2. 安装Docker和Docker Compose,Harbor依赖于Docker来运行和管理容器,因此需要在Kubernetes集群中安装Docker,还需要安装Docker Compose,用于管理多个容器的应用。
3. 准备Harbor的安装包,可以从Harbor的GitHub仓库()下载最新版本的Harbor安装包。
二、部署Harbor
1. 将Harbor安装包上传到Kubernetes集群中的一个节点上,可以使用`kubectl cp`命令将文件从本地复制到Kubernetes集群中。
kubectl cp harbor-offline-installer.tar.gz my-node:/tmp/harbor-offline-installer.tar.gz
2. 在Kubernetes集群中创建一个名为`harbor-installation`的Namespace,用于存放Harbor相关的资源:
kubectl create namespace harbor-installation
3. 使用`kubectl apply`命令将Harbor的离线安装包应用到Kubernetes集群中,创建一个名为`harbor`的Deployment和一个名为`harbor-service`的Service:
apiVersion: apps/v1 kind: Deployment metadata: name: harbor spec: replicas: 1 selector: matchLabels: app: harbor template: metadata: labels: app: harbor spec: containers: - name: harbor image: harbor-offline-installer/harbor-online-installer # 这里替换为实际的镜像名称和标签 command: ["/bin/sh", "-c"] args: ["|"${HARBOR_PREFIX}/bin/docker pull registry && ${HARBOR_PREFIX}/bin/docker run --name=${HARBOR_REGISTRY_NAME} --restart=always -d --net=host --privileged=true --volume=${PWD}:/data --env=REGISTRY_HTTP_ADDR=0.0.0.0:5000 --env=REGISTRY_HTTPS_ADDR=0.0.0.0:443 --env=REGISTRY_STORAGE_DRIVER=overlay2 --env=REGISTRY_STORAGE_PATH=/data --env=REGISTRY_AUTH=none --env=REGISTRY_SSL_ENABLED=false"] # 这里替换为实际的环境变量设置 env: [] volumeMounts: - name: datastore mountPath: /data - name: docker-composer-runner image: busybox:latest command: ["sh", "-c", "sleep infinity"] # 这里可以替换为实际的启动命令,例如运行Harbor的Compose文件等 volumeMounts: - name: datastore mountPath: /var/run/docker.sock # 这里可以替换为实际的挂载路径,例如挂载宿主机的Docker套接字等 ports: [80] # 这里可以替换为实际需要暴露的端口列表,例如80、443等端口 --- apiVersion: v1 kind: Service metadata: name: harbor-service spec: selector: app: harbor ports: - protocol: TCP port: 80 # 这里可以替换为实际需要暴露的端口列表,例如80、443等端口 targetPort: 80 # 这里可以替换为实际需要映射的端口列表,例如80、443等端口
4. 等待一段时间,让Harbor的Deployment和Service正常运行起来,可以使用以下命令查看Deployment的状态和Service的信息:
```bash
kubectl get deployments harbor-status # 这里可以替换为实际的Deployment名称,例如harbor-master、harbor-worker等状态检查相关命令;kubectl get services harbor-service # 这里可以替换为实际的Service名称,例如kubectl get services harbor-service | grep ClusterIP # 这里可以替换为实际的服务信息查询相关命令;kubectl logs # 这里可以替换为实际的Pod名称,例如kubectl logs harbor-service-xxxxxxx # 这里可以替换为实际的日志查询相关命令;kubectl describe pod # 这里可以替换为实际的Pod名称,例如kubectl describe pod harbor-service-xxxxxxx # 这里可以替换为实际的Pod描述信息查询相关命令;kubectl exec -- sh # 这里可以替换为实际的Pod名称,例如kubectl exec harbor-service-xxxxxxx -- sh # 这里可以替换为实际的Shell命令执行相关命令;kubectl port-forward : # 这里可以替换为实际的Pod名称和端口映射关系,例如kubectl port-forward harbor-service-xxxxxxx 8000:80 # 这里可以替换为实际的端口映射关系查询相关命令;kubectl top pods # 这里可以替换为实际的Pod名称,例如kubectl top pods | grep # 这里可以替换为实际的Pod资源监控相关命令;kubectl get events # 这里可以替换为实际的事件查询相关命令;kubectl get nodes # 这里可以替换为实际的节点信息查询相关命令;kubectl get configmaps # 这里可以替换为实际的ConfigMap信息查询相关命令;kubectl get secrets # 这里可以替换为实际的Secret信息查询相关命令;kubectl get services # 这里可以替换为实际的Service信息查询相关命令;kubectl get deployments # 这里可以替换为实际的Deployment信息查询相关命令;kubectl get pods # 这里可以替换为实际的Pod信息查询相关命令;kubectl get hpa # 这里可以替换为实际的Horizontal Pod Autoscaler信息查询相关命令;kubectl get pvc # 这里可以替换为实际的Persistent Volume Claim信息查询相关命令;kubectl get statefulsets # 这里可以替换与实际StatefulSet信息查询相关命令;kubectl get ingresses # 这里可以替换与实际Ingress信息查询相关命令;kubectl get routes # 这里可以替换与实际Route信息查询相关命令;kubectl get persistentvolumeclaims # 这里可以替换与实际PersistentVolumeClaim信息查询相关命令;kubectl get secretkeys # 这里可以替换与实际SecretKey信息查询相关命令;kubectl get configmapkeys # 这里可以替换与实际ConfigMapKey信息查询相关命令;kubectl get podtemplatespecs # 这里可以替换与实际PodTemplateSpec信息查询相关命令,kubectl describe pods # 这里可以替换与实际Pod描述信息查询相关命令;kubectl describe deployments # 这里可以替换与实际Deployment描述信息查询相关命令;kubectl describe hpa # 这里可以替换与实际Horizontal Pod Autoscaler描述信息查询相关命令;kubectl describe pvc # 这里可以替换与实际Persistent Volume Claim描述信息查询相关命令;kubectl describe statefulsets # 这里可以替换与实际StatefulSet描述信息查询相关命令;kubectl describe ingresses # 这里可以替换与实际Ingress描述信息查询相关命令;kubectl describe routes # 这里可以替换与实际Route描述信息查询相关命令;kubectl describe persistentvolumeclaims # 这里可以替换与实际PersistentVolumeClaim描述信息查询相关命令;kubectl describe secretkeys # 这里可以替换与实际SecretKey描述信息查询相关命令;kubectl describe configmapkeys # 这里可以替换与实际ConfigMapKey描述信息查询相关命令;kubectl describe podtemplatespecs # 这里可以代替与actual PodTemplateSpec描述信息查询相关命令
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/57823.html