Kubernetes - kubeadm部署(二)

kubeadm

    • 1. docker 和 containerd
      • 1.1 命令区分
      • 1.2 常用命令
      • 1.3 关于crictl
    • 2. 示例
      • 2.1 部署nginx

先从一个报错开始吧

[root@node-129 kubernetes]# crictl ps
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
E0717 03:21:14.371287   48865 remote_runtime.go:390] "ListContainers with filter from runtime service failed" err="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory\"" filter="&ContainerFilter{Id:,State:&ContainerStateValue{State:CONTAINER_RUNNING,},PodSandboxId:,LabelSelector:map[string]string{},}"
FATA[0000] listing containers: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory"

错误信息可以看到crictl连接的runtime是docker,并且连接失败。查看containerd启动信息(journalctl -exu containerd),containerd启动完成后监听的unix sock路径是:/run/containerd/containerd.sock。

创建crictl配置文件:/etc/crictl.yaml。修改crictl默认配置,把runtime-endpoint和image-endpoint指向containerd

runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: true
pull-image-on-create: false

修改后

[root@node-129 kubernetes]# crictl ps
DEBU[0000] get runtime connection
DEBU[0000] get image connection
DEBU[0000] ListContainerResponse: 
...
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
4ceba0f7bfc5a       38c11b8f4aa19       52 minutes ago      Running             kube-flannel              0                   567933503bde5       kube-flannel-ds-bxvqv
d2572be6709d3       5f82fc39fa816       About an hour ago   Running             kube-proxy                0                   2f0c651c078ab       kube-proxy-wc9zz
d5cedeb28123c       86b6af7dd652c       About an hour ago   Running             etcd                      1                   ca981be82701c       etcd-node-129
8d4fe5da9d6ce       95fe52ed44570       About an hour ago   Running             kube-controller-manager   1                   b0920110bc805       kube-controller-manager-node-129
46d11f2893f06       6f707f569b572       About an hour ago   Running             kube-apiserver            1                   11762c37e44d5       kube-apiserver-node-129
de7f51d606efa       f73f1b39c3fe8       About an hour ago   Running             kube-scheduler            1                   e33497db48470       kube-scheduler-node-129

由于本次部署k8s使用kubeadm,而其容器引擎使用的是containerd,作为新产品(相对于docker),他们有什么区别与联系呢?

1. docker 和 containerd

  • docker 由 docker-client ,dockerd,containerd,docker-shim,runc 组成,所以 containerd 是 docker 的基础组件之一
  • 从 k8s 的角度看,可以选择 containerd 或 docker 作为运行时组件:其中 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。所以 k8s 后来的版本开始默认使用 containerd 。
  • containerd 相比于 docker , 多了 namespace 概念,每个 image 和 container 都会在各自的 namespace 下可见。
  • docker 作为 k8s 容器运行时,调用关系为:kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd
    containerd 作为 k8s 容器运行时,调用关系为:kubelet --> cri plugin(在 containerd 进程中) --> containerd

至于docker和containerd的恩怨情仇,前文中已经提及,此处不再赘述。

1.1 命令区分

  • ctr 是 containerd 的一个客户端工具。
  • crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。

ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。

[root@node-129 kubernetes]# crictl -v
crictl version v1.26.0
[root@node-129 kubernetes]# ctr -v
ctr containerd.io 1.6.21

所以说某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,主机安装了 containerd 服务后就可以操作 ctr 命令。

1.2 常用命令

又是一大波的命令来袭

命令dockerctr(containerd)crictl(kubernetes)
查看运行的容器docker psctr task ls/ctr container lscrictl ps
查看镜像docker imagesctr image lscrictl images
查看容器日志docker logscrictl logs
查看容器数据信息docker inspectctr container infocrictl inspect
查看容器资源docker statscrictl stats
启动/关闭已有的容器docker start/stopctr task start/killcrictl start/stop
运行一个新的容器docker runctr run无(最小单元为 pod)
修改镜像标签docker tagctr image tag
创建一个新的容器docker createctr container createcrictl create
导入镜像docker loadctr image import
导出镜像docker savectr image export
删除容器docker rmctr container rmcrictl rm
删除镜像docker rmictr image rmcrictl rmi
拉取镜像docker pullctr image pullctictl pull
推送镜像docker pushctr image push
在容器内部执行命令docker execcrictl exec

ctr并没有build命令,也就是没办法构建镜像,怎么办呢?

containerd 有一个子项目:nerdctl ,用来兼容 docker cli,可以像 docker 命令一样来管理本地的镜像和容器

想深入了解的朋友可以参考containerd 镜像构建工具 – nerdctl 和 buildkit

1.3 关于crictl

