kubernetes1.24版本部署+containerd运行时(弃用docker)

2023-11-10

背景介绍:

kubernetes 1.24版本正式弃用docker,开始使用containerd作为容器运行时。

运行时介绍:

  • OCI(Open Container Initiative):2015年Google、docker、Redhat、IBM共同成立,定义了运行标准和镜像标准。
  • CRI(Container Runtime Interface):2016 年12月Kubernetes 发布 CRI(容器运行时接口), 可以支持rkt等不同的运行时。
  • CRI-O:由redhat发起并开源,用于替代docker成为kubernetes的运行时,2016年开发,2019年4月8号进入CNCF孵化。

至于为什么会弃用docker,而使用containerd了?两方面原因:(个人观点)

  1. containerd属于CNCF【云原生计算基金会】的项目,这样便于社区的管理和维护
  2. 提升了一定的性能
    在这里插入图片描述
    从图中也能看出使用containerd减少了中间docker的调用

集群部署

集群规划

类型 服务器IP 主机名 配置
master 192.168.2.131 ubuntu01 2c/4g
node 192.168.2.132 ubuntu02 2c/4g
node 192.168.2.133 ubuntu03 2c/4g

环境准备

设置主机名

hostnamectl set-hostname <newhostname>
reboot

设置部署节点与其他节点互信

ssh-keygen
ssh-copy-id -i id_rsa.pub <hostname>

内核优化

#执行kubeadm init前,要做参数优化
vim /etc/modules-load.d/modules.conf
ip_vs
br_netfilter
#加载模块使其生效
modprobe ip_vs
modprobe br_netfilter
#调整内核参数
vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 #桥接网络模式,流量的分发过滤
net.ipv4.ip_forward = 1 #开启内核路由转发功能
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
vm.swappiness=0
sysctl -p #使其生效

安装工具kubeadm

# 安装kubeadm、kubectl、kubelet 
#配置阿里镜像加速
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -  #执行此步骤报错可能需要执行 sudo apt-get install -y gnupg
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-cache madison kubeadm
apt-get install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00

安装containerd

