一、背景
操作系统 | K8S版本 | Harbor版本 | containerd版本 | nerdctl版本 |
---|---|---|---|---|
Ubuntu 20.04.5 LTS | v1.24.12 | v2.5.6 | 1.6.12 | 1.2.1 |
一般来说某个主机安装了k8s后,命令行才会有crictl命令。而ctr是跟k8s无关的,主机安装了containerd 服务后就可以操作ctr命令。ctr -v输出的是containerd的版本,crictl -v输出的是当前k8s的版本,从结果显而易见可以认为crictl是用于k8s的。
root@k8s-master-62:~# crictl -v
crictl version v1.26.0
root@k8s-master-62:~# ctr -v
ctr github.com/containerd/containerd 1.6.12-0ubuntu1~20.04.1
ctr客户端主要区分了2个命名空间分别是k8s.io和default,使用ctr查看镜像列表需要加上-n参数。而crictl 是只有一个k8s.io命名空间,使用crictl查看镜像列表不需要加上-n参数。
root@k8s-master-62:~# ctr namespace ls
NAME LABELS
default
k8s.io
root@k8s-master-62:~# crictl namespace ls
No help topic for 'namespace'
crictl没有tag命令,只能使用nerdctl和ctr,必须指定命名空间,要不然kubelet无法使用。推荐使用nerdctl,使用效果与docker命令的语法一致。
二、部署harbor镜像仓库
1、安装cfssl工具集
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64 -o /usr/local/bin/cfssl
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64 -o /usr/local/bin/cfssljson
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64 -o /usr/local/bin/cfssl-certinfo
curl -L https://dl.k8s.io/release/v1.24.12/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl
chmod +x /usr/local/bin/cfssl* && chmod +x /usr/local/bin/kubectl
2、准备CA证书配置文件
vim harbor-ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"harbor": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
3、准备harbor server证书请求文件
vim harbor-server-csr.json
{
"CN": "muli.harbor.json",
"hosts": [
"192.168.1.64",
"my.harbor.com",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Beijing",
"L": "Beijing"
}
]
}
4、生成harbor CA证书和私钥
cfssl gencert -initca harbor-ca-csr.json | cfssljson -bare harbor-ca
5、生成harbor server证书和私钥
cfssl gencert \
-ca=harbor-ca.pem \
-ca-key=harbor-ca-key.pem \
-config=harbor-ca-config.json \
-profile=harbor \
-loglevel=1 \
harbor-server-csr.json | cfssljson -bare harbor-server
7、为了在Docker中使用CA证书访问Harbor镜像仓库,您需要将CA证书添加到Docker守护程序的TLS信任存储中。按照以下步骤进行操作
# 1、创建/etc/docker/certs.d/my.harbor.com:8443目录,将harbor-ca.pem证书复制到此目录
# 2、重启docker服务(systemctl restart docker)
7、其它部署操作,这里就不一一写出来
8、现在,您可以直接使用docker login命令进行登录,而无需指定–tlscacert标志,命令示例如下:
root@k8s-harbor-64:~# echo NEoCN0YjdGr | docker login -u admin --password-stdin https://my.harbor.com:8443
docker login会在当前用户家目录下生成~/.docker/config.json,可以根据该文件制作镜像拉取凭证如下所示:
root@k8s-harbor-64:~# cat /root/.docker/config.json
{
"auths": {
"my.harbor.com:8443": {
"auth": "YWRtaW46TkVvQ04wWWpkR3I="
}
}
}
三、修改Containerd配置文件
1、编辑配置文件/etc/containerd/config.toml
[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."my.harbor.com:8443".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."my.harbor.com:8443".auth]
username = "admin"
password = "NEoCN0YjdGr"
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."my.harbor.com:8443"]
endpoint = ["https://my.harbor.com:8443"]
2、重启containerd服务
systemctl daemon-reload && systemctl restart containerd.service
四、推送和拉取私有镜像
4.1、推送镜像到harbor
方法一:
ctr image pull --all-platforms docker.io/library/nginx:1.23.1
ctr image tag docker.io/library/nginx:1.23.1 my.harbor.com:8443/library/nginx:1.23.1
ctr image push --user "admin:NEoCN0YjdGr" --skip-verify my.harbor.com:8443/library/nginx:1.23.1
或者你可以使用doker push上传镜像
docker pull docker.io/library/nginx:1.23.1
docker tag docker.io/library/nginx:1.23.1 my.harbor.com:8443/library/nginx:1.23.1
docker push my.harbor.com:8443/library/nginx:1.23.1
4.2、拉取harbor私有镜像
ctr image pull --user "admin:NEoCN0YjdGr" --skip-verify my.harbor.com:8443/lolaage/nginx:1.23.1
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战