当前位置: 首页 > ai >正文

【特别版】Kubernetes集群安装(1master,2node)

Kubernetes集群安装

虚拟机准备

按照三台虚拟机标准,一台控制节点两台工作节点

主机名ip配置要求
master-k8s192.168.242.102GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
node01-k8s192.168.242.112GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
nide02-k8s192.168.242.122GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多

系统初始化配置(三台节点相同)

关闭防火墙(不赘述)

关闭 selinux (不赘述)

关闭swap

swapoff -a # 临时关闭vi /etc/fstab #永久关闭 
注释swap开机挂载行 sed -i 's/.swap./#&/' /etc/fstab

设置时间同步

yum install ntpdate -y
ntpdate us.pool.ntp.org
hwclock -w

每台主机添加hosts:

cat >> /etc/hosts << EOF
192.168.242.10 master-k8s
192.168.242.11 node01-k8s
192.168.242.12 node02-k8s
EOF

到这里最好重启一下系统

所有节点安装Docker/kubeadm/kubelet/kubectl

安装Docker(所有节点)

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 看一下可用版本
yum list docker-ce --showduplicates |sort -r
# 安装20版本的docker与客户端
yum -y install docker-ce-20* docker-ce-cli-20*
# 设置docker自启动
systemctl enable docker && systemctl start docker
docker --version

配置Docker加速镜像

vi /etc/docker/daemon.json# 写入以下格式的镜像地址(可用镜像需自行测试是否可用)
{ "registry-mirrors": ["https://docker.xuanyuan.me/"] }# 重启docker
systemctl daemon-reload
systemctl restart docker# 查看生效的镜像(如果生效,会列出生效的镜像地址)
docker info | grep -i -A5 'Registry Mirrors'

安装docker命令补全(可选)

yum install bash-completion -ycurl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-composesource /etc/bash_completion.d/docker-compose## exit后重新登入即可使用docker命令补全

将桥接的IPv4流量传递到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
vm.swappiness = 0
EOF# 加载br_netfilter模块
modprobe br_netfilter# 查看是否加载
lsmod | grep br_netfilter# 生效
sysctl --system  

在这里插入图片描述

安装kubeadm,kubelet和kubectl(所有节点)

