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 集群搭建完成。

相关推荐
Flying_Fish_roe24 分钟前
linux-安全管理-防火墙与网络安全
linux·数据库·oracle
Alone804630 分钟前
K8s中HPA自动扩缩容及hml
云原生·容器·kubernetes
不见长安见晨雾34 分钟前
Linux:vim编辑技巧
linux·编辑器·vim
神秘的土鸡1 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
TravisBytes2 小时前
linux 系统是如何收发数据包
linux·运维·服务器
HoweWWW2 小时前
k8s-API 访问控制
云原生·容器·kubernetes
德迅--文琪3 小时前
SCDN是服务器吗?SCDN防御服务器有什么特点?
运维·服务器
Alluxio官方3 小时前
Alluxio Enterprise AI on K8s 部署教程
人工智能·机器学习·kubernetes
ice___Cpu3 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
z202305083 小时前
linux 之0号进程、1号进程、2号进程
linux·运维·服务器