https://kuboard.cn/learning/k8s-intermediate/service/service-details.html
Kubernetes学习之路(十四)之服务发现Service
kubernetes系列08—service资源详解
浅谈 Kubernetes Service 负载均衡实现机制
有时不想写yaml文件, 可以基于deployment直接创建一个服务来暴露 Deployment
kubectl expose deployment hello-world --type=NodePort --name=example-service
example-service是服务名称
session affinity, 会话亲和性,又称会话保持
session保持
如何在service内部实现session保持呢?当然是在service的yaml里进行设置啦。
在service的yaml的sepc里加入以下代码:
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
这样就开启了session保持。下面的timeoutSeconds指的是session保持的时间,这个时间默认是10800秒,也就是三个小时。
那么原理是啥呢?当不设置session保持时,service向后台pod转发规则是轮询。当设置了session保持之后,k8s会根据访问的ip来把请求转发给他以前访问过的pod,这样session就保持住了。
service.spec.sessionAffinity
默认值为 "None"
如果设定为 "ClientIP",则同一个客户端的连接将始终被转发到同一个 Pod
service.spec.sessionAffinityConfig.clientIP.timeoutSeconds
默认值为 10800 (3 小时)
设定会话保持的持续时间
#多端口的Service
service负载均衡 默认是根据kube-proxy的负载均衡策略
kube-proxy 作为一个控制器,作为 k8s 和 Linux kernel Netfilter 交互的一个枢纽。监听 kubernetes 集群 Services 和 Endpoints 对象的变化,并根据 kube-proxy 不同的模式 (iptables or ipvs), 对内核设置不同的规则,来实现路由转发
静态方法,根据算法本身进行轮询调度
RR, Round Robin
WRR,Wrighted RR
SH,SourceIP Hash
DH,Destination Hash
动态方法,根据算法以及 RS 的当前负载状态进行调度
LC,least connections
WLC,Weighted Least Connection
SED,Shortest Expection Delay
NQ,Never Queue
LBLC,Locality-Based Least Connection
LBLCR,Locality-Based Least Connections withReplication
kube-proxy 中使用 IPVS 模式进行负载均衡。首先需要在启动 kube-proxy 的参数中指定如下参数:
kube-proxy 可以通过 --ipvs-scheduler 参数选择调度算法,默认情况下是 Round Robin 算法。
--proxy-mode=ipvs // 将 kube-proxy 的模式设置为 IPVS
--ipvs-scheduler=rr // 设置 ipvs 的负载均衡算法,默认是 rr
--ipvs-min-sync-period=5s // 刷新 IPVS 规则的最小时间间隔
--ipvs-sync-period=30s // 刷新 IPVS 规则的最大时间间隔
https://kuboard.cn/learning/k8s-intermediate/service/dns.html#pod-%E7%9A%84-hostname-subdomain
https://kuboard.cn/learning/k8s-intermediate/config/secrets/create-kubectl.html
通过 Pod 定义中的 .spec.hostAliases 字段,我们可以向 Pod 的 /etc/hosts 文件中添加额外的条目,用来解析 foo.local、bar.local 到 127.0.0.1 和 foo.remote、bar.remote 到 10.1.2.3,如下所示:
apiVersion: v1
kind: Pod
metadata:
name: hostaliases-pod
spec:
restartPolicy: Never
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
containers:
- name: cat-hosts
image: busybox
command:
- cat
args:
- "/etc/hosts"
由于该文件已经被 Kubelet 管理起来,任何对该文件手工修改的内容,都将在 Kubelet 重启容器或者 Pod 重新调度时被覆盖。因此,最好是通过 hostAliases 修改 Pod 的 /etc/hosts 文件,而不是手工修改。
比如限制某些pod不能访问指定的pod
ResourceQuota
ResourceQuota 用来限制 namespace 中所有的 Pod 占用的总的资源 request 和 limit
LimitRange
LimitRange 用来限制 namespace 中 单个Pod 默认资源 request 和 limit
https://blog.csdn.net/qq_33235529/article/details/105194130