Kubernetes 核心概念Label、RC、HA、Deployment

Label

Kubernetes使用Label的键值对来标识附加到系统中的各种API(Pod、Service、Replication Controller 等)
每个API可以有多个Label,但是每个Label的Key只能是唯一的值。
相应地LabelSelect 则是针对匹配对象的标签进行查询。Label和LabelSelect是K8s主要的分组机制
如果有多个标签,LabelSelect可以根据AND来多个Label eg. LabelSelect: iter=back-end AND release=product

Lable

Replication Controller 和 Replica Set

Kubernetes提供Replication Controller(简称RC)来管理Pod,RC确保任何时候K8s集群中有指定数量的Pod副本在运行。
如果少于指定数量的Pod副本,RC会启动新的Pod,反之会杀死多余的Pod,保证Pod副本数量。
Replica Set是RC升级版,确保Label Selector匹配的Pod数量维持在期望值。

#kubectl create -f replicationController.yml
apiVersion: v1
kind: ReplicationController
metadata: 
    name: test-pod
spec: 
   replicas: 2 
     selector: 
         app:testpod
   template:
      metadata:
          label:
             app: testpod
             spec: 
                containers:
                   - image: nginx
                      name: nginx
                      ports:
                       - containerPort: 80
 
#kubectl create -f ReplicaSet.yml
apiVersion: v1
kind: ReplicaSet
metadata: 
    name: test-pod
spec: 
   replicas: 2 
     selector: 
         matchLabels: 
             tier: frontend
         matchExpressions: 
             - {key: tier, operator: In, values: [frontend]}
   template:
      metadata:
          label:
             app:  guestbook
             tier: frontend
      spec: 
        containers:
        - name: redis
          image: redis
          resources:
              request:
                  cpu: 100m
                  memory: 100Mi
          env:
          - name: HOST
              value:0.0.0.0
          ports:
          - containerPort: 80
                          

Horizontal Pod AutoScaler

自动弹性扩展一直是一个热点问题,系统可根据应用负载变化而自动增加或者减少计算资源。RC可以方便实现Pod的弹性伸缩,在此基础上K8s平台获取监控POD的各项资源监控指标,就可以实现自动弹性伸缩功能。既基于POD资源使用情况,根据配置策略自动调整Pod的副本数。自动弹性伸缩功能分为两种,一种是水平扩展,针对Pod实例数目增减,一种是垂直扩展,既增加单个实例可以使用的资源增减。HA属于前者。
HA操作对象有RC、Deployment、Replica Set对应的Pod

#kubectl create -f ha.yml
apiVersion: extensions/vibetal
kind: HorizontalPodAutoscaler
metadata: 
    name: nginx
    namespace: default
spec: 
   scaleRef: 
   kind:ReplicationController
   name: nginx
   subresoures: scaleRef
minReplicas: 1
maxReplicas: 8
cunUtilzation:
   targetPercerntage: 80

Deployment

Kubernetes提供了一个更加简单的更新RC和Pod的机制,通过Deployment中的描述期望的集群状态,Deployment Controller 会将现在的集群状态在一个可控的速度下逐步更新成期望的集群转态。
Deployment的主要职责是同样是为了保证Pod的数量和健康,绝大多数的功能和Replication Controller完全一样。但是具备了和RC没有的新特性.

  1. 事件转态查看:可以查看升级的详细进度和状态。
  2. 回滚:当升级Pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚道上一个稳定的版本或者指定的版本。
  3. 版本记录:每一次对Deployment的操作都能保存下来,给予后续可能的回滚使用。
  4. 暂停和启动:对于每一次升级,都能够随时暂停和启动。
  5. 多张升级方案:
    1. Recreate----删除所有已保存的Pod,重新创建新的。
    2. RollingUpdate----滚动升级,既逐步替换的策略。滚动升级是支持更多的附加参数

相比于RC,Deployment直接使用kubectl edit deployment/deploymentName 或者kubectl set方法就可以直接升级。

#kubectl create -f deployment.yml
#kubectl create -f deployment.yml --record
#kubectl get -f deployments
#kubectl set image deployment/deploynginx2 nginx=nginx:1.0
#kubectl edit deployment/deploynginx2

apiVersion: extensions/vibetal
kind: Deployment
metadata: 
    name: deploynginx
spec: 
   replicas: 3
   template: 
       metadata:
           labels:
              app: nginx
       
       spec:
          containers:
          - name: nginx
              image:nginx:latest
              ports:
              - containerPort: 80
              

#deployment常用命令
#kubectl describe deployments #查询详细信息,获取升级进度
#kubectl rollout pause deployment/deploynginx #暂停升级
#kubectl rollout resume deployment/deploynginx #继续升级
#kubectl rollout undo deployment/deploynginx #升级回滚
#kubectl scale  deployment/deploynginx  --replicas 8 #弹性伸缩Pod数量

Deployment

Job

从程序的运行形态来说,Pod分为两类,长时间运行服务和一次性的任务,RC创建的Pod是长时间运行的服务,而Job创建的Pod是一次性任务

#kubectl create -f Job.yml
apiVersion: extensions/vibetal
kind: Job
metadata: 
    name: Ubuntu
spec: 
   Completions: 1
   Parallelism: 1
   selector:
       matchLables:
           app: long-task
   template: 
       metadata:
           name: long-task
           labels:
              app: long-task
       spec:
          containers:
          - name: Ubuntu
              image:Ubuntu:latest
              ports:
       command: ["xxxxx"]
       
发布了21 篇原创文章 · 获赞 2 · 访问量 2860

猜你喜欢

转载自blog.csdn.net/ysf465639310/article/details/104794611