欢迎关注我的公众号:
目前刚开始写一个月,一共写了18篇原创文章,文章目录如下:
istio防故障利器,你知道几个,istio新手不要读,太难!
不懂envoyfilter也敢说精通istio系列-http-rbac-不要只会用AuthorizationPolicy配置权限
不懂envoyfilter也敢说精通istio系列-02-http-corsFilter-不要只会vs
不懂envoyfilter也敢说精通istio系列-03-http-csrf filter-再也不用再代码里写csrf逻辑了
不懂envoyfilter也敢说精通istio系列http-jwt_authn-不要只会RequestAuthorization
不懂envoyfilter也敢说精通istio系列-05-fault-filter-故障注入不止是vs
不懂envoyfilter也敢说精通istio系列-06-http-match-配置路由不只是vs
不懂envoyfilter也敢说精通istio系列-07-负载均衡配置不止是dr
不懂envoyfilter也敢说精通istio系列-08-连接池和断路器
不懂envoyfilter也敢说精通istio系列-09-http-route filter
不懂envoyfilter也敢说精通istio系列-network filter-redis proxy
不懂envoyfilter也敢说精通istio系列-network filter-HttpConnectionManager
不懂envoyfilter也敢说精通istio系列-ratelimit-istio ratelimit完全手册
————————————————
PodDisruptionBudget:
•pod 中断 预算、
•终止pod前 通过labelSelector机制获取正常运行的pod数目的限制,目的是对主动驱逐的保护措施。
特性:
•PDB指定一个pod集合在一段时间内存活的最小实例数量或者百分比
•作用于一组被同一个控制器管理的pod。例如:RS或者statefulset
•使用PodDisruptionBudget控制器本身无法真正保障指定数量或者百分比的pod存活,PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不
•降级场景局限于:主动驱逐
•一个 PDB 对应一个控制器创建的 Pod,例如,Deployment、ReplicaSet或StatefulSet。
maxUnavailable 为 0%(或0)或者 minAvailable 为 100%(或与控制器的 .spec.replicas 相等)将阻止节点排空任务
舍入:
•如果指定这些值为一个百分数,其计算结果可能不会正好是一个整数。例如,假设有 7 个 Pod,minAvailable 设置为 50%,你将很难判断,到底是 3 个还是 4 个 Pod 必须始终保持可用。Kubernetes 将向上舍入(round up to the nearest integer),因此,此处必须有 4 个 Pod 始终可用。
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 8
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
[root@master01 pdb]# cat pdb-avaliable.yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
minAvailable: 7
selector:
matchLabels:
app: nginx
[root@master01 pdb]# cat pdb-avaliable-noevit.yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
minAvailable: 100%
selector:
matchLabels:
app: nginx
[root@master01 pdb]# cat pdb-unavaliable.yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
maxUnavailable: 1
selector:
matchLabels:
app: nginx
[root@master01 pdb]# cat pdb-unavaliable-noevit.yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
maxUnavailable: 0%
selector:
matchLabels:
app: nginx
命令:
•Kubectl cordon
•Kubectl uncordon
•kubectl drain
•kubectl drain foo –force
•kubectl drain foo --grace-period=900
•Kubectl drain 192.168.198.156 --ignore-daemonsets --delete-local-data
•kubectl create pdb my-pdb --selector=app=nginx --min-available=50%
•kubectl create poddisruptionbudget my-pdb --selector=app=rails --min-available=1
•Kubectl create pdb my-pdb –selector=app=nginx --max-unavailable=50%
•Kubectl create pdb my-pdb –selector=app=nginx --max-unavailable=1