avatar

甄天祥-Linux-个人小站

A text-focused Halo theme

  • 首页
  • 分类
  • 标签
  • 关于
Home Centos8 安装高版本 k8s(cri-docker)
文章

Centos8 安装高版本 k8s(cri-docker)

Posted 2025-04-1 Updated 2025-05- 5
By Administrator
18~24 min read

一、前言

在Kubernetes(k8s)的容器运行时生态中,Docker、Containerd和CRI-Docker是三个关键组件。随着k8s版本的迭代,对容器运行时的要求也在不断变化,理解它们的关系对部署高版本k8s至关重要。

1. Docker的演变

传统k8s集群常使用Docker作为容器运行时,但其设计并非专为k8s定制。Docker的架构包含:

  • Docker Engine:包含守护进程、API和CLI

  • containerd:实际管理容器生命周期的核心层

  • runc:底层OCI容器运行时

2. Containerd的崛起

从k8s 1.20起,Docker作为运行时被标记为废弃(deprecated),原因包括:

  • 冗余架构(k8s只需容器管理功能)

  • 性能开销(Docker的额外抽象层)

  • 维护复杂性

Containerd作为CNCF毕业项目,成为k8s推荐的轻量级运行时,直接通过CRI(Container Runtime Interface)与kubelet交互。

3. CRI-Docker的定位

对于仍希望使用Docker生态的用户,CRI-Docker提供了折中方案:

  • 作为shim层实现CRI接口

  • 将kubelet的CRI请求转换为Docker API

  • 保留Docker工具链(如docker ps/docker logs)的兼容性

二、为什么选择CRI-Docker?

在CentOS8上安装高版本k8s时选择CRI-Docker方案,主要考虑:

  • 兼容现有Docker工作流程

  • 平滑过渡到纯Containerd架构

  • 满足k8s CRI接口规范要求

下文将详细介绍在CentOS8系统上,通过CRI-Docker方案部署高版本k8s集群的具体步骤和注意事项。

1. 卸载无用程序和依赖

$ yum remove -y containerd runc docker-* podman containerd

2. 配置安装源

$ cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/ 

$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

$ sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*

$ sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*

$ curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

$ yum clean all && yum makecache

3. 关闭防火墙

$ systemctl stop firewalld

$ systemctl disable firewalld

$ swapoff -a

$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

$ hostnamectl set-hostname k8s-master

$ echo "192.168.1.100 k8s-master" >> /etc/hosts

4. 内核调整

$ modprobe br_netfilter

$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

$ cat > /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF

5. 安装 docker

# 查看 docker 的版本
$ yum list docker-ce --showduplicates | sort -r

# 安装指定版本的 docker
$ yum install -y docker-ce-25.0.5 docker-ce-cli-25.0.5 containerd.io docker-buildx-plugin docker-compose-plugin

$ systemctl enable docker --now

$ cat > /etc/docker/daemon.json <<EOF
{
  "data-root": "/var/lib/docker",
  "registry-mirrors": [
      "https://6130e0dd.cf-workers-docker-io-upw.pages.dev",
      "https://docker-mirror-proxy.zhenmourener.workers.dev"
  ],
  "insecure-registries": [
      "example.com:5000"
  ],
  "live-restore": true,
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "10"
  }
}
EOF

$ systemctl daemon-reload && systemctl restart docker

6. 安装 cri-docker

$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el8.x86_64.rpm

$ yum install -y cri-dockerd-0.3.1-3.el8.x86_64.rpm

$ sed -ri 's@^(.*fd://).*$@\1 --pod-infra-container-image registry.aliyuncs.com/google_containers/pause:3.9@' /lib/systemd/system/cri-docker.service

$ systemctl daemon-reload && systemctl restart cri-docker

7. 安装 k8s

$ yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0

$ cat > /var/lib/kubelet/kubeadm-flags.env <<EOF
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock"
EOF

8. 初始化 master

$ kubeadm init \
  --apiserver-advertise-address=192.168.1.100 \
  --control-plane-endpoint=192.168.1.100:6443 \
  --image-repository=registry.aliyuncs.com/google_containers \
  --kubernetes-version=v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

