当前位置: 首页 > article >正文

Kubernetes 入门篇之网络插件 calico 部署与安装

在运行kubeadm initjoin 命令部署好masternode节点后,kubectl get nodes 看到节点都是NotReady状态,这是因为没有安装CNI网络插件。

kubectl get nodes
NAME                    STATUS     ROLES           AGE     VERSION   
k8s-master   NotReady    control-plane   5d22h   v1.28.2
k8s-node1    NotReady    <none>          5d22h   v1.28.2

1. 安装

通过命令kubectl apply -f 安装:

1) 直接通过官方yaml文件安装,国内一般都下载不了,需要翻墙

kubectl apply -f "https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml"

2) 先下载下来calico.yaml,然后执行kubectl apply -f calico.yaml, 本文采用的这种方式

两种下载方式,有时网络不好下载也会失败:curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml
wget https://github.com/projectcalico/calico/blob/v3.26.4/manifests/calico.yaml

2. 下载镜像到本地

因为calico.yaml中的image 默认使用的是官方源,国内下载不下来,需要先把镜像拉取到本地,从本地镜像启动pod

下载地址:calico国内镜像下载地址

本文这里把cni, node,kube-controllers 写成了脚本 calico_image_pull.sh, 具体下载版本可以根据需要自行修改。

#!/bin/bashctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.26.4-linuxarm64
ctr -n k8s.io images tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.26.4-linuxarm64  docker.io/calico/cni:v3.26.4ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.26.4-linuxarm64
ctr -n k8s.io images tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.26.4-linuxarm64  docker.io/calico/node:v3.26.4ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.26.4-linuxarm64
ctr -n k8s.io images tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.26.4-linuxarm64  docker.io/calico/kube-controllers:v3.26.4

3. 修改calico.yaml

由于上面 给镜像tag 就是打的docker.io/calico/xxx, 所以保证后面的版本号一直即可。

[root@k8s-master kylin]# cat calico.yaml | grep v3.26.4image: docker.io/calico/cni:v3.26.4image: docker.io/calico/cni:v3.26.4image: docker.io/calico/node:v3.26.4image: docker.io/calico/node:v3.26.4image: docker.io/calico/kube-controllers:v3.26.4

应用修改后的 YAML 文件:

kubectl apply -f calico.yaml

4. 检查

执行 kubectl get pods -n kube-system

NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-646957dd46-ktmkl   1/1     Running   0             36m
calico-node-jxznc                          1/1     Running   0             36m
calico-node-ztbsk                          1/1     Running   0             36m
coredns-5c55fb4899-h4v4z                   1/1     Running   0             5d22h
coredns-5c55fb4899-hpfr8                   1/1     Running   0             5d22h
etcd-k8s-master                            1/1     Running   2 (56m ago)   5d22h
kube-apiserver-k8s-master                  1/1     Running   2 (56m ago)   5d22h
kube-controller-manager-k8s-master         1/1     Running   2 (56m ago)   5d22h
kube-proxy-kx9nv                           1/1     Running   0             5d22h
kube-proxy-s5rcq                           1/1     Running   1 (56m ago)   5d22h
kube-scheduler-k8s-master                  1/1     Running   2 (56m ago)   5d22

执行 kubectl get nodes

NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   5d23h   v1.28.2
k8s-node1    Ready    <none>          5d23h   v1.28.2

至此部署成功。

5. 踩坑

  1. 每个节点都需要拉取calico镜像到本地,不然执行kubectl get pods -n kube-system 存在ImagePullBackOff 状态的pod
Init:ImagePullBackOff 
  1. 使用 ctr images pull 拉取镜像到本地,创建calico-node pod失败

查看pod日志, kubectl describe pod -n kube-system calico-node-xxxx 报拉取镜像失败。

Failed to pull image "docker.io/calico/cni:v3.26.4": rpc error: code = DeadlineExceeded desc = failed to pull and unpack image "docker.io/calico/cni:v3.26.4": failed to resolve reference "docker.io/calico/cni:v3.26.4": failed to do request: Head "https://registry-1.docker.io/v2/calico/cni/manifests/v3.26.4"

这个是因为kubectl 命令默认的命令空间是k8s.io, 而ctr images pull 默认的空间是default, 所以使用crictl images 看不到拉取的镜像,从而kubectl apply -f calico.yaml 在命令空间k8s.io中找不到相应镜像就到远程去拉,而远程又连不上,所以失败。

