基于kubernetes组件初步部署k8s

news2024/11/15 19:36:36

基于k8s组件初步部署k8s

  • kubernetes组件
  • kubernetes简单化部署安装
    • Master操作
      • 环境检查
      • 安装配置Containerd
        • 安装Containerd
        • 配置containerd
        • 启动containerd
      • 配置Circtl
      • 安装配置Kubeadm
        • 安装Kubeadm
        • kubeadm配置
        • 启动kubelet服务
      • 拉取镜像
      • 初始化集群
        • 操作命令行
      • 安装网络插件
    • Node操作
      • Node添加
  • 报错解决

kubernetes组件

这里先认识一下k8s的一些组件,了解个组件的功能,有助于我们先部署安装一个简单的k8s环境,以帮助我们更好的理解k8s架构的工作和设计原理。

管理端Master组件

kube-apiserver

API 服务器是 Kubernetes 控制平面的组件, 该组件负责公开了 Kubernetes API,负责处理接受请求的工作

kube-controller-manager

负责运行控制器进程

控制器有哪些

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
  • 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点分片控制器(EndpointSlice controller):填充端点分片(EndpointSlice)对象(以提供 Service 和 Pod 之间的链接)。
  • 服务账号控制器(ServiceAccount controller):为新的命名空间创建默认的服务账号(ServiceAccount)。

kube-scheduler

负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。

etcd

一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。

插件

(1)DNS

集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。

(2)Web仪表盘

Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身, 并进行故障排除

(3)容器资源监控

容器资源监控 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中, 并提供浏览这些数据的界面

(4)容器日志

​ 集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中, 这种集中日志存储提供搜索和浏览接口

网络插件

是实现容器网络接口(CNI)规范的软件组件。它们负责为 Pod 分配 IP 地址,并使这些 Pod 能在集群内部相互通信。

节点组件

kubelet

接收一组通过各类机制提供给它的 PodSpecs, 确保这些 PodSpecs 中描述的容器处于运行状态且健康

kube-proxy

每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分

docker

rkt

​ rkt运行容器,作为docker工具的替代方案。

supervisord

fluentd

容器按持续运行的时间可划分为两类:

服务类容器

持续提供服务,一直运行:像web服务(Tomcat、Nginx、Apache),数据库服务(Mysql、Oracle、Sqlserver)、监控服务(zabbix、Prometheus)

工作类容器

一次性任务:比如批处理任务,执行完指令,容器就退出

kubernetes简单化部署安装

Master操作

环境检查

1.确保每个节点上 MAC 地址和 product_uuid 的唯一性

product_uuid 校验
[root@master ~]# cat /sys/class/dmi/id/product_uuid
8BBA4D56-0CC0-790A-81F7-B1E1D4ED40C4

获取网络接口的 MAC 地址
[root@master ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:ed:40:c4 brd ff:ff:ff:ff:ff:ff

2.确定端口未被占用

端口扫描,通的端口返回succeeded,不通的端口返回refused

[root@master ~]# nc -v -w 5 127.0.0.1 6443
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

nc用法

-l 用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
-p <port>	暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)
-s 指定发送数据的源IP地址,适用于多网卡机 
-u	指定nc使用UDP协议,默认为TCP
-v	输出交互或出错信息,新手调试时尤为有用
-w	超时秒数,后面跟数字 
-z	表示zero,表示扫描时不发送任何数据

说明:

Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。 为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目, 它在 1.24 版本从 kubelet 中移除。

运行时Unix 域套接字
containerdunix:///var/run/containerd/containerd.sock
CRI-Ounix:///var/run/crio/crio.sock
Docker Engine(使用 cri-dockerd)unix:///var/run/cri-dockerd.sock

3.关闭Selinux

直到 kubelet对 SELinux 的支持进行升级为止

[root@master ~]# getenforce
Disabled

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

4.禁用swap分区

vim /etc/fstab  # 注释掉swap一行

安装配置Containerd

安装Containerd

新版本默认使用的运行时不再是docker,因此这里只安装containerd即可

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fast

安装新版本的container-selinux

[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master ~]# yum install epel-release -y
[root@master ~]# yum clean all # 这一步必须清理yum 缓存
[root@master ~]# yum install container-selinux -y

在这里插入图片描述

安装containerd

[root@master ~]# yum install containerd.io -y

配置containerd

查看默认启用的配置

[root@master ~]# containerd config default

containerd默认配置文件内容

[root@master ~]# vim /etc/containerd/config.toml

在这里插入图片描述