#查看containerd客户端即服务器版本信息
ctr version
#ctr全局命令概览
[root@localhost ~]# ctr --help
USAGE:	(注意看这个格式:ctr 全局选项 命令 命令选项 参数)ctr [global options] command [command options] [arguments...]
COMMANDS:plugins, plugin            provides information about containerd pluginsversion                    打印客户端和服务端版本containers, c, container   管理containerscontent                    管理contentevents, event              显示containerd eventsimages, image, i           管理镜像leases                     管理leasesnamespaces, namespace, ns  管理namespacespprof                      provide golang pprof outputs for containerdrun                        运行一个containersnapshots, snapshot        管理snapshotstasks, t, task             管理tasksinstall                    安装一个新的packageoci                        OCI toolsshim                       interact with a shim directlyhelp, h                    显示命令帮助全局选项:--debug                      在logs中开启enable输出--address value, -a value    containerd's GRPC server的地址 (默认: "/run/containerd/containerd.sock") --timeout value              ctr命令超时时间(默认: 0s)--connect-timeout value      连接containerd超时时间 (默认: 0s)--namespace value, -n value  命名空间 (默认: "default")--help, -h                   显示帮助--version, -v                打印版本信息

万幸的是,containerd和docker的镜像是通用的(想想也是,真想直接取代docker也不太可能的,毕竟受众在那呢)

[root@node-129 kubernetes]# ctr image import my.tar
unpacking docker.io/library/mypython:latest (sha256:962b1654766f57616a6f36a67e8eaac6c67b13e79207f4864d85ab1a5641bdc5)...done
[root@node-129 kubernetes]# ctr i ls
REF                               TYPE                                                 DIGEST                                                                  SIZE      PLATFORMS   LABELS
docker.io/library/mypython:latest application/vnd.docker.distribution.manifest.v2+json sha256:962b1654766f57616a6f36a67e8eaac6c67b13e79207f4864d85ab1a5641bdc5 348.5 MiB linux/amd64 -
[root@node-129 kubernetes]# ctr i tag  docker.io/library/mypython:latest mypython:latest
mypython:latest
[root@node-129 kubernetes]# ctr i ls
REF                               TYPE                                                 DIGEST                                                                  SIZE      PLATFORMS   LABELS
docker.io/library/mypython:latest application/vnd.docker.distribution.manifest.v2+json sha256:962b1654766f57616a6f36a67e8eaac6c67b13e79207f4864d85ab1a5641bdc5 348.5 MiB linux/amd64 -
mypython:latest                   application/vnd.docker.distribution.manifest.v2+json sha256:962b1654766f57616a6f36a67e8eaac6c67b13e79207f4864d85ab1a5641bdc5 348.5 MiB linux/amd64 -

2. 示例

2.1 部署nginx

[root@node-128 kubernetes]# cat nginx-svc-deploy.yaml
apiVersion: v1
kind: Service
metadata:labels:app: nginx-serviename: nginx-servicenamespace: hello-world
spec:ports:- nodePort: 30013port: 80protocol: TCPtargetPort: 80selector:app: nginx-podtype: NodePort---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-deployname: nginx-deploynamespace: hello-world
spec:replicas: 1selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podnamespace: hello-worldspec:containers:- image: docker.io/library/nginx:latestname: nginxports:- containerPort: 80resources: {}

我们先创建命名空间hello-world,然后部署

[root@node-128 kubernetes]# kubectl create namespace hello-world
namespace/hello-world created
[root@node-128 kubernetes]# kubectl apply -f nginx-svc-deploy.yaml
service/nginx-service created
deployment.apps/nginx-deploy created
[root@node-128 kubernetes]# kubectl get pods -n hello-world
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-65fcf47dd5-62sgb   1/1     Running   0          6m42s

可以看到我们访问VIP展现了nginx的主页面

[root@node-128 kubernetes]# curl http://192.168.17.120:30013/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

django中的model的一些笔记