所以上面的脚本中指定了命令空间 ctr -n k8s.io xxxxx, 或者直接使用crictl images pull xxxx

另外 , ctrContainerd自带的命令行工具,而crictlKubernetes社区提供的工具,主要用于调试和管理容器运行时接口(CRI)相关的容器和镜像。

ctr 默认操作的是 Containerddefault 命名空间
crictl 操作的是 Kubernetes CRI 专用的 k8s.io 命名空间

6 排错使用到的命令

kubectl logs -n kube-system calico-node-xxxxx -c calico-node //如果 Pod 处于 CrashLoopBackOff,查看 pod 日志
kubectl describe pod -n kube-system calico-node-xxxx     // 查看 Pod 详细信息kubectl delete pod -n kube-system calico-node-xxxxx  // 强制重建 Podkubectl get pods -n kube-system -l k8s-app=calico-node //查看组件状态

相关文章:

Kubernetes 入门篇之网络插件 calico 部署与安装

在运行kubeadm init 和 join 命令部署好master和node节点后&#xff0c;kubectl get nodes 看到节点都是NotReady状态&#xff0c;这是因为没有安装CNI网络插件。 kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Not…...

力扣题解:142. 环形链表 II

在链表学习中&#xff0c;我们已经了解了单链表和双链表&#xff0c;两者的最后一个结点都会指向NULL&#xff1b;今天我们介绍的循环列表则不同&#xff0c;其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表&#xff0c;其尾节点的指针指向头节点&#…...

latex模板文件

LaTeX 是一款广泛应用于学术领域的​​文档排版系统​​&#xff0c;尤其以其在数学公式、科学符号和复杂技术文档排版中的强大能力著称。虽然它本身并非专门的“数学软件”&#xff0c;但在处理数学相关内容时表现尤为出色。 1. LaTeX 的核心特点​ 数学公式支持​​&#xff…...

BLE 协议栈事件驱动机制详解

在 BlueNRG-LP 等 BLE 系统中,事件驱动是控制状态转移、数据交互和外设协作的基础。本文将深入讲解 BLE 协议栈中事件的来源、分发流程、处理结构与实际工程实践策略,帮助你构建稳定、可维护的 BLE 系统。 📦 一、BLE 事件的来源分类 BLE 协议栈中的事件严格来自协议栈本身…...

Rust 之四 运算符、标量、元组、数组、字符串、结构体、枚举

概述 Rust 的基本语法对于从事底层 C/C 开发的人来说多少有些难以理解&#xff0c;虽然官方有详细的文档来介绍&#xff0c;不过内容是相当的多&#xff0c;看起来也费劲。本文通过将每个知识点简化为 一个 DEMO 每种特性各用一句话描述的形式来简化学习过程&#xff0c;提高学…...

fuse-python使用fuse来挂载fs

winfsp 安装winfsp,https://winfsp.dev/ fusepy python安装fusepy #!/usr/bin/env python3 import os import stat from fuse import FUSE, FuseOSError, Operationsclass Passthrough(Operations):def __init__(self, root):self.root root# 辅助函数&#xff1a;将挂载点…...

基于ueditor编辑器的功能开发之增加自定义一键排版功能

用户有自己的文章格式&#xff0c;要求复制或者粘贴进来的文章能够一键排版&#xff0c;不需要手动调试 这个需求的话咱们就需要自己去注册一个事件啦&#xff0c;这里我没有修改源码&#xff0c;而是在编辑器初始化之后给他注册了一个事件 我的工具列表变量 vue组件中data中…...

内核态切换到用户态

内核态切换到用户态 是操作系统中 CPU 执行模式的一种切换过程&#xff0c;涉及从高权限的内核态&#xff08;Kernel Mode&#xff09;切换到低权限的用户态&#xff08;User Mode&#xff09;。以下是详细解释&#xff1a; 1. 什么是内核态和用户态&#xff1f; 内核态&#…...

win10离线环境下配置wsl2和vscode远程开发环境

win10离线环境下配置wsl2和vscode远程开发环境 环境文件准备wsl文件准备vscode文件准备 内网环境部署wsl环境部署vscode环境部署 迁移后Ubuntu中的程序无法启动 环境 内网机&#xff1a;win10、wsl1 文件准备 wsl文件准备 在外网机上的wsl安装Ubuntu24.04&#xff0c;直接在…...

