ArchLinux 双网卡 kubeadm Kubenetes 集群安装
2023-4-26
| 2024-2-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

0x01 虚拟机网络

确保 MAC 地址和 product_uuid 的唯一性
 
通过虚拟机创建,因为不同虚拟机网卡可能会有变化,所以除了默认的nat上网网卡外,我单独新建了一个网段来设置静态ip
notion image
 
我这里使用内置的网络服务 systemd-network ,其他像NetworkManage之类的都是要安装的
 
我这里第二张网卡名字是:ens36,所以在 /etc/systemd/network 目录下新建 ens36.network 文件
 
IP和主机对应表
IP
域名
kmaster1
10.2.2.3
kmaster1.k8s.tari.moe
knode1
10.2.2.4
knode1.k8s.tari.moe
knode2
10.2.2.5
knode2.k8s.tari.moe
每台主机依次执行
 
 
 
在3个节点分别执行命令,其中 10.2.2.2 为 kmaster1节点,其他2个为node节点
 
 
 
依次重启网络即可
确保3个节点的 10.2.2.[2-4] 相互能 ping通
 
如果出现网络问题,可以通过 命令查看网关情况,如果存在两个默认网关,那么会存在问题
默认网关建议使用外网的,即设置更高的优先级,首先删除默认网关
然后设置
 

0x02 每个节点安装前

安装 kubeadm
本页面显示如何安装 kubeadm 工具箱。 有关在执行此安装过程后如何使用 kubeadm 创建集群的信息, 请参见使用 kubeadm 创建集群。 准备开始 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 CPU 2 核心及以上。 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。 开启机器上的某些端口。请参见这里了解更多详细信息。 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。 例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstab、systemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置。 确保每个节点上 MAC 地址和 product_uuid 的唯一性 你可以使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验 一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。 检查网络适配器 如果你有一个以上的网络适配器,同时你的 Kubernetes 组件通过默认路由不可达,我们建议你预先添加 IP 路由规则, 这样 Kubernetes 集群就可以通过对应的适配器完成连接。
安装 kubeadm
  • 确保交换分区被禁用,不然 kubelet 起不来
例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstabsystemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存),master节点需4GB内存,不然装完后经常POD会被杀掉
  • CPU 2 核心及以上
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
  • 开启机器上的某些端口。请参见这里了解更多详细信息。
 
以下所有操作均在 root 用户身份下进行
 
安装所需的依赖,并开启相应的内核模块
编辑文件 /etc/sysctl.conf 最后一行添加
并执行开启内核数据包转发
 

0x03 kmaster1节点

0x01 初始化集群

会提示和原本的 iptables 冲突,这里直接选 y 覆盖即可
notion image
使用 systemc cgroup
 
启动 containerd、kubelet 并设置为开机启动,
kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。
 
