文章目录
- 一、集群环境配置要求
- 二、主机准备
- 三、初始环境准备
- 1.关闭防火墙
- 2.关闭 selinux
- 3.关闭swap
- 4.加载 br_netfilter 模块
- 5.允许iptables转发流量
- 6.设置时间同步
- 四、安装Docker
- 五、安装kubeadm, kubectl, kubelet
- 六、在Master节点部署集群
- 七、将 node 节点加入集群
- 八、部署 CNI 网络插件
一、集群环境配置要求
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.关闭防火墙
#临时关闭
systemctl stop firewalld
#永久关闭
systemctl disable firewalld
2.关闭 selinux
#临时关闭
setenforce 0
#永久关闭
sed -i '/selinux/s/enforcing/disabled/' /etc/selinux/config
3.关闭swap
#临时关闭
swapoff -a
#永久关闭
vi /etc/fstab # 将swap一行注释
#关闭当前的 swap
swapoff -a
#验证 swap 是否已关闭
cat /proc/swaps
#如果输出为空,则表示 swap 已关闭
4.加载 br_netfilter 模块
#load mod
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
5.允许iptables转发流量
#允许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.设置时间同步
yum install ntpdate -y
ntpdate time.windows.com
这里如果报错:
需要配置DNS服务器:
vi /etc/resolv.conf
#Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8
nameserver 8.8.4.4
四、安装Docker
三个节点都需要安装(只截取其中一个节点作为示例)
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
三个节点都安装(只截取其中一个节点作为示例)
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 版本号。
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节点中执行)
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中执行)
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节点中执行以下命令:
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
再次查看运行状态已全部running:
kubectl get pods -n kube-system
再次查看节点状态已全部Ready:
kubectl get nodes
Kubernetes 集群搭建完成。