kubeadm 快速搭建 Kubernetes 集群

news/2025/1/7 16:31:53/文章来源:https://www.cnblogs.com/xiang-tola/p/18654536

快速搭建 K8s 集群

角色 ip
k8s-master-01 192.168.111.170
k8s-node-01 192.168.111.171
k8s-node-02 192.168.111.172

服务器需要连接互联网下载镜像

软件 版本
Docker 24.0.0(CE)
Kubernetes 1.28

初始化配置

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭Selinux

sed -i 's/enforcing/disabled/' /etc/selinux/configsetenforce 0

关闭Swap

sed -ri 's/.*swap.*/#&/' /etc/fstabswapoff -a

根据规划设置主机名

hostnamectl set-hostname k8s-master-01
hostnamectl set-hostname k8s-node-01
hostnamectl set-hostname k8s-node-02

网络桥段

vi /etc/sysctl.confnet.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu = 0# 生效命令
sysctl --system # 查看效果
sysctl -a|grep "ip_forward"

确保网络桥接的数据包经过Iptables处理,防止网络丢包

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl --system  # 生效

同步时间

# 安装软件
yum -y install ntpdate# 向阿里云服务器同步时间
ntpdate time1.aliyun.com# 删除本地时间并设置时区为上海
rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 查看时间
date -R || date

开启 IPVS

yum -y install ipset ipvsdmcat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF# 赋予权限并执行
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e  nf_conntrack_ipv4# 重启电脑,检查是否生效
reboot

命令补全

yum -y install bash-completion bash-completion-extrassource /etc/profile.d/bash_completion.sh

配置 HOSTS

cat <<EOF >>/etc/hosts
192.168.111.170		k8s-master-01
192.168.111.171 	k8s-node-01
192.168.111.172 	k8s-node-02
EOFcat <<EOF >>/etc/hosts
192.168.111.173 k8s-tool-01 harbor.liuyuncen.com
EOF

安装docker

下载源

yum install -y wgetwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

安装 docker

# yum list docker-ce --showduplicates | sort -ryum -y install docker-ce-24.0.0systemctl enable docker && systemctl start docker

设置Cgroup驱动

cat > /etc/docker/daemon.json << EOF
{"exec-opts": ["native.cgroupdriver=systemd"]
}
EOFsystemctl daemon-reload && systemctl restart docker# 查看设置状态
docker info

安装 cri-docker 驱动 (Docker与Kubernetes通信的中间程序):

# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpmrpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

指定依赖镜像地址为国内镜像地址:

vim /usr/lib/systemd/system/cri-docker.serviceExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9systemctl daemon-reload 
systemctl enable cri-docker && systemctl start cri-docker

部署 K8s 集群

添加阿里云 yum 源

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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubeadm 官方提供的集群搭建工具,kubelet 守护进程 和kubectl 管理集群工具(实际在 master 安装即可)

yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0systemctl enable kubelet
# 这里只是设置开机启动,直接起也起不来

提前把所有镜像都拉下来

docker load -i calico.v3.25.1.tar

只需要 k8s-master-01 节点执行 初始化Master节点

kubeadm init \--apiserver-advertise-address=192.168.126.170 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.28.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock

初始化信息

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

只需要 k8s-node-01 、k8s-node-02 节点执行

--cri-socket=unix:///var/run/cri-dockerd.sock 这一句要补充在最后面

kubeadm join 192.168.111.170:6443 --token y8hujn.777t21thlk6v6hy0 --discovery-token-ca-cert-hash sha256:f8df8dfe6cb7ad5347f92b6c58f552df8982c7dce540b266c22f971e49f55684 --cri-socket=unix:///var/run/cri-dockerd.sock
kubeadm join 192.168.126.170:6443 --token puuo90.pqgbmu1d32x3vsq4 --discovery-token-ca-cert-hash sha256:3600ff21c5a3742fee0455d920f345ea0ab9c99f0356acf7675f2ee728448bff --cri-socket=unix:///var/run/cri-dockerd.sock

使用kubectl工具查看节点状态: kubectl get nodes 由于网络插件还没有部署,节点会处于“NotReady”状态

这里使用Calico作为Kubernetes的网络插件,负责集群中网络通信。创建Calico网络组件的资源

kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml 

执行完成后,等待几分钟,执行

kubectl  get pods -n calico-system -o wide

问题排查,发现 nodes 无法启动,原因是下载不了镜像

kubectl describe po calico-kube-controllers-85955d4f5b-dbhhr -n calico-system
kubectl describe po calico-node-2sdxr -n calico-system
kubectl describe po calico-node-65gw4 -n calico-system
kubectl describe po calico-node-xqvnf -n calico-systemkubectl describe po calico-typha-7cd7bb8d58-lqmxj -n calico-system
kubectl describe po calico-typha-7cd7bb8d58-zwjd4 -n calico-systemkubectl describe po csi-node-driver-d9vkx -n calico-system
kubectl describe po csi-node-driver-nl26v -n calico-system
kubectl describe po csi-node-driver-qzljb -n calico-system
systemctl daemon-reload && systemctl restart docker
docker pull registry.cn-beijing.aliyuncs.com/yuncenliu/cni:v3.25.1-calico
docker tag registry.cn-beijing.aliyuncs.com/yuncenliu/cni:v3.25.1-calico docker.io/calico/pod2daemon-flexvol:v3.25.1docker pull registry.cn-beijing.aliyuncs.com/yuncenliu/pod2daemon-flexvol:v3.25.1-calico
docker tag registry.cn-beijing.aliyuncs.com/yuncenliu/pod2daemon-flexvol:v3.25.1-calico docker.io/calico/cni:v3.25.1

