首页 > 其他分享 >k8s新版本使用container而不是docker

k8s新版本使用container而不是docker

时间:2024-08-24 20:53:22浏览次数:10  
标签:rainsc container hub containerd v1 docker k8s com Docker

使用 Harbor 仓库作为 Kubernetes 集群私有仓库

Harbor 仓库信息

  • 内网地址:hub.rainsc.com
  • IP 地址:192.168.66.100

问题背景

在许多版本的教程中,会建议在 Docker 的配置中添加忽略证书的列表。然而,截至 2024 年 8 月 24 日,这些教程支持的 Kubernetes 版本已经无法直接安装。一方面是因为这些教程大多基于 CentOS 7,使用的是 4.4 内核,而 CentOS 相关的所有镜像源都已经删除了内核相关文件。

当前我的内核版本是:

[root@master01 ~]# uname -a
Linux master01 5.14.0-496.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Aug 12 20:37:54 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

我直接按照当前内核支持的版本安装了最新的 kubectl 工具:

[root@master01 ~]# kubectl version
Client Version: v1.29.8
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.8


[root@master01 ~]# kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.containerRuntimeVersion}'
containerd://1.7.20 containerd://1.7.20 containerd://1.7.20

容器运行时的变化

Kubernetes 并不直接管理容器运行时,而是通过 kubelet 与容器运行时进行交互。在不同的 Kubernetes 版本中,支持的容器运行时有所变化:

  1. Kubernetes 1.20 及之前版本

    • 默认容器运行时: Docker
    • Docker Shim: Kubernetes 通过 Docker Shim(dockershim)与 Docker 交互。
  2. Kubernetes 1.21 至 1.23

    • 容器运行时: Kubernetes 1.21 开始,逐步弃用 Docker Shim,鼓励使用其他 CRI 兼容的容器运行时。
    • 推荐替代容器运行时: containerdCRI-O
  3. Kubernetes 1.24 及之后版本

    • 弃用 Docker Shim: Docker Shim 被正式弃用,不再支持通过 Docker Shim 与 Docker 交互。
    • 推荐容器运行时: containerdCRI-O

Harbor 部署及问题解决

在环境中,我在 192.168.66.100 上部署了 Docker 版本的 Harbor。尝试使用以下命令创建 Pod 时遇到问题:

kubectl run nginx-deployment --image=hub.rainsc.com/library/mynginx:v1 --port=80

该操作提示证书错误,尝试将 Harbor 的证书添加到受信任列表,并修改 Docker 配置文件,但无效。
类似于下面这段 可能不完全一样 因为已经救活了 就不去作死了
下面这个错误展示的是配置文件写错了 但是ai会直接告诉你证书问题 相关tls之类的提示全都说证书问题 千万别碰证书 没有意义

[root@master01 ~]# crictl --runtime-endpoint /run/containerd/containerd.sock pull hub.rainsc.com/library/helloworld:v1
I0824 19:51:33.643312   65083 util_unix.go:103] "Using this endpoint is deprecated, please consider using full URL format" endpoint="/run/containerd/containerd.sock" URL="unix:///run/containerd/containerd.sock"
E0824 19:51:33.691725   65083 remote_image.go:171] "PullImage from image service failed" err="rpc error: code = Unknown desc = failed to pull and unpack image \"hub.rainsc.com/library/helloworld:v1\": failed to resolve reference \"hub.rainsc.com/library/helloworld:v1\": failed to do request: Head \"https://hub.rainsc.com/v2/library/helloworld/manifests/v1\": tls: failed to verify certificate: x509: certificate signed by unknown authority" image="hub.rainsc.com/library/helloworld:v1"
FATA[0000] pulling image: rpc error: code = Unknown desc = failed to pull and unpack image "hub.rainsc.com/library/helloworld:v1": failed to resolve reference "hub.rainsc.com/library/helloworld:v1": failed to do request: Head "https://hub.rainsc.com/v2/library/helloworld/manifests/v1": tls: failed to verify certificate: x509: certificate signed by unknown authority

解决方案

由于 Kubernetes 1.24 之后不再使用 Docker,而是使用 containerd,我们需要正确配置 containerdconfig.toml 文件。

  1. 编辑 /etc/containerd/config.toml 文件,找到 [plugins."io.containerd.grpc.v1.cri".registry.auths] 配置节,添加以下内容:
[plugins."io.containerd.grpc.v1.cri".registry.auths]

[plugins."io.containerd.grpc.v1.cri".registry.configs]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."hub.rainsc.com".tls]
    insecure_skip_verify = true
  [plugins."io.containerd.grpc.v1.cri".registry.configs."hub.rainsc.com".auth]
    username = "admin"
    password = "Harbor12345"
[plugins."io.containerd.grpc.v1.cri".registry.headers]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."hub.rainsc.com"]
    endpoint = ["http://hub.rainsc.com"]
  1. 编辑 /var/lib/kubelet/config.yaml 文件,指定 containerRuntimeEndpoint
containerRuntimeEndpoint: "unix:///run/containerd/containerd.sock"
  1. 绑定containerd容器给crictl
    这个文件默认是不存在的 需要手动创建后填
