【亲测有效】k8s分布式集群安装部署

1.实验环境准备

准备三台centos7虚拟机,用来部署k8s集群:

master(hadoop1,192.168.229.111)配置:

操作系统:centos7.3以及更高版本都可以配置:4核cpu,4G内存,30G硬盘

网络:网络地址转换

node(hadoop2,192.168.229.112)配置:

操作系统:centos7.3以及更高版本都可以配置:4核cpu,4G内存,30G硬盘

网络:网络地址转换

2.初始化实验环境(所有节点)

2.1 配置静态IP

#查看网络信息

#配置静态IP

#重启网络服务

systemctl start network.service或者service network restart

#重启虚拟机

2.2 修改yum源

复制代码
#yum在线下载wgetyum -y install wget#备份原有yum源mv /etc/yum.repos.d/CentOS-Base.repo   /etc/yum.repos.d/CentOS-Base.repo.backup#下载阿里云yum源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo#生成新的yum缓存yum makecache fast#配置k8s需要的yum源cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0EOF#清理缓存yum clean all#生成新的yum缓存yum makecache fast#更新yum源yum -y update#安装软件依赖包yum -y install yum-utils device-mapper-persistent-data lvm2

备注:yum-utils是yum的安装工具包,可以简化安装过程中设置安装源的配置过程。docker内部容器如果需要进行数据存储,需要通过device-mapper-persistent-data和lvm2数据存储驱动来完成数据存储。

#添加新的docker软件源

复制代码
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum clean allyum makecache fast

2.3 安装基础软件包

复制代码
yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate

2.4 关闭防火墙

#查看防火墙状态

systemctl status firewalld

#停止并禁用防火墙

systemctl stop firewalld && systemctl disable firewalld

2.5 时钟同步

#查看时间类型

在hadoop1节点上输入date命令,可以查看到当前系统时间如下所示。

如果结果中系统时间为HKT(即香港时间),可以把时间改为CST(CST表示中部标准时间,即上海时间)。

#修改时间类型

使用shanghai时间来覆盖当前的系统默认时间,具体操作如下所示。

注意:上述操作在集群各个节点都要执行,保证当前系统时间标准为上海时间。

#配置 NTP 服务器

我们选择hadoop1节点来配置 NTP 服务器,集群其他节点定时同步hadoop1节点时间即可。

(1)检查 NTP 服务是否已经安装。

输入rpm -qa | grep ntp命令查看NTP服务是否安装,操作结果如下所示。

复制代码
[root@hadoop1 ~]# rpm -qa | grep ntpntp-4.2.6p5-12.el6.centos.2.x86_64ntpdate-4.2.6p5-12.el6.centos.2.x86_64

如果NTP服务已经安装,可以直接进行下一步,否则输入yum install -y ntp命令可以在线安装NTP服务。实际上就是安装两个软件, ntpdate-4.2.6p5-12.el6.centos.2.x86_64是用来和某台服务器进行同步的,ntp-4.2.6p5-12.el6.centos.2.x86_64ntp-4.2.6p5-1.el6.centos.x86_64 是用来提供时间同步服务的。

(2)修改配置文件ntp.conf

修改NTP服务配置,具体操作如下所示。

