一.系统环境

服务器版本 docker软件版本 Kubernetes(k8s)集群版本 CPU架构
CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 v1.21.9 x86_64

Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点

服务器 操作系统版本 CPU架构 进程 功能描述
k8scloude1/192.168.110.130 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico k8s master节点
k8scloude2/192.168.110.129 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点
k8scloude3/192.168.110.128 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点

二.前言

使用deployment的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。

三.Kubernetes 控制器

在 Kubernetes 中,控制器通过监控集群 的公共状态,并致力于将当前状态转变为期望的状态。

一个控制器至少追踪一种类型的 Kubernetes 资源。这些 对象 有一个代表期望状态的 spec 字段该资源的控制器负责确保其当前状态接近期望状态。

控制器可能会自行执行操作;在 Kubernetes 中更常见的是一个控制器会发送信息给 API 服务器。

Kubernetes 内置一组控制器,运行在 kube-controller-manager 内。 这些内置的控制器提供了重要的核心功能。

Deployment 控制器和 Job 控制器是 Kubernetes 内置控制器的典型例子。 Kubernetes 允许你运行一个稳定的控制平面,这样即使某些内置控制器失败了, 控制平面的其他部分会接替它们的工作。

四.Deployment概览

一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力

你负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。

注意:不要管理 Deployment 所拥有的 ReplicaSet 。

以下是 Deployments 的典型用例:

  • 创建 Deployment 以将 ReplicaSet 上线。ReplicaSet 在后台创建 Pod。 检查 ReplicaSet 的上线状态,查看其是否成功。
  • 通过更新 Deployment 的 PodTemplateSpec,声明 Pod 的新状态 。 新的 ReplicaSet 会被创建,Deployment 以受控速率将 Pod 从旧 ReplicaSet 迁移到新 ReplicaSet。 每个新的 ReplicaSet 都会更新 Deployment 的修订版本。
  • 如果 Deployment 的当前状态不稳定,回滚到较早的 Deployment 版本。 每次回滚都会更新 Deployment 的修订版本。
  • 扩大 Deployment 规模以承担更多负载。
  • 暂停 Deployment 的上线 以应用对 PodTemplateSpec 所作的多项修改, 然后恢复其执行以启动新的上线版本。
  • 使用 Deployment 状态来判定上线过程是否出现停滞。
  • 清理较旧的不再需要的 ReplicaSet 。

五.创建deployment

创建存放deployment配置文件的目录和namespace

  1. [root@k8scloude1 ~]# mkdir deployment
  2. [root@k8scloude1 ~]# cd deployment/
  3. [root@k8scloude1 deployment]# pwd
  4. /root/deployment
  5. #创建namespace
  6. [root@k8scloude1 deployment]# kubectl create ns deployment
  7. namespace/deployment created
  8. #切换命名空间为deployment
  9. [root@k8scloude1 deployment]# kubens deployment
  10. Context "kubernetes-admin@kubernetes" modified.
  11. Active namespace is "deployment".
  12. [root@k8scloude1 deployment]# kubectl get pod
  13. No resources found in deployment namespace.

Kubernetes里有很多简写,比如deployment简称deploy,pod简称po

查看pod

  1. [root@k8scloude1 deployment]# kubectl get po
  2. No resources found in deployment namespace.

查看对资源的操作有哪些

  1. [root@k8scloude1 deployment]# kubectl --help | grep resource
  2. create Create a resource from a file or from stdin.
  3. get 显示一个或更多 resources
  4. delete Delete resources by filenames, stdin, resources and names, or by resources and label selector
  5. rollout Manage the rollout of a resource
  6. describe 显示一个指定 resource 或者 group resources 详情
  7. patch Update field(s) of a resource
  8. wait Experimental: Wait for a specific condition on one or many resources.
  9. api-resources Print the supported API resources on the server