AWS弹性容器服务(AWS Elastic Container Service,ECS)概述

李升伟 编译 标签&#xff1a;AWS | ECS | 容器 | Docker AWS弹性容器服务&#xff08;AWS Elastic Container Service&#xff0c;ECS&#xff09;简介 AWS弹性容器服务&#xff08;ECS&#xff09;是一项完全托管的容器编排服务&#xff0c;支持运行、管理和扩展容器化应用…...

Redis过期key处理、内存淘汰策略与缓存一致性策略实践方案

在现代的高性能应用开发中&#xff0c;Redis作为一款极为热门的内存数据库&#xff0c;其快速的读写性能和丰富的数据结构使其在缓存、消息队列等诸多领域得到了广泛应用。然而&#xff0c;在实际使用过程中&#xff0c;处理好Redis过期key、选择合适的内存淘汰策略以及确保缓存…...

@linux系统SSL证书转换(Openssl转换PFX)

在Linux中&#xff0c;你可以使用OpenSSL工具将PFX/P12格式的证书转换为单独的CRT&#xff08;证书&#xff09;、KEY&#xff08;私钥&#xff09;文件以及提取证书链 1. 提取私钥文件(.key) openssl pkcs12 -in your_certificate.pfx -nocerts -out private.key -nodes系统会…...

工业制造各个系统术语

简单总结下 文章目录 MES:制造执行系统ERP:企业资源计划PLM:产品生命周期管理MRP:物资需求计划QMS:质量管理系统APS:高级计划与排程SRM:供应商关系管理SCM:供应链管理CRM:客户关系管理WMS:仓库管理系统TMS:运输管理系统PMS:生产管理系统LES:物流执行系统FICO:财务与成本控制模块…...

深入解析:Python爬取Bilibili视频的技术创新与高阶实践

一、技术背景与挑战 Bilibili&#xff08;B站&#xff09;作为中国最大的泛二次元文化社区&#xff0c;其视频内容防护机制持续升级&#xff0c;传统爬虫技术面临三大核心挑战&#xff1a;动态加密参数、音视频分离存储、反爬策略多样化。本文提出一套融合AIGC辅助分析的智能爬…...

VS Code Markdown渲染配置

VS code markdown preview enhanced插件渲染配置 mac: commandshiftP命令输入Markdown Preview Enhanced: Customize CSS&#xff0c;并点击在打开的style.less配置文件添加一下配置 /* Please visit the URL below for more information: */ /* https://shd101wyy.github.…...

gcc -Wno-cpp

-Wno-cpp 是一个 GCC&#xff08;GNU 编译器&#xff09; 的编译选项&#xff0c;用来控制对 #warning 或 #error 指令中 # 注释的警告显示。 &#x1f31f; 简单解释&#xff1a; 在 C/C 代码中&#xff0c;有时候我们会看到这样的宏定义或注释&#xff1a; #warning This f…...

数据结构篇:线性表的另一表达—链表之单链表(上篇)

目录 1.链表的引入 1.1 链表的概念 1.2 next的意义 2.链表的分类 3.单链表的实现 3.1 单链表实现接口 3.1.1 插入节点函数封装 3.1.2 尾插 3.1.3 头插 3.1.4 报错的根本问题 3.1.5 头删 3.1.6 尾删 4.小结 1.链表的引入 根据顺序表的一些缺陷…...

SpringBoot企业级开发之【用户模块-获取用户详细信息】

接口文档的要求&#xff1a; 了解一下token令牌头是怎么用的 我们直接放到前端交互的controller类下&#xff0c;在声明的方法中加入参数为String token且加入注解RequestHeader(name"Authorization【你自己设定的token】") 设计思路: 实战开发&#xff1a; control…...

Mockito如何对静态方法进行测试

在 Mockito 中,直接对静态方法进行模拟是困难的,因为 Mockito 的设计理念是优先通过依赖注入(DI)管理对象,而静态方法破坏了这种设计(难以解耦)。不过,从 Mockito 3.4.0 版本开始,通过 mockStatic 方法支持了对静态方法的模拟(需配合 mockito-inline 依赖)。 从 Mo…...

