附048.Kubernetes_v1.33.2三节点集群-Ubuntu版

文章目录

部署组件

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
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容