可以查看k8s支持的简写

  1. [root@k8scloude1 deployment]# kubectl api-resources
  2. NAME SHORTNAMES APIVERSION NAMESPACED KIND
  3. bindings v1 true Binding
  4. componentstatuses cs v1 false ComponentStatus
  5. configmaps cm v1 true ConfigMap
  6. endpoints ep v1 true Endpoints
  7. events ev v1 true Event
  8. limitranges limits v1 true LimitRange
  9. namespaces ns v1 false Namespace
  10. nodes no v1 false Node
  11. persistentvolumeclaims pvc v1 true PersistentVolumeClaim
  12. persistentvolumes pv v1 false PersistentVolume
  13. pods po v1 true Pod
  14. podtemplates v1 true PodTemplate
  15. replicationcontrollers rc v1 true ReplicationController
  16. resourcequotas quota v1 true ResourceQuota
  17. secrets v1 true Secret
  18. serviceaccounts sa v1 true ServiceAccount
  19. services svc v1 true Service
  20. mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration
  21. validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration
  22. customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
  23. apiservices apiregistration.k8s.io/v1 false APIService
  24. controllerrevisions apps/v1 true ControllerRevision
  25. daemonsets ds apps/v1 true DaemonSet
  26. deployments deploy apps/v1 true Deployment
  27. replicasets rs apps/v1 true ReplicaSet
  28. statefulsets sts apps/v1 true StatefulSet
  29. tokenreviews authentication.k8s.io/v1 false TokenReview
  30. localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview
  31. selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview
  32. selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview
  33. subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview
  34. horizontalpodautoscalers hpa autoscaling/v1 true HorizontalPodAutoscaler
  35. cronjobs cj batch/v1 true CronJob
  36. jobs batch/v1 true Job
  37. certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest
  38. leases coordination.k8s.io/v1 true Lease
  39. bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration
  40. bgppeers crd.projectcalico.org/v1 false BGPPeer
  41. blockaffinities crd.projectcalico.org/v1 false BlockAffinity
  42. caliconodestatuses crd.projectcalico.org/v1 false CalicoNodeStatus
  43. clusterinformations crd.projectcalico.org/v1 false ClusterInformation
  44. felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration
  45. globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy
  46. globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet
  47. hostendpoints crd.projectcalico.org/v1 false HostEndpoint
  48. ipamblocks crd.projectcalico.org/v1 false IPAMBlock
  49. ipamconfigs crd.projectcalico.org/v1 false IPAMConfig
  50. ipamhandles crd.projectcalico.org/v1 false IPAMHandle
  51. ippools crd.projectcalico.org/v1 false IPPool
  52. ipreservations crd.projectcalico.org/v1 false IPReservation
  53. kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration
  54. networkpolicies crd.projectcalico.org/v1 true NetworkPolicy
  55. networksets crd.projectcalico.org/v1 true NetworkSet
  56. endpointslices discovery.k8s.io/v1 true EndpointSlice
  57. events ev events.k8s.io/v1 true Event
  58. ingresses ing extensions/v1beta1 true Ingress
  59. flowschemas flowcontrol.apiserver.k8s.io/v1beta1 false FlowSchema
  60. prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta1 false PriorityLevelConfiguration
  61. nodes metrics.k8s.io/v1beta1 false NodeMetrics
  62. pods metrics.k8s.io/v1beta1 true PodMetrics
  63. ingressclasses networking.k8s.io/v1 false IngressClass
  64. ingresses ing networking.k8s.io/v1 true Ingress
  65. networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
  66. runtimeclasses node.k8s.io/v1 false RuntimeClass
  67. poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
  68. podsecuritypolicies psp policy/v1beta1 false PodSecurityPolicy
  69. clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
  70. clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
  71. rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
  72. roles rbac.authorization.k8s.io/v1 true Role
  73. priorityclasses pc scheduling.k8s.io/v1 false PriorityClass
  74. csidrivers storage.k8s.io/v1 false CSIDriver
  75. csinodes storage.k8s.io/v1 false CSINode
  76. csistoragecapacities storage.k8s.io/v1beta1 true CSIStorageCapacity
  77. storageclasses sc storage.k8s.io/v1 false StorageClass
  78. volumeattachments storage.k8s.io/v1 false VolumeAttachment

查看deployment控制器

  1. [root@k8scloude1 deployment]# kubectl get deploy
  2. No resources found in deployment namespace.

建议使用yaml文件创建deploy,命令行的方式,支持的选项比较少

生成deployment的yaml文件

  1. #nginx为deploy的名字 --image=nginx使用Nginx镜像
  2. [root@k8scloude1 deployment]# kubectl create deploy nginx --image=nginx --dry-run=client -o yaml >nginx.yaml
  3. [root@k8scloude1 deployment]# ll -h nginx.yaml
  4. -rw-r--r-- 1 root root 384 1 25 15:39 nginx.yaml

查看生成的deploy yaml配置文件

  1. [root@k8scloude1 deployment]# cat nginx.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. creationTimestamp: null
  6. labels:
  7. app: nginx
  8. name: nginx
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. app: nginx
  14. strategy: {}
  15. template:
  16. metadata:
  17. creationTimestamp: null
  18. labels:
  19. app: nginx
  20. spec:
  21. containers:
  22. - image: nginx
  23. name: nginx
  24. resources: {}
  25. status: {}

pod模板可以有多个标签,只要其中一个标签和matchLabels里的标签一致即可

  1. [root@k8scloude1 deployment]# vim nginx.yaml
  2. [root@k8scloude1 deployment]# cat nginx.yaml
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6. creationTimestamp: null
  7. #这个labels是deployment的标签
  8. labels:
  9. app: nginx
  10. #deployment名字
  11. name: nginx
  12. spec:
  13. #replicas: 1 表示副本数为1,只生成一个pod
  14. replicas: 1
  15. #selector标签选择器
  16. selector:
  17. matchLabels:
  18. appx: xyz
  19. strategy: {}
  20. #template下面是pod的模板
  21. template:
  22. metadata:
  23. creationTimestamp: null
  24. #这个labels表示pod标签
  25. labels:
  26. #标签
  27. app: nginx
  28. appx: xyz
  29. spec:
  30. containers:
  31. - image: nginx
  32. name: nginx
  33. resources: {}
  34. status: {}

创建deploy

  1. [root@k8scloude1 deployment]# kubectl apply -f nginx.yaml
  2. deployment.apps/nginx created
  3. [root@k8scloude1 deployment]# kubectl get deploy
  4. NAME READY UP-TO-DATE AVAILABLE AGE
  5. nginx 0/1 1 0 11s

直接下载nginx镜像太慢,重新修改下yaml文件

  1. [root@k8scloude1 deployment]# kubectl delete deploy nginx
  2. deployment.apps "nginx" deleted
  3. [root@k8scloude1 deployment]# vim nginx.yaml
  4. [root@k8scloude1 deployment]# cat nginx.yaml
  5. apiVersion: apps/v1
  6. kind: Deployment
  7. metadata:
  8. creationTimestamp: null
  9. labels:
  10. app: nginx
  11. name: nginx
  12. spec:
  13. replicas: 1
  14. selector:
  15. matchLabels:
  16. appx: xyz
  17. strategy: {}
  18. template:
  19. metadata:
  20. creationTimestamp: null
  21. labels:
  22. app: nginx
  23. appx: xyz
  24. spec:
  25. #优雅删除pod的期限时间
  26. terminationGracePeriodSeconds: 0
  27. containers:
  28. - image: nginx
  29. name: nginx
  30. #修改镜像下载策略:IfNotPresent表示本地有镜像就不下载
  31. imagePullPolicy: IfNotPresent
  32. resources: {}
  33. status: {}

