Kubernetes(K8S) 集群环境搭建指南

本贴最后更新于 213 天前,其中的信息可能已经事过境迁

在学习和使用Kubernetes过程中,K8S环境搭建是新手非常头疼的一环,K8S提供了多种安装的方式包括Minikube、kubeadm、Rancher、sealos等,目前比较常见的是采用kubeadm和sealos方式进行安装,sealos相比kubeadm更加适合入门学习者,只需要几条命令就可以完成整个集群的部署。而Kubeadm适用于生产环境和复杂场景,针对希望有更多个性化定制的用户,但安装和维护复杂度较高。本文包含了kubeadm和sealos两种方式的安装,作为新手更加推荐使用sealos。

集群环境准备

1、集群环境说明

要求条件:

  1. 一台或多台Linux系统机器,推荐使用的是centos 7.5版本或以上
  2. 每台Linux至少有2GB的内存和2个CPU、硬盘30GB
  3. 所有的机器可以相互ping通

集群结构:

image20240520160859248.png

这里为了学习方便,采用了在本地电脑安装虚拟软件VMware(当然也可以使用VitualBox),然后再虚拟机VMware中安装centos,虚拟机安装centos过程省略,大家可以自行百度搜索相关教程,这里分别这里分别安装好master、node1、node2虚拟机:

image20240521091059203.png

2、配置节点主机名

执行以下命令,依次配置各个节点主机名,这里是为了方便后面服务的访问

# master节点
[root@localhost ~]# hostnamectl set-hostname master && bash
# node1节点
[root@localhost ~]# hostnamectl set-hostname node1 && bash
# node2节点
[root@localhost ~]# hostnamectl set-hostname node2 && bash

3、配置节点网络

进入VMware -> 设置 ->虚拟网络编辑器,查看VMnet8对应的子网IP地址:

image20240521091800088.png

分别编辑各个节点的网络配置文件

[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改以下关键项

master节点:

ONBOOT=yes
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=114.114.114.114

node1节点:

ONBOOT=yes
IPADDR=192.168.10.101
GATEWAY=192.168.10.2
DNS1=114.114.114.114

node2节点:

ONBOOT=yes
IPADDR=192.168.10.102
GATEWAY=192.168.10.2
DNS1=114.114.114.114

4、修改hosts文件

编辑/etc/hosts文件,配置主机名和IP地址的映射解析,这一步是为了方便节点间的相互访问,分别在三台主机下添加以下的配置:

192.168.10.100 master
192.168.10.101 node1
192.168.10.102 node2

image20240520170709336.png

5、测试虚拟机网络

通过Xshell ssh工具去连接对应的节点主机(其他的ssh连接工具都可以)

测试各个节点主机是否能够访问外网:

image20240520165627221.png

测试各个节点主机之间是否能够相互ping通

image20240521093230094.png

集群环境初始化

1、关闭防火墙

在三个节点上分别执行

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

2、关闭SELINUX

在三个节点上分别执行

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
SELINUX=disabled

注意:生效需要重启linux

3、关闭swap分区

在三个节点上分别执行

# 编辑/etc/fstab 文件,注释掉 /dev/mapper/centos-swap swap 这一行
# /dev/mapper/centos-swap swap

注意:生效需要重启linux

4、修改内核参数

在三个节点上分别执行

# 增加/etc/sysctl.d/kubernetes.conf 文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter

出现如下结果代表OK:

image20240520171923772.png

5、配置时间同步

在三个节点上分别执行

[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date

6、加载ipvs模块

在三个节点上分别执行

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
# 将以下脚本内容复制到命令行回车即可
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

image20240520172449932.png

# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

image20240520172602792.png

以上操作完成之后记得分别重启Linux主机!!!

sealos方式安装K8S集群

1、下载sealos

wget https://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz

2、解压赋予权限

tar zxvf sealos_4.3.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

3、安装K8S集群

sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
--masters 192.168.10.100 \
--nodes 192.168.10.101,192.168.10.102 -p root 

参数说明:

4、查看连接状态

在master节点上面执行kubectl get nodes命令查看master和node节点状态

[root@master ~]# kubectl get nodes

这里会显示 NotReady ,代表未就绪状态:

image20240520174057911.png

需要等待一会儿,节点状态会自动被修改为Ready:

image20240520174316804.png

kubeadm方式安装K8S集群

1、安装Docker

# 1、切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2、查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates

# 3、安装特定版本的docker-ce
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4、添加一个配置文件
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF> /etc/docker/daemon.json
{
	"exec-opts": ["native.cgroupdriver=systemd"],
	"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

# 5、启动dokcer
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

2、安装Kubernetes组件

# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源,编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
			http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 2、安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 3、配置kubelet的cgroup,编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 4、设置kubelet开机自启
[root@master ~]# systemctl enable kubelet

3、准备集群镜像

# 1、在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@master ~]# kubeadm config images list

# 2、下载镜像,此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
images=(
	kube-apiserver:v1.17.4
	kube-controller-manager:v1.17.4
	kube-scheduler:v1.17.4
	kube-proxy:v1.17.4
	pause:3.1
	etcd:3.4.3-0
	coredns:1.6.5
)

for imageName in ${images[@]};do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

4、master节点集群初始化

在master节点上面执行kubeadm init命令进行集群初始化

# 1、创建集群,这里192.168.119.100 指定为master主机的IP地址,其他的配置不用修改
[root@master ~]# kubeadm init \
	--kubernetes-version=v1.17.4 \
	--service-cidr=10.96.0.0/12 \
	--pod-network-cidr=10.244.0.0/16 \
	--apiserver-advertise-address=192.168.119.100 
# 2、创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

5、node节点连接master节点

在node1和node2节点上分别去连接master节点集群

kubeadm join 192.168.10.100:6443 --token c78u0z.tqyd4xh4tc2s084f     --discovery-token-ca-cert-hash sha256:783e7453cb11db521a7fc3661caa0ac5cf6c6fb153d7d95d222882af7aae94c7

6、查看连接状态

在master节点上面执行kubectl get nodes命令查看master和node节点状态

[root@master ~]# kubectl get nodes

这里会显示 NotReady ,代表未就绪状态,我们还需要安装网络插件

image20240520174057911.png

7、安装网络插件

在master节点上安装网络插件

# 1、下载flannel网络资源配置文件
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 2、启动flannel网络
[root@master ~]# kubectl apply -f kube-flannel.yml

# 3、再次查看节点状态
[root@master ~]# kubectl get nodes

这里启动flannel网络之后一般需要等待一会儿,节点状态会被修改为Ready:

image20240520174316804.png

集群环境测试

# 1、创建nginx服务
kubectl create deployment nginx  --image=nginx:1.14-alpine

# 2、暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 3、查看pod和服务信息
kubectl get pod,service

image20240521095116569.png

在本地电脑打开浏览器测试nginx是否能够正常访问:

image20240521095729889.png

5 操作
shakebabe 在 2024-05-23 15:54:26 更新了该帖
shakebabe 在 2024-05-22 11:28:32 更新了该帖
shakebabe 在 2024-05-22 11:21:21 更新了该帖
shakebabe 在 2024-05-22 11:08:16 更新了该帖 shakebabe 在 2024-05-22 11:04:19 更新了该帖
回帖
请输入回帖内容 ...