新手指南:k8s集群单机部署

您所在的位置:网站首页 k8s安装问题 新手指南:k8s集群单机部署

新手指南:k8s集群单机部署

2023-04-15 13:39| 来源: 网络整理| 查看: 265

图片来自pixabay.com的designerpoin会员

目录

1. 检查当前环境,按要求初始化环境1.1 安装要求1.2 查看系统CPU和内存情况1.3 查看系统版本1.4 查看系统Mac和product_uuid1.5 查看网卡适配器和路由1.6 查看netfilter组件1.7 关闭swap1.8 检查所需端口和主机配置1.9 其它2. 安装docker作为k8s的容器运行时3. 安装k8s启动管理工具kubelet/kubeadm/kubectl4. 启动k8s集群4.1 获取k8s集群所需镜像4.2 运行kubeadm init命令5. 安装k8s网络插件Flannel6. 启动一个nginx服务6.1 设置master节点可以运行pod6.2 启动一个nginx演示程序8. 安装过程中遇到的一些问题8.1 无法查看docker镜像列表8.2 拉取docker镜像问题8.3 k8s服务状态Init:ErrImagePull8.4 k8s集群初始化时报yaml配置文件已经存在8.5 系统日志报无网络插件Unable to update cni config8.6 运行kubectl命令报连接server localhost:8080被拒绝8.7 其它9. k8s集群组件部署概图10. 参考资料

k8s已经成为业界容器编排技术的平台标准,本文介绍了在单机上如何部署一个k8s集群,同时承担master和worker节点角色,采用flannel网络插件搭建其底层网络模型,部署完毕之后运行一个简单nginx服务。通过部署单机k8s集群,我们可以快速进行相关k8s集群的测试、调试和学习。

本文所安装k8s版本为1.20.0。

k8s集群的单机部署主要有如下步骤,

检查和配置环境,使之符合k8s所要求。 安装k8s所需的容器运行时,本文选用了Docker。 安装k8s集群管理工具kubeadm/kubelet/kubectl。 通过kubeadm初始化k8s集群。 通过kubectl部署网络插件flannel。 start="1.">

k8s集群的安装过程不是特别复杂,但是由于国内墙的原因,在获取一些相关容器镜像时,会遇到困难,这主要影响第4步和第5步的k8s集群初始化。本文安装过程中所使用到的镜像列表将在文末给出,供读者参考。博主本人一般先尝试通过阿里云等国内镜像源服务拉取相关镜像,若还是无法拉取,则借助代理服务访问外网镜像源。

在无镜像拉取问题的情况下,整个部署过程预计在1个小时内可以完成。安装过程中可能遇到的一些常见问题和解决方案,在文末将一一列出。

1. 检查当前环境,按要求初始化环境 1.1 安装要求

安装k8s集群的基本要求如下,

至少2核CPU + 2G内存 操作系统版本必须符合如下要求 Ubuntu 16.04+ Debian 9+ CentOS 7+ Red Hat Enterprise Linux (RHEL) 7+ Fedora 25+ HypriotOS v1.0.1+ Flatcar Container Linux (使用 2512.3.0 版本测试通过) 集群中的所有机器的网络彼此均能相互连接 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。 查看k8s所需端口,确保这些端口未被防火墙拦截,并检查所需端口在主机上没有被占用。 禁用交换分区。

详细的安装要求见这里。

本文安装所使用到的主机配置为, * 2核CPU + 4G内存 * 操作系统为Ubuntu 20.10,Linux 5.8.0-41-generic * 单机版网络,单以太网卡接入局域网,未开启防火墙

1.2 查看系统CPU和内存情况 # 查看系统CPU $ cat /proc/cpuinfo # 查看系统memory $ cat /proc/meminfo 1.3 查看系统版本 $ uname -a Linux k8s-master01 5.8.0-41-generic #46-Ubuntu SMP Mon Jan 18 16:48:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.10 DISTRIB_CODENAME=groovy DISTRIB_DESCRIPTION="Ubuntu 20.10" 1.4 查看系统Mac和product_uuid

查看系统Mac和product_uuid,在正式环境中,必须保证每个主机节点唯一。

# 查看当前主机的网络适配器和Mac地址 $ ifconfig -a enp0s3: flags=4163 mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::7f65:6807:9e8e:8ac3 prefixlen 64 scopeid 0x20 ether 08:00:27:52:8d:82 txqueuelen 1000 (Ethernet) RX packets 84 bytes 35282 (35.2 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 117 bytes 17453 (17.4 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 150 bytes 12646 (12.6 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 150 bytes 12646 (12.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # 查看enp0s3的mac地址 $ cat /sys/class/net/enp0s3/address 08:00:27:52:8d:82 # 查看当前主机product_uuid $ sudo cat /sys/class/dmi/id/product_uuid 975ca0e1-d319-3745-9915-a61ef4297ddf 1.5 查看网卡适配器和路由

查看路由命令,当前主机只有一个网卡适配器,缺省路由0.0.0.0正常指向网关地址。

$ route -v Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 100 0 0 enp0s3 10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 link-local 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3

若主机上有多个网卡适配器,则需要确认当前k8s组件能够通过缺省路由访问到正确的目标网卡适配器。

1.6 查看netfilter组件

netfilter是一个运行在Linux内核空间、实现网络流量包过滤/地址转换的框架。iptables是一个工作在应用空间、管理netfilter流量规则的应用程序,其通过netfilter回调hook,将网络流量包分类映射到相应的流量规则集合,实现流量管控。

由于k8s集群中容器的IP地址是动态分配的,k8s通过iptables/netfilter控制应用服务流量数据包,实现集群内应用服务流量的动态负载均衡。

如下命令可以加载netfilter组件并允许iptables过滤网桥流量。

# 加载netfilter $ modprobe br_netfilter # 确认netfilter的加载情况,若能看到如下的命令输出,则说明netfilter已被加载 $ lsmod | grep br_netfilter br_netfilter 28672 0 bridge 200704 1 br_netfilter # 允许iptables过滤网桥流量 $ cat


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3