# 添加yum源
vi /etc/yum.repos.d/kubernetes.repo[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0# 更新yum源
yum clean all
yum makecache fast#  安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
systemctl restart kubelet
systemctl enable kubelet

主节点配置

ssh密钥生成并分发

# 生成密钥
ssh-keygen -t rsa# 分发密钥给工作节点
ssh-copy-id -i .ssh/id_rsa.pub root@node01-k8s
ssh-copy-id -i .ssh/id_rsa.pub root@node02-k8s

部署Kubernetes Master(这一步建议所有节点都做一遍,因为下面很快就会看到血淋淋的教训了!!!)

# 下载依赖(因为实测直接运行下面会提示缺少google_containers……这个镜像,可能是没有1.8.0版本,所以直接手动pull一个,改一下标签名)
docker pull coredns/coredns:1.8.0#  将coredns/coredns:1.8.0 镜像标记为google_containers……docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0# 这里网络较慢,请耐心等待……

指定阿里云镜像仓库地址

# apiserver-advertise-address值是主机的ip,其他的无需更改kubeadm init \--apiserver-advertise-address=192.168.242.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.21.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16# 这里网络较慢,请耐心等待……

根据提示信息,在Master节点上运行命令

在这里插入图片描述

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

!!!重要提示,上一部完成的时候末尾会显示一个token,请保管好,一会儿添加节点这是凭证!!!

在这里插入图片描述

工作节点配置(所有工作节点)

# 在daemon.json文件中指定驱动
cat /etc/docker/daemon.json{"registry-mirrors": ["https://docker.xuanyuan.me/"],"exec-opts":["native.cgroupdriver=systemd"]}# 确定文件如上含有"exec-opts":["native.cgroupdriver=systemd"]即可。# 重启docker
systemctl restart docker
# 看一下状态,确定上面配置文件没错,docker正常运行
systemctl status docker

将工作节点加入Kubernetes Node(请输入自己的token)

# 所有工作节点均粘贴此命令
kubeadm join 192.168.242.10:6443 --token y868jj.hoknpgwpykqodf41 \--discovery-token-ca-cert-hash sha256:af0db6d53cb1bc5cf66f7fa2cc86f5221c6bca9c5682075c61a88d6bf7c8198e

!!!!!这一步卡住不动的,一定一定要检查自己的防火墙和selinux是否关闭!!!!!!

在主节点上将/etc/kubernetes/admin.conf文件copy到工作节点上

# 主节点上copy文件
scp /etc/kubernetes/admin.conf node01-k8s:/etc/kubernetes/
scp /etc/kubernetes/admin.conf node02-k8s:/etc/kubernetes/# 分别在每个node上运行以下命令:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

加入成功在三台机器上运行kubectl get nodes都会有如下效果**(!!!注意,你的应该是node01和node02状态是Ready,我这里出错了)**

注意,每台机器上都是一样的才说明没问题,某一台不是下图这种就说明有问题!!!

在这里插入图片描述

安装Pod网络插件(主节点)

# 可能需要魔法,如果下载不了就下载到本地后上传服务器wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml# 注意这里网络可能不好,可以检查一下下载网速,可以看出是在下载中。kubectl get pods -n kube-system也可以看到前两个pod的状态是Pending

如果这里状态变为ImagePullBackOff可以看一下自己的pod详细描述,这里举一个例子

在这里插入图片描述

上面显示ImagePullBackOff,说明有问题,可以使用kubectl describe pod coredns-545d6fc579-rddhk -n kube-system命令进行查看(注意换成自己的pod名)

在这里插入图片描述

可以看到coredns的pod被调度到k8s-node01上了,而这个节点没有对应的镜像,也就是下面图中我说过的,建议都做一遍(为什么现在才说,因为本人忘记配置了,在这里报错后才想起来,括号里的字也是这时候补上的,懒得调整格式了)

在这里插入图片描述

ok,做完这一切,完全恢复正确了。

在这里插入图片描述

这里可以看见master状态也是Ready

在这里插入图片描述

安装命令补全工具(可以Tab补齐命令!)

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

!!一定要看!!

集群搭建完结撒花(本文最后两张图的所有STATUS务必是Running和Ready,这才代表你可以完结撒花)
http://www.xdnf.cn/news/4675.html

相关文章:

  • 蓝绿发布与金丝雀发布
  • 系统架构设计-真题2024下半年总结
  • Android 位掩码操作(和~和|的二进制运算)
  • 【MySQL】(10)用户和权限管理
  • 基于CNN与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
  • 面试问题总结(回忆版)
  • Matter协议,智能家居生态平台的“共生契约”
  • 【Redis】持久化与事务
  • 机器学习与深度学习
  • 图表制作-折柱混合
  • 【办公类-99-05】20250508 D刊物JPG合并PDF便于打印
  • TensorFlow 2.x入门实战:从零基础到图像分类项目
  • 【数据融合实战手册·应用篇】“数字孪生+视频融合”让智慧城市拥有空间感知
  • 手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复
  • 美团、京东、阿里博弈下的冷思考
  • leetcode0279. 完全平方数-medium
  • 手写 Vue 源码 === 依赖清理机制详解
  • 使用 merge_asof 实现高效的时间序列匹配(无需循环)
  • rest_framework学习之认证 权限
  • 【软件设计师:数据库】13.数据库控制与安全
  • vite 代理 websocket
  • 稳定性_李雅普诺夫——Lyapunov直接法
  • 网络靶场基础知识
  • 是更换Window资源管理器的时候了-> Files-community/Files
  • 涨薪技术|0到1学会性能测试第53课-Tomcat配置
  • Python中的re库详细用法与代码解析
  • 在Lua中使用轻量级userdata在C/C++之间传递数据和调用函数
  • 探讨关于智能体(Agent)结合 Dify、大语言模型(LLM)以及 Qwen-3 模型的项目或概念
  • C++-缺省参数
  • 如何在Jmeter中调用C程序?