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
5. Service(LoadBalancer)
## LoadBalancer简介 1. 这种类型建构在NodePort类型之上,大部分情况下只适用于支持外部负载均衡器的云提供商(AWS,阿里云,华为云等)使用,由它接入外部客户端的请求并调度至集群节点相应的NodePort之上。因此LoadBalancer一样具有NodePort和ClusterIP。 2. 简而言之,一个LoadBalancer类型的Service会指向关联至Kubernetes集群外部的、切实存在的某个负载均衡设备,该设备通过工作节点之上的NodePort向集群内部发送请求流量。 3. 例如Amazon云计算环境中的ELB实例即为此类的负载均衡设备。此类型的优势在于,它能够把来自于集群外部客户端的请求调度至所有节点(或部分节点)的NodePort之上,而不是依赖于客户端自行决定连接至哪个节点,从而避免了因客户端指定的节点故障而导致的服务不可用。 ![未命名图片.png](/media/202406/6.5.94199827_image1.png) ## 公有云(以阿里云为例)配置 参考文档:[https://help.aliyun.com/apsara/enterprise/v_3_15_0_20210816/csk/enterprise-ascm-user-guide/access-a-service-through-server-load-balancer--server-load-balancer-.html](https://help.aliyun.com/apsara/enterprise/v_3_15_0_20210816/csk/enterprise-ascm-user-guide/access-a-service-through-server-load-balancer--server-load-balancer-.html) ## 私有云(以MetalLB为例配置) ### 简介 MetalLB 是为裸机Kubernetes集群实现的负载均衡器,使用标准路由协议ARP或BGP。Kubernetes官方没有为裸机集群提供网络负载均衡器(LoadBalancer类型的服务)的实现。各家云厂商(GCP、AWS、Azure…)有相应实现,但必须运行在自身的云环境上才能使用,如果没有在受支持的IaaS平台(GCP、AWS、Azure…)上运行,那么负载均衡器在创建时将无限期地保持pending状态,如果你要使用loadbalancer service,那么就要用到metallb了 ### 工作模式 layer 2模式:也就是工作在2层来负责相应arp请求,对于局域网中的人来说仿佛就是给服务分配了一个ip,但是2层模式不是真正的负载均衡,因为所有的流量会经过集群中的一个节点,当这个节点挂了的话,metallb会迁移ip到另外一个节点上。Layer 2模式更为通用,不需要用户有额外的设备;但由于Layer 2模式使用ARP/ND,地址池分配需要跟客户端在同一子网,地址分配略为繁琐。<br />![image.png](/media/202406/6.5.94199827_image2.png)<br />bgp模式:集群中所有node都会跟上联路由器建立BGP连接,并且会告知路由器应该如何转发service的流量。<br />BGP模式是真正的LoadBalancer。但是需要你的路由器支持bgp,此处使用layer 2模式。<br />![image.png](/media/202406/6.5.94199827_image3.png) ### 文档 安装:[https://metallb.universe.tf/installation/](https://metallb.universe.tf/installation/)<br />配置使用:[https://metallb.universe.tf/configuration/](https://metallb.universe.tf/configuration/) ### 安装 ```bash # 如果kube-proxy使用的是IPVS模式,你需要启用staticARP [root@k8s-master MetalLB]# kubectl edit configmap -n kube-system kube-proxy # 设置staticARP为true mode: "ipvs" ipvs: strictARP: true # 创建资源 [root@k8s-master MetalLB]# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml # 查看资源 [root@k8s-master MetalLB]# kubectl get pod -n metallb-system NAME READY STATUS RESTARTS AGE controller-79d46b9996-thtw2 1/1 Running 0 2m35s speaker-9r59c 1/1 Running 0 2m34s speaker-shdvj 1/1 Running 0 2m34s speaker-w4g96 1/1 Running 0 2m34s # 设置ip地址池 [root@k8s-master MetalLB]# cat config.yaml apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.10.200-192.168.10.250 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: example namespace: metallb-system spec: ipAddressPools: - first-pool ``` ### 使用 ```yaml [root@k8s-master k8s-test]# cat deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - containerPort: 80 name: http [root@k8s-master k8s-test]# cat svc.yaml apiVersion: v1 kind: Service metadata: name: myapp spec: type: LoadBalancer selector: app: myapp ports: - name: http port: 80 protocol: TCP targetPort: 80 loadBalancerIP: 192.168.10.222 # 可以指定ip,也可以自动分配,指定的ip必须在ip地址池内 # 查看svc [root@k8s-master k8s-test]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d4h myapp LoadBalancer 10.101.173.202 192.168.10.222 80:32482/TCP 16m # 使用EXTERNAL-IP+端口访问 [root@k8s-master k8s-test]# curl 192.168.10.222:80 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> # 集群外部访问 http://192.168.10.222:80 ``` ![image.png](/media/202406/6.5.94199827_image4.png)
Nathan
June 22, 2024, 12:45 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password