Ubuntu-22.04
搭建 k8s-1.30.1
集群,开启Dashboard-v2.7.0
(以及Token不生成的问题)、部署ingress-nginx-1.10.1
引言
最近在研究分布式计算,想将分布式计算都容器化,使用
k8s
来调度,所以从0开始学k8s
,这是我遇到坑后百度、查资料一点一点总结的搭建过程,贴在这方便以后自己找,也希望对你能有所帮助,后续我会不定时更新这篇博客的内容
***
特别注意:当k8s
集群init
了以后的kubectl
命令最好都等上一步的命令执行完了再进行下一步操作,不要抢着执行,随时看Pod
的状态kubectl get pods -A
,只要还有一个没有Running
就不要着急下一步
2024-09-06
实测v1.31.0
也可用本文的方式搭建
一、系统环境准备
***
以下在所有节点上都要做
用
Ubuntu-22.04
版本,CentOS
操作核心是一样的,只是命令不同罢了。
1、关闭 swap
官方要求关闭
swap
,虚拟内存相关,因为Kubernetes
无法读取虚拟内存相关的数据,开启这个可能会导致Kubernetes
的内存问题
要想永久关,得先解除程序占用,临时关闭
swap
:
swapoff -a
修改配置文件永久关闭,注释这个文件:
vi /etc/fstab
中的关于
swap
的那一行,如图,注释掉它:
2、关闭 SELinux
Ubuntu
没有这个东西可以不管,CentOS
执行:
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
然后重启系统即可。
SELinux
是系统安全方面的,如果你懂怎么弄可以自己配置SELinux
就不用关,很麻烦,所以大家基本都关了的
3、关闭防火墙
需要关闭防火墙,因为节点之间要互相通信,开防火墙容易出问题
ufw disable
# 或者
systemctl disable --now ufw
4、设置时区(根据自己的时间情况可选)
因为关系到集群机器之间的通信,需要一个时间同步大家的行为。设置为上海时区
timedatectl set-timezone Asia/Shanghai
重启时间同步服务
systemctl restart systemd-timesyncd.service
看一下时间对不对:
timedatectl status
# 或者
date
5、修改 /etc/hosts
(可选) 、/etc/hostname
(可选但建议)
这个是为了后面填地址的时候方便,不用填IP地址,直接填名字就行
修改
hosts
文件,将自己的IP地址和主机名填进去:
echo "192.168.10.10 k8s-master" | sudo tee -a /etc/hosts
其他节点的你想填也填进去
修改
hostsname
文件,两种办法,一种是hostnamectl
命令,一种是直接修改文件,修改文件的方式:
echo "k8s-master" | sudo tee /etc/hostname # 不同的节点改不同的名字
修改完主机名文件后最好重启一次ssh终端或系统
6、开启流量转发
开这个的原因是让各个主机承担起网络路由的角色,因为后续还要安装网络插件,要有一个路由器各个
Pod
才能互相通信。执行:
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
应用参数:
sudo sysctl --system
查看是否开启成功:
sysctl net.ipv4.ip_forward
没错的话会看到结果:
net.ipv4.ip_forward = 1 # 开启成功
7、其他相关知识(不重要)
Ⅰ、IP地址固定以及网络相关知识
你有可能想固定机器的IP地址,编辑
/etc/netplan
下的xxx.yaml
文件,如果只有一张网卡,就只有一个文件,如果有多张网卡根据网卡名来,wifi
网卡的文件名也带有wifi
字样。以下是一个有线网卡的固定IP例子,根据你的需求改就行:
network:
ethernets:
ens33: # 要固定的网卡名
dhcp4: false # false是关闭自动获取地址,true是开启
addresses:
- 192.168.10.10/24 # 你要固定的IP地址
gateway4: 192.168.10.1 # 网关地址
nameservers:
addresses: # DNS地址,可以有多个
- 223.5.5.5 # 阿里DNS
- 8.8.8.8 # 谷歌DNS
version: 2
改完文件后应用更改:
netplan apply
验证是否成功,执行:
ip a # 查看所有网卡以及对应的IP地址
我看到评论区有关于网络的提问,我来粗俗简单的解释一下IP网段以及
/数字
的问题,详细的去学习网络相关的知识:
如果你有一个子网是
192.168.1.0
网段,那么它的子网掩码就是255.255.255.0
,缩写就是/24
,那么这个子网可分配的IP地址就是从192.168.1.1
开始到192.168.1.254
结束,共254
个IP地址。
如果你的机器很多,那么这254个地址不够用,可以提升网络,我们将之前的
192.168.1.0
子网再提升一下,变成192.168.0.0
网段,它的子网掩码就是255.255.0.0
,缩写就是/16
,可分配地址是从192.168.1.1
开始到192.168.255.254
结束,共65536
个IP地址,这下就够用了。
那为什么是
/24
、/16
呢,你可以理解为x.x.x.x
,四个x
,一x
个占8
位,我们刚才用到的192.168.1.0
,只将192.168.1.x
分配给主机,所以是第24
位。同样的192.168.0.0
可分配的地址就是192.168.x.x
就是16
位,192.x.x.x
就是8
位
二、安装 containerd
运行时环境
***
以下在所有节点上都要做
Kubernetes-1.24
版本移除了dockershim
的支持,所以之前的先安装docker
再安装Kubernets
的方式已经不可行了,可能会导致Kubelet
报错退出,所以我们要先安装containerd
运行时环境。这时可能就有人问了,安装Docker
时不是带有containerd
了吗,你说得对,安装Docker
时确实是apt install -y docker-ce docker-ce-cli containerd.io
,确实安装了containerd
,但是这是Docker
的containerd
啊,这么安装的containerd
是由Docker
管理的,k8s
无法管理,所以就会导致报错,踩过的坑啊。
运行时环境除了
containerd
以外还有CRI-O
、Mirantis Container Runtime
、Docker Engine
,但我们用containerd
就行,其他的运行时安装请参阅官方手册
安装
containerd
有两种方式:
1、下载最新二进制文件安装
这种方式虽然麻烦,但是可以安装最新版的
containerd
,具体操作:
Ⅰ、安装runc
客户端
因为我们是手动安装
containerd
,所以也得手动安装run