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

发布于 更新于
本文目录
  1. 集群环境准备
  2. 1、集群环境说明
  3. 2、配置节点主机名
  4. 3、配置节点网络
  5. 4、修改hosts文件
  6. 5、测试虚拟机网络
  7. 集群环境初始化
  8. 1、关闭防火墙
  9. 2、关闭SELINUX
  10. 3、关闭swap分区
  11. 4、修改内核参数
  12. 5、配置时间同步
  13. 6、加载ipvs模块
  14. sealos方式安装K8S集群
  15. 1、下载sealos
  16. 2、解压赋予权限
  17. 3、安装K8S集群
  18. 4、查看连接状态
  19. kubeadm方式安装K8S集群
  20. 1、安装Docker
  21. 2、安装Kubernetes组件
  22. 3、准备集群镜像
  23. 4、master节点集群初始化
  24. 5、node节点连接master节点
  25. 6、查看连接状态
  26. 7、安装网络插件
  27. 集群环境测试

技术文章持续集成与运维

在学习和使用Kubernetes过程中,K8S环境搭建是新手非常头疼的一环,K8S提供了多种安装的方式包括Minikube、kubeadm、Rancher、sealos等,目前比较常见的是采用kubeadm和sealos方式进行安装,sea

在学习和使用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通

集群结构:

  • kubernetes集群主要包含master(主控节点)和node(工作节点)组成,master和node一般是多对多或者一对多的模式,

  • 为了学习使用这里选择1个master节点和多个node节点(这里一个节点相当于就是一台Linux系统主机)

    部署集群图如下:

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

参数说明:

  • --masters master 节点地址列表

  • –nodes node 节点地址列表

  • -p ssh登录密码(如果配置了ssh免密则不需要加-p参数)

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

来源:testingpai

继续阅读