命令行生产初始配置文件

[root@master ~]# containerd config default > /etc/containerd/config.toml

修改containerd配置文件

[root@master ~]# vim /etc/containerd/config.toml
[plugins]
	...
	[plugins."io.containerd.grpc.v1.cri"]
	...
    sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"   # 配置软件源

	[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
			...
            SystemdCgroup = true													# 配置cgroup类型

启动containerd

[root@master ~]# systemctl start containerd

配置Circtl

这时由于没有运行时的入口,我们可以修改crictl配置文件,获得containerd的sock信息

[root@master ~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
[root@master ~]# crictl config image-endpoint unix:///run/containerd/containerd.sock
[root@master ~]# cat /etc/crictl.yaml
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 0
debug: false
pull-image-on-create: false
disable-pull-on-run: fals

安装配置Kubeadm

安装Kubeadm

1.配置yum软件源

官方源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

阿里云源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

2.安装kubeadm

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

配置 cgroup 驱动程序

容器运行时和 kubelet 都具有名字为 “cgroup driver” 的属性,该属性对于在 Linux 机器上管理 CGroups 而言非常重要。

注意:你需要确保容器运行时和 kubelet 所使用的是相同的 cgroup 驱动,否则 kubelet 进程会失败

配置容器运行时 cgroup 驱动

由于 kubeadm 把 kubelet 视为一个 系统服务来管理, 所以对基于 kubeadm 的安装, 推荐使用 systemd 驱动, 不推荐 kubelet 默认的 cgroupfs 驱动。

在版本 1.22 及更高版本中,如果用户没有在 KubeletConfiguration 中设置 cgroupDriver 字段, kubeadm 会将它设置为默认值 systemd

配置示例

# kubeadm-config.yaml
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta3
kubernetesVersion: v1.21.0
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

kubeadm配置

生成初始配置文件

[root@master ~]# kubeadm config print init-defaults > kubeadm.yml

查看所需镜像列表

[root@master ~]# kubeadm config images list --config kubeadm.yml
registry.k8s.io/kube-apiserver:v1.27.0
registry.k8s.io/kube-controller-manager:v1.27.0
registry.k8s.io/kube-scheduler:v1.27.0
registry.k8s.io/kube-proxy:v1.27.0
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.7-0
registry.k8s.io/coredns/coredns:v1.10.1

Kubeadm修改配置文件

[root@master ~]# vim kubeadm.yml 

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.10.101		# 改为master的IP
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: master    # 修改名称
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers		# 改为阿里云源
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}

启动kubelet服务

目前启动kubelet报错

[root@master ~]# systemctl start kubelet

[root@master systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: activating (auto-restart) (Result: exit-code) since Fri 2023-07-07 10:53:24 CST; 1s ago
     Docs: https://kubernetes.io/docs/
  Process: 27867 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
 Main PID: 27867 (code=exited, status=1/FAILURE)

Jul 07 10:53:24 master systemd[1]: kubelet.service: main process exited, code=exited, status=1/FAILURE
Jul 07 10:53:24 master systemd[1]: Unit kubelet.service entered failed state.
Jul 07 10:53:24 master systemd[1]: kubelet.service failed.

拉取镜像

kubeadm config images pull --config kubeadm.yml
[root@master ~]# crictl images
IMAGE                                                             TAG                 IMAGE ID            SIZE
registry.aliyuncs.com/google_containers/coredns                   v1.10.1             ead0a4a53df89       16.2MB
registry.aliyuncs.com/google_containers/etcd                      3.5.7-0             86b6af7dd652c       102MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.27.0             6f707f569b572       33.4MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.27.0             95fe52ed44570       31MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.27.0             5f82fc39fa816       23.9MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.27.0             f73f1b39c3fe8       18.2MB
registry.aliyuncs.com/google_containers/pause                     3.9                 e6f1816883972       322kB

查看拉取的镜像

[root@master ~]# crictl image list
IMAGE                                                             TAG                 IMAGE ID            SIZE
registry.aliyuncs.com/google_containers/coredns                   v1.10.1             ead0a4a53df89       16.2MB
registry.aliyuncs.com/google_containers/etcd                      3.5.7-0             86b6af7dd652c       102MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.27.0             6f707f569b572       33.4MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.27.0             95fe52ed44570       31MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.27.0             5f82fc39fa816       23.9MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.27.0             f73f1b39c3fe8       18.2MB
registry.aliyuncs.com/google_containers/pause                     3.9                 e6f1816883972       322kB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause         3.6                 6270bb605e12e       302kB

初始化集群

[root@master ~]# kubeadm init --config=/data/kubeadm.yml --upload-certs --v=6
...
[addons] Applied essential addon: kube-proxy
I0709 13:49:53.255150   29494 loader.go:373] Config loaded from file:  /etc/kubernetes/admin.conf
I0709 13:49:53.255484   29494 loader.go:373] Config loaded from file:  /etc/kubernetes/admin.conf

