K8S 1.31部署到Linux教程

前言

因公司项目需要,准备学习k8s,但是网上教程中的k8s版本均比较旧,因此个人在阅读官方文档以及借鉴多方资料后,将个人使用虚拟机部署的过程记录下来,供大家参考。

配置及版本

软件名称版本
K8S1.31
VMware Workstation Pro17
CentOSStream-9-x86_64

虚拟机配置

VMware及CentOS的安装过程,网上教程比较多,且与本文核心内容关联不大,因此不作叙述,默认在VMware上已经安装好了两台虚拟机。

官方文档配置说明

个人设置的虚拟机配置

如图,该配置仅适用于本文教程请根据个人实际情况进行调整

控制面节点部署过程

切到超级权限(可选)

后续一些操作,如设置防火墙端口等,需要sudo权限,因此为了方便可以一开始先切到sudo权限。

输入

sudo -s

 然后输入超级管理员的密码即可,实际效果如图

设置防火墙

官方文档要求开放如下端口

 输入如下命令来永久开启端口

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10259/tcp
firewall-cmd --permanent --add-port=10257/tcp

实际效果

输入如下命令来重启防火墙服务

systemctl restart firewalld

输入如下命令来检查端口是否开放成功

firewall-cmd --list-all

实际效果

 可见相关端口均已开放

设置网络

输入如下命令以便支持 Kubernetes 集群的一些基本网络功能

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# 重新加载 sysctl 配置以使更改立即生效
sysctl --system

关闭交换分区

官方文档说明

 输入如下命令来查看是否有交换分区

free -m

 结果如图

如果swap不是0 0 0的话,说明没有禁用

 输入如下命令来进入相关配置文件

vim /etc/fstab

将包含swap这一行注释,直接在最开头加上# 即可

输入如下命令来重启系统

reboot

重启后,输入如下命令来检查swap分区是否已经关闭

free -m

 发现swap已经关闭

修改hostname(可选)

为了便于区分hostname,可以根据实际情况修改hostname,这里,我将hostname改成master,使用如下命令

hostnamectl set-hostname master

使用如下命令来检查hostname是否已经更改成功

hostname

实际效果 

为hostname添加DNS(可选)

 获取当前主机的ip

ifconfig

 如图所示,获取ip地址

进行如下操作来为hostname设置DNS解析

vim /etc/hosts

安装运行时

官方文档说明

 这里我们选择安装containerd作为运行时

containerd下载地址:Releases · containerd/containerd · GitHub

 因为我的linux是amd架构的https://github.com/containerd/containerd/releases/tag/v1.7.22,所以选择这个并右击复制下载链接

 输入如下命令下载tar包,因为containerd版本不断迭代,地址注意替换成自己复制的

wget https://github.com/containerd/containerd/releases/download/v1.7.22/cri-containerd-1.7.22-linux-amd64.tar.gz

开始下载

下载完成

使用如下命令将其解压到/目录下

tar xf cri-containerd-1.7.22-linux-amd64.tar.gz -C /

输入如下命令进行验证

which containerd

如果报错

 是因为containerd默认解压到/usr/local/bin目录下,runc默认解压到/usr/local/sbin目录下,这两个目录都不在path变量中,输入如下命令来将这个目录放到path变量中

vim ~/.bashrc

在最后一行加上

export PATH=$PATH:/usr/local/bin:/usr/local/sbin

如图

保存后,输入如下命令使更改立刻生效

source ~/.bashrc

输入如下命令检查path中是否包含/usr/local/bin

echo $PATH

如图,已包含

再次输入which containerd命令,如图

输入如下命令确认版本

containerd --version

如图

为containerd创建自定义配置文件

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml

对这个文件做部分修改,如图

 镜像地址:registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10

输入如下命令重新加载配置并启动containerd

systemctl daemon-reload
systemctl enable --now containerd

 如图

 安装 kubeadm、kubelet 和 kubectl

