文章目录
部署组件
kubeadm介绍
kubelet介绍
kubectl介绍
方案概述
方案介绍
部署规划
节点规划
主机名配置
变量准备
互信配置
环境预配置
创建配置文件
集群部署
相关组件包
正式安装
集群初始化
预配置检查
Master01上初始化
添加kubectl环境
安装NIC插件
NIC插件介绍
镜像准备
部署calico
添加Worker节点
添加Worker节点
确认验证
Helm部署
helm介绍
Helm优势
前置准备
二进制安装Helm
Helm操作
查找chart
添加repo
Metrics部署
Metrics介绍
Metrics Server建议场景
Metrics Server不建议场景
Metrics特点
Metrics需求
开启聚合层
获取部署文件
创建自定义配置
正式部署
查看资源监控
Nginx ingress部署
ingress介绍
设置标签
获取部署文件
创建自定义配置
正式部署
确认验证
Dashboard部署
dashboard介绍
设置标签
创建证书
手动创建secret
获取部署文件
创建自定义配置
正式部署
创建管理员账户
查看token
导入证书
测试访问dashboard
Longhorn存储部署
Longhorn概述
安装要求
安装准备
设置标签
准备磁盘
获取部署文件
创建自定义配置
创建Longhorn UI密码
正式部署
动态sc创建
测试PV及PVC
确认验证
扩展:集群扩容及缩容
集群扩容
集群缩容
部署组件
该 Kubernetes 部署过程中,对于部署环节,涉及多个组件,主要有 kubeadm 、kubelet 、kubectl。
kubeadm介绍
Kubeadm 为构建 Kubernetes 提供了便捷、高效的“最佳实践” ,该工具提供了初始化完整 Kubernetes 过程所需的组件,其主要命令及功能有:
kubeadm init:用于搭建 Kubernetes 控制平面节点;
kubeadm join:用于搭建 Kubernetes 工作节点并将其加入到集群中;
kubeadm upgrade:用于升级 Kubernetes 集群到新版本;
kubeadm token:用于管理 kubeadm join 使用的 token;
kubeadm reset:用于恢复(重置)通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更;
kubeadm certs:用于管理 Kubernetes 证书;
kubeadm kubeconfig:用于管理 kubeconfig 文件;
kubeadm version:用于显示(查询)kubeadm 的版本信息;
kubeadm alpha:用于预览当前从社区收集到的反馈中的 kubeadm 特性。
更多参考:Kubeadm介绍
kubelet介绍
kubelet 是 Kubernetes 集群中用于操作 Docker 、containerd 等容器运行时的核心组件,需要在每个节点运行。通常该操作是基于 CRI 实现,kubelet 和 CRI 交互,以便于实现对 Kubernetes 的管控。
kubelet 主要用于配置容器网络、管理容器数据卷等容器全生命周期,对于 kubelet 而言,其主要的功能核心有:
Pod 更新事件;
Pod 生命周期管理;
上报 Node 节点信息。
更多参考:kubelet介绍
kubectl介绍
kubectl 控制 Kubernetes 集群管理器,是作为 Kubernetes 的命令行工具,用于与 apiserver 进行通信,使用 kubectl 工具在 Kubernetes 上部署和管理应用程序。
使用 kubectl,可以检查群集资源的创建、删除和更新组件。
同时集成了大量子命令,可更便捷的管理 Kubernetes 集群,主要命令如下:
Kubetcl -h:显示子命令;
kubectl option:查看全局选项;
kubectl <command> –help:查看子命令帮助信息;
kubelet [command] [PARAMS] -o=<format>:设置输出格式,如json、yaml等;
Kubetcl explain [RESOURCE]:查看资源的定义。
更多参考:kubectl介绍
方案概述
方案介绍
本方案基于 kubeadm 部署工具实现完整生产环境可用的 Kubernetes 高可用集群,同时提供相关 Kubernetes 周边组件。
其主要信息如下:
版本:Kubernetes 1.33.2 版本;
kubeadm:采用 kubeadm 部署 Kubernetes ;
OS:Ubuntu Server 24.04 LTS;
etcd:采用单点融合方式;
其他主要部署组件包括:
Metrics:度量组件,用于提供相关监控指标;
Helm:Kubernetes Helm 包管理器工具,用于后续使用 helm 整合包快速部署应用;
Ingress:Kubernetes 服务暴露应用,用于提供7层的负载均衡,类似 Nginx,可建立外部和内部的多个映射规则;
containerd:Kubernetes 底层容器时;
Longhorn:Kubernetes 动态存储组件,用于提供 Kubernetes 的持久存储。
提示:本方案部署所使用脚本均由本人提供,可能不定期更新。
部署规划
节点规划
| 节点主机名 | IP | 类型 | 可运行服务/组件 | |
|---|---|---|---|---|
| master01 | 172.24.8.11 | Kubernetes master节点 | kubeadm、kubelet、kubectl、containerdetcd、kube-apiserver、kube-scheduler、kube-controller-manager、calicometrics、ingress、Longhorn ui节点 | |
| worker01 | 172.24.8.12 | Kubernetes master节点 | kubelet、containerd、calico、metrics、Longhorn driver节点 | |
| worker02 | 172.24.8.13 | Kubernetes master节点 | kubelet、containerd、calico、metrics、Longhorn driver节点 |
主机名配置
需要对所有节点主机名进行相应配置。
root@localhost:~# hostnamectl set-hostname master01 #其他节点依次修改
提示:如上需要在所有节点修改对应的主机名。
生产环境通常建议在内网部署dns服务器,使用dns服务器进行解析,本指南采用本地hosts文件名进行解析。
如下hosts文件修改仅需在master01执行,后续使用批量分发至其他所有节点。
root@master01:~# cat >> /etc/hosts << EOF
172.24.8.11 master01
172.24.8.12 worker01
172.24.8.13 worker02
EOF
提示:如上仅需在master01节点上操作。
变量准备
为实现自动化部署,自动化分发相关文件,提前定义相关主机名、IP组、变量等。
root@master01:~# wget http://down.linuxsb.com/mydeploy/k8s/v1.33.2/u3nodesenv.sh
root@master01:~# vi u3nodesenv.sh #确认相关主机名和IP
#!/bin/bash
#***************************************************************#
# ScriptName: u3nodesenv.sh
# Author: xhy
# Create Date: 2025-07-23 17:49
# Modify Author: xhy
# Modify Date: 2025-07-23 17:49
# Version: v1
#***************************************************************#
# 集群 MASTER 机器 IP 数组
export MASTER_IPS=(172.24.8.11)
# 集群 MASTER IP 对应的主机名数组
export MASTER_NAMES=(master01)
# 集群 NODE 机器 IP 数组
export NODE_IPS=(172.24.8.12 172.24.8.12)
# 集群 NODE IP 对应的主机名数组
export NODE_NAMES=(worker01 worker02)
# 集群所有机器 IP 数组
export ALL_IPS=(172.24.8.11 172.24.8.12 172.24.8.13)
# 集群所有IP 对应的主机名数组
export ALL_NAMES=(master01 worker01 worker02)
提示:如上仅需在master01节点上操作。
互信配置
为了方便远程分发文件和执行命令,本方案配置master01节点到其它节点的 ssh信任关系,即免秘钥管理所有其他节点。
root@master01:~# source u3nodesenv.sh #载入变量
root@master01:~# wget http://down.linuxsb.com/mydeploy/k8s/common/mkpublickey.sh
root@master01:~# vim mkpublickey.sh #修改集群节点IP
#!/bin/bash
#***************************************************************#
# ScriptName: mkpublickey.sh
# Author: xhy
# Create Date: 2025-07-01 23:55
# Modify Author: xhy
# Modify Date: 2025-07-23 17:53
# Version: v1
#***************************************************************#
# 检查参数
if [ $# -ne 1 ]; then
echo "该脚本需要带上主机密码: $0 <密码>"
exit 1
fi
# 主机列表(直接内置)
HOSTS=(
172.24.8.11
172.24.8.12
172.24.8.13
)
PASSWORD=$1
#……
[root@master01 ~]# bash mkpublickey.sh redhat123
提示:如上仅需在master01节点上操作。
环境预配置
kubeadm本身仅用于部署Kubernetes集群,在正式使用kubeadm部署Kubernetes集群之前需要对操作系统环境进行准备,即环境预配置。
环境的预配置本方案使用脚本自动完成。
使用如下脚本对基础环境进行初始化,主要功能包括:
安装containerd,Kubernetes平台底层的容器组件
关闭SELinux及防火墙
优化相关内核参数,针对生产环境Kubernetes集群的基础系统调优配置
关闭swap
设置相关模块,主要为转发模块
配置相关基础软件,部署Kubernetes集群所需要的基础依赖包
创建container所使用的独立目录
配置crictl和运行时的连接,便于后期使用crictl命令
提示:后续ctr命令下载镜像的时候,若需要使用containerd的加速,必须带上–hosts-dir,ctr当前环境所管理的镜像都属于k8s.io,因此创建一个别名。
root@master01:~# wget http://down.linuxsb.com/mydeploy/k8s/v1.33.2/uk8spreconfig.sh
root@master01:~# vim uk8spreconfig.sh
#!/bin/bash
#***************************************************************#
# ScriptName: uk8spreconfig.sh
# Author: xhy
# Create Date: 2025-03-29 12:30
# Modify Author: xhy
# Modify Date: 2025-07-23 17:58
# Version: v1
#***************************************************************#
CONTAINERD_VERSION=1.7.27-1
# Initialize the machine. This needs to be executed on every machine.
apt update && apt upgrade -y && apt autoremove -y
# Install package
sudo apt -y install conntrack ntpdate ntp ipvsadm ipset jq iptables sysstat wget
# Add Docker's official GPG key
sudo apt -y install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# Install and config containerd
apt-cache madison containerd
sudo apt -y install containerd.io=${CONTAINERD_VERSION}
sleep 3s
mkdir -p /etc/containerd/certs.d/docker.io
mkdir -p /data/containerd
cat > /etc/containerd/config.toml <<EOF
disabled_plugins = ["io.containerd.internal.v1.restart"]
root = "/data/containerd"
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
# sandbox_image = "registry.k8s.io/pause:3.10"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"
[plugins."io.containerd.grpc.v1.cri".containerd]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
[plugins."io.containerd.runtime.v1.linux"]
shim_debug = true
EOF
cat > /etc/containerd/certs.d/docker.io/hosts.toml <<EOF
server = "https://registry-1.docker.io"
[host."https://docker.1ms.run"]
capabilities = ["pull", "resolve", "push"]
[host."https://dbzucv6w.mirror.aliyuncs.com"]
capabilities = ["pull", "resolve", "push"]
[host."https://docker.xuanyuan.me"]
capabilities = ["pull", "resolve", "push"]
EOF
# config crictl & containerd
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
echo 'alias ctrpull="ctr -n k8s.io images pull --hosts-dir /etc/containerd/certs.d"' >> /etc/profile.d/custom_bash.sh
systemctl restart containerd
systemctl enable containerd --now
# Turn off and disable the firewalld.
systemctl disable ufw --now || true
# Modify related kernel parameters & Disable the swap.
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.tcp_tw_recycle = 0
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
net.ipv6.conf.all.disable_ipv6 = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf >&/dev/null
swapoff -a
echo -e "#/bin/bash
swapoff -a" > /etc/profile.d/disabled_swap.sh
sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
modprobe br_netfilter
modprobe overlay
sysctl --system
# Add ipvs modules
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
br_netfilter
overlay
xt_CT
EOF
systemctl restart systemd-modules-load.service
提示:containerd 镜像加速配置更多可参考:
containerd配置镜像加速器 containerd官方加速配置
提示:如上仅需在master01节点上操作,建议初始化完后进行重启。
批量初始化
root@master01:~# source u3nodesenv.sh
root@master01:~# chmod +x *.sh
root@master01:~# for all_ip in ${ALL_IPS[@]}
do
echo -e "
33[33m[INFO] >>> ${all_ip}...33[0m"
sleep 2
scp -rp /etc/hosts root@${all_ip}:/etc/hosts
scp -rp uk8spreconfig.sh root@${all_ip}:/root/
ssh root@${all_ip} "bash /root/uk8spreconfig.sh"
done
提示:如上仅需在master01节点上操作。
批量重启
root@master01:~# source u3nodesenv.sh
root@master01:~# for all_ip in ${ALL_IPS[@]}
do
echo -e "
33[33m[INFO] >>> ${all_ip}...33[0m"
sleep 1
ssh root@${all_ip} "nohup bash -c 'sleep 10; shutdown -r now' >/dev/null 2>&1 </dev/null &"
done
创建配置文件
创建集群部署所需的相关组件配置,采用脚本自动化创建相关配置文件。
root@master01:~# wget http://down.linuxsb.com/mydeploy/k8s/v1.33.2/u3k8sconfig.sh #拉取自动部署脚本
root@master01:~# vim u3k8sconfig.sh
#!/bin/bash
#***************************************************************#
# ScriptName: u3k8sconfig.sh
# Author: xhy
# Create Date: 2025-07-23 18:17
# Modify Author: xhy
# Modify Date: 2025-07-23 18:25
# Version: v1
#***************************************************************#
#######################################
# 全局变量配置区
#######################################
echo -e "
33[33m[INFO] 开始定义全局参数...33[0m"
sleep 1
declare -A NODES=(
[master01]="172.24.8.11"
)
# 公共参数
K8SHA_VERSION=v1.33.2
K8SHA_VIP="${NODES[master01


















暂无评论内容