本次使用Kubernetes1.26.3版本,Kubernetes在1.24以后就使用containerd作为容器,并不再使用docker
操作系统:Centos7.9或Ubuntu18.04
CentOS7.9
cat > install.sh << EOF
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
sudo service docker start
EOF
sh install.sh
#安装dockers
以上是centos的安装方式
Ubuntu18.04
Ubuntu更新完apt源后直接
apt -y install docker.io
以下步骤Ubuntu与CentOS都一致
因为Docker是个国外的网站,所以下载镜像地址会比较慢,推荐使用阿里云的镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances
下载docker-compose
下载个1.22的吧
https://github.com/docker/compose/releases/tag/1.22.0
wget https://github.com/docker/compose/releases/download/1.22.0/docker-compose-Linux-x86_64
#下载docker-compose
#这是下载了个命令
#然后将这条命令 移动到 /usr/bin/改名为docker-compose
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
#然后给他执行权限
chmod +x /usr/bin/docker-compose
去下载harbor仓库
搜索harbor
点进去
https://github.com/goharbor/harbor/tags
选个版本 找个老版本2.5.2的
https://github.com/goharbor/harbor/releases/tag/v2.5.2
github官网搜索harbor
就这个
https://github.com/goharbor/harbor
tag就是版本的意思
来这里面下载尽量不要下载-rc的这种
点这个v2.5.0
安装包
校验码
online 是在线 他就是个下载包 而不是软件包 他是一边下载一边装
offine 是离线 这个是软件包 里面包含你所有所依赖的包都有 下载完后 只需要加载就行了 我们一般下载 offine 右键复制链接地址 然后wget 下载
#找个目录
cd /usr/src
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
#下载
tar xf harbor-offline-installer-v2.5.2.tgz
#解压
cd harbor/
#进入解压的目录
mkdir certs
#创建个证书
#创建ca证书私钥
openssl genrsa -out ca.key 4096
#生成ca证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=guoguo.com" \
-key ca.key \
-out ca.crt
#创建私钥
openssl genrsa -out guoguo.com.key 4096
#创建证书请求文件 我的域名为guoguo.com 改为自己的域名
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=guoguo.com" \
-key guoguo.com.key \
-out guoguo.com.csr
#生成x509 v3扩展名文件 签发
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=guoguo.com
DNS.2=guoguo
DNS.3=images.guoguo.com
EOF
#生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in guoguo.com.csr \
-out guoguo.com.crt
cd ..
#返回上一级harbor目录
cp harbor.yml.tmpl harbor.yml
#这是个模板 给他改个名字
[root@harbor harbor]# egrep -v "#|^$" harbor.yml
hostname: harbor.guoguo.com
#改为域名或者ip,如果改为ip的话
http:
port: 80
https:
port: 443
certificate: /apps/harbor/certs/guoguo.com.crt
private_key: /apps/harbor/certs/guoguo.com.key
#这两条是证书和密钥目录,将上面创建的证书和密钥目录填上
harbor_admin_password: 123456
#这是admin的密码 我改为123456了
database:
password: root123
max_idle_conns: 100
max_open_conns: 900
data_volume: /data
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: false
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.5.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
upload_purging:
enabled: true
age: 168h
interval: 24h
dryrun: false
#保存退出
./install.sh
#执行这个命令
docker-compose ps
#查看下
[root@harbor harbor]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh 96 13 Up (healthy)
harbor-jobservice /harbor/entrypoint.sh Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy)
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp,:::80->8080/tcp, 0.0.0.0:443->8443/tcp,:::443->8443/tcp
redis redis-server /etc/redis.conf Up (healthy)
registry /home/harbor/entrypoint.sh Up (healthy)
registryctl /home/harbor/start.sh Up (healthy)
这个nginx是做的反向代理 反向代理到8080 代理到内核机器里面
如果说 我们需要修改一下harbor.yml文件 比如改个域名
这时候我们就要执行
下图这个文件
./prepare
#从新读取你的文件
#然后再执行
docker-compose restart
#重启
#然后再
./install.sh
浏览器输入域名或者ip
如果属于域名需要修改下hosts文件
#位置在:
C:\Windows\System32\drivers\etc\hosts
192.168.1.10 harbor.guoguo.com
#加上这么一条内容,这样就能通过域名访问了
访问 账号admin 密码123456
浏览器打开
新建个项目
有主机上传下载的话 需要登录
登录之前要加
有主机上传下载的话 需要登录
登录之前要加
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry harbor.guoguo.com
#注意一下 这个添加的ip是harbor 仓库的ip
--insecure-registry harbor.guoguo.com
因为端口是80 就不需要写端口了 默认就是80
systemctl daemon-reload
systemctl restart docker
##加上面这条的意思是 因为是我们自己做的证书 他不信任 它默认去找https 找https 他就得验证你的证书 所以得加这么一条
#注意同时/etc/hosts文件也要修改
vim /etc/hosts
192.168.1.10 harbor.guoguo.com
docker login harbor.guoguo.com
登录
用户名admin
密码 123456
docker logout
登出
下面将harbor加入到kubernetes集群,使创建pod的时候可以正常拉取镜像
K8s每个节点都要操作
需要修改hosts文件
vim /etc/hosts
harbor.guoguo.com 192.168.1.10
vim /etc/containerd/config.toml
#修改添加下面内容,域名需要写上自己的,还要写上harbor用户和密码,看下面图片
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = ""
[plugins."io.containerd.grpc.v1.cri".registry.auths]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.guoguo.com".tls]
insecure_skip_verify = true # 是否跳过安全认证
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.guoguo.com".auth]
username = "admin"
password = "123456"
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.guoguo.com"]
endpoint = ["http://harbor.guoguo.com"]
#大概行号
139 [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime.options]
140
141 [plugins."io.containerd.grpc.v1.cri".image_decryption]
142 key_model = "node"
143
144 [plugins."io.containerd.grpc.v1.cri".registry]
145 config_path = ""
146
147 [plugins."io.containerd.grpc.v1.cri".registry.auths]
148
149 [plugins."io.containerd.grpc.v1.cri".registry.configs]
150 [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.guoguo.com".tls]
151 insecure_skip_verify = true # 是否跳过安全认证
152 [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.guoguo.com".auth]
153 username = "admin"
154 password = "123456"
155 [plugins."io.containerd.grpc.v1.cri".registry.headers]
156
157 [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
158 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.guoguo.com"]
159 endpoint = ["http://harbor.guoguo.com"]
160
161 [plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
162 tls_cert_file = ""
163 tls_key_file = ""
systemctl restart containerd
#重启containerd
到这里就完成了,需要做的是像harbor仓库上传镜像,镜像名字要求前面如果使用的域名那么就用域名如果是ip就用ip
比如我的是harbor.guoguo.com就写成
docker push harbor.guoguo.com/os/ubuntu:18.04
#这个是上传,上传之前需要登录到harbor仓库,上面步骤有登录的方法