Your 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.10.101:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:6ef00961d04157a81e8e60e04673835350a3995db28f5fb5395cfc13a21bb8f8

在这里插入图片描述

接下来的工作

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看kubelet状态:

此时kubelet已经起来了,但还是有报错:说网络还没有就绪,网络插件还未激活

[root@master ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since Sun 2023-07-09 13:49:52 CST; 20min ago
     Docs: https://kubernetes.io/docs/
 Main PID: 29979 (kubelet)
    Tasks: 11
   Memory: 44.0M
   CGroup: /system.slice/kubelet.service
           └─29979 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime-endpoint...

Jul 09 14:09:48 master kubelet[29979]: E0709 14:09:48.250500   29979 kubelet.go:2760] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady messag...t initialized"
Jul 09 14:09:53 master kubelet[29979]: E0709 14:09:53.251686   29979 kubelet.go:2760] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady messag...t initialized"
Jul 09 14:09:58 master kubelet[29979]: E0709 14:09:58.252762   29979 kubelet.go:2760] "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady messag...t initialized"

在这里插入图片描述

查看启动的容器

[root@master ~]# crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
f79b2b82e24aa       5f82fc39fa816       11 minutes ago      Running             kube-proxy                0                   a05ef7d2d7a3b       kube-proxy-bdzh6
f48bd5d031a38       95fe52ed44570       12 minutes ago      Running             kube-controller-manager   0                   451a59c46907e       kube-controller-manager-master
4ca2bf73d8a19       6f707f569b572       12 minutes ago      Running             kube-apiserver            0                   e27c124e4422e       kube-apiserver-master
7c6edea985069       86b6af7dd652c       12 minutes ago      Running             etcd                      0                   285d4ec481dae       etcd-master
d1feeb8768dbd       f73f1b39c3fe8       12 minutes ago      Running             kube-scheduler            0                   f66a11a4ebd7f       kube-scheduler-master

查看node状态

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES           AGE   VERSION
master   NotReady   control-plane   13m   v1.27.3

操作命令行

命令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
清空不用的容器docker image prunecrictl rmi --prune

安装网络插件

[root@master data]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
--2023-07-09 14:34:07--  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... \185.199.110.133, 185.199.109.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4615 (4.5K) [text/plain]
Saving to: ‘kube-flannel.yml’

100%[=======================================================================================================================================================================>] 4,615       --.-K/s   in 0s      

2023-07-09 14:34:07 (89.3 MB/s) - ‘kube-flannel.yml’ saved [4615/4615]

[root@master data]# ll
total 12
-rw-r--r-- 1 root root  840 Jul  9 13:23 kubeadm.yml
-rw-r--r-- 1 root root 4615 Jul  9 14:34 kube-flannel.yml
[root@master data]# 
[root@master data]# 
[root@master data]# sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml

[root@master data]# 
[root@master data]# 
[root@master data]# kubectl apply -f /data/kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

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

Node操作

Node添加

[root@node1 ~]# kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:6ef00961d04157a81e8e60e04673835350a3995db28f5fb5395cfc13a21bb8f8
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

报错解决

kubeadm拉取镜像报错

[root@master ~]# kubeadm config images pull --config kubeadm.yml
failed to pull image "registry.k8s.io/kube-apiserver:v1.27.0": output: E0707 11:05:07.804670   28217 remote_image.go:171] "PullImage from image service failed" err="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\"" image="registry.k8s.io/kube-apiserver:v1.27.0"
time="2023-07-07T11:05:07+08:00" level=fatal msg="pulling image: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\""
, error: exit status 1

原因:没有启动containerd服务

解决:

[root@master ~]# systemctl start containerd

报错

[root@master ~]# kubeadm config images pull --config kubeadm.yml
failed to pull image "registry.k8s.io/kube-apiserver:v1.27.0": output: time="2023-07-07T11:06:14+08:00" level=fatal msg="validate service connection: CRI v1 image API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.ImageService"
, error: exit status 1
To see the stack trace of this error execute with --v=5 or higher

