首页 > 其他分享 >CKA学习笔记

CKA学习笔记

时间:2023-04-26 16:56:26浏览次数:39  
标签:容器 CKA containerd 笔记 nerdctl 学习 crictl 镜像 docker

容器

容器和虚拟机的区别,容器本身是一个APP,虚拟机是一个完整的系统。

容器管理

runtime,运行时。

高级别Runtime 低级别Runtime
docker runc
containerd lxc
cri-o gvisor
rkt kata
podman ...
...

一般而言,高级别的Runtime会去调用低级别的Runtime,docker和containerd底层调用的是runc。

低级别运行时只能管理容器,高级别运行时不仅可以管理容器,还可以管理镜像。无论是高级别还是低级别运行时,所使用的镜像是一样的。

容器架构

docker是客户端工具,dockerd是服务端工具。docker默认连接的是本机dockerd,可以通过-H指定远程的dockerd服务。

containerd是服务端,上层的客户端有ctr,crictl,nerdctl,不同的客户端之间是通过命名空间相互隔离的,所以不同客户端创建的容器是隔离看不见的。

搭建环境

创建2个虚拟机,在里面分别安装docker和containerd。

使用containerd运行时是因为K8S的新版本中不再作为运行时了,但是docekr依旧可以用来打包和构建。