创建deploy

  1. [root@k8scloude1 deployment]# kubectl apply -f nginx.yaml
  2. deployment.apps/nginx created

查看deployment

  1. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. nginx 1/1 1 1 11s nginx nginx appx=xyz
  4. #--show-labels 显示标签
  5. [root@k8scloude1 deployment]# kubectl get deploy -o wide --show-labels
  6. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
  7. nginx 1/1 1 1 60s nginx nginx appx=xyz app=nginx

可以看到pod也被创建出来了

  1. [root@k8scloude1 deployment]# kubectl get pod -o wide --show-labels
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
  3. nginx-6fcb7995f5-c8lpc 1/1 Running 0 2m25s 10.244.112.146 k8scloude2 <none> <none> app=nginx,appx=xyz,pod-template-hash=6fcb7995f5

注意:删除pod之后,deploy会根据副本数replicas,创建缺失的pod,所以要想真正删除pod,需要删除deployment控制器

  1. [root@k8scloude1 deployment]# kubectl delete pod nginx-6fcb7995f5-c8lpc --force
  2. warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
  3. pod "nginx-6fcb7995f5-c8lpc" force deleted
  4. #pod又重新创建了
  5. [root@k8scloude1 deployment]# kubectl get pod -o wide --show-labels
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
  7. nginx-6fcb7995f5-s6smg 1/1 Running 0 5s 10.244.112.147 k8scloude2 <none> <none> app=nginx,appx=xyz,pod-template-hash=6fcb7995f5

六.修改deploy副本数

修改deployment副本数有三种方法:

  1. kubectl edit deploy deployname ,直接修改replicas的数目即可,实时生效,注意:可以在线修改deploy但是不能在线修改pod
  2. 可以直接修改yaml文件: 比如:replicas: 6
  3. kubectl scale deployment deployname 在线伸缩副本数

6.1 kubectl edit deploy 修改副本数

查看deploy

  1. [root@k8scloude1 deployment]# kubectl get deploy
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. nginx 1/1 1 1 10m

第一种:kubectl edit deploy deployname ,直接修改replicas的数目即可,实时生效,注意可以在线修改deploy但是不能在线修改pod

  1. [root@k8scloude1 deployment]# kubectl edit deploy nginx
  2. deployment.apps/nginx edited

查看deploy,可以发现副本数变了,READY为3/3

  1. [root@k8scloude1 deployment]# kubectl get deploy
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. nginx 3/3 3 3 11m
  4. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  5. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  6. nginx 3/3 3 3 11m nginx nginx appx=xyz

6.2 修改yaml文件更改副本数

第二种:可以直接修改yaml文件: replicas: 6,修改为6个副本

  1. [root@k8scloude1 deployment]# vim nginx.yaml
  2. [root@k8scloude1 deployment]# cat nginx.yaml
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6. creationTimestamp: null
  7. labels:
  8. app: nginx
  9. name: nginx
  10. spec:
  11. replicas: 6
  12. selector:
  13. matchLabels:
  14. appx: xyz
  15. strategy: {}
  16. template:
  17. metadata:
  18. creationTimestamp: null
  19. labels:
  20. app: nginx
  21. appx: xyz
  22. spec:
  23. terminationGracePeriodSeconds: 0
  24. containers:
  25. - image: nginx
  26. name: nginx
  27. imagePullPolicy: IfNotPresent
  28. resources: {}
  29. status: {}

kubectl edit可以立即生效,但是修改yaml文件需要apply才能生效

  1. [root@k8scloude1 deployment]# kubectl get deploy
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. nginx 3/3 3 3 14m
  4. [root@k8scloude1 deployment]# kubectl apply -f nginx.yaml
  5. deployment.apps/nginx configured
  6. [root@k8scloude1 deployment]# kubectl get deploy
  7. NAME READY UP-TO-DATE AVAILABLE AGE
  8. nginx 6/6 6 6 15m

可以看到deploy生成了6个pod

  1. [root@k8scloude1 deployment]# kubectl get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. nginx-6fcb7995f5-64gm2 1/1 Running 0 22s 10.244.251.204 k8scloude3 <none> <none>
  4. nginx-6fcb7995f5-75jfd 1/1 Running 0 22s 10.244.251.206 k8scloude3 <none> <none>
  5. nginx-6fcb7995f5-8c75n 1/1 Running 0 4m23s 10.244.251.205 k8scloude3 <none> <none>
  6. nginx-6fcb7995f5-cs6w4 1/1 Running 0 4m23s 10.244.112.143 k8scloude2 <none> <none>
  7. nginx-6fcb7995f5-s6smg 1/1 Running 0 11m 10.244.112.147 k8scloude2 <none> <none>
  8. nginx-6fcb7995f5-tpwr4 1/1 Running 0 22s 10.244.112.148 k8scloude2 <none> <none>

6.3 kubectl scale修改副本数