class WarehouseRecordDetail(models.Model):warehouse_record models.ForeignKey(WarehouseRecord, verbose_nameu"出入库记录",related_namewarehouse_record_detail_ref_warehouse_record, on_deletemodels.PROTECT)warehouse_stock_record models.ForeignKey(W…

师承AI世界新星|7天获新加坡南洋理工大学访学邀请函

能够拜师在“人工智能10大新星”名下&#xff0c;必定可以学习到前沿技术&#xff0c;受益良多&#xff0c;本案例中的C老师无疑就是这个幸运儿。我们只用了7天时间就取得了这位AI新星导师的邀请函&#xff0c;最终C老师顺利获批CSC&#xff0c;如愿出国。 C老师背景&#xff1…

Leetcode刷题4

⼆叉树、BFS、堆、Top K、⼆叉搜索树、模拟、图算法 一、二叉树 二叉树的前序中序后序 二叉树节点定义 为了方便演示&#xff0c;我们先定义一个二叉树节点类。 class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right r…

数据结构C

数据结构 表 线性表 线性表是 具有相同数据类型的 n个数据元素 的有限序列&#xff08;有次序&#xff09;&#xff0c;其中n为表长&#xff0c;当n0时 线性表是一个空表。 若用L命名线性表&#xff0c;则其一般表示为 L {a1,a2,…,ai,ai1,…,an} 几个概念&#xff1a; …

Android ViewGroup onDraw为什么没调用

ViewGroup&#xff0c;它本身并没有任何可画的东西&#xff0c;它是一个透明的控件&#xff0c;因些并不会触发onDraw&#xff0c;但是你现在给LinearLayout设置一个背景色&#xff0c;其实这个背景色不管你设置成什么颜色&#xff0c;系统会认为&#xff0c;这个LinearLayout上…

[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)

在编程方面&#xff0c;从来都是实践出真知&#xff0c;书读百遍其义自见&#xff0c;所以实战是最好的提升自己编程能力的方式。 前一段时间&#xff0c;写了一些实战系列文章&#xff0c;如&#xff1a; ASP.NET MVC开发学生信息管理系统VueAntdvAsp.net WebApi开发学生信息…

R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践

在水利、环境、生态、机械以及航天等领域中&#xff0c;数学模型已经成为一种常用的技术手段。同时&#xff0c;为了提高模型的性能&#xff0c;减小模型误用带来的风险&#xff1b;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…

Python中的break和continue语句应用举例

Python中的break和continue语句应用举例 在进行Python编程时候&#xff0c;有时需要&#xff0c;对循环中断或跳过某部分语句&#xff0c;此时常会用到break语句或continue语句。本文将通过实际例子阐述这两个语句的用法。 1.break语句 break语句是实现在某个地方中断循环&a…

Java设计模式之行为型-迭代器模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 迭代器模式是一种常用的设计模式&#xff0c;它主要用于遍历集合对象&#xff0c;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。 举个简单的…

创建自定义 SpringBoot-Starter之email-spring-boot-starter

参考文章:【SpringBoot】之创建自定义 SpringBoot-Starter_springboot创建starter_王廷云的博客的博客-CSDN博客 源码包和jar: https://download.csdn.net/download/tiantangpw/88045999 自己写的starter;使用的apache-commons-email 包内包含源码和已打包的jar,亲测可用,可以…

5分钟给你破解这套10万赞的生产教程,访谈乔布斯的AI对话数字人视频是怎么做的

本期是赤辰第16期AI项目拆解栏目&#xff1b; 底部准备了7月粉丝福利&#xff0c;看完可以领取&#xff1b; 上周给粉丝们讲解AI动图说话月涨粉20万的案例并给出保姆式教程&#xff0c;粉丝反馈很热烈&#xff0c;都觉得AI强大&#xff0c;有些学员给自己账号做视频&#xff…

大数据与视频技术的融合趋势将带来怎样的场景应用?

视频技术和AI技术的融合是一种新兴的技术趋势&#xff0c;它将改变视频行业的运作方式。视频技术和AI技术的融合主要包括以下几个方面&#xff1a; 1&#xff09;人脸识别技术 人脸识别技术是AI技术的一个重要应用场景。它可以通过对视频中的人脸进行识别和分析&#xff0c;实…

3.9 Bootstrap 分页

文章目录 Bootstrap 分页分页&#xff08;Pagination&#xff09;默认的分页分页的状态分页的大小 翻页&#xff08;Pager&#xff09;默认的翻页对齐的链接翻页的状态 分页 Bootstrap 分页 本章将讲解 Bootstrap 支持的分页特性。分页&#xff08;Pagination&#xff09;&…

Unity平台如何实现RTSP转RTMP推送?

技术背景 Unity平台下&#xff0c;RTSP、RTMP播放和RTMP推送&#xff0c;甚至包括轻量级RTSP服务这块都不再赘述&#xff0c;今天探讨的一位开发者提到的问题&#xff0c;如果在Unity下&#xff0c;实现RTSP播放的同时&#xff0c;随时转RTMP推送出去&#xff1f; RTSP转RTMP…

浙大数据结构第四周之04-树6 Complete Binary Search Tree

题目详情&#xff1a; A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree of a node contains only nodes w…

[javascript核心-08] V8 内存管理机制及性能优化

V8 内存管理 V8 本身也是程序&#xff0c;它本身也会申请内存&#xff0c;它申请的内存称为常驻内存&#xff0c;而它又将内存分为堆和栈 栈内存 栈内存介绍 栈用于存放JS 中的基本类型和引用类型指针栈空间是连续的&#xff0c;增加删除只需要移动指针&#xff0c;操作速度…

华为OD真题--分苹果-带答案

有A&#xff0c;B两个同学想要分苹果。A的想法是使用二进制进行&#xff0c;1 1相加不进一位&#xff0c;如&#xff08;9 5 1001 101 12&#xff09;。B同学的想法是使用十进制进行&#xff0c;并且进一位。会输入两组数据&#xff0c;一组是苹果总数&#xff0c;一组分别…

代码随香录day21

235. 二叉搜索树的最近公共祖先 本题思路&#xff1a; 还是要利用二叉搜索树的特性&#xff0c;中序遍历为有序数组。如果pq两个节点都小于root&#xff0c;那么最近公共祖肯定是在他的左子树&#xff0c;如果都大于那么&#xff0c;肯定就在右子树。然后直接return root 代码…

Linux Ubuntu安装RabbitMQ服务

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…