https://www.zeusro.tech/2019/01/25/kubernetes-experience/

use k8s

升级及回滚

kubectl set image deployment/load-drift load-drift=192.168.146.61:5000/test/zhaogq/http_server:1.0.1 kubectl set image deployment/load-drift load-drift=192.168.146.61:5000/test/zhaogq/http_server:1.0.3 kubectl rollout undo deployment load-drift curl http://10.111.135.26:8010/myip

$ kubectl describe deployments #查询详细信息,获取升级进度 $ kubectl rollout pause deployment/DEPLOYMENT_NAME #暂停升级 $ kubectl rollout resume deployment/DEPLOYMENT_NAME #继续升级 $ kubectl rollout undo deployment/DEPLOYMENT_NAME #升级回滚

验证粘性会话

***** ** TCP 层的粘性会话 ** ** HTTP 层的粘性会话 **

基于 TCP 层的粘性会话

  • service的sessionAffinity可以通过客户端ip匹配后端的pod:相当于tcp层的一个保持会话
  • 使用方法:add Service.spec.sessionAffinity:ClusterIP to service configuration

为什么基于ingress反向代理后的Service.spec.sessionAffinity不生效?

1
ingress-nginx这个去访问后端的pod,虽然需要借助service的iptable的路由查看后端存在哪些pod,但是最终访问服务时是绕过service层直接操作后端pod的(这块之前理解也有误,一直以为ingress转发到了service,service发送至了pod),所以service的sessionAffinity并不生效。

基于 HTTP 层的粘性会话 **

1
事实上ingress-nginx也有粘滞连接的方法,在ingress的yaml配置中的Ingress.metadata.annotations注释中加入如下内容,就会根据不同的pod生成不同的hash来粘滞
1
2
3
	nginx.ingress.kubernetes.io/affinity: "cookie"
	nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
	nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
1
* 相关资料可参考:https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/ *

自动扩容

配置nginx自动扩容脚本并测试

在打压力的时候会出现Evicted的节点:

k8s 功能性操作

重置节点

master上隔离并删除节点

  • SchedulingDisabled,确保新的容器不会调度到该节点 kubectl cordon kubectl drain kubectl drain --ignore-daemonsets --delete-local-data

kubectl delete node

client上重置节点并重新加入master

sudo kubeadm reset sudo kubeadm join 172.23.127.113:6443 –token atg34o.2nwr0dn6ttojbt4h –discovery-token-ca-cert-hash sha256:3d236eac9a79894db27ed38cef6022e7051c5df54384a3f3d9740ab57fb92e35

批量删除Evicted Pod

kubectl get pods | grep Evicted | awk ‘{print $1}’ | xargs kubectl delete pod

注意事项

不要向容器中存储日志

disk space属于不可压缩资源 如果日志量过大,会导致DiskPressure