Linux搭建Kubernetes集群(单Master)【附图文】

文章目录

一、集群环境配置要求

master 节点:

  • CPU 两核及以上

  • 内存 4G 及以上

  • 硬盘 20G 及以上
    node 节点(配置要求会更高):

  • CPU 四核及以上

  • 内存 8G 及以上

  • 硬盘 40G 及以上

二、主机准备

准备三台虚拟机,分别安装Red Hat系统,一台作为 master 节点,另两台作为 node 节点,且每台虚拟机有自己的专属 IP 地址。

hostname IP
Master节点 master 192.168.80.40
Node节点 node01 192.168.80.39
Node节点 node02 192.168.80.55

Red Hat7.9镜像下载地址

链接:https://pan.baidu.com/s/1AO_iDLgFCGymHHy9CKrqiA?pwd=c2ne

提取码:c2ne

虚拟机创建和配置注意事项:

  • 硬件最少达到以上最低标准配置;
  • 三台虚拟机的网络连接选择一样的模式;
  • 创建时禁止swap分区(安装时如果没有禁止swap分区,后续通过命令禁止);
  • 创建完成确保虚拟机可以访问外网,以便下载镜像;
  • 安装weget工具(yum intsall weget);

三、初始环境准备

以下在三个节点都执行(只截取其中一个节点作为示例)

1.修改主机名和host文件

powershell 复制代码
#修改三台主机名
hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02

#配置三台主机hosts文件
vim /etc/hosts
#在文件中加入
192.168.80.40 master
192.168.80.39 node01
192.168.80.55 node02

2.关闭防火墙

bash 复制代码
#临时关闭
systemctl stop firewalld
#永久关闭
systemctl disable firewalld

3.关闭 selinux

powershell 复制代码
#临时关闭
setenforce 0
#永久关闭
sed -i '/selinux/s/enforcing/disabled/' /etc/selinux/config

4.关闭swap

powershell 复制代码
#临时关闭
swapoff -a

#永久关闭
vi /etc/fstab  # 将swap一行注释
powershell 复制代码
#关闭当前的 swap
swapoff -a 
#验证 swap 是否已关闭
cat /proc/swaps
#如果输出为空,则表示 swap 已关闭

4.加载 br_netfilter 模块

powershell 复制代码
#load mod
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

5.允许iptables转发流量

powershell 复制代码
#允许iptables转发流量
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF

#使其生效
sysctl --system

#检查iptables设置为接受
iptables-save |grep DROP

6.设置时间同步

powershell 复制代码
yum install ntpdate -y
ntpdate time.windows.com

这里如果报错:

需要配置DNS服务器:

powershell 复制代码
vi /etc/resolv.conf

#Generated by NetworkManager  
nameserver 114.114.114.114  
nameserver 8.8.8.8   
nameserver 8.8.4.4

四、安装Docker

三个节点都需要安装(只截取其中一个节点作为示例)

powershell 复制代码
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#替换文件中每一行里所有的 $releasever 为 7
vi CentOS-Base.repo
#按 Esc 键回到命令模式,输入以下命令进行替换
:%s/$releasever/7/g
($releasever在CentOS中可以自动解析为对应版本,但是redhat不支持自动解析,需要手动替换 备份原yum文件)

#安装docker
yum install -y docker-ce-19.03.15-3.el7
#安装完成查看docker版本
docker -v

# config docker server 
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": [
  "0.0.0.0/0"
],
"registry-mirrors": ["https://otvjuhk6.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
  "max-size": "100m"
},
"live-restore": true,
"storage-driver": "overlay2",
"storage-opts": [
  "overlay2.override_kernel_check=true"
]
}
EOF

# start docker
systemctl enable docker && systemctl start docker

五、安装kubeadm, kubectl, kubelet

三个节点都安装(只截取其中一个节点作为示例)

powershell 复制代码
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet-1.18.17 kubeadm-1.18.17 kubectl-1.18.17 
systemctl enable kubelet && systemctl start kubelet

六、在Master节点部署集群

在 master 节点中执行以下命令,将apiserver-advertise-address 和kubernetes-version修改为自己的Master节点IP和kube 版本号。

powershell 复制代码
kubeadm init \
--apiserver-advertise-address=192.168.80.40 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.17 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

执行完成后会生成两条命令:

使用命令docker images查看系统中的镜像,可以看到我们需要的镜像均已安装完成。

七、将 node 节点加入集群

执行上一步输出的两条命令:
1.开启 kubectl 工具的使用(该命令在master节点中执行)

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

2.将 node 节点加入 master 中的集群(该命令在两个工作节点node中执行)

powershell 复制代码
kubeadm join 192.168.80.40:6443 --token hmyqja.2xhx66gzlcbqrbkx \
    --discovery-token-ca-cert-hash sha256:f176209fbc7b2310a6f5251f3d7445ef3786aa5fc241c384627597da6394327a


执行完成后在master节点使用kubectl get nodes查看此时集群中的工作节点状态,可以看到node1 和 node2 工作节点已加入至 master 中的集群,但是状态都是NotReady。

在master节点使用kubectl get pods -n kube-system命令查看运行状态,可以看到有两个pod是处于Pending,因为没有安装网络组件。

八、部署 CNI 网络插件

在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。

在master节点中执行以下命令:

powershell 复制代码
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml

再次查看运行状态已全部running:

powershell 复制代码
kubectl get pods -n kube-system

再次查看节点状态已全部Ready:

powershell 复制代码
kubectl get nodes

Kubernetes 集群搭建完成。

相关推荐
不知 不知21 分钟前
最新-CentOS 7 基于1 Panel面板安装 JumpServer 堡垒机
linux·运维·服务器·centos
BUG 40429 分钟前
Linux--运维
linux·运维·服务器
千航@abc35 分钟前
vim在末行模式下的删除功能
linux·编辑器·vim
MXsoft6181 小时前
华为E9000刀箱服务器监控指标解读
大数据·运维
贾贾20231 小时前
配电网的自动化和智能化水平介绍
运维·笔记·科技·自动化·能源·制造·智能硬件
元气满满的热码式1 小时前
K8S中ingress详解
云原生·容器·kubernetes
发光小北2 小时前
关于六通道串口服务器详细讲解
运维·硬件工程
jcrose25802 小时前
Ubuntu二进制部署K8S 1.29.2
linux·ubuntu·kubernetes
爱辉弟啦2 小时前
Windows FileZila Server共享电脑文件夹 映射21端口外网连接
linux·windows·mac·共享电脑文件夹
matrixlzp2 小时前
K8S 启动探测、就绪探测、存活探测
云原生·容器·kubernetes