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