患者根据医生编号完成绑定和解绑接口

医疗系统接口文档 一、Controller 层 1. InstitutionDoctorController 医疗机构和医生相关的控制器&#xff0c;提供机构查询、医生查询、绑定解绑医生等功能。 RestController RequestMapping("/institution-doctor") public class InstitutionDoctorController…...

Navicat 17 for Mac 数据库管理

Navicat 17 for Mac 数据库管理 一、介绍 Navicat Premium 17 for Mac是一款专业的数据库管理工具&#xff0c;适用于开发人员、数据库管理员和分析师等用户。它提供了强大的数据管理功能和丰富的工具&#xff0c;使用户能够轻松地管理和维护数据库&#xff0c;提高数据处理效…...

面试如何应用大模型

在面试中,如果被问及如何应用大模型,尤其是面向政务、国有企业或大型传统企业的数字化转型场景,你可以从以下几个角度进行思考和回答: 1. 确定应用大模型的目标与痛点 首先,明确应用大模型的业务目标,并结合企业的实际需求分析可能面临的痛点。这些企业通常会关注如何提…...

grok 驱动级键盘按键记录器分析

grok是一个驱动模块&#xff0c;其主要功能就行进行键盘按键及剪切板数据的记录&#xff0c;也就是一个键盘记录器。实现原理是通过对shadow-ssdt的相关函数进行hook,和r3对GetUserMessage进行hook的原理差不多。 关键部分如下&#xff1a; 查找csrss.exe进程是否已经启动&…...

MyBatis中特殊符号处理总结

前言 MyBatis 是一款流行的Java持久层框架&#xff0c;广泛应用于各种类型的项目中。因为我们在日常代码 MyBatis 动态拼接语句时&#xff0c;会经常使用到 大于(>,>)、小于(<,<)、不等于(<>、!)操作符号。由于此符号包含了尖括号&#xff0c;而 MyBatis 使用…...

【学Rust写CAD】37 premultiply 函数(argb.rs补充方法)

源码 fn premultiply(self) -> Argb {//预乘// This could be optimized by using SWARlet a self.alpha32();if a < 255 {Argb::new32(a, div255(self.red32() * a), div255(self.green32() * a),div255(self.blue32() * a))}else{self}源码分析 这个函数实现了颜色预…...

MYSQL——SQL语句到底怎么执行

查询语句执行流程 MySQL 查询语句执行流程 查询缓存&#xff08;Query Cache&#xff09; MySQL内部自带了一个缓存模块&#xff0c;默认是关闭的。主要是因为MySQL自带的缓存应用场景有限。 它要求SQL语句必须一摸一样表里面的任何一条数据发生变化时&#xff0c;该表所有缓…...

智能血压计WT2801芯片方案-BLE 5.0无线传输、高保真语音交互、LED显示驱动、低功耗待机四大技术赋能

在智能健康设备飞速发展的今天&#xff0c;血压计早已不再是简单的“测量工具”&#xff0c;而是家庭健康的“智能管家”。然而&#xff0c;一台真正可靠、易用、功能全面的血压计&#xff0c;离不开一颗强大的“核心芯片”。 今天&#xff0c;我们揭秘医疗级芯片WT2801的硬核实…...

基于51单片机的智能火灾报警系统—温度烟雾检测、数码管显示、手动报警

基于51单片机的火灾报警系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 由51单片机MQ-2烟雾传感ADC0832模数转换芯片DS18B20温度传感器数码管显示按键模块声光报警模块构成 具体功能&#xff1a;…...

【Java】Java 中不同类型的类详解

目录 Java 中不同类型的类详解一、基础类类型1. 普通类&#xff08;Concrete Class&#xff09;2. 抽象类&#xff08;Abstract Class&#xff09;3. 接口&#xff08;Interface&#xff09;4. 枚举类&#xff08;Enum Class&#xff09; 二、嵌套类与特殊类5. 内部类&#xff…...

指定运行级别

linux系统下有7种运行级别,我们需要来了解一下常用的运行级别,方便我们熟悉以后的部署环境,话不多说,来看. 开机流程&#xff1a; 指定数级别 基本介绍 运行级别说明: 0:关机 相当于shutdown -h now ⭐️默认参数不能设置为0,否则系统无法正常启动 1:单用户(用于找回丢…...