k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

2023-11-01

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

1 介绍

k8s 部署的时候可以选择多种cni插件,每种插件都有其对应的特殊,最经典的的莫过于 Flannel 和 Calico。

Flannel 是一个为 Kubernetes 提供叠加网络的网络插件,它基于 Linux TUN/TAP,使用 UDP 封装 IP 报文来创建叠加网络,并借助 etcd 维护网络的分配情况 。其后端支持VxLAN、host-gw和UDP,默认为VxLAN(在三层构建了一个大二层网络)。
如下为flannel VxLAN后端结构示意图:
在这里插入图片描述

Calico 是一个基于 BGP 的 三层网络插件,并且也支持网络策略来实现网络的访问控制;它在每台机器上运行一个 vRouter,利用 Linux 内核来转发网络数据包 , 并借助 iptables 实现防火墙等功能 。
Calico 本身是一个三层的虚拟网络方案,它将每个节点都当做一个路由器(router),将每个节点的容器都当做是"节点路由器"的一个终端并为其分配一个IP地址,各个节点路由器通过BGP学习生成路由规则,从而将不同节点上的容器连接起来。
如下为calico的系统结构示意图:
在这里插入图片描述

笔者在 k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4 中部署了基于Flannel的集群,但是Flannel暂时不支持网络策略,因此此处部署一个基于Calico的集群。其节点配置和上文相同,部署方法和上文几乎一致,此处只添加了一些重要步骤。

2 搭建集群

  1. 配置基础环境 和 软件
    参考笔者博文进行设置即可,唯一区别就是需要load calico相关的镜像,其它基本完全一样。
    k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4->2.1 安装基础软件

  2. 初始化master

    # kubeadm init --apiserver-advertise-address=192.168.2.131 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.224.0.0/16
    # mkdir -p $HOME/.kube
    # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    # sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    注:Calico 网络默认pod网络网段为192.168.0.0/16 ,会自动分配service网段,因此不需要像Flannel一样设置service网段。笔者虚拟机网段为192.168.2.x,为了更方便测试网络信息,此处将网段设置为 --pod-network-cidr=10.224.0.0/16 。
    笔者在安装 1.21 版本的k8s时候发现报错,无法正常拉取coredns,

    # docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.0
     Error response from daemon: manifest for registry.aliyuncs.com/google_containers/coredns:v1.8.0 not found: manifest unknown: manifest unknown
     但是测试后发现有:registry.aliyuncs.com/google_containers/coredns:1.8.0 ,因此推测阿里云没有tag v1.8.0 版本,自己拉取1.8.0后打tag v1.8.0, 再执行init 命令后顺利执行成功了。 
    
  3. master部署cni网络

    wget https://docs.projectcalico.org/manifests/calico.yaml
    # kubectl apply -f calico.yaml 
    configmap/calico-config created
    customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created   customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created    customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
    customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
    clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
    clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
    clusterrole.rbac.authorization.k8s.io/calico-node created
    clusterrolebinding.rbac.authorization.k8s.io/calico-node created
    daemonset.apps/calico-node created
    serviceaccount/calico-node created
    deployment.apps/calico-kube-controllers created
    serviceaccount/calico-kube-controllers created
    poddisruptionbudget.policy/calico-kube-controllers created
    
  4. 加入node节点
    master节点apply cni网络后,等几分钟,以确保相关服务的pod都正常拉起来了,然后再加入work节点。

    # kubeadm join --token 7qm7bu.16iurmxsyp10h5e8 192.168.2.131:6443 --discovery-token-ca-cert-hash sha256:dcb4c0d4d1204134f4e99e164f210e6f96494c63314306d1da0f49458654206f
    

    在这里插入图片描述

  5. 安装 metrics-server

    # wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    需要在 container metrics-server 的args 中添加: --kubelet-insecure-tls,否则会启动报错
    # kubectl apply -f components.yaml
    $ kubectl apply -f components.yaml 
    serviceaccount/metrics-server created
    clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
    clusterrole.rbac.authorization.k8s.io/system:metrics-server created
    rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
    clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
    clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
    service/metrics-server created
    deployment.apps/metrics-server created
    apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
    

    查看node metrics信息: 在这里插入图片描述
    Lens 查看当前pod信息:
    在这里插入图片描述

