初始提交
This commit is contained in:
13
k8s知识笔记/一、k8s 资源清单/1、什么是资源.conf
Normal file
13
k8s知识笔记/一、k8s 资源清单/1、什么是资源.conf
Normal file
@@ -0,0 +1,13 @@
|
||||
一、常见的资源类型分类
|
||||
|
||||
1.1 名称空间级别
|
||||
* 工作负载型资源: Pod、Deployment、ReplicaSet、DaemonSet、Job、CronJob
|
||||
* 服务发现及负载均衡型资源: Service、Ingress
|
||||
* 配置及存储型资源: Volume、CSI
|
||||
* 特殊类型的存储卷: ConfigMap、Secret、PersistentVolumeClaim
|
||||
|
||||
1.2 集群级资源
|
||||
Namespace、Node、PersistentVolume、ClusterRole、ClusterRoleBinding、CustomResourceDefinition
|
||||
|
||||
1.3 元数据型资源
|
||||
HPA、PodTemplate、LimitRange
|
||||
160
k8s知识笔记/一、k8s 资源清单/2、资源清单的五大字段.conf
Normal file
160
k8s知识笔记/一、k8s 资源清单/2、资源清单的五大字段.conf
Normal file
@@ -0,0 +1,160 @@
|
||||
一、资源清单-结构
|
||||
|
||||
五大对象字段:
|
||||
1. apiVersion [接口组/版本]
|
||||
2. kind [资源类型]
|
||||
3. metadata [元数据]
|
||||
4. spec [规格/期望]
|
||||
5. status [状态]
|
||||
|
||||
1.1 [接口组/版本] group/apiVersion
|
||||
* 例子: apiVersion: v1 # pod
|
||||
apiVersion: apps/v1 # deployment
|
||||
apiVersion: batch/v1 # job
|
||||
apiVersion: networking.k8s.io/v1 # ingress
|
||||
apiVersion: rbac.authorization.k8s.io/v1 # rbac
|
||||
|
||||
常见命令:
|
||||
1、查看集群api版本命令: kubectl api-versions
|
||||
|
||||
root@k8s-master:~# kubectl api-versions
|
||||
admissionregistration.k8s.io/v1
|
||||
apiextensions.k8s.io/v1
|
||||
apiregistration.k8s.io/v1
|
||||
apps/v1
|
||||
authentication.k8s.io/v1
|
||||
authorization.k8s.io/v1
|
||||
autoscaling/v1
|
||||
autoscaling/v2
|
||||
batch/v1
|
||||
certificates.k8s.io/v1
|
||||
coordination.k8s.io/v1
|
||||
crd.projectcalico.org/v1
|
||||
discovery.k8s.io/v1
|
||||
events.k8s.io/v1
|
||||
flowcontrol.apiserver.k8s.io/v1
|
||||
networking.k8s.io/v1
|
||||
node.k8s.io/v1
|
||||
policy/v1
|
||||
rbac.authorization.k8s.io/v1
|
||||
resource.k8s.io/v1
|
||||
scheduling.k8s.io/v1
|
||||
storage.k8s.io/v1
|
||||
v1
|
||||
|
||||
[注意事项]:
|
||||
1. group为空时, 直接使用v1表示
|
||||
2. group和version之间用/分隔
|
||||
3. v1表示默认的版本, 即 core/v1
|
||||
|
||||
2、查看某个资源的api解释命令: kubectl explain <资源类型> [Deployment、ReplicaSet、DaemonSet、Job、CronJob]
|
||||
例子: kubectl explain Pod
|
||||
|
||||
1.2 [资源类型] kind: List
|
||||
* 例子: kind: Pod
|
||||
kind: Deployment
|
||||
kind: Service
|
||||
kind: Ingress
|
||||
kind: ConfigMap
|
||||
kind: Secret
|
||||
kind: PersistentVolumeClaim
|
||||
kind: Namespace
|
||||
kind: Node
|
||||
kind: PersistentVolume
|
||||
kind: ClusterRole
|
||||
kind: ClusterRoleBinding
|
||||
kind: CustomResourceDefinition
|
||||
kind: HPA
|
||||
kind: PodTemplate
|
||||
kind: LimitRange
|
||||
|
||||
1.3 [元数据] metadata:
|
||||
* 例子: metadata:
|
||||
name: my-pod
|
||||
namespace: default
|
||||
labels:
|
||||
app: my-app
|
||||
annotations:
|
||||
description: "This is my pod"
|
||||
|
||||
1.4 [规格/期望] spec:
|
||||
* 例子:
|
||||
spec:
|
||||
containers:
|
||||
- name: my-container
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- containerPort: 80
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: my-app
|
||||
volumeMounts:
|
||||
- name: my-volume
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: my-volume
|
||||
persistentVolumeClaim:
|
||||
claimName: my-pvc
|
||||
|
||||
1.5 [状态] status: # 初次自定义时, 一般不写该字段, 由系统自动生成和维护
|
||||
* 例子:
|
||||
status:
|
||||
coordinations:
|
||||
leaseDurationSeconds: 15
|
||||
renewTime: "2023-10-01T12:00:00Z"
|
||||
|
||||
|
||||
|
||||
# =======================================================================
|
||||
|
||||
|
||||
|
||||
二、pod 资源清单示例:
|
||||
# 1. 创建一个名为 my-pod 的 Pod,包含两个容器 第一个容器使用 nginx 镜像,监听 80 端口, 第二个容器使用 busybox 镜像, 执行一个简单的命令 Pod 运行在 default 命名空间:
|
||||
vim my-pod.yaml
|
||||
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: my-pod
|
||||
namespace: default
|
||||
labels:
|
||||
app: my-app
|
||||
annotations:
|
||||
description: "This is my pod"
|
||||
spec:
|
||||
containers:
|
||||
- name: my-container
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- containerPort: 80
|
||||
- name: sidecar-container
|
||||
image: busybox
|
||||
command:
|
||||
- "bash/sh"
|
||||
- "-c"
|
||||
- "sleep 3600"
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: my-app
|
||||
volumeMounts:
|
||||
- name: my-volume
|
||||
mountPath: /data
|
||||
volumes:
|
||||
- name: my-volume
|
||||
persistentVolumeClaim:
|
||||
claimName: my-pvc
|
||||
|
||||
2、pod 资源清单应用命令: (实例化资源对象)
|
||||
kubectl apply -f my-pod.yaml
|
||||
|
||||
3、查看 pod 资源命令:
|
||||
kubectl get pods -A # 查看所有命名空间的 pod
|
||||
kubectl get pods -n default # 查看 default 命名空间的 pod
|
||||
kubectl get pods -n kube-system # 查看 kube-system 命名空间的 pod
|
||||
kubectl get pod my-pod -o yaml # 查看指定 pod 的详细信息
|
||||
kubectl get pod my-pod -o wide # 查看指定 pod 的宽表信息(IP、节点等)
|
||||
|
||||
|
||||
6
k8s知识笔记/一、k8s 资源清单/3、pod的生命周期.conf
Normal file
6
k8s知识笔记/一、k8s 资源清单/3、pod的生命周期.conf
Normal file
@@ -0,0 +1,6 @@
|
||||
一、几个常用的探测和钩子
|
||||
启动探测:
|
||||
就绪探测:
|
||||
存货探测:
|
||||
启动后钩子:
|
||||
关闭前钩子:
|
||||
46
k8s知识笔记/二、k8s pod 控制器/1、RC控制器.conf
Normal file
46
k8s知识笔记/二、k8s pod 控制器/1、RC控制器.conf
Normal file
@@ -0,0 +1,46 @@
|
||||
一、RC 控制器简介
|
||||
ReplicationController(RC)是Kubernetes中的一种控制器, 用于确保指定数量的Pod副本在集群中运行。
|
||||
RC控制器通过监视Pod的状态, 并根据需要创建或删除Pod来维持所需的副本数。
|
||||
RC控制器的主要功能包括:
|
||||
1. 确保指定数量的Pod副本在运行
|
||||
2. 监控Pod的状态
|
||||
3. 根据需要创建或删除Pod
|
||||
|
||||
二、RC 控制器资源清单
|
||||
|
||||
# 资源清单例子
|
||||
|
||||
apiVersion: v1 # 接口组/版本
|
||||
kind: ReplicationController # 资源类型:RC 控制器
|
||||
metadata: # RC 控制器元数据
|
||||
name: nginx-rc # RC 控制器名称
|
||||
spec: # RC 控制器规格 ·
|
||||
replicas: 2 # 期望的pod副本数
|
||||
selector: # 标签选择器
|
||||
app: nginx # 选择标签为app=nginx的pod
|
||||
template: # pod模板
|
||||
metadata: # pod元数据
|
||||
labels: # pod标签,必须与selector匹配(是其子集)
|
||||
app: nginx # 标签key为app,value为nginx
|
||||
spec: # pod规格
|
||||
containers: # 容器组列表
|
||||
- name: nginx # 容器名称
|
||||
image: nginx:1.7.9
|
||||
env: # 环境变量
|
||||
- name: ENV # 环境变量名称
|
||||
value: test # 环境变量值
|
||||
- name: ENV2 # 环境变量名称
|
||||
value: test2 # 环境变量值
|
||||
ports:
|
||||
- containerPort: 80 # 容器端口
|
||||
|
||||
# 创建RC控制器
|
||||
kubectl create -f 1.rc.yaml
|
||||
|
||||
# 查看RC控制器
|
||||
kubectl get rc
|
||||
|
||||
# 查看RC控制器详情
|
||||
kubectl describe rc nginx-rc
|
||||
|
||||
|
||||
60
k8s知识笔记/二、k8s pod 控制器/2、RS控制器.conf
Normal file
60
k8s知识笔记/二、k8s pod 控制器/2、RS控制器.conf
Normal file
@@ -0,0 +1,60 @@
|
||||
一、RS 控制器简介
|
||||
ReplicationSet(RS)是Kubernetes中的一种控制器, 用于确保指定数量的Pod副本在集群中运行。
|
||||
RS控制器通过监视Pod的状态, 并根据需要创建或删除Pod来维持所需的副本数。
|
||||
RS控制器相较RC控制器在标签选择器方面更为灵活, 支持更多的匹配方式。
|
||||
RS控制器的主要功能包括:
|
||||
1. 确保指定数量的Pod副本在运行
|
||||
2. 监控Pod的状态
|
||||
3. 根据需要创建或删除Pod
|
||||
|
||||
RS 在标签选择器上, 除了可以定义键值对的 matchLabels 选择形式, 还支持 matchExpressions 字段,可以提供多种选择。目前支持的操作包括:
|
||||
1. In: # label的值在某个列表中
|
||||
2. NotIn: # label的值不在某个列表中
|
||||
3. Exists: # 某个label 存在
|
||||
4. DoesNotExist: # 某个label不存在
|
||||
|
||||
# 例子: matchExpressions 选择形式
|
||||
spec:
|
||||
selector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: Exists
|
||||
|
||||
# 例子: matchExpressions 选择形式
|
||||
spec:
|
||||
selector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- spring-k8s
|
||||
- hahahah
|
||||
|
||||
|
||||
二、RS 控制器资源清单
|
||||
|
||||
# 资源清单例子
|
||||
apiVersion: apps/v1 # 接口组/版本
|
||||
kind: ReplicaSet # 资源类型:RS 控制器
|
||||
metadata: # RS 控制器元数据
|
||||
name: nginx-rs # RS 控制器名称
|
||||
spec: # RS 控制器规格 ·
|
||||
replicas: 2 # 期望的pod副本数
|
||||
selector: # 标签选择器
|
||||
matchLabels: # 匹配标签模式
|
||||
app: nginx # 选择标签为app=nginx的pod
|
||||
template: # pod模板
|
||||
metadata: # pod元数据
|
||||
labels: # pod标签,必须与selector匹配(是其子集)
|
||||
app: nginx # 标签key为app,value为nginx
|
||||
spec: # pod规格
|
||||
containers: # 容器组列表
|
||||
- name: nginx # 容器名称
|
||||
image: nginx:1.7.9
|
||||
env: # 环境变量
|
||||
- name: ENV # 环境变量名称
|
||||
value: test # 环境变量值
|
||||
- name: ENV2 # 环境变量名称
|
||||
value: test2 # 环境变量值
|
||||
ports:
|
||||
- containerPort: 80 # 容器端口
|
||||
77
k8s知识笔记/二、k8s pod 控制器/3、deployment控制器.conf
Normal file
77
k8s知识笔记/二、k8s pod 控制器/3、deployment控制器.conf
Normal file
@@ -0,0 +1,77 @@
|
||||
一、Deployment 控制器基本概念
|
||||
|
||||
Deployment 控制器是 Kubernetes 中用于管理应用程序部署和更新的高级控制器。
|
||||
它提供了一种声明式的方法来定义和管理应用程序的生命周期, 包括创建、更新和回滚等操作。
|
||||
Deployment 控制器(通过管理 ReplicaSet 来确保应用程序的期望状态与实际状态保持一致),从而实现高可用性和弹性伸缩。
|
||||
|
||||
|
||||
|
||||
二、声明式与命令式
|
||||
|
||||
# kubectl replace -f deployment.yaml
|
||||
命令式创建deployment控制器,
|
||||
不支持部分更新,会覆盖之前的配置
|
||||
|
||||
# kubectl apply -f deployment.yaml
|
||||
声明式创建deployment控制器,
|
||||
支持部分更新,会合并之前的配置, 只更新与新配置中不同的部分
|
||||
apply 可以结合 -f or -k 参数从文件或者目录中读多个配置文件,并根据当前集群资源状态进行更新
|
||||
|
||||
# kubectl diff -f deployment.yaml
|
||||
比较当前集群实际运行的资源清单对象与当前资源清单文件对象的差异
|
||||
|
||||
|
||||
三、Deployment 控制器资源清单
|
||||
|
||||
# 资源清单例子
|
||||
|
||||
apiVersion: apps/v1 # 接口组/版本
|
||||
kind: Deployment # 资源类型:Deployment 控制器
|
||||
metadata:
|
||||
labels:
|
||||
app: myapp-deployment
|
||||
name: myapp-deployment
|
||||
spec:
|
||||
selector:
|
||||
metadata:
|
||||
app: myapp-deployment
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: myapp-deployment
|
||||
spec:
|
||||
containers:
|
||||
- name: myapp-container
|
||||
image: nginx:1.7.9
|
||||
ports:
|
||||
- containerPort: 80
|
||||
|
||||
# 上边的Deployment控制器清单没在spec中设置replicas,默认为 1
|
||||
|
||||
|
||||
三、Deployment常用命令
|
||||
|
||||
# kubectl create -f deployment.yaml
|
||||
创建Deployment控制器
|
||||
|
||||
# kubectl create -f deployment.yaml --record
|
||||
创建Deployment控制器, 并记录变更历史
|
||||
|
||||
# kubectl apply -f deployment.yaml
|
||||
创建或更新Deployment控制器
|
||||
|
||||
# kubectl scale deployment myapp-deployment --replicas=3
|
||||
扩缩容Deployment控制器
|
||||
|
||||
# kubectl autoscale deployment myapp-deployment --min=10 --max=15 --cpu-percent=80
|
||||
基于CPU使用率自动扩缩容Deployment控制器
|
||||
|
||||
# kubectl rollout status deployment myapp-deployment
|
||||
查看Deployment控制器的滚动更新状态
|
||||
|
||||
# kubectl rollout undo deployment myapp-deployment
|
||||
回滚Deployment控制器到上一个版本
|
||||
|
||||
# kubectl set image deployment/myapp-deployment myapp-container=nginx/nginx:1.9.1
|
||||
更新Deployment控制器的镜像
|
||||
|
||||
31
k8s知识笔记/常用命令.sh
Normal file
31
k8s知识笔记/常用命令.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
# 获取当前的资源, pod
|
||||
kubectl get pods <选项> <命令>
|
||||
-A, --all-namespaces 获取所有命名空间的资源
|
||||
-o, --output='': 输出格式, json, yaml, wide(显示更多信息)
|
||||
-n, --namespace='': 指定命名空间
|
||||
-l, --selector='': 基于标签的过滤器
|
||||
--show-labels=false: 显示标签
|
||||
|
||||
# 进入 Pod 内部容器执行命令
|
||||
kubectl exec -it <pod名称> <选项> <命令>
|
||||
-c, --container='': 指定容器名称, pod 内有多个容器时使用
|
||||
-it: 交互式终端,默认可省略
|
||||
-- /bin/bash 或 -- /bin/sh: 进入容器后使用的 shell 类型, 取决于容器内是否有 bash
|
||||
|
||||
# 查看 Pod 日志
|
||||
kubectl logs <pod名称> <选项> <命令>
|
||||
-f, --follow=false: 持续输出日志
|
||||
-c, --container='': 指定容器名称, pod 内有多个容器时使用
|
||||
--tail=-1: 输出日志的最后几行, -1表示全部
|
||||
--since=0s: 只输出最近多少时间的日志, 10s, 5m, 1h
|
||||
--timestamps=false: 显示日志时间戳
|
||||
--previous=false: 查看上一个容器实例的日志, 容器重启后使用
|
||||
|
||||
# 查看资源的详细信息
|
||||
kubectl describe <资源类型> <资源名称> <选项>
|
||||
-n, --namespace='': 指定命名空间, 不指定则为 default
|
||||
-A, --all-namespaces: 查看所有命名空间的资源
|
||||
--show-events=false: 是否显示事件信息, 默认显示
|
||||
--field-selector='': 基于字段的过滤器, 例如 status.phase=Running
|
||||
-l, --selector='': 基于标签的过滤器
|
||||
--sort-by='': 根据指定字段排序, 例如 metadata.name
|
||||
64
虚拟机安装/一、机器准备.conf
Normal file
64
虚拟机安装/一、机器准备.conf
Normal file
@@ -0,0 +1,64 @@
|
||||
# 配置各节点的IP地址和主机名映射
|
||||
k8s-master: 192.168.31.11/24
|
||||
k8s-node-01: 192.168.31.12/24
|
||||
k8s-node-02: 192.168.31.13/24
|
||||
# 设置主机名为 k8s-master
|
||||
hostnamectl set-hostname k8s-master
|
||||
hostnamectl set-hostname k8s-node-01
|
||||
hostnamectl set-hostname k8s-node-02
|
||||
|
||||
# 修改host文件
|
||||
echo "192.168.31.11 k8s-master km" >> /etc/hosts
|
||||
echo "192.168.31.12 k8s-node-01 kn1" >> /etc/hosts
|
||||
echo "192.168.31.13 k8s-node-02 kn2" >> /etc/hosts
|
||||
|
||||
# 关闭防火墙
|
||||
systemctl disable firewalld --now
|
||||
|
||||
# 关闭SELinux
|
||||
setenforce 0
|
||||
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
|
||||
|
||||
# 关闭交换分区
|
||||
swapoff -a
|
||||
sed -i '/swap/d' /etc/fstab # 永久关闭交换分区
|
||||
|
||||
## 配置内核参数,开启 IP 转发和网桥过滤
|
||||
# 创建配置文件
|
||||
sudo tee /etc/modules-load.d/k8s.conf <<EOF
|
||||
overlay
|
||||
br_netfilter
|
||||
EOF
|
||||
# 加载模块
|
||||
sudo modprobe overlay
|
||||
sudo modprobe br_netfilter
|
||||
# 设置内核参数
|
||||
sudo tee /etc/sysctl.d/k8s.conf <<EOF
|
||||
net.bridge.bridge-nf-call-iptables = 1
|
||||
net.bridge.bridge-nf-call-ip6tables = 1
|
||||
net.ipv4.ip_forward = 1
|
||||
EOF
|
||||
# 应用内核参数
|
||||
sudo sysctl --system
|
||||
# 查看内核参数
|
||||
sysctl net.bridge.bridge-nf-call-iptables
|
||||
|
||||
## 配置时间同步
|
||||
# 安装 chrony 时间同步服务
|
||||
dnf install -y chrony
|
||||
# 启动并设置 chrony 开机自启
|
||||
systemctl enable --now chronyd
|
||||
# 查看时间同步状态,确保有 NTP 源并且时间已同步
|
||||
chronyc sources
|
||||
|
||||
# 配置 SSH 免密登录
|
||||
# 在 master 节点上生成 SSH 密钥对
|
||||
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
|
||||
# 将公钥复制到所有节点,包括 master 自己
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node-01
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node-02
|
||||
|
||||
# 重启服务器
|
||||
reboot
|
||||
|
||||
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 的配置
|
||||
|
||||
|
||||
81
虚拟机安装/二、安装容器运行时.conf
Normal file
81
虚拟机安装/二、安装容器运行时.conf
Normal file
@@ -0,0 +1,81 @@
|
||||
# Containerd 默认位置详解
|
||||
-软件本身- -位置- -说明-
|
||||
containerd 二进制文件 /usr/local/bin/containerd containerd 主程序
|
||||
containerd 配置文件 /etc/containerd/config.toml containerd 配置文件
|
||||
containerd 服务文件 /etc/systemd/system/containerd.service systemd 服务单元文件
|
||||
containerd 数据目录 /var/lib/containerd 存储容器和镜像数据
|
||||
- 容器镜像 /var/lib/containerd/io.containerd.content.v1.content 存放所有拉取下来的容器镜像的内容(文件层)
|
||||
- 容器文件系统 /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs 存放容器运行时的文件系统数据
|
||||
- 镜像元数据 /var/lib/containerd/io.containerd.metadata.v1 存放镜像的元数据信息,如标签、创建时间等
|
||||
- 容器状态 /var/lib/containerd/io.containerd.state.v1 存放容器的运行状态信息
|
||||
- 快照存储 /var/lib/containerd/io.containerd.snapshot.v1 存放容器的快照数据
|
||||
持久化卷 (Volumes) /var/lib/kubelet/pods/<pod-id>/volumes/<volume-name> 存放 Kubernetes 持久化卷数据
|
||||
containerd 日志文件 /var/log/containerd 日志文件位置(如果配置了日志)
|
||||
containerd 插件目录 /usr/local/lib/containerd 存放 containerd 插件
|
||||
containerd.sock Unix 套接字文件 /run/containerd/containerd.sock 用于与 containerd 通信的套接字文件
|
||||
containerd-shim 服务文件 /etc/systemd/system/containerd-shim@.service 用于管理容器生命周期的服务单元文件
|
||||
containerd-shim 日志文件 /var/log/containerd-shim shim 的日志文件位置(如果配置了日志)
|
||||
containerd-shim 数据目录 /var/lib/containerd-shim shim 存储数据的位置
|
||||
containerd-shim 插件目录 /usr/local/lib/containerd-shim 存放 containerd-shim 插件
|
||||
containerd-shim Unix 套接字文件 /run/containerd-shim/<container_id>.sock 用于与特定容器通信的套接字文件
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 方案规划:
|
||||
Containerd 数据目录:从 /var/lib/containerd 迁移到 /data/containerd/lib。
|
||||
Kubelet 卷目录:从 /var/lib/kubelet 迁移到 /data/kubelet。我们将通过创建一个符号链接 (Symbolic Link) 来实现,这是最简单、最可靠的方法。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 步骤:
|
||||
# 安装 Containerd
|
||||
# 1. 安装所需的依赖包
|
||||
dnf install -y yum-utils device-mapper-persistent-data lvm2
|
||||
# 2. 添加 Docker 官方的 yum 仓库
|
||||
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
||||
# 3. 安装 Containerd 软件包 (我们不需要完整的 Docker 引擎)
|
||||
dnf install -y containerd.io
|
||||
|
||||
# 建自定义数据目录
|
||||
mkdir -p /data/containerd/lib
|
||||
mkdir -p /data/kubelet
|
||||
|
||||
# 生成默认配置文件
|
||||
containerd config default | tee /etc/containerd/config.toml
|
||||
## 修改配置文件
|
||||
# 编辑 /etc/containerd/config.toml 文件,进行以下修改:
|
||||
# 1. 数据目录:将 root 和 state 指向我们的自定义路径
|
||||
sed -i 's|root = "/var/lib/containerd"|root = "/data/containerd/lib"|g' /etc/containerd/config.toml
|
||||
sed -i 's|state = "/run/containerd"|state = "/data/containerd/state"|g' /etc/containerd/config.toml
|
||||
# 2. SystemdCgroup:将其设置为 true,这是 Kubernetes 推荐的配置,可以更好地与系统的 cgroup 管理器集成。
|
||||
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
|
||||
# 3. 换阿里云的镜像源
|
||||
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10.1"#g' /etc/containerd/config.toml
|
||||
# 保存并关闭文件
|
||||
|
||||
# 为 Kubelet 卷目录创建符号链接
|
||||
# 1. 如果 /var/lib/kubelet 目录已存在,先删除它
|
||||
rm -rf /var/lib/kubelet
|
||||
# 2. 创建一个从默认路径到我们自定义路径的符号链接
|
||||
ln -s /data/kubelet /var/lib/kubelet
|
||||
|
||||
## 启动并设置 Containerd 开机自启
|
||||
# 重新加载 systemd 配置
|
||||
systemctl daemon-reload
|
||||
# 启动 containerd 服务
|
||||
systemctl start containerd
|
||||
# 设置 containerd 开机自启
|
||||
systemctl enable containerd
|
||||
# 重启 containerd 服务
|
||||
systemctl restart containerd
|
||||
# 查看 containerd 服务状态,确保其为 active (running)
|
||||
systemctl status containerd
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user