栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

守护进程服务DaemonSet、HPA自动扩缩容

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

守护进程服务DaemonSet、HPA自动扩缩容

守护进程服务DaemonSet
  • 1、DaemonSet的使用
  • 2、DaemonSet的配置
  • 3、新建DaemonSet
  • 4、DaemonSet的更新和回滚
  • 5、HPA

1、DaemonSet的使用

DaemonSet:守护进程集,缩写为ds,在所有节点或者是匹配的节点上都部署一个Pod。

使用DaemonSet的场景

  • 运行集群存储的daemon,比如ceph或者glusterd
  • 节点的CNI网络插件,calico
  • 节点日志的收集:fluentd或者是filebeat
  • 节点的监控:node exporter
  • 服务暴露:部署一个ingress nginx
2、DaemonSet的配置
[root@k8s-master ~]# cp nginx-deplo.yaml nginx-ds.yaml

[root@k8s-master ~]# vim nginx-ds.yaml 

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.21.6
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
3、新建DaemonSet
  • 创建一个ds,因为没有配置notselect,所有它会在每个节点启动一个
[root@k8s-master ~]# kubectl create -f nginx-ds.yaml
daemonset.apps/nginx created

#查看安装分布
[root@k8s-master ~]# kubectl get node -owide
NAME         STATUS   ROLES    AGE   VERSION          INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
k8s-master   Ready       11d   v1.22.0-beta.1   172.16.55.220           CentOS Linux 7 (Core)   4.19.12-1.el7.elrepo.x86_64   docker://19.3.15
k8s-node01   Ready       11d   v1.22.0-beta.1   172.16.55.221           CentOS Linux 7 (Core)   4.19.12-1.el7.elrepo.x86_64   docker://19.3.15
k8s-node02   Ready       11d   v1.22.0-beta.1   172.16.55.222           CentOS Linux 7 (Core)   4.19.12-1.el7.elrepo.x86_64   docker://19.3.15
k8s-node03   Ready       11d   v1.22.0-beta.1   172.16.55.223           CentOS Linux 7 (Core)   4.19.12-1.el7.elrepo.x86_64   docker://19.3.15
[root@k8s-master ~]# kubectl get po -owide
NAME          READY   STATUS    RESTARTS       AGE    IP                NODE         NOMINATED NODE   READINESS GATES
busybox       1/1     Running   25 (15m ago)   25h    192.161.125.10    k8s-node01              
nginx-ctgvv   1/1     Running   0              170m   192.169.214.227   k8s-node03              
nginx-km7q5   1/1     Running   0              170m   192.171.14.205    k8s-node02              
nginx-nwqf2   1/1     Running   0              170m   192.161.125.14    k8s-node01              
nginx-nx2ts   1/1     Running   0              170m   192.172.82.208    k8s-master              

  • 给需要部署的容器打标签
[root@k8s-master ~]# kubectl label node k8s-node02 k8s-node01 k8s-node03 ds=true
node/k8s-node02 labeled
node/k8s-node01 labeled
node/k8s-node03 labeled

[root@k8s-master ~]# kubectl get node --show-labels
NAME         STATUS   ROLES    AGE   VERSION          LABELS
k8s-master   Ready       11d   v1.22.0-beta.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,k8s.kuboard.cn/role=etcd,kubernetes.io/arc + 89 more...
k8s-node01   Ready       11d   v1.22.0-beta.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ds=true,kubernetes.io/arch=amd64,kubernete + 72 more...
k8s-node02   Ready       11d   v1.22.0-beta.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ds=true,kubernetes.io/arch=amd64,kubernete + 72 more...
k8s-node03   Ready       11d   v1.22.0-beta.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ds=true,kubernetes.io/arch=amd64,kubernete + 72 more...
  • 修改nginx-ds.yaml
 nodeSelector:
  ds: "true"
[root@k8s-master ~]# vim nginx-ds.yaml 

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      nodeSelector:
        ds: "true"
      containers:
      - image: nginx:1.21.6
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
  • 更新配置
[root@k8s-master ~]# kubectl replace -f nginx-ds.yaml 
daemonset.apps/nginx replaced

[root@k8s-master ~]# kubectl get po -owide
NAME          READY   STATUS        RESTARTS       AGE     IP                NODE         NOMINATED NODE   READINESS GATES
busybox       1/1     Running       25 (56m ago)   25h     192.161.125.10    k8s-node01              
nginx-j8d6c   1/1     Running       0              10s     192.161.125.15    k8s-node01              
nginx-km7q5   0/1     Terminating   0              3h31m   192.171.14.205    k8s-node02              
nginx-nn6sz   1/1     Running       0              6s      192.169.214.228   k8s-node03              

  • 查看pod,可以看到不符合标签的pod被删除了
  • 如果要添加节点,就在节点添加 label ds=true