kubectl scale在线伸缩deploy,--replicas=10修改副本数为10个

  1. [root@k8scloude1 deployment]# kubectl scale deployment nginx --replicas=10
  2. deployment.apps/nginx scaled
  3. [root@k8scloude1 deployment]# kubectl get pod -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. nginx-6fcb7995f5-5sv29 1/1 Running 0 4s 10.244.112.152 k8scloude2 <none> <none>
  6. nginx-6fcb7995f5-64gm2 1/1 Running 0 2m12s 10.244.251.204 k8scloude3 <none> <none>
  7. nginx-6fcb7995f5-75jfd 1/1 Running 0 2m12s 10.244.251.206 k8scloude3 <none> <none>
  8. nginx-6fcb7995f5-8c75n 1/1 Running 0 6m13s 10.244.251.205 k8scloude3 <none> <none>
  9. nginx-6fcb7995f5-cs6w4 1/1 Running 0 6m13s 10.244.112.143 k8scloude2 <none> <none>
  10. nginx-6fcb7995f5-f6nz9 1/1 Running 0 4s 10.244.112.150 k8scloude2 <none> <none>
  11. nginx-6fcb7995f5-hx224 1/1 Running 0 4s 10.244.112.149 k8scloude2 <none> <none>
  12. nginx-6fcb7995f5-s6smg 1/1 Running 0 13m 10.244.112.147 k8scloude2 <none> <none>
  13. nginx-6fcb7995f5-tpwr4 1/1 Running 0 2m12s 10.244.112.148 k8scloude2 <none> <none>
  14. nginx-6fcb7995f5-zmsfx 1/1 Running 0 4s 10.244.251.208 k8scloude3 <none> <none>

修改pod副本为1

  1. [root@k8scloude1 deployment]# kubectl scale deployment nginx --replicas=1
  2. deployment.apps/nginx scaled
  3. [root@k8scloude1 deployment]# kubectl get pod -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. nginx-6fcb7995f5-8c75n 1/1 Running 0 6m33s 10.244.251.205 k8scloude3 <none> <none>

七.HorizontalPodAutoscaler(HPA)

7.1 Pod 水平自动扩缩HorizontalPodAutoscaler概览

在 Kubernetes 中,HorizontalPodAutoscaler 自动更新工作负载资源 (例如 Deployment 或者 StatefulSet), 目的是自动扩缩工作负载以满足需求

水平扩缩意味着对增加的负载的响应是部署更多的 Pod。 这与 “垂直(Vertical)” 扩缩不同,对于 Kubernetes, 垂直扩缩意味着将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod

如果负载减少,并且 Pod 的数量高于配置的最小值, HorizontalPodAutoscaler 会指示工作负载资源(Deployment、StatefulSet 或其他类似资源)缩减。

水平 Pod 自动扩缩不适用于无法扩缩的对象(例如:DaemonSet。)

HorizontalPodAutoscaler 被实现为 Kubernetes API 资源和控制器。

资源决定了控制器的行为。 在 Kubernetes 控制平面内运行的水平 Pod 自动扩缩控制器会定期调整其目标(例如:Deployment)的所需规模,以匹配观察到的指标, 例如,平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标。

7.2 HPA自动伸缩pod副本数实战

HPA(horizontal pod autoscalers)水平自动伸缩 通过检测pod CPU的负载,解决deployment里某pod负 载太重,动态伸缩pod的数量来负载均衡。

现在deploy只生成了一个pod

  1. [root@k8scloude1 deployment]# kubectl get pod
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-6fcb7995f5-8c75n 1/1 Running 0 45m

查看HPA

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. No resources found in deployment namespace.

设置HPA:--min=2 最小pod副本数为2,--max=5 最大pod副本数为5

  1. [root@k8scloude1 deployment]# kubectl autoscale deployment nginx --max=5 --min=2
  2. horizontalpodautoscaler.autoscaling/nginx autoscaled

观察pod副本数,发现pod副本数自动变为2了,因为HPA设置了最小pod副本数为2

  1. [root@k8scloude1 deployment]# kubectl get pod
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-6fcb7995f5-8c75n 1/1 Running 0 49m
  4. [root@k8scloude1 deployment]# kubectl get pod
  5. NAME READY STATUS RESTARTS AGE
  6. nginx-6fcb7995f5-8c75n 1/1 Running 0 49m
  7. [root@k8scloude1 deployment]# kubectl get pod
  8. NAME READY STATUS RESTARTS AGE
  9. nginx-6fcb7995f5-8c75n 1/1 Running 0 49m
  10. nginx-6fcb7995f5-zrdpj 1/1 Running 0 22s
  11. [root@k8scloude1 deployment]# kubectl get pod
  12. NAME READY STATUS RESTARTS AGE
  13. nginx-6fcb7995f5-8c75n 1/1 Running 0 49m
  14. nginx-6fcb7995f5-zrdpj 1/1 Running 0 39s

使用kubectl scale 设置pod副本数为1

  1. [root@k8scloude1 deployment]# kubectl scale deployment nginx --replicas=1
  2. deployment.apps/nginx scaled

因为autoscale是实时扩展的,所以就算scale修改为1,autoscale也会自动把副本数修改为2

  1. [root@k8scloude1 deployment]# kubectl get pod
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-6fcb7995f5-5jl6h 0/1 ContainerCreating 0 0s
  4. nginx-6fcb7995f5-8c75n 1/1 Running 0 50m
  5. [root@k8scloude1 deployment]# kubectl get pod
  6. NAME READY STATUS RESTARTS AGE
  7. nginx-6fcb7995f5-5jl6h 1/1 Running 0 4s
  8. nginx-6fcb7995f5-8c75n 1/1 Running 0 50m
  9. [root@k8scloude1 deployment]# kubectl get pod
  10. NAME READY STATUS RESTARTS AGE
  11. nginx-6fcb7995f5-5jl6h 1/1 Running 0 16s
  12. nginx-6fcb7995f5-8c75n 1/1 Running 0 50m

