控制器(续)
Job(一次性的)
执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束
CronJob (周期性的)
Cron Job 创建基于时间调度的 Jobs。
一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式 进行编写,并周期性地在给定的调度时间执行 Job。
此时kubectl logs pi-c8ssf输出π,kubectl get job查看完成。
vim cron.yaml
service服务
Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应 用可以方便地实现服务发现和负载均衡。
service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现) service的类型: ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。 NodePort:将Service通过指定的Node上的端口暴露给外部,访问任意一个 NodeIP:nodePort都将路由到ClusterIP。
Service 是由 kube-proxy 组件,加上 iptables 来共同实现的.
kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,(iptables -t nat -nL查看)如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU 资源。
IPVS模式的service,可以使K8s集群支持更多量级的Pod。
此时只有服务,还需要控制器
开启kube-proxy的ipvs模式:
cm配置把服务配置与镜像分离开,cm即为服务的配置文件
kube-proxy通过linux的IPVS模块,以rr轮询方式调度service中的Pod
IPVS模式下,kube-proxy会在service创建后,在宿主机上添加一个虚拟网卡: kube-ipvs0,并分配service IP。
Kubernetes 提供了一个 DNS 插件 Service
Headless Service “无头服务” Headless Service不需要分配一个VIP,而是直接以DNS记录的方式解析出被代理Pod 的IP地址。 域名格式:$(servicename).$(namespace).svc.cluster.local
直接使用dns域名解析来访问,Pod滚动更新后,依然可以解析
从外部访问 Service 的第二种方式,适用于公有云上的 Kubernetes 服务。这时 候,你可以指定一个 LoadBalancer 类型的 Service
LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均 衡器,并将请求转发到 <NodeIP>:NodePort,此模式只能在云服务器上使用。 ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。
在service提交后,Kubernetes就会调用 CloudProvider 在公有云上为你创建 一个负载均衡服务,并且把被代理的 Pod 的 IP地址配置给负载均衡服务做 后端。
官网:https://metallb.universe.tf/installation/
使用metallb
vim namespace.yaml
MetalLB, bare metal load-balancer for Kubernetes
配置网络
vim config.yaml
从外部访问的第三种方式叫做ExternalName
vim ex-svc.yaml
一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务。
Ingress由两部分组成:Ingress controller和Ingress服务。
Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种 反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维 护了对应的 Ingress Controller
官网:https://kubernetes.github.io/ingress-nginx/
Installation Guide - NGINX Ingress Controller下载deploy.yaml文件
vim deploy.yaml
里面的镜像无法正常下载,我们需要去docker.hub.com上面搜索关键字去找匹配度最高的
webhook需要改两处
kubectl apply -f deploy.yaml
修改类型为LoadBalancer
ingress下的svc服务
Basic usage - NGINX Ingress Controller
本地解析
通过公网ip访问控制器,控制器连接的后端pod
ingress tls配置
Prerequisites - NGINX Ingress Controller
TLS termination - NGINX Ingress Controller
ingress认证配置
Basic Authentication - NGINX Ingress Controller
ingress地址重写