重启containerd (有用)

systemctl restart containerd

删除失败的 pods

kubectl  get pods -n kube-system | grep calico-node-bvvhc   | awk '{print$1}'| xargs kubectl delete -n kube-system pods
docker save -o calico.v3.25.1.tar calico/kube-controllers:v3.25.1 calico/node:v3.25.1 calico/pod2daemon-flexvol:v3.25.1 calico/cni:v3.25.1 docker load -i calico.v3.25.1.tar

全部启动成功,节点也全都在线 kubectl get nodes

安装页面

所有节点先下拉镜像

docker load -i k8s-dashboard-v2.7.0.tar

创建 Dashboard ,在 master 节点执行

kubectl apply -f kubernetes-dashboard.yaml
kubectl get pods -n kubernetes-dashboard -o wide

执行完成后,任意 https://任意node:30001 访问,例如:https://192.168.111.170:30001/#/login

创建用户

kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard

用户授权

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

获取用户 token

kubectl create token dashboard-admin -n kubernetes-dashboard

将 token 粘贴到浏览器的 token输入栏中(默认还是选第一项)点击登录即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864829.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法

我们在工作中经常会遇到一个问题,数据基础设施的设计往往没有充分考虑数据科学的需求。数据仓库或数据湖仓中的大量表格(主要是事实表和维度表)缺乏构建高性能机器学习模型所需的关键字段或结构。其中最显著的局限性在于,大多数表格仅记录观测值的当前状态,而未保留历史记…

Docker安装mysql5.7.240109

docker pull mysql:5.7 docker run Note: 报错:docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/home/mysql/co…

docker-compose固定网段设置.240109

docker-compose在使用的时候,经常是多个docker组了个内网。而如果不指定内网地址的话,很容易和线下的网段冲突,会造成虽说外部IP和端口都映射好了,但是就是公网无法访问的情况。 解决方案: docker-compose.yml里面,指定network网段。 networks:seafile-net:ipam:config:-…

openEuler欧拉设置git pull免密.240112

使用git config命令在本地全局设置用户名和邮箱git config --global user.name "username":全局添加用户名 git config --global user.email “someone@mail.com”:全局添加邮箱 git config --global credential.helper store: 该命令用于为credential.helper设置…

k8s强制删除pod节点.240123

场景 突然get pod的时候,发现一堆的错误,得把它干掉,否则很不爽。解决方案正常过期的状态,比如Evicted ,用正常指令 kubectl -n jingu get pods | grep Evicted |awk {print$1}|xargs kubectl -n jingu delete pods干不掉的pods,比如Terminating,只能用强制指令 kubectl…

FTP客户端无法正常显示服务器内容的原因分析与解决方法

自从重装系统之后,用户发现通过FTP客户端连接到服务器时,远程目录显示为空。尽管FTP设置中的路径指向正确的位置(如d:\\www\\myweb),但在客户端却看不到任何文件或文件夹。 解决方案:问题 解决方案FTP客户端不显示内容 首先确认FTP服务器是否正常运行,尝试从其他设备或网…

记一次cannot access its superinterface问题的的排查 → 强如Spring也一样写Bug

开心一刻 昨天在幼儿园,领着儿子在办公室跟他班主任聊他的情况 班主任:皓瑟,你跟我聊天是不是紧张呀 儿子:是的,老师 班主任:不用紧张,我虽然是你的班主任,但我也才22岁,你就把我当成班上的女同学 班主任继续补充道:你平时跟她们怎么聊,就跟我怎么聊,男孩子要果然,…

如何在织梦CMS中修改网站地图模板

织梦CMS是一款广泛使用的开源内容管理系统,适用于各种类型的网站。修改网站地图模板可以帮助您更好地控制网站的搜索引擎优化(SEO)。以下是详细的修改步骤和注意事项:登录织梦CMS后台:使用管理员账户登录织梦CMS后台。通常,后台地址为域名/dede或域名/admin。 输入用户名…

如何轻松修改织梦网站的宽度?

修改织梦CMS(DedeCMS)网站的宽度可以通过调整CSS样式来实现。以下是详细步骤:登录后台: 使用管理员账号登录织梦CMS后台。进入模板管理: 在左侧菜单中找到“模板管理”,点击进入。选择模板文件: 在模板管理页面中,找到包含网站布局的模板文件(如index.htm、header.htm…

如何轻松修改公司网站?

修改公司网站是一个重要的维护任务,可以提升网站的吸引力和用户体验。以下是详细步骤:确定修改需求:分析现状: 评估当前网站的优缺点,确定需要修改的部分。 收集反馈: 收集用户反馈和建议,了解用户的需求和期望。 制定计划: 制定详细的修改计划,包括修改的内容、时间表…

网站内容修改的操作位置及步骤

修改网站内容是日常维护和更新的重要任务。以下是详细的指南,帮助您顺利找到并修改网站内容:确定使用的CMS平台:不同的CMS平台有不同的操作方式。常见的CMS包括WordPress、Joomla、Drupal等。了解您所使用的具体平台及其内容管理机制。登录CMS后台管理系统:进入网站的后台管…

如何在txt网站制作中修改字体以提升视觉效果

在基于文本文件(TXT)的网站制作中修改字体是一项常见的需求。以下是详细的指南,帮助您顺利完成这一任务:选择合适的HTML模板:将纯文本文件转换为HTML格式,以便应用样式和字体设置。 使用简单的HTML结构,如<p>、<h1>、<h2>等标签来组织内容。编写CSS样…