[root@master ~]# ll /var/run/containerd/containerd.sock
srw-rw---- 1 root root 0 Jul  7 11:05 /var/run/containerd/containerd.sock


crictl 是 kubernetes cri-tools 的一部分,是专门为 kubernetes 使用 containerd 而专门制作的,提供 了 Pod、容器和镜像等资源的管理命令。

在这里插入图片描述

需要注意的是:使用其他非 kubernetes 创建的容器、镜像,crictl 是无法看到和调试的,比如说 ctr run 在未指定 namespace 情况下运行起来的容器就无法使用 crictl 看到。当然 ctr 可以使用 -n k8s.io 指定操作的 namespace 为 k8s.io,从而可以看到/操作 kubernetes 集群中容器、镜像等资 源。可以理解为:crictl 操作的时候指定了 containerd 的 namespace 为 k8s.io。

作为接替 Docker 运行时的 Containerd 在早在 Kubernetes1.7 时就能直接与 Kubelet 集成使用,只是大部分时候我们因熟悉 Docker,在部署集群时采用了默认的 dockershim。在V1.24起的版本的 kubelet 就彻底移除了dockershim,改为默认使用Containerd了,当然也使用 cri-dockerd 适配器来将 Docker Engine 与 Kubernetes 集成

在这里插入图片描述

更换 Containerd 后,以往我们常用的 docker 命令也不再使用,取而代之的分别是 crictlctr 两个命令客户端。

[root@master ~]# ctr -v
ctr containerd.io 1.6.21
  • crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。
  • ctrcontainerd 的一个客户端工具。
  • ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。
  • 一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。

初始化报错

