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. yuml文件
# 一、yuml文档格式 [https://k8syaml.com/](https://k8syaml.com/) ## 1. 注释 使用#作为注释,YAML中只有行注释。 ## 2. 基本格式要求 - YAML大小写敏感; - 使用缩进代表层级关系; - 缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格) ## 3. YAML支持的数据结构 - 对象:键值对集合,又称为映射、哈希、字典 - 数组:一组按照次序排列的值,又称为序列、列表 - 纯量:单个、不可再分的值 ## 4. k8s yaml 文件中字段类型 - <Object> 对象类型 ```yaml metadata: name: namespace: ``` - <[]Object> 对象列表类型 ```yaml containers: - name: name1 images: - name: name2 images: ``` - <string> 字符串类型<br />namespace: default - <integer> 整型<br />replica: 3 - <boolean> 布尔类型 true or false<br />hostIPC: false - <map[string]string>字符串嵌套<br />nodeSelector:<br /> label: lablename - <[]> 列表类型 ```yaml 写法1: command: - "string1" - "string2" 写法二: command: ["string1","string2","string3"] ``` # 二、必要字段 ## 1. 模板 ```yaml apiVersion: v1 kind: Namespace metadata: name: dev spec: finalizers: - kubernetes ``` ## 2. 字段说明 | 字段 | 类型 | 说明 | | --- | --- | --- | | apiVersion | string | k8s API版本,可以使用kubectl api-versions查询 | | kind | string | yaml文件定义的资源类型和角色,有Pod、Deployment、Endpoints、Service | | metadata | object | 元数据对象 | | spec | object | 详细定义对象,用来描述所期望的对象应该具有的状态 | # 三、metadata字段 | 字段 | 类型 | 说明 | | --- | --- | --- | | namespace | string | 指定当前对象隶属的名称空间,默认值为default。 | | name: | string | 设定当前对象的名称,在其所属的名称空间的同一类型中必须唯一。 | | labels: | string | 用于标识当前对象的标签,键值数据,常被用作挑选条件。 | # 四、spec字段 ## 1. spec.containers[]:spec对象的容器列表定义 | spec.containers[].name | string | 定义容器的名字 | | --- | --- | --- | | spec.containers[].image | string | 定义用到的镜像名称 | | spec.containers[].imagePullPolicy | string | 定义镜像拉取策略 always:默认,每次都hub拉取 <br />never:仅使用本机镜像<br /> ifnotprestnt:本机没有就hub拉取 | | spec.containers[].command[] | list | 指定一个或多个容器启动命令 | | spec.containers[].args[] | list | 指定容器启动命令参数,Dockerfile中CMD参数 | | spec.containers[].workingDir | string | 指定容器工作目录 | ## 2. spec.containers[].volumeMounts[]:指定容器内部的存储卷配置 | spec.containers[].volumeMounts[].name | string | 容器挂载的存储卷名称 | | --- | --- | --- | | spec.containers[].volumeMounts[].mountPath | string | 容器挂载的存储卷路径 | | spec.containers[].volumeMounts[].readOnly | string | 存储卷读写模式,ture或false, 默认为读写模式 | ## 3. spec.containers[].ports[]:指定容器端口列表 | spec.containers[].ports[].name | string | 指定端口名称 | | --- | --- | --- | | spec.containers[].ports[].containerPort | string | 指定容器监听的端口号 | | spec.containers[].ports[].hostPort | string | 指定容器所在主机监听的端口号,设置了hostPort后同一台主机无法启动相同副本 | | spec.containers[].ports[].protocol | string | 指定端口协议,默认为TCP | ## 4. spec.containers[].env[]:指定容器运行前环境变量 | spec.containers[].env[].name | string | 指定环境变量名称 | | --- | --- | --- | | spec.containers[].env[].value | string | 指定环境变量值 | ## 5. spec.containers[].resources.limits:指定容器运行时资源的上限 | spec.containers[].resources.limits.cpu | string | 指定cpu限制,单位为core数 | | --- | --- | --- | | spec.containers[].resources.limits.memory | string | 指定内存限制,单位为MIB,GIB | ## 6. spec.containers[].resources.requests:指定容器启动和调度时资源的上限 | spec.containers[].resources.requests.cpu | string | 指定cpu限制,单位为core数 | | --- | --- | --- | | spec.containers[].resources.requests.memory | string | 指定内存限制,单位为MIB,GIB | ## 7. 探针 | spec.containers[].livenessProbe | object | 存活检测 | | --- | --- | --- | | spec.containers[].ReadinessProbe | object | 就绪检测 | | spec.containers[].检测方式.initialDelaySeconds | Int | 初始化延迟的时间,监测从多久之后开始运行,单位是秒 | | spec.containers[].检测方式.timeoutSeconds | Int | 监测的超时时间,如果超过这个时长后,则认为监测失败 | | spec.containers[].检测方式.periodSeconds | int | 存活性探测的频度,显示为period属性,默认为10s,最小值为1 | | spec.containers[].检测方式.successThreshold | int | 处于失败状态时,探测操作至少连续多少次的成功才被认为是通过检测,显示为#success属性,默认值为1,最小值也为1。 | | spec.containers[].检测方式.failureThreshold: | int | 处于成功状态时,探测操作至少连续多少次的失败才被视为是检测不通过,显示为#failure属性,默认值为3,最小值为1。 | ## 8. exec检测 | spec.containers[].检测方式.exec | Object | exec方式执行命令检测 | | --- | --- | --- | | spec.containers[].检测方式.exec.command | List | 执行的检测命令依据 | ## 9. httpGet检测 | spec.containers[].检测方式.httpGet | Object | http探针,依据状态码 | | --- | --- | --- | | spec.containers[].检测方式.httpGet.host | string | 请求的主机地址,默认为Pod IP; | | spec.containers[].检测方式.httpGet.port | string | 请求的端口,必选字段。 | | spec.containers[].检测方式.httpGet.httpHeaders | Object | 自定义的请求报文首部 | | spec.containers[].检测方式.httpGet.path | string | 请求的HTTP资源路径,即URL | | spec.containers[].检测方式.httpGet.scheme | string | 建立连接使用的协议,仅可为HTTP或HTTPS,默认为HTTP。 | ## 10. tcpSocket检测 | spec.containers[].检测方式.tcpSocket | Object | tcpSocket检测,依据端口是否开放 | | --- | --- | --- | | spec.containers[].检测方式.tcpSocket.host | string | 请求连接的目标IP地址,默认为Pod IP。 | | spec.containers[].检测方式.tcpSocket.port | string | 请求连接的目标端口,必选字段。 | ## 11. 其他spec | spec.restartPolicy | string | 定义Pod重启策略 always:pod一旦终止就重启 onfailure:pod只有以非零退出码终止时(正常结束退出码为0),才会重启 never:pod终止后,不会重启 | | --- | --- | --- | | spec.nodeSelector | object | 定义node的label过滤标签,以key:value指定 | | spec.imagePullSecrets | object | 定义pull镜像时,使用secret名称,以key:value指定 | | spec.hostNetwork | Boolean | 定义是否使用主机网络模式,默认使用docker网桥,如果设置true无法启动相同副本 | # 五、控制器字段 ## 1. ReplicaSet | spec.replicas | integer | 期望的Pod对象副本数 | | --- | --- | --- | | spec.selector | Object | 当前控制器匹配Pod对象副本的标签选择器 | | spec.selector.matchLabels | string | matchLabels标签选择器 | | spec.selector.matchExpressions | string | matchExpressions标签选择器 | | spec.template | Object | 用于补足Pod副本数量时使用的Pod模板资源 | ## 2. Deployment | spec.strategy.rollingUpdate. maxSurge | integer/percent | 升级期间存在的总Pod对象数量最多可超出期望值的个数,其值可以是0或正整数,也可以是一个期望值的百分比 | | --- | --- | --- | | spec.strategy.rollingUpdate.maxUnavailable | integer/percent | 升级期间正常可用的Pod副本数(包括新旧版本)最多不能低于期望数值的个数,其值可以是0或正整数,也可以是一个期望值的百分比 | | spec.revisionHistoryLimit | integer | 控制器可保存的历史版本数量 | | spec.minReadySeconds | integer | 新建的Pod对象,在启动后的多长时间内如果其容器未发生崩溃等异常情况即被视为“就绪”;默认为0秒,表示一旦就绪性探测成功,即被视作可用 | ## 3. DaemonSet控制器 - .spec.selector 是必填字段,且指定该字段时,必须与.spec.template.metata.labels 字段匹配(不匹配的情况下创建 DaemonSet将失败)。DaemonSet 创建以后,.spec.selector字段就不可再修改。如果修改,可能导致不可预见的结果。 ## 4. Job控制器 - Pod模板中的spec.restartPolicy默认为“Always”,这对Job控制器来说并不适用,因此必须在Pod模板中显式设定restartPolicy属性的值为“Never”或“OnFailure”。 | .spec.parallelism | integer | 能够定义作业执行的并行度,将其设置为2或者以上的值即可实现并行多队列作业同时运行 | | --- | --- | --- | | spec.completions | integer | 使用的是默认值1,则表示并行度即作业总数 | - 将.spec.completions属性值设置为大于.spec.parallelism的属性值,则表示使用多队列串行任务作业模式 | .spec.activeDeadlineSeconds | integer | Job的deadline,用于为其指定最大活动时间长度,超出此时长的作业将被终止。 | | --- | --- | --- | | .spec.backoffLimit | integer | 将作业标记为失败状态之前的重试次数,默认值为6。 | ## 5. CronJob控制器 | jobTemplate | Object | Job控制器模板,用于为CronJob控制器生成Job对象;必选字段 | | --- | --- | --- | | schedule | string | Cron格式的作业调度运行时间点;必选字段。 | | concurrencyPolicy | string | 并发执行策略,可用值有“Allow”(允许)、“Forbid”(禁止)和“Replace”(替换),用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业 | | failedJobHistoryLimit | integer | 为失败的任务执行保留的历史记录数,默认为1。 | | successfulJobsHistoryLimit | integer | 为成功的任务执行保留的历史记录数,默认为3 | | startingDeadlineSeconds | integer | 因各种原因缺乏执行作业的时间点所导致的启动作业错误的超时时长,会被记入错误历史记录 | | suspend | boolean | 是否挂起后续的任务执行,默认为false,对运行中的作业不会产生影响。 | | .spec.successfulJobsHistoryLimit | integer | 保留多少完成的 Job。默认没有限制,所有成功和失败的 Job 都会被保留。 当运行一个 Cron Job 时,Job 可以很快就堆积很多,推荐设置这两个字段的值。设置限制的值为 0,相关类型的 Job 完成后将不会被保留。 | | .spec.failedJobsHistoryLimit | integer | 保留多少失败的 Job | | .spec.concurrencyPolicy | Allow/Forbid/Replace | 属性控制作业并存的机制,其默认值为“Allow”,即允许前后Job,甚至属于同一个CronJob的更多Job同时运行。 “Forbid”用于禁止前后两个Job同时运行,如果前一个尚未结束,后一个则不予启动(跳过), “Replace”用于让后一个Job取代前一个,即终止前一个并启动后一个。 | ## 6. PDB | .spec.selector | Object | 当前PDB对象使用的标签选择器,一般是与相关的Pod控制器使用同一个选择器。 | | --- | --- | --- | | .spec.minAvailable | string | Pod自愿中断的场景中,至少要保证可用的Pod对象数量或比例,要阻止任何Pod对象发生自愿中断,可将其设置为100% | | .spec.maxUnavailable | string | Pod自愿中断的场景中,最多可转换为不可用状态的Pod对象数量或比例,0值意味着不允许Pod对象进行自愿中断;此字段与minAvailable互斥 | # 六、service | .spec.selector: | Object | 当前svc使用的标签选择器,用来管理pod中一样的标签资源。 | | --- | --- | --- | | .spec.type | string | service类型 | | .spec.clusterIP | string | 虚拟服务IP地址 | | .spec.ExternalName | string | ExternalName模式域名 | | .spec.sessionAffinity | string | 是否支持session会话绑定 | | .spec.ports.name | string | 端口名称 | | .spec.ports.protocol | string | 端口协议,默认tcp | | .spec.ports.port | integer | 服务监听端口号 | | .spec.ports.targetPort | integer | 转发到后端的服务端口号 | | .spec.ports.nodePort | integer | nodeport模式绑定物理主机端口 | # 七、ingress | .spec.rules | Object | 用于定义当前Ingress资源的转发规则列表 | | --- | --- | --- | | .spec.rules.host | string | 指定访问地址,留空表示通配所有的主机名 | | .spec.backend | Object | 为负载均衡器指定一个全局默认的后端 | | .spec.backend.serviceName | string | 流量转发的后端目标Service资源的名称 | | .spec.backend.servicePort | integer | 流量转发的后端目标Service资源的端口 | | .spec.tls | Object | TLS配置,目前仅支持通过默认端口443提供服务 | | .spec.tls.hosts | string | 使用的TLS证书之内的主机名称,此处使用的主机名必须匹配tlsSecret中的名称。 | | .spec.tls.secretName | string | SSL会话的secret对象名称,在基于SNI实现多主机路由的场景中,此字段为可选。 | # 八、存储 ## 1. configmap | .spec.volumes.configMap.items.key | string | 要引用的键名称,必选字段 | | --- | --- | --- | | .spec.volumes.configMap.items.path | string | 对应的键于挂载点目录中生成的文件的相对路径,可以不同于键名称,必选字段 | | .spec.volumes.configMap.items.mode | integer | 文件的权限模型,可用范围为0到0777。 |
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