第一部分:系统安装,用MobaXterm连接
01
新建3台虚拟机
设置如下
操作系统centos7.9(core)2C 2G 20G
master(192.168.3.160)
node1(192.168.3.161)
node2(192.168.3.162)
node3(192.168.3.163)

提前将iso文件上传至data,光驱选择centos系统文件

更改时区、支持语言、最小安装、默认分区设置

设置静态ip、主机、网卡名

安装

其他三台node节点服务器,按照相同的步骤完成安装备用。
MobaXterm的安装省略!设置登录账户密码信息

登录192.168.3.160~163虚机

全部登录后,可使用MobaXterm工具带的Muti-execution功能批量命令行操作!


第二部分:设置系统环境安装docker
01
主机名解析(以下命令 所有节点都要执行)
编辑三台服务器的 etc/hosts 文件 ,添加下面内容:
192.168.3.160 master
192.168.3.161 node1
192.168.3.162 node2
192.168.3.163 node3
02
时间同步chrony
使用 rpm -qa |grep chrony 查看系统是否已安装chrony,没有安装环境可使用
yum install chronysystemctl start chronydsystemctl enable chronyddate

03
禁用selinux和firewalld服务
systemctl stop firewalldsystemctl disable firewalldsystemctl status firewalld 查看防火墙状态sed -i 's/enforcing/disabled/' etc/selinux/config #重启后生效

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
编辑分区配置文件/etc/fstab,注释掉swap分区一行 # 注意修改完毕之后需要重启linux服务
04
关闭swap
vi etc/fstab#注释掉下面的设置 dev/mapper/centos-swap swap

05
添加网桥过滤和地址转发功能
cat <<EOF | sudo tee etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOF# 应用 sysctl 参数而不重新启动sudo sysctl --system

06
docker安装
#安装docker依赖yum install -y yum-utils#设置docker仓库镜像地址yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装下载docker yum install docker-ce docker-ce-cli containerd.io#设置docker开机启动systemctl enable docker && systemctl start docker重启docker服务systemctl restart docker

第三部分:安装k8s
01
kubernetes镜像切换成国内源
cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
02
安装 kubeadm,kubelet 和 kubectl
yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y
#设置kubelet开机启动
systemctl enable kubelet.service
查看有没有安装:
yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl
查看安装的版本:kubelet --version
此时应该重启一下centos;
Kubelet:运行在cluster所有节点上,负责启动POD和容器;
Kubeadm:用于初始化cluster的一个工具;
Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件;
第四部分:部署Kubernetes
下面的操作只需要在master节点上执行即可(初始化完成后,最后会输出一个join命令,可以先保存后面会用)
01
在master主机上运行
kubeadm init --apiserver-advertise-address=192.168.3.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
–apiserver-advertise-address #集群通告地址(master 机器IP)
–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version #K8s版本,与上面安装的一致
–service-cidr #集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致
会报以下错误

解决方法,下载coredns/coredns,改名后,重新运行
先重启
daemon systemctl daemon-reloadsystemctl restart docker.servicedocker pull coredns/corednsdocker tag docker.io/coredns/coredns k8s.gcr.io/coredns/coredns:v1.8.0
再次运行
kubeadm init --apiserver-advertise-address=192.168.3.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
提示安装成功!把join内容先记录下来
kubeadm join 192.168.3.160:6443 --token mk7699.s26ez7olybm1vc1s --discovery-token-ca-cert-hash sha256:262f1c27c206ea157b04c69d1c1dd93aca7fef53e4da731aad2dbd97168841a0
接下来在master机器上执行:拷贝kubectl使用的连接k8s认证文件到默认路径:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点
kubectl get nodes
发现status状态为NotReady

安装下面的容器
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
再次查看状态,已变为Ready
Node节点加入集群(3个node节点)
在192.168.3.161、
162、
163(Node节点) 执行 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
kubeadm join 192.168.3.160:6443 --token mk7699.s26ez7olybm1vc1s --discovery-token-ca-cert-hash sha256:262f1c27c206ea157b04c69d1c1dd93aca7fef53e4da731aad2dbd97168841a0
如果还是报错,同样下载上文中的容器即可解决!

最后查看节点是否已经添加,K8s部署完毕!

如上图,可以用下面代码修改节点的标签
kubectl label no node2 kubernetes.io/role=xxx




