快速搭建 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/config

setenforce 0

关闭Swap

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

swapoff -a

根据规划设置主机名

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

网络桥段

vi /etc/sysctl.conf

net.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
EOF sysctl --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 ipvsdm

cat > /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-extras

source /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
EOF cat <<EOF >>/etc/hosts
192.168.111.173 k8s-tool-01 harbor.liuyuncen.com
EOF

安装docker

下载源

yum install -y wget

wget 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 -r

yum -y install docker-ce-24.0.0

systemctl enable docker && systemctl start docker

设置Cgroup驱动

cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF systemctl 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.rpm

rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

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

vim /usr/lib/systemd/system/cri-docker.service

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

systemctl 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.0

systemctl 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-system kubectl describe po calico-typha-7cd7bb8d58-lqmxj -n calico-system
kubectl describe po calico-typha-7cd7bb8d58-zwjd4 -n calico-system kubectl 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.1 docker 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输入栏中(默认还是选第一项)点击登录即可

kubeadm 快速搭建 Kubernetes 集群的更多相关文章

  1. Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群

    Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...

  2. 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群

    目录 K8S 组件构成 环境准备 (以ubuntu系统为例) 1. kubernetes集群机器 2. 安装 docker. kubeadm.kubelet.kubectl 2.1 在每台机器上安装 ...

  3. 使用Kubeadm(1.13+)快速搭建Kubernetes集群

    Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并 ...

  4. kubeadm快速搭建k8s集群

    环境 master01:192.168.1.110 (最少2核CPU) node01:192.168.1.100 规划 services网络:10.96.0.0/12 pod网络:10.244.0.0 ...

  5. 使用Rancher和私有仓库快速搭建Kubernetes集群

    来来来,先出题:Rancher可以快速部署Kubernetes,但其使用的gcr.io上的镜像无法下载怎么办?使用Rancher可以快速部署Kubernetes,但我们需要下载哪些镜像?Rancher ...

  6. 利用kubeadm快速部署 kubernetes 集群

    结合一下两个教程 https://www.cnblogs.com/along21/p/10303495.html 链接:https://pan.baidu.com/s/1O_pcywfso4VFOsF ...

  7. 2.使用kubeadm快速搭建k8s集群

    准备工作: 时间同步 systemctl stop iptables.servicesystemctl stop firewalld.service 安装docker wget https://mir ...

  8. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  9. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  10. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

随机推荐

  1. C# 利用epplus导出excel,自动求和

    /// <summary> /// 生成xlsx /// </summary> /// <param name="dvLine">数据视图< ...

  2. 【题解笔记】PTA基础6-7:统计某类完全平方

    题目地址:https://pintia.cn/problem-sets/14/problems/739 前言 咱目前还只能说是个小白,写题解是为了后面自己能够回顾.如果有哪些写错的/能优化的地方,也请 ...

  3. Nuxt.js 应用中的 server:devHandler 事件钩子详解

    title: Nuxt.js 应用中的 server:devHandler 事件钩子详解 date: 2024/10/26 updated: 2024/10/26 author: cmdragon e ...

  4. uniswap v2 类比

    当然,以下是生活中的类比,帮助你理解 Uniswap V2 的核心概念: 1. 自动化做市商(AMM) 生活中的例子:自动售货机 解释:自动售货机内部有一种商品(如饮料)和一定的库存.用户通过投币购买 ...

  5. sqli-labs Less 2-4 攻略

    sqli-labs Less 2-4 的解题与Less1思路相同,只在闭合类型上存在少量区别,故直接提供解题过程,不再作详细解释. 对sql注入基本原理尚不了解的可以参考我的上一篇博客基于sqli-l ...

  6. 解读Karmada多云容器编排技术,加速分布式云原生应用升级

    本文分享自来源:<华为云DTSE>第五期开源专刊,作者:任洪彩 华为云高级软件工程师,Karmada社区Maintainer.   管理和协调跨多个云平台的容器化应用是当前企业面临的复杂性 ...

  7. 使用tensorboard可视化模型

    Tensorboard是TF自带的可视化工具.它可以让我们从各个角度观察与修改模型,比如观察模型在训练时的loss动态变化曲线而无需在迭代完毕后再画图.绘制神经网络的结构图.调节超参数等.下面以最简单 ...

  8. 70 个群都来问我的 AI 日报,是这么做的。

    最近我给 FastGPT 用户交流群里接入了 AI 日报,每天早上 10 点会自动向群里推送 AI 日报,让群里的小伙伴们第一时间了解到昨天 AI 领域都发生了哪些大事. 效果大概是这个样子的: 如果 ...

  9. Django Admin之常用功能汇总

    1.字段支持下拉搜索框 1)在admin中新增字段autocomplete_fields autocomplete_fields = ("field1","field2& ...

  10. Linux常用系统性能监控工具

    top 首先关于top命令,我想大家应该都挺熟悉的了. Linux系统下的top命令有点类似于Windows系统里的任务管理器,能够实时动态地给出系统中各个进程的资源占用状况,是Linux下比较常用的 ...