apt-cache madison  containerd #验证仓库版版本,不建议二进制方式安装
#推荐二进制方式,以下为具体安装步骤
cd /usr/local/src/
https://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-amd64.tar.gz #下载地址
tar xvf containerd-1.6.6-linux-amd64.tar.gz
cp bin/* /usr/local/bin/
vim /lib/systemd/system/containerd.service     #查看service文件,将以下内容复制到containerd.service文件中,修改执行路径ExecStart为/usr/local/bin
----------------------------------------------------
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target
-----------------------------------------------------
#默认输出配置文件
mkdir /etc/containerd/
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml 
sandbox_image = "k8s.gcr.io/pause:3.6" 修改为 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
#配置镜像加速
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  endpoint = ["https://lzpmltr2.mirror.aliyuncs.com"]
  
systemctl restart containerd && systemctl enable containerd #启动设置开机自启动

安装runc

#安装runc
https://github.com/opencontainers/runc/release/download/v1.1.3/runc.amd64
cp runc.amd64  /usr/bin/runc
chmod a+x /usr/bin/runc

安装命令行工具nerdctl

#安装nerdctl推荐使用,需要安装cni
https://github.com/containerd/nerdctl/releases/download/v0.22.0/nerdctl-0.22.0-linux-amd64.tar.gz #下载地址
tar xvf nerdctl-0.22.0-linux-amd64.tar.gz
cp nerdctl /usr/bin/
nerdctl version #验证是否安装成功

安装cni

#安装cni
https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz #下载地址
mkdir /opt/cni/bin -p #保存cni插件的路径
tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/

nerdctl工具使用验证

#创建容器并指定端口
nerdctl pull nginx
nerdctl run -d -p 80:80 --name=nginx-web1 --restart-always nginx:latest
nerdctl ps
nerdctl exec -it alskkfkfkf bash

提前下载镜像

#提前下载所需镜像
kubeadm config images list --kubernetes-version v1.24.3 #执行此命令获取所需的镜像文件
vim down_image.sh #注意:一定要把镜像下载到k8s.io命名空间下
#! /bin/sh
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.3
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.3
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.3
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.3
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.3-0
nerdctl  -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.6

132、133节点执行上面同样的操作,执行完成后,在master节点执行kubeadm init

初始化集群

kubeadm  init  --apiserver-advertise-address=192.168.2.131 --apiserver-bind-port=6443  --kubernetes-version=v1.24.3  --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=cluster.local --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swap

#初始化完成后,显示如下:
-------------------------------------------------
our Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.2.131:6443 --token 5vaxru.b7u810mxxzhme8qh \
	--discovery-token-ca-cert-hash sha256:558920a8f11253e2714e47b53f2a942bc14cee604e7f5a9c78b66aae29cc8d91 
---------------------------------------------------
#在master节点执行如下命令:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点加入集群

#node节点执行以下命令加入集群中;132/133节点分别执行以下命令
kubeadm join 192.168.2.131:6443 --token 5vaxru.b7u810mxxzhme8qh \
	--discovery-token-ca-cert-hash sha256:558920a8f11253e2714e47b53f2a942bc14cee604e7f5a9c78b66aae29cc8d91

至此,集群搭建完成

集群验证

通过kubectl命名可以看到个节点处于ready状态
在这里插入图片描述
查看各组件是否全部为running状态

在这里插入图片描述
部署nginx应用测试验证
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes1.24版本部署+containerd运行时(弃用docker) 的相关文章

随机推荐

  • (一)ideal 创建springboot工程和实现简单配置

    新建 IDEA project 选择Spring Initializr Choose Initializr Service URL 选择 Default Https start spring io 点击 next 进入下一步 提示 1 sp
  • Keil for arm 关于enit0 快速中断(FIQ)的响应

    本文原创 版权所有 如需转载 请注明出处 接着上篇讲arm7对于普通中断的响应 今天讲一下 关于快速中断的响应 步骤1 基础环境 arm7 LPC2106 Realview 4 2 编译环境默认 步骤2 starup s文件 启动代码 和i
  • adb shell 报错error: device unauthorized

    2022 7 29 oppo r11s 安卓8 亲测成功 windows电脑在链接安卓设备后 想要进行终端命令行进入到该设备 出现报错 报错内容 C Users gt adb shell error device unauthorized
  • 机械手使用者坐标系和工具坐标系_发那科机器人应用-坐标系介绍(2)

    工具坐标系 由工具中心点 的位置 和工具的姿势 构成 工具中心点 的位置 通过相对机械接口坐标系的工具中心点的坐标值 来定义 工具的姿势 通过机械接口坐标系的 轴 轴 轴周围的回转角 来定义 工具中心点用来对位置数据的位置进行示教 在进行工
  • Linux系列:Linux中如何安装.rpm、.tar、.tar.gz和tar.bz2文件

    我以下面三个包为例 三个包都在 etc opt下 A example 1 2 3 1 rpm B example 1 2 3 1 tar C example 1 2 3 1 tar gz 1 安装rpm包 说起RPM REDHAT Pack
  • 关于QtCreator 4.8 创建工程时,选中创建界面(.ui)无法创建工程问题

    在主界面一次选中 help gt about plugins 然后在弹出界面中找到QtCreator 在Designer右侧的的方框中打钩 然后close界面 重启软件 搞定 很简单的设置 浪费了好长时间
  • 芯片设计制造全过程

    芯片设计制造全过程 将一颗芯片从0到1 可以分为芯片设计和芯片制造两部分 芯片设计对应市场上一些fabless公司 这类公司只做芯片设计 而芯片制造对应的是foundary 比如国内的smic TSMC 国外的Samsung GlobalF
  • 分布式系统的接口幂等性设计

    什么是幂等性 就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的 不会因为多次点击而产生了其他的结果 在 CRUD 这 4 个操作中 查询操作是天然幂等的 删除操作也只会删除一次 多次的删除操作结果还是一样 影响幂等的只有在添加和
  • 服务器考试系统推荐,如何挑选并发性好的在线考试系统?

    原标题 如何挑选并发性好的在线考试系统 并发性是在线考试系统的核心指标之一 不同的在线考试系统之间可能功能上看似差异不大 但并发性不同就会使得使用体验悬若霄壤 如何挑选并发性好的在线考试系统呢 最好的办法还是通过具体的使用来进行判断 什么是
  • ConstraintLayout 使用详解

    在安卓开发过程中除了一些列的逻辑代码程序以外 UI界面也是很重要的组成部分 对于用户来说界面更是一个应用的所有 所有的操作和交互都是在UI发生 对于开发者来说UI的加载和绘制对应用的计算和内存的影响更是不容忽视 下面看一组界面 这个布局很简
  • 线程池使用和自定义线程池

    目录 1 线程基础概述 1 1 线程池的作用 1 2 为什么要用线程池 1 3 比较重要的几个类 1 4 new Thread的弊端 2 四种线程池 2 1 源码分析 2 2 RejectedExecutionHandler 线程池四种拒绝
  • subversion强制写log的windows 和linux hooks脚本

    windows code echo offsetlocalset REPOS 1set TXN 2rem check that logmessage contains at least 10 characterssvnlook log RE
  • Tinyid原理介绍

    Id生成系统要点 在简单系统中 我们常常使用db的id自增方式来标识和保存数据 随着系统的复杂 数据的增多 分库分表成为了常见的方案 db自增已无法满足要求 这时候全局唯一的id生成系统就派上了用场 当然这只是id生成其中的一种应用场景 那
  • MYSQL 中的表空间

    MYSQL中的表空间 MYSQL 的表空间可以理解为其存储在物理磁盘上的 表名 ibd 文件 MYSQL 为了管理方便 增加了很多概念 来一一了解一下 逻辑概念 Segment 在 B 树的根页面的中 存储了两个 10 字节的字段 PAGE
  • vue实现动态锚点

    监听滚动事件 实现动态锚点 参考 Vue监听滚动实现锚点定位 双向
  • 科技赋能企业,实现数字化转型

    科技是第一生产力 数字技术即科技 可以改变传统的商业模式 为各行各业注入新的活力 推动企业数字化转型 可是实现行业的效率提升 实现跨界重组 重构产业模式 为产业格局重新赋能 最终实现企业产能升级 一 科技赋能意义重大 科技赋能企业 为我国经
  • 通过springboot autoconfig分析bean实例化过程的案例

    分析案例前提所参考的例子 Spring Boot中的自定义start pom SpringBoot学习笔记 3 Spring Boot 运行原理 自动配置 然后我又看了下nacos的源码 发现原来也都是这做的截图如下 当然最终的目的我是想知
  • 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据

    目录标题 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据 步骤 1 使用 Navicat 打开连接 2 打开 工具 gt 结构同步 3
  • Linux中root用户找不到JAVA_HOME

    Linux中root用户找不到JAVA HOME 在Ubuntu环境中安装好Java环境后设置环境变量 在 etc profile中设置好了JAVA HOME变量并引入到PATH中 用于Ubuntu默认是不以root用户登录的 这时echo
  • kubernetes1.24版本部署+containerd运行时(弃用docker)

    背景介绍 kubernetes 1 24版本正式弃用docker 开始使用containerd作为容器运行时 运行时介绍 OCI Open Container Initiative 2015年Google docker Redhat IBM