4 注意事项

  1. 默认情况下k8s config 对apiserver-advertise-address 开放访问权限,因此如果需要用额外的外网访问该服务,那么需要配置 apiserver-cert-extra-sans选项,例如
# kubeadm init --apiserver-advertise-address=10.0.8.4 --apiserver-cert-extra-sans=106.xxx.xxx.12,10.0.8.4 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.224.0.0/16

生成config 文件后更改 server: https://106.xxx.xxx.12:6443 , 那么可以通过该master的外网访问集群。
如不设置,那么直接通过外网的6443访问,会报错 Unable to connect to the server: x509: certificate is valid for xxx
  1. docker 的 cgroupdriver 需要和kubelet 启动的cgroupdriver匹配,否则无法正常启动。
正常情况下可以配置docker的daemon.json, 按需配置和kubelet一样的cgroupdriver
vim /etc/docker/daemon.json 
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

3 说明

1 calico 官方文档 about-calico
2 kubernetes-sigs/metrics-server
3 Kubernetes 进阶实战
4 github.com/kubernetes/dashboard

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

k8s笔记8--快速部署k8s集群 v1.19.4--calico网络 的相关文章

  • kube-flannel.yaml

    官网对kube flannel yml的解释 adds the cni version to the cni conf yaml inside the kube flannel cfg xff08 把cui版本加入kube flannel
  • 技术干货|深入理解flannel

    根据官网的描述 xff0c flannel是一个专为kubernetes定制的三层网络解决方案 xff0c 主要用于解决容器的跨主机通信问题 1 概况 首先 xff0c flannel利用Kubernetes API或者etcd用于存储整个
  • K8S Calico

    1 概述 Calico是一个基于 BGP 的纯三层网络方案 它在每个计算节点都利用 Linux kernel 实现了一个高效的虚拟路由器 vRouter 来进行数据转发 每个 vRouter 都通过 BGP 协议将本节点上运行容器的路由信息
  • k8s——flannel网络

    文章目录 一 Flannel简介二 Flannel网络概述三 部署 一 Flannel简介 1 当一个k8s集群创建好后一般会存在三种IP xff0c 分别是 xff1a Pod IP Node IP Cluster IP Cluster
  • open /run/flannel/subnet.env: no such file or directory

    查看pod的信息时发现报错 xff1a open run flannel subnet env no such file or directory 一是查看各个节点 xff0c 包括master 节点是否有 run flannel subn
  • kubernetes应用flannel失败

    按照官网给的命令 kubectl apply f https raw githubusercontent com coreos flannel master Documentation kube flannel yml 回头查看k8s的运行
  • [kubernates]kube-flannel-ds 一直 CrashLoopBackOff

    使用 Kubeadm 安装 K8s 集群 xff0c 在安装 flannel 网络插件后 xff0c 发现 kube flannel ds 一直处于 CrashLoopBackOff 状态 xff1a span class token pu
  • K8S 网络问题导致 ns 相关的服务不能互相访问

    背景 近期重新部署了一套K8S环境 是基于本机虚拟机 采用 Kuboard Spray 方式 使用 KuboardSpray 安装kubernetes v1 23 1 Kuboard 安装成功后 并无感觉不妥 看到 pod 状态都是 run
  • k8s笔记15--配置共享内存

    k8s笔记15 配置共享内存 介绍 案例 docker 环境 k8s 环境 说明 介绍 容器启动后默认会有 64M 的共享内存挂载在 dev shm 目录 用户可以向访问本地文件系统一样访问该共享内存 如果需要配置更大的内存 那么在dock
  • k8s安全07--使用AppArmor限制容器访问资源

    k8s安全07 使用AppArmor限制容器访问资源 1 介绍 2 操作案例 2 1 apparmor 基础命令 2 2 通过AppArmor 限制pod访问的资源 3 注意事项 4 说明 1 介绍 AppArmor is a kernel
  • k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

    k8s笔记8 快速部署k8s集群 v1 19 4 calico网络 1 介绍 2 搭建集群 4 注意事项 3 说明 1 介绍 k8s 部署的时候可以选择多种cni插件 每种插件都有其对应的特殊 最经典的的莫过于 Flannel 和 Cali
  • k8s初级实战13--资源限制

    k8s初级实战13 资源限制 1 介绍 2 资源限制用法 2 1 内存限制 2 2 cpu限制 2 3 命名空间配额 2 4 pv容量限制 3 注意事项 4 说明 1 介绍 k8s 中常见的资源限制包括 内存 cpu pv容量 pod数量等
  • k8s笔记25--k8s 跨主机网络flannel

    k8s笔记25 k8s 跨主机网络flannel 简介 不同机器上网络设备区别 flannel 网络常见三大后端模式 UDP VXLAN host gw 如何查看集群用哪种网络模式 阿里云flannel容器网络 alloc 参考文档 简介
  • k8s安全04--kube-apiserver 安全配置

    k8s安全04 kube apiserver 安全配置 1 介紹 2 安全配置 2 1 配置 insecure port 2 2 RBAC 2 3 Service Accounts 2 4 Researching Pod Security
  • 如何在不禁用firewalld(Kubernetes)的情况下使用Flannel

    我是法兰绒和 K8s 的新手 我正在我的 1 个主节点和 2 个节点集群 由 KVM 创建 上使用它们 我使用 flannel 网络插件初始化了集群 然后我发现我无法访问内部 结果发现可能是我的网络或者DNS进程出了问题 下列的https
  • 使用 192.168.0.0/16 或其他 iprange 作为 kubernetes + flannel 的 pod cidr

    在教程中https kubernetes io docs setup independent create cluster kubeadm https kubernetes io docs setup independent create
  • Kube flannel 处于 CrashLoopBackOff 状态

    我们刚刚开始在 kubernetes 上创建集群 现在我们尝试部署tiller 但出现错误 NetworkPlugin cni 设置 pod 失败 tiller deploy 64c9d747bd br9j7 kube system 网络
  • Ufw 防火墙阻止 kubernetes(使用 calico)

    我正在尝试在我的服务器 Debian 10 上安装 kubernetes 集群 在我的服务器上 我使用 ufw 作为防火墙 在创建集群之前 我在 ufw 上允许了这些端口 179 tcp 4789 udp 5473 tcp 443 tcp
  • Kube-Proxy-Windows CrashLoopBackOff

    安装过程 我是 Kubernetes 的新手 目前正在 Azure VM 内设置 Kubernetes 集群 我想部署 Windows 容器 但为了实现此目的 我需要添加 Windows 工作节点 我已经部署了一个具有 3 个主节点和 1
  • minikube:无法连接本地部署的 nginx 服务

    我已经在我的 ubuntu 16 04 机器上安装了 minikube 并启动了一个集群 并显示一条消息 Kubernetes is available at https 192 168 99 100 443 接下来 我使用以下命令部署了