# 关闭屏幕保护
setterm -black 0
# 配置yum源
rm -rf /etc/yum.repos.d/* ; wget ftp://ftp.rhce.cc/k8s/* -P /etc/yum.repos.d/
# 安装docker
yum install -y docker-ce
# 启动docker并设置开机启动
systemctl enable docker --now
# 安装containerd和客户端工具
yum install -y containerd.io cri-tools 
# 启动containerd并设置开机启动
systemctl enable containerd --now

查看docker运行时

# 查看运行时
docker info |grep -i runtime
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc

docker配置

cat > /etc/docker/daemon.json <<EOF
{ "registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker

查看containerd运行时

# crictl连接运行时
crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
# 查看运行时
crictl info |grep -i runtime
        "type": "RuntimeReady",
      "defaultRuntimeName": "runc",

containerd配置

需要先配置客户端连接的运行时,

# 查看当前的配置
containerd config dump
# 导出containerd默认配置并覆盖当前的配置文件
containerd config default > /etc/containerd/config.toml
# 设置加速服务,搜索mirrors并在底下加入2行,完整配置如下
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]  
    endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
# 搜索sandbox,修改这行内容为
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
# 搜索SystemdCgroup并修改为true,同时删除上面几行,最终效果如下
 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true
# 修改完重启containerd
systemctl restart containerd

第7 行的“docker.io"表示只加速这个匹配的域名

安装nerdctl客户端

crictl用起来和docker命令兼容不是很好,比较好用的是nerdctl且命令也兼容docker,所以可以单独安装nerdctl搭配containerd。

# 下载后并解压
tar -zxvf nerdctl-0.23.0-linux-amd64.tar.gz -C /usr/bin/
# 安装网络插件
mkdir -p /opt/cni/bin/
tar -zxvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/

由于nerdctl和crictl使用的是不同的命名空间,所以是相互隔离,为了兼容crictl创建的容器,可以将nerdctl的命名空间修改为和crictl一样。

# 创建配置目录
mkdir /etc/nerdctl/
# 添加配置信息
cat > /etc/nerdctl/nerdctl.toml <<EOF
debug = false
debug_full = false
address = "unix:///var/run/containerd/containerd.sock"
# 修改namespace为k8s.io,默认是default
namespace = "k8s.io"
#snapshotter = "stargz"
cgroup_manager = "systemd"
#hosts_dir = ["/etc/containerd/certs.d","/etc/nerdctl/certs.d"]
insecure_registry = false
EOF

# 启用linger
loginctl show-user root | grep Linger
loginctl enable-linger root

配置nerdctl加速

nerdctl并不会使用container的配置文件,而是有其自己的配置文件。

mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml <<EOF
# server = "https://docker.io"
[host."https://frz7i079.mirror.aliyuncs.com"]
	capabilities = ["pull","resolve"]
override_path = true
EOF

nerdctl命令自动补齐

# 编辑~/.bashrc文件并添加以下内容
source <(nerdctl completion bash)

容器里运行的是什么

默认运行的是CMD指定的内容,可以通用nerdctl history查看镜像中指定的CMD命令。

nerdctl history hello-world
SNAPSHOT                                                                   CREATED          CREATED BY                                       SIZE        COMMENT
<missing>                                                                  17 months ago    /bin/sh -c #(nop)  CMD ["/hello"]                0.0 B       
sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359    17 months ago    /bin/sh -c #(nop) COPY file:50563a97010fd7ce…    16.0 KiB    

hello-world运行默认运行的就是/hello命令。

容器的生命周期

容器里面的运行进程结束了,容器生命周期也结束了。默认进程运行的是CMD中指定的命令。

-t 模拟终端 -i 交互界面,如果默认CMD是bash,这样bash就有个依附窗口,不会自动结束容器了。

以下是合并的内容,还需要手动处理

容器

容器和虚拟机的区别:image-20230107193134952

要想运行容器,我们必须先安装软件runtime,也就是运行时。
image-20230107192916772

无论使用上图的哪一个runtime,他们最终使用的镜像是一致的。

OCI是一个镜像结构,和容器状态标准。

在1.24的时候就不使用docker使用runtime了,可以选择containerd.

但是并不是说docker就被淘汰了,无法继续使用了,而是可以在构建镜像,搭建仓库时用。

image-20230107194018096

docker是客户端,服务端模式,客户端可以连接到远程的机器上。

containerd是一个执行引擎,可以连接不通的客户端服务,最好用的是nerdctl,nerdctl,crictl,ctr之间创建的容器是通过namespace(命名空间)隔离的互相看不到。

虚拟机创建

从temp虚机克隆出两台虚机:

  • vm71-docker
  • vm72-container
  • 账号密码都是root redhat

然后使用命令分别设置:

./set.sh 71

./set.sh 72

关闭屏保:setterm -blank 0

docekr安装

continerd安装

默认是crictl

默认已经有配置文件了,但是不全。 可以生成比较全的默认配置:

containerd config dufault > /etc/containerd/config.toml

查看当前的配置命令:

containerd config dufault

crictl命令

crictl images 查看镜像

crictl info 查看信息

默认使用的namespace:k8s.io

nerdctl

命令基本都是兼容docker的,非常好用。

但是netl和crictl默认使用的命名空间 是不同的。

默认使用的default

如果是K8s创建的容器,使用nerdctl排错时需要先切换成k8s的命令空间,否则看不到。

不同的命名空间 中镜像和容器都是隔离的,namespace的作用就是资源隔离。

镜像

一个镜像打了多个tag,都是用的一个image id,只有最后一个同imageid的镜像后,镜像文件才会从服务器中删除。

容器

容器里是一定要运行一个进程的。

如果创建容器的时候指定容器里运行的是什么的话,则容器里运行的是镜像里CMD所指定的。

使用docker history查看镜像所打的CMD命令

cka22-12-containerd-2镜像管理.vep 待学

标签:容器,CKA,containerd,笔记,nerdctl,学习,crictl,镜像,docker
From: https://www.cnblogs.com/maojunxyz/p/17356596.html

相关文章

  • 红帽RHEL8 RHCE学习
    考试时间:4小时总分:300分及格分:210安装和配置Ansible按照下方所述,在控制节点172.25.250.200上安装和配置Ansible:安装所需的软件包创建名为/home/greg/ansible/inventory的静态清单文件,以满足以下要求:172.25.250.9是dev主机组的成员172.25.250.10是test主机组......
  • 【学习笔记】杜教筛
    如果我们要求一个积性函数\(f(x)\)的前缀和,可以用杜教筛在\(O(n^{\frac{2}{3}})\)的复杂度求出。具体地,构造函数\(g(x)\)和函数\(h(x)\),使得$h=f*g$,要求的式子是\(S(n)=\sum\limits_{i=1}^{n}f(i)\)。开始推式子。\[\sum\limits_{i=1}^{n}h(i)=\sum\limits_{i=1}^{......
  • MarkDown学习
    MarKdown学习标题:三级标题四级标题字体Hello,World!两边加两个*Hello,World!两边加一个*Hello,World!两边加三个*Hello,World!两边加~~ 引用我是世界第一软前面加>分割线三个-或者三个* 图片方法 超链接点击开软  列表ABAa......
  • What is RabbitMQ?-动力节点RabbitMQ章节笔记
    1. WhatisRabbitMQ?1.1简介RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件;RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色;AMQP协议(http://www.amqp.org),即 AdvancedMessageQueuingProtocol,高级消息队......
  • 动力节点最新RabbitMQ笔记——1-6章What is RabbitMQ?
    1. WhatisRabbitMQ?1.1简介RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件;RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色;AMQP协议(http://www.amqp.org),即 AdvancedMessageQueuingProtocol,高级消息队......
  • 「学习笔记」tarjan 算法与强连通分量
    强连通的定义是:有向图G强连通是指,G中任意两个结点连通。强连通分量(StronglyConnectedComponents,SCC)的定义是:极大的强连通子图。说简单一点就是环,环内的点都在一个强连通分量里,单独一个点也算是强连通分量(自己可以到达自己)。变量inttim,sc;intdfn[N],low[N],scc[N];......
  • JVM笔记
    VM全称为Java虚拟机(JavaVirtualMachine),是Java程序的运行环境。它是一个抽象的计算机,能够在不同的操作系统上运行Java字节码(由Java源代码编译而来),实现了Java的一次编译、随处运行的特性。JVM除了提供基本的内存管理和垃圾回收功能外,还提供了类加载、字节码执行、异常处理、线程同......
  • JAVA笔记1
    Java的基础技术包括以下内容:Java语言基础:Java语言是一种面向对象的编程语言,具有丰富的数据类型、控制结构、类和对象等基本特性。Java程序员需要熟练掌握Java语法和语义规则,以便能够编写出正确、高效的代码。Java集合框架:Java集合框架是Java中用于管理和操作数据集合的一组A......
  • vue-router学习笔记
    1.路由基础配置 https://router.vuejs.org/zh/guide/2.动态路由根据设置的路径参数实现 constroutes=[//动态字段以冒号开始{path:'/users/:id',component:User},]。需要注意的是参数改变时(第一次访问该路径后,第二次起),组件实例被重复使用,会导致vue的生命周期......
  • 数据科学 IPython 笔记本 7.4 Pandas 对象介绍
    7.4Pandas对象介绍原文:IntroducingPandasObjects译者:飞龙协议:CCBY-NC-SA4.0本节是《Python数据科学手册》(PythonDataScienceHandbook)的摘录。在最基本的层面上,Pandas对象可以认为是NumPy结构化数组的增强版本,其中行和列用标签而不是简单的整数索引来标识。我们将在本......