kubernetes集群部署:node节点部署和cri-docker运行时安装(四)

安装前准备

同《kubernetes集群部署:环境准备及master节点部署(二)

安装cri-docker

在 Kubernetes 1.20 版本之前,Docker 是 Kubernetes 默认的容器运行时。然而,Kubernetes 社区决定在 Kubernetes 1.20 及以后的版本中逐步淘汰对 Docker 的直接支持,一直到Kubernetes 1.24版本彻底不再支持Docker作为kubernetes的默认容器运行时,原因如下:

  1. CRI 标准化:Kubernetes 团队推出了 CRI(Container Runtime Interface),旨在标准化容器运行时的接口,使 Kubernetes 能够与不同的容器运行时(如 containerd、CRI-O)无缝集成。
  2. Docker Shim:为了使 Kubernetes 能够与 Docker 一起工作,Kubernetes 需要一个称为 "dockershim" 的组件,充当 Kubernetes 和 Docker 之间的桥梁。这增加了额外的复杂性和维护负担。

为了解决这一问题,并让仍然依赖 Docker 的用户继续使用,cri-dockerd 项目应运而生。

什么是 cri-dockerd

cri-dockerd 是一个外部的开源项目,目的是提供一个兼容 Kubernetes CRI 的 Docker 运行时。它是 Docker 和 Kubernetes 之间的桥梁,使 Kubernetes 可以使用 Docker 作为容器运行时,同时符合 CRI 标准。

功能和特点

  1. 兼容性cri-dockerd 保持与现有 Docker 工作流程和工具的兼容性,用户可以继续使用熟悉的 Docker CLI 和生态系统。
  2. 标准化接口:通过实现 CRI 接口,cri-dockerd 确保 Kubernetes 可以与 Docker 一起无缝工作。
  3. 开源项目cri-dockerd 是一个社区驱动的开源项目,保证了其可持续性和社区支持。

安装Docker

1、配置第三方镜像源

~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装Docker

dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

3、修改Docker配置文件,修改私有仓库地址。

tee /etc/docker/daemon.json<<-'EOF'
{
"registry-mirrors": [
        "https://mirror.ccs.tencentyun.com"
],
  "insecure-registries": ["192.168.XX.101"]
}
EOF

4、启动并设置开机启动项

systemctl start docker
systemctl enable docker.service

安装 cri-dockerd

1、下载cri-dockerd软件包

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14-3.el8.x86_64.rpm

2、安装cri-dockerd

~]# rpm -ivh cri-dockerd-0.3.14-3.el8.x86_64.rpm 
~]# cri-dockerd --version
cri-dockerd 0.3.14 (683f70f)

3、修改cri-dockerd服务文件,增加红色字体配置(配置网络插件和pause image),否则~~哼哼

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=192.168.XX.101/kubeadm/pause:3.9

4、启动并配置开机启动项

systemctl enable cri-docker
systemctl enable --now cri-docker.socket
systemctl start cri-docker

安装kubeadm、kubelet、kubectl

同《kubernetes集群部署:环境准备及master节点部署(二)

Node加入集群

同《kubernetes集群部署:node节点部署和CRI-O运行时安装(三)

但是初始化启动文件需要改一下:

~]# cat kubeadm-join.default.yaml 
apiVersion: kubeadm.k8s.io/v1beta3
caCertPath: /etc/kubernetes/pki/ca.crt
discovery:
  bootstrapToken:
    apiServerEndpoint: k8s130-node190:6443
    token: abcdef.0123456789abcdef
    unsafeSkipCAVerification: true
  timeout: 5m0s
  tlsBootstrapToken: abcdef.0123456789abcdef
kind: JoinConfiguration
nodeRegistration:
  criSocket: unix:///run/cri-dockerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s130-node189
  taints: null

安装之后处理

同《kubernetes集群部署:node节点部署和CRI-O运行时安装(三)

集群搭建完成后联调

1、启动1个mysql,然后启动3个myweb,可看到均衡调度到了2个Node上了。

2、分别创建了mysql的svc和myweb的svc,并将myweb的8080端口映射到Node上的30080,通过如下URL访问效果如下:

至此,我们部署的1master+2node的集群环境,分别尝试使用了Containerd、CRI-O、Docker三种运行时,其中Docker比较特殊,需要额外部署一个CRI(cri-docker)作为桥梁。本人不禁感叹一声:昔日的小甜甜 现在的牛夫人。

### 使用 Sealos 部署 Kubernetes 并与 CRI-Docker 集成 #### 安装准备 为了确保顺利部署,需先完成一系列准备工作。这包括但不限于关闭防火墙 SELinux、配置主机名解析以及设置间同步[^2]。 ```bash sudo systemctl stop firewalld && sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config echo "192.168.56.10 master" | sudo tee -a /etc/hosts echo "192.168.56.11 node1" | sudo tee -a /etc/hosts echo "192.168.56.12 node2" | sudo tee -a /etc/hosts timedatectl set-timezone Asia/Shanghai chronyc sources -v ``` #### 下载并初始化 Sealos 工具包 获取最新版的 Sealos 文件,并将其放置于 `/usr/local/bin` 路径下以便全局调用。接着赋予执行权限给 sealos 可执行文件。 ```bash wget https://github.com/labring/sealos/releases/download/v4.1.3/sealos_4.1.3_linux_amd64.tar.gz tar zxvf sealos_*.gz -C /usr/local/bin/ chmod +x /usr/local/bin/sealos ``` #### 设置 Docker 作为默认容器运行 尽管推荐采用 Containerd 来提高性能资源利用效率[^3],但在某些场景中仍可能偏好使用 Docker。为此,在启动集群之前应指定 `--container-runtime=docker` 参数来告知 Sealos 使用 Docker 运行。 ```bash sealos init --master 192.168.56.10 --node 192.168.56.11,192.168.56.12 \ --passwd your_password_here \ --version v1.24.0 \ --pkg-url https://hub.fastgit.org/labring/kubernetes/releases/download/v1.24.0/kube-v1.24.0-linux-amd64.tar.gz \ --container-runtime=docker ``` 上述命令中的参数解释如下: - `--master`:节点 IP 地址。 - `--node`: 所有工作节点的 IP 列表(逗号分隔)。 - `--passwd`: SSH 密码用于连接各个节点- `--version`: 指定要安装Kubernetes 版本。 - `--pkg-url`: 自定义下载地址链接至所需版本的 Kubernetes 包。 - `--container-runtime=docker`: 明确指出使用 Docker 作为容器引擎。 #### 启动集群服务 一旦成功初始化之后,则可以通过下面这条简单的指令让整个集群运作起来: ```bash sealos apply ``` 此应该能够通过 `kubectl get nodes` 查看到所有的节点都处于 Ready 状态了。 #### 验证集群健康状况 最后一步就是验证集群的状态是否正常。可以尝试创建一个小的应用程序 Pod 或者直接查询现有的系统 Pods 是否都在稳定运行当中。 ```bash kubectl run nginx --image=nginx:latest --port=80 kubectl expose pod/nginx --type="NodePort" kubectl get pods,services ``` 如果一切顺利的话,现在就已经拥有了一个基于 DockerKubernetes 生产环境!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值