【Docker初探】第十节:部署Docker本地镜像仓库Harbor(Helm方式,Arm64与X86_64)

需先安装K8s,请参考:

  • 【K8s笔记】第一节:生产环境安装,容器运行时
  • 【K8s笔记】第二节:生产环境安装,安装 kubeadm、kubelet 和 kubectl

安装 helm

snap install helm --classic

下载harbor chart

helm repo add harbor https://helm.goharbor.io
helm fetch harbor/harbor --untar

创建harbor证书

# 生成key
mkdir ./harbor-ca
cd ./harbor-ca
openssl genrsa -out tls.key 4096
# 生成crt
openssl req -new -x509 -text -key tls.key -out tls.cert -keyout tls.pem -subj "/CN=harbor.server.com"
# 复制(如用的K8s,需复制到其他Node)
mkdir -pv /etc/docker/certs.d/harbor.server.com:30003/
cp ./* /etc/docker/certs.d/harbor.server.com:30003/
cd ..

创建notary证书

# 生成key
mkdir ./notary-ca
cd ./notary-ca
openssl genrsa -out tls.key 4096
# 生成crt
openssl req -new -x509 -text -key tls.key -out tls.cert -keyout tls.pem -subj "/CN=notary.server.com"
# 复制(如用的K8s,需复制到其他Node)
mkdir -pv /etc/docker/certs.d/notary.server.com:30004/
cp ./* /etc/docker/certs.d/notary.server.com:30004/
cd ..

安装NFS服务

# 安装 nfs-kernel-server
sudo apt-get install nfs-kernel-server
# 修改配置文件
sudo vim /etc/exports
	<共享路径1> *(rw,sync,no_root_squash)     # * 表示允许任何网段 IP 的系统访问该 NFS 目录
	<共享路径2> *(rw,sync,no_root_squash)     # * 表示允许任何网段 IP 的系统访问该 NFS 目录
# 授权
sudo chmod -R 777 <共享路径>
# 启动服务
sudo /etc/init.d/nfs-kernel-server restart
# 测试服务,挂载到 /mnt,不报错就说明服务正常
sudo mount -t nfs :<共享路径> /mnt -o nolock
# 卸载
sudo umount /mnt

创建nfs-client-provisioner

# 下载 deploy/ 下 deployment.yaml, rbac.yaml, class.yaml 3个文件
https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client
# 修改 deployment.yaml 文件
volumes.hostPath.path: 
# 创建 Deployment 和 Service(x86_64)
kubectl create -f ./deployment.yaml
# 创建 Deployment 和 Service(arm)
kubectl create -f ./deployment_arm.yaml
# 创建 ClusterRole, ClusterRoleBinding, Role, RoleBinding 设置权限
kubectl create -f ./rbac.yaml
# 创建 StorageClass
kubectl create -f ./class.yaml
# /etc/kubernetes/manifests/kube-apiserver.yaml 文件
	添加"--feature-gates=RemoveSelfLink=false"
# 修改 /etc/docker/daemon.json 文件
	添加:
	{
		"insecure-registries":["harbor.server.com:30003"]
	}

配置harbor(nodePort方式)

cd harbor
vi ./values.yaml
	expose.type: nodePort
	expose.tls.auto.commonName: "harbor.server.com"
	expose.tls.secret.secretName: ""
	expose.tls.secret.notarySecretName: ""
	externalURL: https://harbor.server.com:30003
	persistence.persistentVolumeClaim.*.storageClass: "managed-nfs-storage" # 配置所有 storageClass
	persistence.imageChartStorage.filesystem.rootdirectory: /export # 与 nfs-provisioner 配置对应
	harborAdminPassword: ""
	# arm64需要替换掉所有镜像
	*.image.repository: cocl666/*
	*.image.tag: v2.2.2
	# arm64需要替换掉所有镜像,redis-photon镜像配置
	*.image.repository: harborarm/redis-photon
	*.image.tag: dev

配置harbor(ingress方式)

# 配置大部分与 nodePort 方式一样,修改如下:
	expose.type: ingress
 	ingress.hosts.core: harbor.server.com
	ingress.hosts.notary: notary.server.com
# 下载 ingress-nginx
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/exoscale/deploy.yaml
# 修改 deploy.yaml
vi ./deploy.yaml
	# 找到 ingress-nginx/templates/controller-service.yaml 部分
	spec.ports.http.nodePort: 30080 # 固定开放端口号
	spec.ports.https.nodePort: 30443 # 固定开放端口号
# 创建 ingress-nginx
kubectl create -f deploy.yaml
# 部署后可以直接用对应端口访问
https://harbor.server.com:30443/

安装kube-flannel(x86_64)

# x86_64
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

安装kube-flannel(arm64)

# arm64
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
vi kube-flannel.yml
	所有image后面标签加上"-arm64"
kubectl apply -f ./kube-flannel.yml

安装harbor

# 安装
kubectl create namespace harbor-helm
helm install my-release . -n harbor-helm
# 查看是否正常启动
kubectl get pods -n harbor-helm
kubectl describe pods -n harbor-helm

修改/etc/hosts文件,添加:

<127.0.0.1或IP地址> harbor.server.com notary.server.com

访问Harbor页面,并新增用户

# 浏览器打开IP
https://127.0.0.1:30003

用新用户登录Docker

# 输入账号与密码
docker login harbor.server.com:30003

修改镜像名称

docker tag <镜像原名称>: harbor.server.com:30003/<镜像名称>:

推送镜像

docker push harbor.server.com:30003/<镜像名称>:

拉取镜像

docker pull harbor.server.com:30003/<镜像名称>:

卸载(可选)

helm uninstall my-release -n harbor-helm

可能的问题

  • k8s Error registering network: failed to acquire lease: node “master“ pod cidr not assigne**

参考资料

  • kube-flannel

你可能感兴趣的:(Linux,Docker本地仓库,registry,harbor,helm,arm64)