1、在所有节点上进行初始化配置:
①、修改主机名(Master、node1、node2)、修改hosts表、关闭selinux、清空防火墙、关闭firewalld服务(或者放行相应的端口);永久关闭swap,配置离线yum仓库;
注:防火墙不能关闭,网络要使用iptables进行报文转发;要永久关闭swap,需要直接将 /etc/fstab文件中的swap行注释掉。
[root@master ~]# iptables -F
[root@master ~]# iptables -t nat -F
#此命令为临时关闭swap,如果要永久关闭,可修改fstab文件
[root@master ~]# swapoff -a
②、修改内核参数,加载内核模块
[root@master ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@master ~]# sysctl -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@master ~]# vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- br_netfilter
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
[root@master ~]# chmod 777 /etc/sysconfig/modules/ipvs.modules
[root@master ~]# sh /etc/sysconfig/modules/ipvs.modules
[root@master ~]# lsmod | grep -E "ip_vs|nf_conntrack_ipv4"
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack_ipv4 15053 1
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_conntrack 139264 9 ip_vs,nf_nat...,nf_conntrack_ipv6
libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
③、在所有节点上部署Docker,并修改daemon.json文件,使用私有镜像仓库;
[root@master ~]# vim /etc/yum.repos.d/k8s.repo
[docker-ce]
name=docker-ce
baseurl=http://master/docker-ce
enabled=1
gpgcheck=0
[kubernetes]
name=kubernetes
baseurl=http://master/kubernetes
enabled=1
gpgcheck=0
[root@master ~]# dnf remove podman #卸载Podman
[root@master ~]# dnf remove buildah #卸载Container依赖项
[root@master ~]# dnf install docker-ce
[root@master ~]# vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
#设置log驱动为json,日志最大100M,日志文件数量最多10个(Node级别的日志)
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
},
"registry-mirrors":["192.168.100.11:5000"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
④、安装kubeadm、kubelet、kubectl,并添加命令补全;此处使用离线yum仓库
[root@master ~]# dnf repolist all
[root@master ~]# dnf install -y kubeadm-1.20.2 kubelet-1.20.2 kubectl-1.20.2
#补全kubeadm命令操作
[root@master ~]# source <(kubeadm completion bash)
[root@master ~]# echo "source <(kubeadm completion bash)" >> /etc/profile
#补全kubectl命令操作
[root@master ~]# source <(kubectl completion bash)
[root@master ~]# echo "source <(kubectl completion bash)" >> /etc/bashrc
2、在master节点上完成初始化配置:
①、将所有的tar包上传至系统;创建私有镜像仓库,并将Kubernetes核心镜像推送到离线仓库中;
[root@master ~]# ls
anaconda-ks.cfg kubernetes-cores registry.tar
#创建一个私有仓库
[root@master ~]# docker load -i registry.tar
[root@master ~]# docker run -d --name registry --restart always -v /var/lib/registry:/var/lib/registry -p 5000:5000 registry:latest
#将所有的Kubernetes-cores核心镜像tar包加载为镜像(包括kube-flannel网络插件、测试镜像nginx、httpd、mariadb),并重新tag;上传到私有仓库中(以kube-apiserver为例)
[root@master ~]# docker load -i kube-apiserver.tar
[root@master ~]# docker tag .../google_containers/kube-apiserver:v1.20.2 <MASTER_IP>/kubernetes/kube-apiserver:v1.20.2
[root@master ~]# docker push <MASTER_IP>/kubernetes/kube-apiserver:v1.20.2
②、使用kubeadm初始化master节点,并添加环境变量使得可以补全kubectl命令;
[root@master ~]# kubeadm init --kubernetes-version 1.20.2
--image-repository <MASTER_IP>/kubernetes
--service-cidr=10.96.0.0/16
--pod-network-cidr=10.244.0.0/16
...
#安装完成后根据提示操作
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
注:①、service-cidr,虚拟网络地址段,用于为 Kubernetes 集群之中的 Service 配置 IP 地址(地址不会配置在任何接口上,是个虚拟IP),通过 Node 之上的 kube proxy 配置为 iptables或者ipvs 规则,从而将发往此地址的所有流量调度至其后端的各 Pod 对象。该网段在初始化集群时指定,用户创建Service时会动态配置该网段的IP地址;②、pod-network-cidr,虚拟网络地址段,用于为各 Pod 对象设定 IP 地址等网络参数,其地址配置于 Pod 中容器的网络接口之上,需要借助CNI网络插件来完成配置。
③、安装网络插件,首先从网盘下载kube-flannel.yml文件;修改网络插件的镜像源,地址为私有镜像仓库,注意要保证yml文件中flannel的镜像地址及版本号与仓库中的完全一致,即为 flannel:0.14.0
注:flannel 镜像文件的备用镜像站为 quay.mirrors.ustc.edu.cn/coreos 。
#修改image地址
[root@master ~]# vim kube-flannel.yml
...
image: <MASTER_IP>/kubernetes/flannel:v0.14.0
#执行部署
[root@master ~]# kubectl apply -f kube-flannel.yml
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-flannel-ds-52kf9 1/1 Running 0 109s
3、添加node节点到cluster集群当中:
①、首先要在master节点上,创建一个用于加入cluster的token,使得node节点能够使用该token加入到集群中;token生成之后根据提示,将node节点加入到cluster中;
[root@master ~]# kubeadm token create --print-join-command
#将生成的kubeadm join命令复制到所有的node节点上执行加入
kubeadm join ...
--token 1szck...2m0zc9
--discovery-token-ca-cert-hash sha256:97d152...623598
②、将node节点加入到集群中,并在master节点上验证集群中的节点。
注:如果node在flannel网络插件安装之后加入到集群时,可能会提示镜像拉取失败,需要查看master节点的registry镜像仓库是否工作正常。
[root@node1 ~]# kubeadm join ...
--token 1szckp....5s62m0zc9 --discovery-token-ca-cert-hash sha256:97...623598
...
This node has joined the cluster:
...
#如果节点状态为NotReady,就要查看node节点是否能从Master节点获取到flannel镜像
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 112m v1.20.2
node1 Ready <none> 13s v1.20.2
4、清理环境
①、master节点
[root@master ~]# rm -rf /etc/kubernetes
[root@master ~]# rm -rf /var/lib/kubelet
[root@master ~]# rm -rf /etc/cni/*
[root@master ~]# rm -rf /run/flannel
[root@master ~]# rm -rf /var/lib/etcd
[root@master ~]# kubeadm reset
[root@master ~]# rpm -e kubelet kubectl kubeadm kubernetes-cni
②、node节点
[root@node1 ~]# kubeadm reset
[root@node1 ~]# systemctl stop kubelet
[root@node1 ~]# rm -rf /var/lib/kubelet /etc/kubernetes ~/.kube
由于部署过程中涉及到大量的离线镜像,有需要的可以私信博主免费获取!