因为我的是centos,所以按照官方文档来,链接:安装 kubeadm | Kubernetes

按照文档输入如下命令

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

# 安装 kubelet、kubeadm 和 kubectl
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 启用 kubelet 以确保它在启动时自动启动
sudo systemctl enable --now kubelet

生成kubeadm配置文件

输入如下命令生成k8s配置文件

# 在 /etc下建立k8s目录
mkdir /etc/k8s

# 进入该目录
cd /etc/k8s

# 使用kubeadm创建默认配置文件
kubeadm config print init-defaults > kubeadm-config.yaml

# 修改该文件
vim kubeadm-config.yaml

 对kubeadm-config做如下三处修改

 阿里云镜像源地址

registry.cn-hangzhou.aliyuncs.com/google_containers

 

 保存

下载镜像

输入如下命令开始下载镜像

kubeadm config images pull --config /etc/k8s/kubeadm-config.yaml

下载完成,如图

初始化控制面节点

输入如下命令

kubeadm init --config /etc/k8s/kubeadm-config.yaml  --upload-certs

等待几分钟,初始化完成,如图

根据输出提示,依次输入如下命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf

保存kubeadm join命令,以便于后续节点加入

kubeadm join 192.168.28.159:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:866f12e36fdf80317673b1cb8ed7ae605f71b68b1eb4c9671da7cd1f10f64884 

工作节点部署过程

切到超级权限(可选)

同控制节点。

修改hostname(可选)

为了便于区分hostname,可以根据实际情况修改hostname,这里,我将hostname改成node1

hostnamectl set-hostname node1

设置防火墙

官方文档要求开放如下端口

  输入如下命令来永久开启端口

firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10256/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp

关闭交换分区

同控制节点

为hostname添加DNS(可选)

类似控制节点,注意在hosts文件中的域名改成之前设置的hostname

设置网络

同控制节点

安装 kubeadm、kubelet 和 kubectl

同控制节点

加入集群

输入初始化控制面节点中保存的kubeadm join命令

等待一小会后如图

控制面节点上输入如下命令进行验证

kubectl get nodes

结果如图

部署集群网络插件

如上所示,所有节点的status都是NotReady,这是因为没有部署网络插件,我们选择Calico作为集群网络插件,官方文档链接:Kubernetes 上的 Calico 快速入门 |Calico 文档 (tigera.io)

输入如下命令来安装 Tigera Calico 运算符和自定义资源定义

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/tigera-operator.yaml

效果如图

然后输入如下命令

kubectl get ns

发现多出一个命名空间

接着输入如下命令来确保网络插件pods已经运行

 kubectl get pods -n tigera-operator

 结果如图,status是Running即可

 接着,我们的操作和官方文档有些区别

官方文档的说明是

 但是我们需要更改官方提供的配置以适应自己的环境,所以我们操作如下

# 首先创建calico的配置目录
mkdir /etc/calico

# 进入该目录
cd /etc/calico

# 将官方模板配置下载到该目录
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/custom-resources.yaml

# 修改配置文件
vim custom-resources.yaml

将cidr区间修改成前文 生成kubeadm配置文件 一章中设置的网段,如下图

 保存,然后运行如下命令

kubectl create -f /etc/calico/custom-resources.yaml

结果如图

 输入如下命令

kubectl get ns

结果如图,发现多了一个命名空间

输入如下命令来确保该命名空间下所有的pods已经正常运行

kubectl get pods -n calico-system

结果如图

 接着输入如下命令来检查节点状态

kubectl get nodes

结果如图,状态从not ready变成ready

总结

因k8s知识非常多,本文只是根据本人亲自实践的过程,展示如何创建和加入k8s集群,剩下的知识,各位可根据自己需要查找其他资料进行学习。

非常感谢大家对本文的支持,也欢迎大家通过评论、私信或者我的邮箱等方式与我进行探讨交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperGodK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值