Kubernetes
一、基础知识
1. 概念和术语
2. Kubernetes特性
3. 集群组件
4. 抽象对象
5. 镜像加速下载
二、安装部署kubeadm
1. 基础环境准备
2. 安装runtime容器(Docker)
3. 安装runtime容器(Contained)
4. Containerd进阶使用
5. 部署kubernets集群
6. 部署calico网络组件
7. 部署NFS文件存储
8. 部署ingress-nginx代理
9. 部署helm包管理工具
10. 部署traefik代理
11. 部署dashboard管理面板(官方)
12. 部署kubesphere管理面板(推荐)
12. 部署metrics监控组件
13. 部署Prometheus监控
14. 部署elk日志收集
15. 部署Harbor私有镜像仓库
16. 部署minIO对象存储
17. 部署jenkins持续集成工具
三、kubectl命令
1. 命令格式
2.node操作常用命令
3. pod常用命令
4.控制器常用命令
5.service常用命令
6.存储常用命令
7.日常命令总结
8. kubectl常用命令
四、资源对象
1. K8S中的资源对象
2. yuml文件
3. Kuberbetes YAML 字段大全
4. 管理Namespace资源
5. 标签与标签选择器
6. Pod资源对象
7. Pod生命周期与探针
8. 资源需求与限制
9. Pod服务质量(优先级)
五、资源控制器
1. Pod控制器
2. ReplicaSet控制器
3. Deployment控制器
4. DaemonSet控制器
5. Job控制器
6. CronJob控制器
7. StatefulSet控制器
8. PDB中断预算
六、Service和Ingress
1. Service资源介绍
2. 服务发现
3. Service(ClusterIP)
4. Service(NodePort)
5. Service(LoadBalancer)
6. Service(ExternalName)
7. 自定义Endpoints
8. HeadlessService
9. Ingress资源
10. nginx-Ingress案例
七、Traefik
1. 知识点梳理
2. 简介
3. 部署与配置
4. 路由(IngressRoute)
5. 中间件(Middleware)
6. 服务(TraefikService)
7. 插件
8. traefikhub
9. 配置发现(Consul)
10. 配置发现(Etcd)
八、存储
1. 配置集合ConfigMap
6. downwardAPI存储卷
3. 临时存储emptyDir
2. 敏感信息Secret
5. 持久存储卷
4. 节点存储hostPath
7. 本地持久化存储localpv
九、rook
1. rook简介
2. ceph
3. rook部署
4. rbd块存储服务
5. cephfs共享文件存储
6. RGW对象存储服务
7. 维护rook存储
十、网络
1. 网络概述
2. 网络类型
3. flannel网络插件
4. 网络策略
5. 网络与策略实例
十一、安全
1. 安全上下文
2. 访问控制
3. 认证
4. 鉴权
5. 准入控制
6. 示例
十二、pod调度
1. 调度器概述
2. label标签调度
3. node亲和调度
4. pod亲和调度
5. 污点和容忍度
6. 固定节点调度
十三、系统扩展
1. 自定义资源类型(CRD)
2. 自定义控制器
十四、资源指标与HPA
1. 资源监控及资源指标
2. 监控组件安装
3. 资源指标及其应用
4. 自动弹性缩放
十五、helm
1. helm基础
2. helm安装
3. helm常用命令
4. HelmCharts
5. 自定义Charts
6. helm导出yaml文件
十六、k8s高可用部署
1. kubeadm高可用部署
2. 离线二进制部署k8s
3. 其他高可用部署方式
十七、日常维护
1. 修改节点pod个数上限
2. 集群证书过期更换
3. 更改证书有效期
4. k8s版本升级
5. 添加work节点
6. master节点启用pod调度
7. 集群以外节点控制k8s集群
8. 删除本地集群
9. 日常错误排查
10. 节点维护状态
11. kustomize多环境管理
12. ETCD节点故障修复
13. 集群hosts记录
14. 利用Velero对K8S集群备份还原与迁移
15. 解决K8s Namespace无法正常删除的问题
16. 删除含指定名称的所有资源
十八、k8s考题
1. 准备工作
2. 故障排除
3. 工作负载和调度
4. 服务和网络
5. 存储
6. 集群架构、安装和配置
本文档使用 MrDoc 发布
-
+
home page
2. ReplicaSet控制器
# 一、概述 1. 作用:用于确保由其管控的Pod对象副本数在任一时刻都能精确满足期望的数量。ReplicaSet控制器资源启动后会查找集群中匹配其标签选择器的Pod资源对象,当前活动对象的数量与期望的数量不吻合时,多则删除,少则通过Pod模板创建以补足。 2. 功能: - 确保Pod资源对象的数量:ReplicaSet需要确保由其控制运行的Pod副本数量精确吻合配置中定义的期望值,否则就会自动补足所缺或终止所余。 - 确保Pod健康运行:探测到由其管控的Pod对象因其所在的工作节点故障而不可用时,自动请求由调度器于其他工作节点创建缺失的Pod副本。 - 弹性伸缩:业务规模因各种原因时常存在明显波动,在波峰或波谷期间,可以通过ReplicaSet控制器动态调整相关Pod资源对象的数量。 - 通过HPA(HroizontalPodAutoscaler)控制器实现Pod资源规模的自动伸缩。 # 二、创建ReplicaSet 1. 可以使用YAML或JSON格式的清单文件定义其配置它的spec字段一般嵌套使用以下几个属性字段。 | replicas | integer | 期望的Pod对象副本数 | | --- | --- | --- | | selector | Object | 当前控制器匹配Pod对象副本的标签选择器,支持matchLabels和matchExpressions两种匹配机制 | | template | Object | 用于补足Pod副本数量时使用的Pod模板资源 | | minReadySeconds | integer | 新建的Pod对象,在启动后的多长时间内如果其容器未发生崩溃等异常情况即被视为“就绪”;默认为0秒,表示一旦就绪性探测成功,即被视作可用 | 2. 示例: - 创建rs-example.yaml文件  - 创建rs资源:<br />`$ kubectl apply -f rs-example.yaml` - 查看名称为"rs-demo"的pod资源<br />`$ kubectl get pods -l app=rs-demo`  - 查看replicaset控制器资源状态  # 三、 ReplicaSet管控Pod对象 1. 缺少Pod副本 > 任何原因导致的相关Pod对象丢失,都会由ReplicaSet控制器自动补足。 - 手动删除上面列出的一个Pod对象<br />`$ kubectl delete pods rs-example-5ncrr` - 再次列出相关Pod对象的信息,可以看到rs-example-5ncrr被删除,而新的Pod对象rs-example-jfp4k被rs-example控制器创建:  - 强行修改隶属于控制器rs-example的Pod资源标签,会导致它不再被控制器作为副本计数,这也将触发控制器的Pod对象副本缺失补足机制。<br />例如,将rs-example-26fnb的标签app的值改为rs:  2. 多出pod副本 > 一旦被标签选择器匹配到的Pod资源数量因任何原因超出期望值,多余的部分都将被控制器自动删除。 - 例如,为pod-example手动为其添加“app: rs-demo”标签:<br />`$ kubectl label pods rs-example-26fnb app=rs-demp --overwrite` - 再次列出相关的Pod资源,可以看到rs-example控制器启动了删除多余Pod的操作,pod-example正处于终止过程中:<br /><br />这就意味着,任何自主式的或本隶属于其他控制器的Pod资源其标签变动的结果一旦匹配到了其他的副本数足额的控制器,就会导致这类Pod资源被删除。 # 三、查看replicaset资源信息 1. 查看所有replicaset(子资源)信息  2. 查看所有replicaset(子资源)详细信息<br />`$ kubectl describe replicasets` <br />`$ kubectl describe replicasets/rs-example` # 四、更新ReplicaSet控制器 1. 更改Pod模板:升级应用<br />ReplicaSet控制器的Pod模板可随时按需修改,但它仅影响这之后由其新建的Pod对象,对已有的副本不会产生作用。但在用户逐个手动关闭其旧版本的Pod资源后就能以新代旧,实现控制器下应用版本的滚动升级。 - 修改原ReplicaSet.yaml文件镜像  - apply文件,查看image信息<br />`kubectl get pod -o custom-columns=pod_name:metadata.name,pod_image:spec.containers[0].image` <br /><br />rs-example管控的现存Pod对象使用的仍然是原来版本中定义的镜像 - 删除pod后自动生成新版pod  2. 扩容与缩容<br />改动ReplicaSet控制器对象配置中期望的Pod副本数量(replicas字段)会由控制器实时做出响应,从而实现应用规模的水平伸缩。<br />kubectl还提供了一个专用的子命令scale用于实现应用规模的伸缩,它支持从资源清单文件中获取新的目标副本数量,也可以直接在命令行通过“--replicas”选项进行读取, - 将rs-example控制器的Pod副本数量提升至5个:<br />`$ kubectl scale replicasets rs-example --replicas=5` <br /> - 由下面显示的rs-example资源的状态可以看出,将其Pod资源副本数量扩展至5个的操作已经成功完成:<br /> - 收缩规模的方式与扩展相同,只需要明确指定目标副本数量即可。 # 五、删除ReplicaSet控制器资源 1. 使用kubectl delete命令删除ReplicaSet对象时默认会一并删除其管控的各Pod对象。<br />`$ kubectl delete replicasets rs-example` # 六、故障转移 1. 目前有3个副本分别运行在node1和node2上。  2. 现在模拟 k8s-node2 故障,关闭该节点。  3. 等待一段时间,Kubernetes 会检查到 k8s-node2 不可用,将 k8s-node2 上的 Pod 标记为 terminating 状态,并在 k8s-node1 上新创建两个 Pod,维持总副本数为 3。  4. 当 k8s-node2 恢复后,terminating的 Pod 会被删除,不过已经运行的 Pod不会重新调度回 k8s-node2。 <br />
Nathan
June 22, 2024, 12:44 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password