查看hpa

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx <unknown>/80% 2 5 2 4m18s

删除HPA

  1. [root@k8scloude1 deployment]# kubectl delete hpa nginx
  2. horizontalpodautoscaler.autoscaling "nginx" deleted
  3. [root@k8scloude1 deployment]# kubectl get hpa
  4. No resources found in deployment namespace.

删除nginx deployment

  1. [root@k8scloude1 deployment]# kubectl delete -f nginx.yaml
  2. deployment.apps "nginx" deleted
  3. [root@k8scloude1 deployment]# kubectl get deploy
  4. No resources found in deployment namespace.

接下来给pod设置资源限制,对pod的资源限制可以通过pod里的resource字段来限制,resources里的requests字段表示容器所在节点资源的最小值,最低要求,满足不了这个要求pod创建不成功。

requests:cpu: 400m 表示pod需要400个微核心才能创建成功注意:m代表微核心,1个核等于1000个微核心。

  1. [root@k8scloude1 deployment]# vim nginxcpulimit.yaml
  2. [root@k8scloude1 deployment]# cat nginxcpulimit.yaml
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6. creationTimestamp: null
  7. labels:
  8. app: nginx
  9. name: nginx
  10. spec:
  11. replicas: 1
  12. selector:
  13. matchLabels:
  14. appx: xyz
  15. strategy: {}
  16. template:
  17. metadata:
  18. creationTimestamp: null
  19. labels:
  20. app: nginx
  21. appx: xyz
  22. spec:
  23. terminationGracePeriodSeconds: 0
  24. containers:
  25. - image: nginx
  26. name: nginx
  27. imagePullPolicy: IfNotPresent
  28. resources:
  29. #设置资源限制:CPU:400m #m代表微核心,1个核等于1000个微核心
  30. requests:
  31. cpu: 400m
  32. status: {}

创建deployment

  1. [root@k8scloude1 deployment]# kubectl apply -f nginxcpulimit.yaml
  2. deployment.apps/nginx created
  3. [root@k8scloude1 deployment]# kubectl get deployments -o wide
  4. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  5. nginx 1/1 1 1 13s nginx nginx appx=xyz

查看node节点的负载

  1. [root@k8scloude1 deployment]# kubectl top node
  2. W0125 17:06:20.377474 15650 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
  3. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
  4. k8scloude1 230m 11% 1375Mi 42%
  5. k8scloude2 100m 5% 669Mi 34%
  6. k8scloude3 113m 5% 737Mi 38%

设置HPA:最小pod副本数为1,最大pod副本数为15,--cpu-percent=80表示当deployment资源对象的CPU使用率高达80%时,就会进行扩容,最多扩容到15个

  1. [root@k8scloude1 deployment]# kubectl autoscale deployment nginx --min=1 --max=15 --cpu-percent=80
  2. horizontalpodautoscaler.autoscaling/nginx autoscaled

查看hpa

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx 0%/80% 1 15 1 69s

安装一个压力测试的包:ab工具用于压力测试

  1. [root@k8scloude1 deployment]# yum -y install httpd-tools

创建一个service服务,服务端口为80,service类型为NodePort

  1. [root@k8scloude1 deployment]# kubectl expose --name=nginxsvc deployment nginx --port=80 --type=NodePort
  2. service/nginxsvc exposed
  3. [root@k8scloude1 deployment]# kubectl get svc -o wide
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
  5. nginxsvc NodePort 10.96.231.54 <none> 80:31085/TCP 10s appx=xyz

查看pod

  1. [root@k8scloude1 deployment]# kubectl get pod
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-79b8d956bd-wbcq5 1/1 Running 0 12m

使用ab进行压力测试,一直给nginx服务发请求,Nginx服务的网址为:http://k8s节点ip:31085/,也就是http://192.168.110.130:31085/index.html。

ab压力测试命令参数解释:

  • -t:测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
  • -n:在测试会话中所执行的请求个数。默认时,仅执行一个请求。
  • -c:一次产生的请求个数。默认是一次一个。