随机推荐

  • 最速曲线及应用

    一起来观赏一下数学之骚美 原文 https tieba baidu com p 3635683462 red tag 0223460281 这事儿和17世纪的一道谜题有关 直到后来微积分被建立起来以后才得正解 虽然问题不难 但结果惊艳 我先
  • 使用gcov和lcov测试代码覆盖率

    参考文章 gcov介绍 gcov是Linux下GCC自带的一个C C 代码覆盖率分析工具 因此只要安装了gcc 就不需要再次安装了 lcov介绍 gcov能够生成代码覆盖信息 但是不够直观 因此需要结合lcov gcovr等前端图形工具才能
  • 流氓ONU问题分析和处理

    1 流氓ONU问题分析和处理 1 1 故障现象描述 故障现象为 1 设备被判定为流氓ONU 2 同一PON口下其他设备都在反复掉线 只有这一台设备一直正常注册 3 设备下所有ONU都在反复上下线 上下线时间没有规律 4 只有几台设备能正常注
  • Windows系统提权姿势

    windows系统提权 权限提升简介 权限提升概述 什么是提权 提权分类 提权条件 Windows提权思路 Windows系统提权 Windows提权信息收集 WMIC信息收集 自动信息收集 提权工具脚本 环境搭建 提权 Windows内核
  • iOS11网络类型判断(iPhoneX获取网络类型闪退)

    简介 在之前的项目中 很多是使用导航栏中视图层 通过KVC来获取网络状态 感觉这个方法有些投机取巧 到了iOS11 iPhoneX的导航栏视图层也进行了修改 除了蛋疼的UI 在获取使用以前获取网络状态的方法时候 果然炸了 解决方案 可以使用
  • airpods固件更新方法_AirPods如何升级固件?AirPods更新固件方法教程

    AirPods如何升级固件呢 很多人对 AirPods 怎么升级固件这个问题都很困惑 在使用AirPods的过程中 有时候AirPods 自己突然就更新了最新固件 但当你想要它更新的时候 它却不能自己更新 对此 苹果也没有给出官方的说法 就
  • C语言简单编程题(素数,闰年,回文数)

    C语言简单编程 素数 闰年 回文数 习题 1 输入一个整数 判断这个数是否是素数 除1以外能只能被 1和它本身整除的自然数 include
  • java基础静态变量是什么?如何使用?

    1 定义 静态变量也叫做类变量 类属性 由static修饰的变量称为静态变量 其实质上就是一个全局变量 如果某个内容是被所有对象所共享 那么该内容就应该用静态修饰 没有被静态修饰的内容 其实是属于对象的特殊描述 2 访问语法 类名 静态方法
  • Android中pendingIntent的深入理解

    http blog csdn net yuzhiboyi article details 8484771
  • MySQL进阶——触发器

    1 触发器定义 同存储过程和函数类似 MySQL中的触发器也是存储在系统内部的一段程序代码 可以把它看作是一个特殊的存储过程 所不同的是 触发器无需人工调用 当程序满足定义条件时就会被MySQL自动调用 这些条件可以称为触发事件 包括INS
  • Uncaught ReferenceError: require is not defined

    在electron中 渲染进程与主进程交互时 引入ipcRenderer报错 Uncaught ReferenceError require is not defined 渲染进程是这么写的 h1 Hello World h1 We are
  • 实现基于 TCP 的服务器端/客户端

    文章目录 1 TCP服务器端的默认函数调用顺序 1 1 进入等待连接请求状态 listen 函数 1 2 受理客户端连接请求 accept 函数 1 3 回顾 HelloWorld 服务器端 2 TCP客户端的默认函数调用顺序 2 1 发起
  • Android Studio查看SVN历史记录不能正确显示中文

    已经2016年了 早就该将项目从Eclipse转向Android Studio了 刚刚将项目导入后发现中文字体全部显示成了小方块 后来发现在Android studio中所有的中文字体的部分全部都显示成了小方块 如图1显示 后来发现是And
  • [Unity]VRTK V4的导入和使用

    1 新建3D工程 2 导入SteamVR插件 2 1下载最新插件 https github com ValveSoftware steamvr unity pluginhttps github com ValveSoftware steam
  • 23种设计模式之状态模式和策略模式的区别

    文章目录 概述 状态模式 策略模式 区别 总结 概述 在行为类设计模式中 状态模式和策略模式是亲兄弟 两者非常相似 我们先看看两者的通用类图 把两者放在一起比较一下 状态模式 状态模式 状态模式的类图与策略模式一模一样 区别在于它们的意图
  • MIPI简介(二)——物理层D-PHY

    一 物理层 物理层规范了传输介质 电气特性 IO电路 和同步机制 通俗地说 就是指定在MIPI协议的最底层物理层 发送端Tx如何拿到上层编码好的数据 转化成怎样的电信号 并通过多少根 组通道以何种形式发送给接收端Rx等等 CSI和DSI的物
  • C++ 函数参数何时用引用何时用指针

    什么时候使用引用 什么时候使用指针 什么时候按值传递呢 对于使用传递的值而不做修改的函数 如果数据量很小 如内置数据类型或小型结构 则按值传递 如果数据对象是数组 则使用指针 并将指针申明为指向const的指针 如void fun cons
  • nlohmann 最优秀的C++序列化工具库 详细入门教程(转)

    C 使用nlohmann json教程 使用指南 1 include include
  • 【react】createRef

    createRef 1 React createRef调用后可以返回一个容器 该容器可以存储被ref所标识的节点 2 该容器是 专人专用 的 因为后放进去的节点会把前面的节点覆盖掉 3 除非再调用一次createRef
  • k8s笔记8--快速部署k8s集群 v1.19.4--calico网络

    k8s笔记8 快速部署k8s集群 v1 19 4 calico网络 1 介绍 2 搭建集群 4 注意事项 3 说明 1 介绍 k8s 部署的时候可以选择多种cni插件 每种插件都有其对应的特殊 最经典的的莫过于 Flannel 和 Cali