[root@master ~]# kubeadm init --config=kubeadm.yml --upload-certs --v=6
[preflight] Some fatal errors occurred:
	[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
	[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
error execution phase preflight

解决:

[root@master ~]# modprobe br_netfilter
[root@master ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@master ~]# cat /proc/sys/net/ipv4/ip_forward
1

参考:Kubernetes中文社区

使用crictl pull时报错:“unknown service runtime.v1alpha2.ImageService”

Containerd ctr、crictl、nerdctl 客户端命令介绍与实战操作

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

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

相关文章

Dubbo分布式服务框架,springboot+dubbo+zookeeper

一Dubbo的简易介绍 1.Dubbo是什么&#xff1f; Dubbo是一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。 简单的说&#xff0c;dubbo就是个服务框架&#xff0c;如果没有分布式的需求&#xff0c;其实是不需…

N天爆肝数据库——MySQL(1)

数据库概念理解 数据库 DB 存储数据的仓库 数据库管理系统 DBMS 操纵和管理数据库的大型软件 SQL 操作关系型数据库的编程语言&#xff0c;定义了用一套操作关系型数据库同意标准 学习 SQL 的作用 SQL 是一门 ANSI 的标准计算机语言&#xff0c;用来访问和操作数据库系统。S…

在北京买房究竟需要多少钱?

无论是来北京前&#xff0c;还是来北京后&#xff0c;每每提起北京的房价&#xff0c;大家都会说出三个字「买不起」。 确实&#xff0c;北京房价非常贵&#xff0c;但是究竟「贵」到什么程度&#xff0c;我们却无法说出一个数。 几年前&#xff0c;我研三还没毕业时&#xf…

Linux高频常用指令汇总

目录 认识 Linux 目录结构 绝对路径&#xff1a;以根目录开头的, 称为绝对路径 相对路径&#xff1a;不是根目录开头的,称为相对路径 ls pwd cd mkdir touch cat echo rm cp mv vim编辑器 1、进入文件 2、进行编辑模式 3、保存退出 重要的几个热键[Tab],[ct…

SpringBoot中间件——封装限流器

背景 通常能知道一个系统服务在正产增速下流量大小&#xff0c;扩容与压测也是基于此。若有突发或者恶意攻击访问&#xff0c;都要将流量拦截在外。这部分功能不属于业务侧&#xff0c;它是通用非业务的共性需求&#xff0c;所以我们将共性抽取为限流中间件。 方案设计 图解&…

基于微信小程序的高校食堂点餐系统设计与实现(Java+spring boot+MySQL+微信小程序)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的高校食堂点餐系统设计与实现&#xff08;Javaspring bootMySQL微信小程序&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java…

指针-->笔试题(必备)

前言&#xff1a; 目录 前言&#xff1a; 本章介绍的指针笔试题是有点难度的&#xff0c;得花费一点时间来理解&#xff0c;并且我们在做题目的时候需要画图来理解。 文章目录 笔试题1 笔试题2 笔试题3 笔试题4 笔试题5 笔试题6 笔试题7 笔试题8 笔试题1 int main() {int a[5…

uniapp下载和上传照片

利用uniapp开发的时候&#xff0c;需要下载和上传照片&#xff0c;在H5和微信小程序中的写法不一样。 H5环境下 浏览器中下载就是模拟超链接下载。也不需要获取什么权限&#xff0c;比较简单。 // #ifdef H5 this.isLoading true; let oA document.createElement("a&…

[软件工具]姓氏谐音梗随机生成工具使用教程

首先我们打开软件 输入姓氏和生成数即可开始生成&#xff0c;注意生成数可以随便填&#xff0c;软件会自动按最大数生成&#xff0c;比如你设置生成数位10000则可能只会生成500个&#xff0c;因为软件内置只有这么多。单次生成不重复&#xff0c;生成效果可以访问视频教程&…

MySQL多表查询练习

多表连接查询 use mydb3; -- 创建部门表 create table if not exists dept3( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 );-- 创建员工表 create table if not exists emp3( eid varchar(20) primary key , -- 员工编号 ename varchar(20), --…

数仓建设中最常用模型--Kimball维度建模详解

数仓建模首推书籍《数据仓库工具箱&#xff1a;维度建模权威指南》&#xff0c;本篇文章参考此书而作。文章首发公众号&#xff1a;五分钟学大数据&#xff0c;公众号后台发送“维度建模”即可获取此书籍第三版电子书 先来介绍下此书&#xff0c;此书是基于作者 60 多年的实际业…

leetcode:174. 地下城游戏:动态规划法

174. 地下城游戏 - 力扣&#xff08;Leetcode&#xff09; 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初…

史上最全Windows下VScode配置大全

文章目录 1、安装Vscode下载安装配置C和中文 2、安装MinGW-w643、检查是否配置成功 1、安装Vscode 下载安装 首先先下载VSCODE&#xff1a; 链接: VScode下载 下载好安装包以后&#xff0c;直接在自己指定目录安装&#xff1a; 配置C和中文 打开VScode的左下角位置&#…

Proteus 8.13安装教程

不涉及版权问题。 1、双击“Proteus 8.13 SP0 Pro.exe”开始安装 2、按照安装向导进行操作&#xff0c;等待安装成功 1&#xff09;选择“Browse"自定义安装路径&#xff0c;再点击&#xff1a;Next 2&#xff09;点击&#xff1a;Next 3&#xff09;等待一段时间&#xf…

C#学习之路-判断

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 判断语句 语句描述if …

闪烁灯光门铃电路设计

闪烁灯光门铃不仅具有门铃的声音还可以通过家里的门灯发出闪烁的灯光&#xff0c;适合用于室内嘈杂环境时使用&#xff0c;也适用于有聋哑人的家庭。 一、电路工作原理 电路原理如图 30 所示。 由基本的门铃电路和灯光、声音延迟控制电路两部分组成。按下门铃按钮 SB&#x…

C语言每日一题之旋转数求最小值

hello&#xff0c;今天我们分享一道题目&#xff0c;是牛客网上的一道题 求旋转数组中的最小值https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId13&tqId23269&ru/ta/coding-interviews&qru/ta/coding-interviews/question-ranking 那我…

创新指南 | 用这8种商业分析模型,让你得到靠谱的业务创新灵感

当我们想要创新时&#xff0c;往往需要有实际的依据来支撑我们的想法。商业咨询顾问通常被认为是聪明的人&#xff0c;他们拥有模型化的分析思维&#xff0c;这种思维方式可以帮助他们更好地理解市场、竞争对手和客户需求。商业分析思维是一种系统性的思考方式&#xff0c;它可…

P1 第一章 电路模型与电路定律

1、什么是电路模型&#xff1f; 实际电路与电路模型间的关系&#xff1f;建立在相同的电路理论基础之上。 实际电路定义&#xff1a;由电工设备和电气器件&#xff0c;按照预期目的连接构成的&#xff0c;电流的通路。 实际电路的功能&#xff1a;能量方面&#xff0c;可以传输…

【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)

文章目录 3.7.1 MAC地址3.7.2 IP地址3.7.3 ARP协议 3.7.1 MAC地址 MAC地址&#xff08;Media Access Control address&#xff09;是网络设备&#xff08;如网卡、无线网卡&#xff09;在数据链路层上的唯一标识符。以下是有关MAC地址的一些要点&#xff1a; 描述&#xff1a…