HPA
什么是HPA
Kubernetes的HPA(Horizontal Pod Autoscaler)是一种自动缩放Pod副本数的功能,它根据监视的资源指标(如CPU、内存等)的变化来动态调整Pod的副本数量。这种自动缩放功能可以帮助应用程序在负载波动的情况下保持性能和稳定性。
HPA的工作原理是,当应用程序的资源使用率超过预设的阈值时,HPA会根据预设的扩容策略来增加Pod的副本数量。相反,当资源使用率下降并低于预设的阈值时,HPA会根据预设的缩容策略来减少Pod的副本数量。这种动态调整Pod副本数量的方式可以帮助应用程序在负载波动的情况下保持响应性和性能。
注意HPA的工作需要依赖merics-server,需要先部署此程序。
下载merics-server部署文件:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
修改YAML文件
vi high-availability-1.21+.yaml
添加一个配置参数: - --kubelet-insecure-tls
HPA示例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1 ##最小Pod数为1
maxReplicas: 10 ##最大Pod数为10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 ##当Pod的CPU使用率超过50%时,需要自动扩容
上述示例定义了一个HPA资源,此HPA资源监视名叫php-apache的Deployment资源,一旦php-apache关联的Pod的使用率超过50%时进行自动扩容,扩容的最大值是10个Pod。
Networkpolicy
什么是Networkpolicy
NetworkPolicy是Kubernetes设计用来限制Pod访问的对象,通过设置NetworkPolicy策略,可以允许Pod被哪些地址访问(即入规则)、或Pod访问哪些地址(即出规则)。这相当于从应用的层面构建了一道防火墙,进一步保证了网络安全。
应用场景举例:
- Pod A不能访问Pod B;
- 开发环境所有Pod不能访问测试命名空间;
- 提供对外访问时,限制外部IP;
NetworkPolicy的规则可以选择3种,具体如下:
- namespaceSelector:根据命名空间的标签选择,具有该标签的命名空间都可以访问。
- podSelector:根据Pod的标签选择,具有该标签的Pod都可以访问。
- ipBlock:指定IP地址
Networkpolicy示例
以下是官方示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
此示例定义了网络策略,此策略对出方向(ingress)和入方向(ingress)做了限制,并作用在拥有role=db标签的pod上。
其中对于入方向的定义是:
- 允许来自172.17.0.0/16网段(排除172.17.1.0/24)的IP地址访问TCP的6379端口
- 允许来自名为myproject的namespace的Pod访问TCP的6379端口
- 允许来自拥有role=frontend标签的Pod访问TCP的6379端口
对于出方向的定义是:
- 允许访问10.0.0.0/24网段的IP地址访问TCP的5978端口