4、DaemonSet的更新和回滚
  • 配置信息
[root@k8s-master ~]# kubectl get ds nginx -oyaml

#RollingUpdate 更新回滚和 Deployment 一致
updateStrategy:
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
    type: RollingUpdate

#更新版本
[root@k8s-master ~]# kubectl set image ds nginx nginx=nginx:1.20.1 --record
Flag --record has been deprecated, --record will be removed in the future
daemonset.apps/nginx image updated
[root@k8s-master ~]# 

[root@k8s-master ~]# kubectl get po -owide
NAME          READY   STATUS        RESTARTS       AGE    IP               NODE         NOMINATED NODE   READINESS GATES
busybox       1/1     Running       26 (22m ago)   26h    192.161.125.10   k8s-node01              
nginx-5ch2g   0/1     Terminating   0              109s   192.171.14.208   k8s-node02              
nginx-nn6sz   0/1     Terminating   0              26m               k8s-node03              
nginx-vgkl2   0/1     Terminating   0              104s   192.161.125.17   k8s-node01              

  • 更新策略推荐使用 OnDelete
updateStrategy:
    type: OnDelete

#更改版本
[root@k8s-master ~]# kubectl set image ds nginx nginx=nginx:1.21.6 --record

#删除节点
[root@k8s-master ~]# kubectl delete po nginx-5ch2g

#查看更新记录
[root@k8s-master ~]# kubectl rollout history ds nginx

  • 因为 DaemonSet 可能部署在 k8s 集群的很多节点上,一开始先在一些节点上进行测试,删除后触发更新不影响其他节点
5、HPA

参考:https://blog.csdn.net/m0_47288926/article/details/122819880

  • HPA全称是Horizontal Pod Autoscaler,中文意思是POD水平自动伸缩.
  • 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和
    StatefulSet 中的 Pod 数量。
  • 除了 CPU 利用率,内存占用外,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。
  • Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。
  • Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。
  • 控制器会周期性的调整副本控制器或 Deployment 中的副本数量,以使得 Pod 的平均 CPU 利用率与用户所设定的目标值匹配。
  1. 确认安装metrics-server
[root@k8s-master ~]# kubectl get pods -n kube-system |grep metrics-server
metrics-server-64c6c494dc-m44ck           1/1     Running   9 (30h ago)   11d

[root@k8s-master ~]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master   694m         8%     1216Mi          15%       
k8s-node01   319m         3%     700Mi           8%        
k8s-node02   357m         4%     984Mi           12%       
k8s-node03   185m         2%     685Mi           8%   

  1. kubectl对HPA的支持
  • 与其他 API 资源类似,kubectl 以标准方式支持 HPA。
  • 通过 kubectl create 命令创建一个 HPA 对象
  • 通过 kubectl get hpa 命令来获取所有 HPA 对象
  • 通过 kubectl describe hpa 命令来查看 HPA 对象的详细信息
  • 通过 kubectl delete hpa 命令删除对象。
  • 此外,还有个简便的命令 kubectl autoscale 来创建 HPA 对象。
    例如,命令 kubectl autoscale deploy nginx --cpu-percont=20% --min=2 --max=5 将deploy nginx 创建一个 HPA 对象, 目标 CPU 使用率为 20%,副本数量配置为 2 到 5 之间。
[root@k8s-master ~]# kubectl autoscale deploy nginx --cpu-percent=20 --min=2 --max=5
horizontalpodautoscaler.autoscaling/nginx autoscaled

[root@k8s-master ~]# kubectl get hpa
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx   Deployment/nginx   0%/20%    2         5         2          8h

[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1               443/TCP   11d
nginx        ClusterIP   10.103.207.95           80/TCP    26m

#创建一个循环请求
[root@k8s-node01 ~]# while true;do wget -q -o- http://10.103.207.95 > /dev/null;done

#当cpu使用 超过20%
[root@k8s-master ~]#  kubectl get hpa
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx   Deployment/nginx   30%/20%   2         5         5          9h

#自动创建最多5个pod
[root@k8s-master ~]# kubectl get po
NAME                     READY   STATUS    RESTARTS       AGE
busybox                  1/1     Running   37 (51m ago)   37h
nginx-6b5dc8646d-c8x4d   1/1     Running   0              15s
nginx-6b5dc8646d-dnprw   1/1     Running   0              16m
nginx-6b5dc8646d-w59mb   1/1     Running   0              42m
nginx-6b5dc8646d-w76cd   1/1     Running   0              30s
nginx-6b5dc8646d-x2ks4   1/1     Running   0              30s

  • 当停止请求后,pod数量 下降为最少2个
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880644.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号