K8S搭建(centos)三、安装Docker

发布时间:2024年01月23日

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


K8S搭建(ubuntu)系列:
k8s搭建(详细演示完整一篇)
k8s搭建(二、k8s组件安装)

K8S搭建(centos)系列:
K8S搭建(centos)完整版
K8S搭建(centos)一、环境准备
K8S搭建(centos)二、服务器设置
K8S搭建(centos)三、安装Docker
K8S搭建(centos)四、安装K8S
K8S搭建(centos)五、初始化(master节点)
K8S搭建(centos)六、搭建集群
K8S搭建(centos)七、节点加入集群
K8S搭建(centos)八、从节点中使用kubectl命令
K8S搭建(centos)九、集群节点的删除
K8S搭建(centos)十、Dashboard配置(主节点)

安装Docker(每个节点)

以下操作每个节点都要来一遍

以下为运行时的小短文,可选读

为什么要安装docker:
k8s需要再每个pod中运行容器,所以需要容器运行时,k8s默认使用容器运行时接口(Container Runtime Interface,CRI)与所安装的容器运行时进行交互

在不指定运行时的情况下,kubeadm自动扫描一组Unix域套接字来判定系统已安装的运行时
容器运行时与其对应的套接字路径如下:

容器运行时域套接字
Docker/var/run/dockershim.sock
containerd/run/containerd/containerd.sock
CRI-O/var/run/crio/crio.sock

如果同时安装了docker和containerd,优先选择docker,原因是docker附带了containerd。除此之外,只要安装docker,就会检测到docker和containerd,当安装了两个或者多个运行时的时候,kubeadm会报错并退出。kubelet通过内置dockershim CRI实现与docker集成。
当安装docker后,则域套接字只会保留一个containerd的,所以默认k8s也会使用containerd作为运行时

containerd是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。containerd可以在宿主机中管理完整的容器生命周期,包括容器镜像的传输和存储、容器的执行和管理、存储和网络等。

docker和containerd的对比:
containerd是从Docker中分离出来的一个项目,可以作为一个底层容器运行时,现在它成了Kubernete容器运行时更好的选择。

k8s移除dockershim集成,推荐使用containerd,其原因大致如下:
当使用docker作为容器运行时,kubelet需要先要通过 dockershim 去调用Docker,再通过Docker去调用containerd。
当使用containerd作为容器运行时,由于containerd内置了 CRI (Container Runtime Interface:容器运行时接口)插件,kubelet可以直接调用containerd。

docker为k8s提供运行时容器引擎,用来运行k8s相关容器
k8s的1.24版本之前,都集成了docker的运行时环境组件,故,只需安装docker,即可使用运行时环境运行k8s的容器组件
在k8s的1.24版本开始kubelet移除了自带的容器运行时的支持,1.24开始就需要自己安装额外的容器运行时支持
本篇k8s以1.23.0版本为例,只需安装docker即可

如非root用户下,需在命令前加sudo前缀获取权限,后续都是如此
本篇docker版本选取为当前最新版本24.0.7-1.el8

1. 卸载docker

参考:docker(yum)卸载

2. 安装docker

参考:docker(yum)安装
安装后,
查看docker状态

systemctl status docker

启动docker,

systemctl start docker

3. 配置docker

本篇仅配置cgroup驱动,其余不做配置
如需配置镜像加速,参考:配置阿里云镜像加速器
创建docker文件夹,-p参数表示如果存在则不创建

mkdir -p /etc/docker

修改cgroup驱动为systemd,这是k8s官方推荐,且不使用这个后续可能会出现一些问题

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

在这里插入图片描述
然后查看

cat /etc/docker/daemon.json

在这里插入图片描述
也可用vim进行修改添加
在这里插入图片描述
重启docker,一定要重启docker,不重启这个配置无法生效会导致后续kubeadm初始化报错

systemctl restart docker

最后设置docker开机自启动,立即生效

systemctl enable --now docker

查看状态

systemctl status docker

拓展(可跳过,本篇跳过):
除了修改驱动外,还可以添加其它参数来配置docker
如限制容器日志大小、修改存储类型、docker配置目录可修改等

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "registry-mirrors": ["https://vj4iipoo.mirror.aliyuncs.com"],
  "data-root": "/data/docker"
}
EOF

其中最重要的就是cgroup驱动的修改,官方推荐使用systemd,具体原因可参考官网

4. 验证docker版本

查看docker版本信息

docker -v
或
docker --version

查看docker详细信息

docker info

5. 用户组添加(可跳过,本篇跳过)

如果使用的是非root用户,则可以执行以下操作将用户添加到docker组,后续使用docker相关命令无需加sudo前缀
当然也可以不配置,看你心情

添加用户到 docker 组

usermod -aG docker <USERNAME> 

立即更新 docker 组,使之生效

newgrp docker

6 网络模块开机自动加载(可跳过,本篇执行)

确保网络模块开机自动加载
执行命令

lsmod | grep overlay
lsmod | grep br_netfilter

输出如下
在这里插入图片描述

若无输出或文件不存在则需创建文件如下

cat > /etc/modules-load.d/docker.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

7. 使桥接流量对iptables可见(可跳过,本篇执行)

所有节点添加网络桥接过滤和地址转发功能

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

在这里插入图片描述

执行命令,立即生效

sysctl --system

在这里插入图片描述
在这里插入图片描述

验证是否生效,执行以下命令,返回1则表示生效

sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
sysctl -n net.ipv4.ip_forward

在这里插入图片描述


感谢阅读,祝君暴富!

文章来源:https://blog.csdn.net/mo_sss/article/details/135749139
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。