root@hadoop1 \~\]# vi /etc/ntp.conf #启用 restrict限定该机器网段,192.168.229.111为当前节点的IP地址 restrict 192.168.229.111 mask 255.255.255.0 nomodify notrap #注释掉 server 域名配置 #server 0.centos.pool.ntp.org iburst#server 1.centos.pool.ntp.org iburst#server 2.centos.pool.ntp.org iburst#server 3.centos.pool.ntp.org iburst #添加如下两行配置,让本机和本地硬件时间同步 server 127.127.1.0 fudge 127.127.1.0 stratum 10 (3)启动NTP服务 执行chkconfig ntpd on命令,可以保证每次机器启动时,NTP服务都会自动启动,具体操作如下所示。 \[root@hadoop1 \~\]# chkconfig ntpd on ![](https://i-blog.csdnimg.cn/blog_migrate/135e0f87c69faf0f40ee828e2fa8edc0.png) (4)配置其他节点定时同步时间 hadoop2节点通过Linux crontab 命令,可以定时同步hadoop1节点的系统时间,具体操作如下所示。 \[root@hadoop2 \~\]# crontab -e #表示每个10分钟进行一次时钟同步 0-59/10 \* \* \* \* /usr/sbin/ntpdate hadoop1 备注:hadoop2节点也需要使用yum install -y ntp命令安装NTP服务,才能使用ntpdate时间同步命令。 **2.6 关闭selinux** #关闭selinux vi /etc/sysconfig/selinux ![](https://i-blog.csdnimg.cn/blog_migrate/c0effe135838a6b0d79a2bb722cb7d11.png) #重启虚拟机 reboot #查看配置结果 getenforce **2.7 关闭交换分区** #设置开机自动关闭分区 swapoff -a #设置永久禁用分区,打开/etc/fstab文件注释掉带有swap sed -i 's/.\*swap.\*/#\&/' /etc/fstab **2.8 修改内核参数** #开启网络参数 cat < /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF #手动加载所有的配置文件 sysctl --system **2.9 修改主机名** #通过/etc/hostname文件修改节点主机名 vi /etc/hostname hadoop1 **2.10 配置hosts文件** [root@hadoop1 ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.229.111 hadoop1192.168.229.112 hadoop2 **2.11 ssh免密登录** 1.在root用户下,配置节点本身ssh免密 #生成密钥对 ssh-keygen -t rsa #将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中 cd .ssh/ cp id_rsa.pub authorized_keys #为.ssh目录及文件赋予相应的权限 cd .. chmod 700 .ssh chmod 600 .ssh/\* #ssh免密登录 ssh hadoop1 2.实现集群节点间ssh免密登录 #将hadoop2的公钥id_ras.pub复制到hadoo01中的authorized_keys文件中 cat \~/.ssh/id_rsa.pub \| ssh root@hadoop1 'cat \>\> \~/.ssh/authorized_keys' #将hadoop1中的authorized_keys文件分发到hadoop2节点 scp -r \~/.ssh/authorized_keys root@hadoop2:\~/.ssh/ #hadoop1 ssh免密登录hadoop2 ssh hadoop2 **3.docker安装部署(所有节点)** **3.1 查看支持哪些docker版本** yum list docker-ce --showduplicates \|sort -r **3.2 安装docker社区版** yum -y install docker-ce-20.10.7-3.el7 **3.3 设置开机启动docker** systemctl enable docker \&\& systemctl start docker **3.4 查看docker运行状态** systemctl status docker **3.5 修改docker配置** #设置更多镜像地址 cat > /etc/docker/daemon.json < /proc/sys/net/bridge/bridge-nf-call-iptablesecho 1 >/proc/sys/net/bridge/bridge-nf-call-ip6tablesecho """vm.swappiness = 0net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1net.bridge.bridge-nf-call-ip6tables = 1""" > /etc/sysctl.conf#加载配置sysctl -p **3.8 开启ipvs** #不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核 cat > /etc/sysconfig/modules/ipvs.modules < /dev/null 2>&1if [ $? -eq 0 ]; then/sbin/modprobe \${kernel_module}fidoneEOF#修改执行权限并执行chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs **3.9 安装cri-docker** Docker通过cri-docker软件与k8s进行整合。​​​​​​​ #下载cri-dockerwget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.6/cri-dockerd-0.2.6-3.el7.x86_64.rpm#安装cri-dockerrpm -ivh cri-dockerd-0.2.6-3.el7.x86_64.rpm#重载沙箱(pause)镜像vi /usr/lib/systemd/system/cri-docker.serviceExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8 --container-runtime-endpoint fd://#启动并设置开机重启cri-dockersystemctl start cri-dockersystemctl enable cri-docker **4.k8s安装部署(所有节点)** **4.1 安装kubectl、kubelet、kubeadm组件** #指定版本下载 yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0 **4.2 启动kubelet并设置为开机启动** systemctl enable kubelet systemctl start kubelet **4.3 主节点部署k8s master(仅主节点)** #初始化k8s集群(cpu核必须大于1) ​​​​​​​ kubeadm init \--apiserver-advertise-address=192.168.229.111 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.25.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--cri-socket unix:///var/run/cri-dockerd.sock# 对于root用户, 直接添加变量即可开始使用集群echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profilesource ~/.bash_profile **4.4 加入k8s集群(仅从节点)** # 这段话是在主节点kubeadm init时复制过来的, 注意添加--cri-socket​​​​​​​ kubeadm join 192.168.229.111:6443 --token q1asjl.zb0ihzewm7ilx895 \--discovery-token-ca-cert-hash sha256:8b30a783d6398b178a8c241380bc63ac4b728730d9f344fc1ebee8d61900fadf \--cri-socket unix:///var/run/cri-dockerd.sock#查看k8s集群节点kubectl get nodes#查看系统默认podskubectl get pods -n kube-system **4.5 安装网络插件calico** Calico网络插件可以实现跨主机间容器通信 # 下载 Pod 网络插件(CNI) wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate #下载calico镜像压缩包,收到上传至每台主机 calico\~kube\~controllers\~v3.24.3.tar.gz calico\~cni\~v3.24.3.tar.gz calico\~node\~v3.24.3.tar.gz 备注:calico插件下载经常失败,加微信提供网盘下载链接。 #每个节点手动通过docker离线加载镜像 docker load -i calico\~cni\~v3.24.3.tar.gz docker load -i calico\~kube\~controllers\~v3.24.3.tar.gz docker load -i calico\~node\~v3.24.3.tar.gz #查看calico是否安装成功 docker images \| grep calico #在master节点执行命令进行calico插件安装 kubectl apply -f calico.yaml **4.6 查看节点状况** #在主节点执行命令看集群是否成功 kubectl get node -o wide 备注:如果status列中的状态都为ready,表明集群安装成功。 **5.部署Dashboard(仅主节点)** **5.1 部署Dashboard** #部署 Dashboard UI * kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml #设置访问端口,找到 type: ClusterIP 改为 type: NodePort kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard #查看端口 kubectl get svc -A \|grep kubernetes-dashboard #访问:https://集群任意IP:端口 进入登录界面 https://192.168.229.111:30178 **5.2 创建访问账号** ​​​​​​​ # 准备一个yaml文件vi dashuser.yamlapiVersion: v1kind: ServiceAccountmetadata:name: admin-usernamespace: kubernetes-dashboard---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: admin-userroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard#创建访问账号kubectl apply -f dashuser.yaml **5.3 令牌访问** # 获取访问令牌 kubectl -n kubernetes-dashboard create token admin-user # 现在复制令牌并将其粘贴到登录屏幕上的Enter令牌字段中 **5.4 登录成功** #看到如下界面说明Dashboard部署成功 **6.测试k8s集群(仅主节点)** ​​​​​​​ # 创建Nginx容器kubectl create deployment nginx --image=nginx#暴露端口kubectl expose deployment nginx --port=80 --type=NodePort查看podkubectl get pod,svc# 访问地址(http://NodeIP:Port)http://192.168.229.111:30985/重要!重要!重要!添加下方二维码获取相关资料。

相关推荐
LuckyRich13 小时前
【RabbitMq C++】消息队列组件
c++·分布式·rabbitmq
hwj运维之路10 小时前
k8s监控方案实践(三):部署与配置Grafana可视化平台
云原生·kubernetes·grafana
yt9483210 小时前
Docker-基础(数据卷、自定义镜像、Compose)
运维·docker·容器
Hfc.10 小时前
docker-daemon.json
docker·容器·json
和计算机搏斗的每一天10 小时前
k8s之探针
云原生·容器·kubernetes
IvanCodes11 小时前
五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)
大数据·hadoop·分布式
Panesle14 小时前
分布式异步强化学习框架训练32B大模型:INTELLECT-2
人工智能·分布式·深度学习·算法·大模型
计算机毕设定制辅导-无忧学长14 小时前
RabbitMQ 核心概念与消息模型深度解析(一)
分布式·rabbitmq
项目題供诗16 小时前
黑马k8s(四)
云原生·容器·kubernetes