初始提交
This commit is contained in:
115
虚拟机安装/三、安装Kubeadm, Kubelet, Kubectl.conf
Normal file
115
虚拟机安装/三、安装Kubeadm, Kubelet, Kubectl.conf
Normal file
@@ -0,0 +1,115 @@
|
||||
# kubeadm, Kubelet, Kubectl 是什么?
|
||||
这三个工具通常被称为 Kubernetes 的 “三驾马车”, 它们分工明确, 共同构成了 Kubernetes 集群的基石
|
||||
|
||||
一、Kubectl: Kubernetes 的命令行客户端 (The Client)
|
||||
# 是什么
|
||||
kubectl 是你与 Kubernetes 集群进行交互的主要工具 它是一个命令行程序, 允许你对集群进行各种操作, 如部署应用、查看集群状态、管理节点和资源等
|
||||
# 作用:
|
||||
它通过 Kubernetes API 与集群的控制平面 (Control Plane) 进行通信, 将你的指令 (如 kubectl get pods) 转换为 API 请求发送给 API Server
|
||||
# 类比:
|
||||
可以把它想象成 Kubernetes 集群的 **“遥控器”或“终端”**
|
||||
|
||||
二、Kubelet: 每个节点上的 “节点管家” (The Agent)
|
||||
# 是什么:
|
||||
kubelet 是一个在集群中每一个节点 (包括 Master 和 Worker Node) 上都必须运行的代理程序
|
||||
# 作用:
|
||||
它负责确保容器 (Pod) 按照 Kubernetes Master 节点上的 kube-apiserver 下发的规格 (Pod Spec) 在节点上正确运行 具体来说, 它会:
|
||||
- 向 API Server 注册自己, 报告节点的状态
|
||||
- 监听 API Server, 获取分配给本节点的 Pod 列表
|
||||
- 与容器运行时 (如刚刚安装的 Containerd) 交互, 创建、启动、停止 Pod 中的容器
|
||||
- 定期检查容器状态, 如果容器异常退出, 会尝试重启它
|
||||
- 执行容器的健康检查 (Liveness Probe 和 Readiness Probe)
|
||||
# 类比:
|
||||
可以把它想象成每个节点上的 **“物业经理”**, 负责管理该节点上所有 “住户” (容器) 的日常运作
|
||||
|
||||
三、Kubeadm: 集群的 “部署工具” (The Bootstrapper)
|
||||
# 是什么:
|
||||
kubeadm 是一个官方提供的、用于快速部署和管理 Kubernetes 集群的命令行工具
|
||||
# 作用:
|
||||
它极大地简化了集群的初始化过程 你不再需要手动配置复杂的证书、配置文件和服务 kubeadm 可以:
|
||||
- kubeadm init: 初始化一个 Kubernetes Master 节点 它会自动生成证书、配置文件, 并启动控制平面的核心组件 (API Server, Controller Manager, Scheduler, etcd)
|
||||
- kubeadm join: 将一个 Worker Node 加入到已有的集群中
|
||||
- kubeadm upgrade: 安全地升级集群到新版本
|
||||
- kubeadm reset: 清理一个节点上的 Kubernetes 配置, 使其恢复到初始状态
|
||||
# 类比:
|
||||
可以把它想象成安装软件时的 **“一键安装向导”**, 它帮你完成了所有繁琐的底层配置工作
|
||||
|
||||
# 三者之间的关系, 可以用一个简单的流程图来表示:
|
||||
你 (User) -> kubectl -> [网络] -> API Server (Master Node) -> kubelet (on each Node) -> Container Runtime (Containerd) -> Containers
|
||||
- 你使用 kubectl 命令 (例如 kubectl run my-app )
|
||||
- kubectl 将这个命令转换成 API 请求, 发送给 Master 节点上的 API Server
|
||||
- API Server 接收到请求后, 与其他控制平面组件 (如 Controller Manager 和 Scheduler) 协作, 决定应该在哪个 Worker Node 上运行这个新的 Pod
|
||||
- API Server 将这个决定 (即 Pod 的配置信息) 存储在 etcd 中
|
||||
- 目标 Worker Node 上的 kubelet 进程会定期向 API Server 查询是否有新的任务分配给自己
|
||||
- 当 kubelet 发现有一个新的 Pod 需要在它的节点上运行时, 它会调用容器运行时 (Containerd)
|
||||
- Containerd 最终负责从镜像仓库拉取镜像并创建和运行容器
|
||||
|
||||
总结: kubeadm 是部署工具, kubelet 是节点代理, kubectl 是管理客户端 kubeadm 帮助你快速搭建好一个包含多个 kubelet 的集群, 而你则通过 kubectl 来管理这个由 kubelet 维持运行的集群
|
||||
|
||||
# 默认安装位置和自定义安装位置
|
||||
# 使用 dnf 或 yum 在 Rocky Linux/CentOS 上安装这三个组件时, 它们会被安装到标准的 Linux 文件系统路径中
|
||||
-组件- -主要文件/目录- -说明-
|
||||
kubeadm /usr/bin/kubeadm 主程序二进制文件
|
||||
kubectl /usr/bin/kubectl 主程序二进制文件
|
||||
kubelet /usr/bin/kubelet 主程序二进制文件
|
||||
kubelet /etc/systemd/system/kubeletserviced/10-kubeadmconf Systemd 服务配置文件, 由 kubeadm 生成
|
||||
kubelet /var/lib/kubelet/ 重要: kubelet 的工作目录, 存放 Pod 的数据卷 (Volumes) 、插件目录等 在上一步已经通过符号链接将其指向了 /data/kubelet
|
||||
kubectl ~/kube/config 重要: kubectl 的配置文件, 包含了连接集群所需的认证信息 kubeadm init 成功后会自动生成
|
||||
|
||||
|
||||
## 整体步骤
|
||||
# 添加 Kubernetes 阿里 YUM 仓库
|
||||
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/repodata/repomd.xml.key
|
||||
EOF
|
||||
|
||||
dnf makecache
|
||||
|
||||
# 安装 kubeadm kubelet 和 kubectl
|
||||
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
|
||||
|
||||
# 设置 kubelet 开机自启
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now kubelet
|
||||
|
||||
|
||||
## 初始化一个 Kubernetes 集群
|
||||
# master节点提前拉取所需的镜像
|
||||
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
|
||||
|
||||
kubeadm init \
|
||||
--apiserver-advertise-address=192.168.31.11 \
|
||||
--pod-network-cidr=10.244.0.0/16 \
|
||||
--image-repository=registry.aliyuncs.com/google_containers \
|
||||
--upload-certs
|
||||
|
||||
# node节点加入集群
|
||||
kubeadm join 192.168.31.11:6443 --token u3slt9.yyek8ve1kl28x5zz \
|
||||
--discovery-token-ca-cert-hash sha256:9a7427a88a6cf5174a69046dd4a8b7763c1a89d4c0cbf9c8932083fb2d240306
|
||||
|
||||
|
||||
## 配置 kubectl 使用
|
||||
# 在 master 节点上, 将 kubeconfig 文件复制到当前用户的 home
|
||||
mkdir -p $HOME/.kube
|
||||
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
|
||||
# 验证集群状态
|
||||
kubectl get nodes
|
||||
kubectl get pods -A
|
||||
kubectl get cs
|
||||
# 安装calico网络插件
|
||||
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
|
||||
# 查看网络插件是否正常运行
|
||||
kubectl get pods -n kube-system
|
||||
kubectl get nodes
|
||||
# 至此, 已经成功安装并配置了 kubeadm, kubelet 和 kubectl, 并初始化了一个基本的 Kubernetes 集群 你可以使用 kubectl 来管理和部署应用到这个集群中
|
||||
# 你可以通过编辑 /etc/kubernetes/kubelet.conf 文件来修改 kubelet 的配置
|
||||
# 你可以通过编辑 ~/.kube/config 文件来修改 kubectl 的配置
|
||||
|
||||
|
||||
Reference in New Issue
Block a user