下面一直给Nginx服务发请求

  1. [root@k8scloude1 ~]# ab -t 600 -n 1000000 -c 1000 http://192.168.110.130:31085/index.html
  2. This is ApacheBench, Version 2.3 <$Revision: 1430300 %sSourceCode%gt;
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
  4. Licensed to The Apache Software Foundation, http://www.apache.org/
  5. Benchmarking 192.168.110.130 (be patient)
  6. Completed 100000 requests
  7. ^C
  8. Server Software: nginx/1.21.5
  9. Server Hostname: 192.168.110.130
  10. Server Port: 31085
  11. Document Path: /index.html
  12. Document Length: 615 bytes
  13. Concurrency Level: 1000
  14. Time taken for tests: 27.096 seconds
  15. Complete requests: 112145
  16. Failed requests: 2029
  17. (Connect: 0, Receive: 0, Length: 0, Exceptions: 2029)
  18. Write errors: 0
  19. Total transferred: 95814989 bytes
  20. HTML transferred: 69487620 bytes
  21. Requests per second: 4138.87 [#/sec] (mean)
  22. Time per request: 241.612 [ms] (mean)
  23. Time per request: 0.242 [ms] (mean, across all concurrent requests)
  24. Transfer rate: 3453.31 [Kbytes/sec] received
  25. Connection Times (ms)
  26. min mean[+/-sd] median max
  27. Connect: 0 121 219.7 73 2693
  28. Processing: 1 113 84.3 96 5111
  29. Waiting: 0 95 78.9 80 5063
  30. Total: 2 235 241.9 178 7568
  31. Percentage of the requests served within a certain time (ms)
  32. 50% 178
  33. 66% 208
  34. 75% 230
  35. 80% 247
  36. 90% 319
  37. 95% 469
  38. 98% 1188
  39. 99% 1233
  40. 100% 7568 (longest request)

ab压力测试之后,查看pod的变化,pod数自动变为了3个

  1. [root@k8scloude1 deployment]# kubectl get pod
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-79b8d956bd-622fw 1/1 Running 0 14s
  4. nginx-79b8d956bd-8z5h7 1/1 Running 0 14s
  5. nginx-79b8d956bd-wbcq5 1/1 Running 0 14m

查看hpa的变化

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx 31%/80% 1 15 3 11m
  4. [root@k8scloude1 deployment]# kubectl get hpa
  5. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  6. nginx Deployment/nginx 61%/80% 1 15 3 12m
  7. [root@k8scloude1 deployment]# kubectl get hpa
  8. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  9. nginx Deployment/nginx 61%/80% 1 15 3 12m
  10. [root@k8scloude1 deployment]# kubectl get hpa
  11. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  12. nginx Deployment/nginx 61%/80% 1 15 3 12m
  13. [root@k8scloude1 deployment]# kubectl get pod
  14. NAME READY STATUS RESTARTS AGE
  15. nginx-79b8d956bd-622fw 1/1 Running 0 101s
  16. nginx-79b8d956bd-8z5h7 1/1 Running 0 101s
  17. nginx-79b8d956bd-wbcq5 1/1 Running 0 15m

删除服务并重新创建一个service服务,这次的service服务类型为ClusterIP。

  1. [root@k8scloude1 deployment]# kubectl delete svc nginxsvc
  2. [root@k8scloude1 deployment]# kubectl get svc
  3. No resources found in deployment namespace.
  4. [root@k8scloude1 deployment]# kubectl expose --name=nginxsvc deployment nginx --port=80
  5. service/nginxsvc exposed
  6. [root@k8scloude1 deployment]# kubectl get svc
  7. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  8. nginxsvc ClusterIP 10.109.240.56 <none> 80/TCP 3s

Nginx服务的网址为:http://10.109.240.56:80/index.html,继续进行ab压力测试,给Nginx服务发请求。

  1. #继续ab压力测试
  2. [root@k8scloude1 ~]# ab -t 600 -n 1000000 -c 1000 http://10.109.240.56:80/index.html
  3. This is ApacheBench, Version 2.3 <$Revision: 1430300 %sSourceCode%gt;
  4. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
  5. Licensed to The Apache Software Foundation, http://www.apache.org/
  6. Benchmarking 10.109.240.56 (be patient)
  7. Completed 100000 requests
  8. Completed 200000 requests
  9. Completed 300000 requests
  10. Completed 400000 requests
  11. Completed 500000 requests
  12. Completed 600000 requests
  13. Completed 700000 requests
  14. Completed 800000 requests
  15. Completed 900000 requests
  16. apr_pollset_poll: The timeout specified has expired (70007)
  17. Total of 985106 requests completed

执行ab压力测试的同时观察pod的变化

查看pod的负载

  1. [root@k8scloude1 deployment]# kubectl top pods
  2. W0125 17:25:03.753728 30784 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
  3. NAME CPU(cores) MEMORY(bytes)
  4. nginx-79b8d956bd-5hq5j 179m 4Mi
  5. nginx-79b8d956bd-622fw 366m 5Mi
  6. nginx-79b8d956bd-6wjsl 248m 5Mi
  7. nginx-79b8d956bd-8z5h7 360m 5Mi
  8. nginx-79b8d956bd-wbcq5 254m 5Mi

查看hpa,现在已经有5个pod了

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx 71%/80% 1 15 5 16m

继续观察pod

  1. [root@k8scloude1 deployment]# kubectl top pods
  2. W0125 17:25:49.908634 31380 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
  3. NAME CPU(cores) MEMORY(bytes)
  4. nginx-79b8d956bd-5hq5j 254m 5Mi
  5. nginx-79b8d956bd-622fw 326m 5Mi
  6. nginx-79b8d956bd-6wjsl 322m 5Mi
  7. nginx-79b8d956bd-8z5h7 255m 5Mi
  8. nginx-79b8d956bd-wbcq5 264m 5Mi
  9. [root@k8scloude1 deployment]# kubectl get hpa
  10. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  11. nginx Deployment/nginx 70%/80% 1 15 5 18m
  12. [root@k8scloude1 deployment]# kubectl top pods
  13. W0125 17:27:46.476364 32773 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
  14. NAME CPU(cores) MEMORY(bytes)
  15. nginx-79b8d956bd-5hq5j 285m 5Mi
  16. nginx-79b8d956bd-622fw 331m 5Mi
  17. nginx-79b8d956bd-6wjsl 351m 5Mi
  18. nginx-79b8d956bd-8z5h7 277m 5Mi
  19. nginx-79b8d956bd-wbcq5 264m 6Mi
  20. [root@k8scloude1 deployment]# kubectl get hpa
  21. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  22. nginx Deployment/nginx 75%/80% 1 15 5 19m

停止给nginx发送请求之后hpa的TARGETS降下来了

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx 0%/80% 1 15 5 20m

但是pod数没有降下来

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx 0%/80% 1 15 5 20m
  4. [root@k8scloude1 deployment]# kubectl top pods
  5. W0125 17:29:32.004502 34116 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
  6. NAME CPU(cores) MEMORY(bytes)
  7. nginx-79b8d956bd-5hq5j 0m 5Mi
  8. nginx-79b8d956bd-622fw 0m 5Mi
  9. nginx-79b8d956bd-6wjsl 0m 5Mi
  10. nginx-79b8d956bd-8z5h7 0m 5Mi
  11. nginx-79b8d956bd-wbcq5 0m 6Mi
  12. [root@k8scloude1 deployment]# kubectl get hpa
  13. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  14. nginx Deployment/nginx 0%/80% 1 15 5 21m

注意:pod负载降下来之后,pod副本数不会立即减少,过一段时间pod副本数才会减少,默认时间间隔为5分钟,这样的目的是为了防止pod副本数的抖动。

10分钟之后观察pod,pod副本降下来了。

  1. [root@k8scloude1 deployment]# kubectl get hpa
  2. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
  3. nginx Deployment/nginx 0%/80% 1 15 1 46m
  4. [root@k8scloude1 deployment]# kubectl get pod
  5. NAME READY STATUS RESTARTS AGE
  6. nginx-79b8d956bd-wbcq5 1/1 Running 0 50m
  7. [root@k8scloude1 deployment]# kubectl delete hpa nginx
  8. horizontalpodautoscaler.autoscaling "nginx" deleted

八.k8s升级镜像

8.1 kubectl edit deployment升级镜像

查看deploy,可以看到镜像为nginx

  1. [root@k8scloude1 deployment]# kubectl get deploy
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. nginx 1/1 1 1 179m
  4. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  5. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  6. nginx 1/1 1 1 179m nginx nginx appx=xyz

第一种方法:使用kubectl edit deployment deployname升级镜像。把deploy的镜像由nginx升级为hub.c.163.com/library/nginx:1.12.0,修改 - image: nginx 为 - image: hub.c.163.com/library/nginx:1.12.0

  1. [root@k8scloude1 deployment]# kubectl edit deployment nginx
  2. deployment.apps/nginx edited

修改之后查看deploy,IMAGES变了。

修改deploy的镜像的时候,本质上是删除现有的pod,然后用新镜像创建新pod

  1. [root@k8scloude1 deployment]# kubectl get deployments -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. nginx 1/1 1 1 3h3m nginx hub.c.163.com/library/nginx:1.12.0 appx=xyz
  4. [root@k8scloude1 deployment]# kubectl get pods -o wide
  5. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  6. nginx-66bcf4489b-ztvnc 1/1 Running 0 77s 10.244.251.211 k8scloude3 <none> <none>

8.2 kubectl set image deploy升级镜像

查看deploy

  1. [root@k8scloude1 deployment]# kubectl get deployment -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. nginx 1/1 1 1 6h41m nginx hub.c.163.com/library/nginx:1.12.0 appx=xyz

第二种方式:使用kubectl set image deploy deployname 容器名=镜像名 升级镜像。

  1. [root@k8scloude1 deployment]# kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:1.13.0
  2. deployment.apps/nginx image updated

查看deploy,可以发现镜像升级为hub.c.163.com/library/nginx:1.13.0了

  1. [root@k8scloude1 deployment]# kubectl get deployment -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. nginx 1/1 1 1 6h42m nginx hub.c.163.com/library/nginx:1.13.0 appx=xyz

继续升级镜像

  1. [root@k8scloude1 deployment]# kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:latest
  2. deployment.apps/nginx image updated
  3. [root@k8scloude1 deployment]# kubectl get deployment -o wide
  4. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  5. nginx 1/1 1 1 6h43m nginx hub.c.163.com/library/nginx:latest appx=xyz
  6. [root@k8scloude1 deployment]# kubectl get pod -o wide
  7. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  8. nginx-75698d6db5-bzv9d 1/1 Running 0 17s 10.244.251.212 k8scloude3 <none> <none>

8.3 镜像升级历史记录

查看镜像替换的历史记录 kubectl rollout history deployment nginx,现在镜像替换的历史记录是不清楚的,是因为升级镜像的时候没有record记录。

  1. [root@k8scloude1 deployment]# kubectl rollout history deployment nginx
  2. deployment.apps/nginx
  3. REVISION CHANGE-CAUSE
  4. 1 <none>
  5. 2 <none>
  6. 3 <none>
  7. 4 <none>

替换镜像并记录

  1. [root@k8scloude1 deployment]# kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:1.12.0 --record
  2. deployment.apps/nginx image updated

可以看到镜像替换成功

  1. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. nginx 1/1 1 1 6h47m nginx hub.c.163.com/library/nginx:1.12.0 appx=xyz

多进行几次镜像替换并记录

  1. [root@k8scloude1 deployment]# kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:1.13.0 --record
  2. deployment.apps/nginx image updated
  3. [root@k8scloude1 deployment]# kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:latest --record
  4. deployment.apps/nginx image updated
  5. [root@k8scloude1 deployment]# kubectl set image deploy nginx nginx=nginx --record
  6. deployment.apps/nginx image updated

查看镜像替换的历史记录

  1. [root@k8scloude1 deployment]# kubectl rollout history deployment nginx
  2. deployment.apps/nginx
  3. REVISION CHANGE-CAUSE
  4. 5 kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:1.12.0 --record=true
  5. 6 kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:1.13.0 --record=true
  6. 7 kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:latest --record=true
  7. 8 kubectl set image deploy nginx nginx=nginx --record=true

查看deploy和pod

  1. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. nginx 1/1 1 1 6h48m nginx nginx appx=xyz
  4. [root@k8scloude1 deployment]# kubectl get pod -o wide
  5. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  6. nginx-79b8d956bd-xblj9 1/1 Running 0 61s 10.244.251.214 k8scloude3 <none> <none>

kubectl set image deploy nginx nginx=hub.c.163.com/library/nginx:1.13.0 --record=true是第6条修改记录,我们可以进行回滚,回滚到镜像是hub.c.163.com/library/nginx:1.13.0的时候。

  1. [root@k8scloude1 deployment]# kubectl rollout undo deployment nginx --to-revision=6
  2. deployment.apps/nginx rolled back
  3. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  4. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  5. nginx 1/1 1 1 6h51m nginx hub.c.163.com/library/nginx:1.13.0 appx=xyz

变更镜像的本质是删除旧版本的pod,然后用新镜像创建pod。

修改deploy副本数为10个

  1. [root@k8scloude1 deployment]# kubectl scale deployment nginx --replicas=10
  2. deployment.apps/nginx scaled

编辑deploy,修改镜像

  1. [root@k8scloude1 deployment]# kubectl edit deployment nginx
  2. deployment.apps/nginx edited
  3. [root@k8scloude1 deployment]# kubectl get deploy -o wide
  4. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  5. nginx 5/5 5 5 7h1m nginx hub.c.163.com/library/nginx:1.13.0 appx=xyz
  6. #滚动更新配置说明:
  7. strategy:
  8. rollingUpdate:
  9. #maxSurge:在升级过程中一次升级几个,可以是数字也可以是百分比
  10. maxSurge: 25%
  11. #maxUnavailable 在升级过程中,只能有几个不可用, 一次性删除多少个pod,可以是数字也可以是百分比
  12. maxUnavailable: 25%
  13. type: RollingUpdate

Kubernetes(k8s)控制器(一):deployment的更多相关文章

  1. Kubernetes K8S之资源控制器RC、RS、Deployment详解

    Kubernetes的资源控制器ReplicationController(RC).ReplicaSet(RS).Deployment(Deploy)详解与示例 主机配置规划 服务器名称(hostna ...

  2. Kubernetes K8S之资源控制器StatefulSets详解

    Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  3. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  4. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  5. Kubernetes(k8s) docker集群搭建

    原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  7. k8s学习 - 概念 - Deployment

    k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管 ...

  8. k8s控制器资源(五)

    Pod pod在之前说过,pod是kubernetes集群中是最小的调度单元,pod中可以运行多个容器,而node又可以包含多个pod,关系如下图: 在对pod的用法进行说明之前,有必要先对docke ...

  9. kubernetes(k8s)容器编排工具基础概念

    Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controller-kubernetes 官网:https://ku ...

  10. k8s控制器资源

    k8s控制器资源   Pod pod在之前说过,pod是kubernetes集群中是最小的调度单元,pod中可以运行多个容器,而node又可以包含多个pod,关系如下图: 在对pod的用法进行说明之前 ...

随机推荐

  1. Day14 note1

    package com.oop.demo06;public class Person { public void run(){ System.out.println("run"); ...

  2. 【题解】UVA10228 A Star not a Tree?

    题面传送门 解决思路 本题数据范围较小,可以使用模拟退火算法(随机化). 顾名思义,模拟退火就是一个类似于降温的过程.先设置一个较大的初温,每次随机改变状态,若使答案更优,则采取更优答案,否则根据其与 ...

  3. CLR、CLS、CTS概述

    在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?任何编程语言,如果想要在.NET CLR上执行,就必需提供一个编译器,将此语言的程序编译成.N ...

  4. Linux内存泄露案例分析和内存管理分享

    作者:李遵举 一.问题 近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长.接到内存报警的消 ...

  5. .NET深入了解哈希表和Dictionary

    引子 问题:给定一串数字{1,2,5,7,15,24,33,52},如何在时间复杂度为O(1)下,对数据进行CURD? 数组:我创建一个Length为53的数组,将元素插入相同下标处,是不是就可以实现 ...

  6. 网络编程:软件开发架构、架构总结、网络编程前戏、OSI七层协议简介、OSI七层协议之物理连接层、数据链路层、网络相关专业名词、OSI七层协议之网络层

    目录 软件开发架构 架构总结 网络编程前戏 OSI七层协议简介 OSI七层协议之物理连接层 OSI七层协议之数据链路层 网络相关专业名词 OSI七层协议之网络层 OSI七层协议之传输层 软件开发架构 ...

  7. .net core/5/6/7中WPF如何优雅的开始开发

    WPF是微软的.net平台中的一个桌面客户端应用程序框架,经常用于企业开发windows桌面客户端,广泛应用于中小企业快速开发一款工具,本人也是比较喜欢利用WPF开发一些小工具. 目录 知名案例 .n ...

  8. 关于windows上开启远程桌面连接不上的问题解决

    解决办法 启用远程桌面连接(计算机-属性-远程设置) 选择第二个:允许运行任意版本远程桌面 关闭防火墙(或者给远程桌面添加端口3389放行也可以) 创建用户以及密码 这里注意,一定要建立密码,只有账号 ...

  9. 函数调用时用const保护指针

    当调用函数并且把指向变量的指针作为参数传入时,通常会假设函数将修改变量(否则,为什么函数需要指针呢?).例如,如果在程序中看到语句 f(&x); 大概是希望f改变x的值.但是,f仅需检查x的值 ...

  10. 【精选】前端JS面试题35个

    1.问:什么是匿名函数?作用是什么?           答:没有名字的函数就是匿名函数,作用有三,把函数当作变量赋值,把函数当作参数(回调函数),把函数当作另一个函数的返回值(闭包)         ...