一开始代理不知为啥怎么也挂不上去(export 或者 proxychains 都不行),后面搭建了个 openvpn (
  • 这里一定要指定 ip 地址,防止自动绑定到 openvpn 的ip 或者上网的动态ip
notion image
保存好,下面子节点加入需要
也可以使用该命令再次显示
如果安装异常重新 init 则执行
 
安装完成后,执行,就可以正常使用 kubectl 啦
notion image
此时还没安装网络插件,所以 coredns 是起不来的
 

0x02 安装网络插件

这里用 cillium,其他插件可见
安装扩展(Addons)
说明: 本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南。 Add-ons 扩展了 Kubernetes 的功能。 本文列举了一些可用的 add-ons 以及到它们各自安装说明的链接。该列表并不试图详尽无遗。 联网和网络策略 ACI 通过 Cisco ACI 提供集成的容器网络和安全网络。 Antrea 在第 3/4 层执行操作,为 Kubernetes 提供网络连接和安全服务。Antrea 利用 Open vSwitch 作为网络的数据面。 Antrea 是一个沙箱级的 CNCF 项目。 Calico 是一个联网和网络策略供应商。 Calico 支持一套灵活的网络选项,因此你可以根据自己的情况选择最有效的选项,包括非覆盖和覆盖网络,带或不带 BGP。 Calico 使用相同的引擎为主机、Pod 和(如果使用 Istio 和 Envoy)应用程序在服务网格层执行网络策略。 Canal 结合 Flannel 和 Calico,提供联网和网络策略。 Cilium 是一种网络、可观察性和安全解决方案,具有基于 eBPF 的数据平面。 Cilium 提供了简单的 3 层扁平网络, 能够以原生路由(routing)和覆盖/封装(overlay/encapsulation)模式跨越多个集群, 并且可以使用与网络寻址分离的基于身份的安全模型在 L3 至 L7 上实施网络策略。 Cilium 可以作为 kube-proxy 的替代品;它还提供额外的、可选的可观察性和安全功能。 Cilium 是一个孵化级别的 CNCF 项目。 CNI-Genie 使 Kubernetes 无缝连接到 Calico、Canal、Flannel 或 Weave 等其中一种 CNI 插件。 CNI-Genie 是一个沙箱级的 CNCF 项目。 Contiv 为各种用例和丰富的策略框架提供可配置的网络 (带 BGP 的原生 L3、带 vxlan 的覆盖、标准 L2 和 Cisco-SDN/ACI)。 Contiv 项目完全开源。 其安装程序 提供了基于 kubeadm 和非 kubeadm 的安装选项。 Contrail 基于 Tungsten Fabric,是一个开源的多云网络虚拟化和策略管理平台。 Contrail 和 Tungsten Fabric 与业务流程系统(例如 Kubernetes、OpenShift、OpenStack 和 Mesos)集成在一起, 为虚拟机、容器或 Pod 以及裸机工作负载提供了隔离模式。 Flannel 是一个可以用于 Kubernetes 的 overlay 网络提供者。 Knitter 是在一个 Kubernetes Pod 中支持多个网络接口的插件。 Multus 是一个多插件, 可在 Kubernetes 中提供多种网络支持,以支持所有 CNI 插件(例如 Calico、Cilium、Contiv、Flannel), 而且包含了在 Kubernetes 中基于 SRIOV、DPDK、OVS-DPDK 和 VPP 的工作负载。 OVN-Kubernetes 是一个 Kubernetes 网络驱动, 基于 OVN(Open Virtual Network)实现,是从 Open vSwitch (OVS) 项目衍生出来的虚拟网络实现。OVN-Kubernetes 为 Kubernetes 提供基于覆盖网络的网络实现, 包括一个基于 OVS 实现的负载均衡器和网络策略。 Nodus 是一个基于 OVN 的 CNI 控制器插件, 提供基于云原生的服务功能链 (SFC)。 NSX-T 容器插件(NCP) 提供了 VMware NSX-T 与容器协调器(例如 Kubernetes)之间的集成,以及 NSX-T 与基于容器的 CaaS / PaaS 平台(例如关键容器服务(PKS)和 OpenShift)之间的集成。 Nuage 是一个 SDN 平台,可在 Kubernetes Pods 和非 Kubernetes 环境之间提供基于策略的联网,并具有可视化和安全监控。 Romana 是一个 Pod 网络的第三层解决方案,并支持 NetworkPolicy API。 Weave Net 提供在网络分组两端参与工作的联网和网络策略,并且不需要额外的数据库。 服务发现 CoreDNS 是一种灵活的,可扩展的 DNS 服务器,可以 安装为集群内的 Pod 提供 DNS 服务。 可视化管理 Dashboard 是一个 Kubernetes 的 Web 控制台界面。 Weave Scope 是一个图形化工具, 用于查看你的容器、Pod、服务等。请和一个 Weave Cloud 账号 一起使用, 或者自己运行 UI。 基础设施 KubeVirt 是可以让 Kubernetes 运行虚拟机的 add-ons。通常运行在裸机集群上。 节点问题检测器 在 Linux 节点上运行, 并将系统问题报告为事件 或节点状况。 遗留 Add-ons 还有一些其它 add-ons 归档在已废弃的 cluster/addons 路径中。
安装扩展(Addons)
 
notion image
稍等一会
notion image
 
通过 helm 装最新版本有问题,装完后会导致整个集群不断重启 - 希望大佬指导下

0x04 knode1&2节点

即可
查看节点加入状态,如果为 Ready 就正常了
需要等一会(kubectl describe -nkube-system xxxx 镜像拉不下来可以给node节点挂个 openvpn 代理)
notion image
 
到此就安装完成啦

参考链接

 
  • Kubernetes
  • 云安全
  • Kubelet源码分析容器逃逸之AppArmor绕过-CVE-2019-16884复现
    • GitTalk
    目录