9. 配置命令补全

$ source /usr/share/bash-completion/bash_completion
$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc

10. 从节点加入集群

$ kubeadm join 192.168.1.100:6443 \
  --token 9037x2.tcaqnpaqkra9vsbw \
  --discovery-token-ca-cert-hash sha256:23e4b3729d998e3a97d3dd72989080572a0e5ca9e9a2cd708b5a8cc7bfd09f36 \
  --cri-socket unix:///var/run/cri-dockerd.sock

11. 卸载集群

$ kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock

云原生与容器技术
Docker kubernetes
License:  CC BY 4.0
Share

Further Reading

Nov 19, 2025

Kubernetes 安装部署 Alist 并配置 Onlyoffice

Alist 是一个支持多种存储的目录列表程序,能够将网盘、对象存储和本地存储等挂载为统一目录,提供文件浏览、管理和分享功能。它支持 OneDrive、Google Drive、阿里云盘、百度网盘等多种存储方式,界面简洁美观,基于 Material Design 设计。Alist 功能强大,包括文件预览、下载、分享、搜索和权限管理等,并且开源免费。部署 Alist 服务可以通过 Docker、宝塔面板或直接运行等方式实现,文中以 K8S 部署为例,详细介绍了配置步骤及 OnlyOffice 的集成方法,用于在线预览和编辑 Office 文档。此外,还提供了如何通过 HTTPS 和自签名证书确保服务安全访问的指导。

Oct 23, 2025

KubeSphere-04-Dev-ops 流水线插件的使用

KubeSphere 基于 Jenkins 的 DevOps 系统专为 Kubernetes 中的 CI/CD 工作流设计,提供了一站式的解决方案,包括插件管理、Binary-to-Image (B2I)、Source-to-Image (S2I)等功能。该系统兼容第三方私有镜像仓库和代码库,提供了全面的可视化 CI/CD 流水线。本文档指导用户开启 KubeSphere 的 DevOps 插件,规划流水线并编写 Jenkinsfile,通过实战案例让用户掌握从理论到实践的全过程。文档详细介绍了如何解决开启 DevOps 组件时可能遇到的问题、配置步骤以及验证方法,并演示了创建和管理 DevOps 项目的过程,涵盖用户创建、企业空间与项目的建立等。此外,还提供了简化版的 DevOps 流水线设计示例,涉及从源代码检出到部署环境的整个流程,包括单元测试、编译、构建推送镜像及多环境部署策略。最后,通过一系列准备工作的说明和实际操作步骤,确保用户能够顺利实现自动化持续集成和部署。

Oct 14, 2025

KubeSphere-03-Logging 日志插件的使用

KubeSphere Logging 是 KubeSphere 平台的日志管理插件,基于 Elasticsearch 或 OpenSearch 构建,支持多租户日志收集、查询和分析。它自动采集容器、工作负载及平台审计日志,并通过 Fluent Bit 进行预处理。该插件提供直观的查询界面、灵活的日志保留策略(默认7天)、Sidecar模式增强可靠性以及外部日志系统集成等功能,帮助企业快速定位问题并满足合规要求。开启插件需编辑 ks-installer 配置文件以选择性启用 Elasticsearch 或 OpenSearch,并设置相关参数。此外,还介绍了一款基于 Go 的 OpenSearch 告警与可视化系统,支持多种通知渠道,可通过本地构建 Docker 镜像并在 Kubernetes 环境中部署使用。

OLDER

Kubernetes 部署 Mysql 8.0.32 MGR 高可用集群

NEWER

Kubernetes 部署 GlusterFS 分布式存储

Recently Updated

  • Kubernetes 安装部署 Alist 并配置 Onlyoffice
  • KubeSphere-04-Dev-ops 流水线插件的使用
  • KubeSphere-03-Logging 日志插件的使用
  • KubeSphere-02-Service Mesh 的使用
  • KubeSphere-01-介绍与基础使用

Trending Tags

KVM Service Mesh Docker shell 路由规则 Mysql Containerd GitOps 网络设备 Prometheus

Contents

©2025 甄天祥-Linux-个人小站. Some rights reserved.

Using the Halo theme Chirpy