echo "runtime-endpoint: unix:///run/containerd/containerd.sock" | sudo tee /etc/crictl.yaml > /dev/null
[root@node02 ~]# cat /etc/crictl.yaml
cat: /etc/crictl.yaml: 没有那个文件或目录
[root@node02 ~]# echo "runtime-endpoint: unix:///run/containerd/containerd.sock" | sudo tee /etc/crictl.yaml > /dev/null
[root@node02 ~]# cat /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock

  1. 配置完成后,使用以下命令拉取镜像:
[root@master01 ~]# crictl pull hub.rainsc.com/library/helloworld:v1
Image is up to date for sha256:6974669be52b12a9103072cbad3e13fbf119b76aa09747f19a821a5eaad34be1
  1. 创建 Pod:
[root@master01 ~]# kubectl run helloworld --image=hub.rainsc.com/library/helloworld:v1 --port=8123
pod/helloworld created
[root@master01 ~]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
helloworld   1/1     Running   0          9s

总结

通过正确配置 containerd 和 Kubernetes 配置文件,解决了由于弃用 Docker Shim 引发的镜像拉取问题。现在可以正常使用 Harbor 仓库来创建和管理 Pod。

标签:rainsc,container,hub,containerd,v1,docker,k8s,com,Docker
From: https://www.cnblogs.com/rainsc/p/18378217

相关文章

  • TMDOG的微服务之路_08——使用Docker部署NestJS微服务
    TMDOG的微服务之路_08——使用Docker部署NestJS微服务博客地址:TMDOG的博客在上一篇博客中,我们探讨了如何使用NestJS创建一个简单的微服务架构。为了将这些微服务部署到生产环境,我们可以使用Docker来打包和管理这些服务。本篇博客将详细介绍如何使用Docker和Docker......
  • Docker中镜像文件的打包传输、容器导出镜像及虚拟机端口映射的实现
    内网私有仓库1、Docker私有仓库是集中存放镜像的地⽅,⽽注册服务器(Registry)是存放仓库的具体服务器。仓库可以被认为是⼀个具体的项⽬或⽬录。Docker公共仓库:https://hub.docker.com2、Docker私有仓库的作⽤:1)镜像上传到公共仓库不⽅便管理,且仅需要局域⽹⽤户之间传递......
  • docker 修改容器内容后更新镜像的流程
    在Docker中,如果你修改了一个容器的内容并希望将这些更改保存为一个新的镜像,可以按照以下步骤进行:dockerversion:26.11.确保容器运行首先,确保你正在修改的容器是运行中的。如果容器已经停止,你需要启动它:dockerstart<container_id>2.进入容器并进行修改(如果尚未修改)你......
  • 利用DockerDesktop在Win10下搭建Gitlab
    前言之前尝试过直接通过DockerDesktop来搭建Gitlab,但是最终因为稳定性、数据安全、数据备份的问题,还是选择了在Linux服务器上搭建正式的gitlab,仅记录这样的一个过程。个人建议这里需要注意两点:1、操作系统的版本经过我个人尝试,如果是使用win10的话,建议使用1809版本以上的操作系......
  • 导入导出DockerDesktop软件里的images镜像
    前言一、导出查看已有imagesPSC:\WINDOWS\system32>dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEpengzhile/pandoralatest43f234c4e8a85daysago250MBtwang2218/gitlab-ce-zh11.1.41935cc9f87984......
  • Terraform - 实践Terraform - Docker
    CreateTerraforminfrastructurewithDockerHowtoinit/plan/apply/destroyanNGINXwebserverwithTerraform.create.tffiles.terraform.tfThisfileincludestheterraformblock,whichdefinestheproviderandTerraformversionsyouwillusewiththisp......
  • k8s介绍-英文版
    目录WhyWhatSynopsisDesignGoalsArchitectureimage1image2image3MainComponetsCoreResoucessomecoreresoucesrelatedcmdsHowImplementationMechanismDataFlowWhyWeneedasetoftoolsandtechnologiesdesignedtoefficientlydeploy,manage,andorchestrateco......
  • Docker安装Nginx
    第一步:拉取镜像可指定版本,也可不写,则为默认最新版本第二步:拷贝配置文件首先运行容器dockerrun-d--namenginx-p8082:8082nginx然后复制配置文件到宿主机文件夹,此处的宿主文件夹为自己手动创建,即为D:/usr/nginx/conf#将容器nginx.conf文件复制到宿主机dock......
  • docker安装es+kibana
    es,可以选择自己想要的版本dockerrun--nameelasticsearch-p9200:9200-p9300:9300-e"discovery.type=single-node"-eES_JAVA_OPTS="-Xms512m-Xmx512m"-delasticsearch:7.16.2kibanadockerrun--namekibana-eELASTICSEARCH_HOSTS=http://192.168......
  • docker对的tomcat、mysql、redis、nginx的安装
    本章篇章主要讲解了docker对常用软件的安装说明总体步骤:搜索镜像、拉取镜像、查看镜像、启动镜像、停止容器、移除容器tomcatdockerseachertomcat//也可以在dockerhub上面查找tomcat镜像dockerpulltomcat从dockerhub上拉取tomcat镜像到本地dockerimages//查看是否......