zoukankan      html  css  js  c++  java
  • 【Kubernetes】副本控制器

    环境

    1. kubernetes 1.20.2
    2. Spring Boot 2.5.0-M1

    目标

    前面我们使用 rc 自动创建了一个 Pod 集群,这里再简单理解副本控制器的原理。

    创建 rc

    rc.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: rc-demo
    spec:
      replicas: 3
      selector:
        app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
            - name: pod-demo
              image: jiangbo920827/spring-demo:actuator
              ports:
                - containerPort: 8080
    
    

    查看 Pod

    [root@master kubernetes]# kubectl get po
    NAME            READY   STATUS    RESTARTS   AGE
    rc-demo-9hjh6   1/1     Running   0          30s
    rc-demo-ddg8d   1/1     Running   0          30s
    rc-demo-qxsf4   1/1     Running   0          30s
    

    查看 rc

    [root@master kubernetes]# kubectl get rc
    NAME      DESIRED   CURRENT   READY   AGE
    rc-demo   3         3         3       44s
    

    创建 Pod

    rc 是根据 yaml 中的 template 字段来创建 Pod。有时候,我们也称这个为 PodTemplate,即 Pod 模板。
    经过与之前我们创建 Pod 的 yaml 相比,就缺少了类型,版本,名称字段。

    Pod 数量

    还有一个问题是,rc 怎么知道创建了多少个 Pod,还需要创建几个呢?这个是通过之前的标签与标签选择器来实现的。

    查看 Pod 的标签

    可以看到,rc 生成的每个 Pod 都有我们定义在 Pod 模板中的标签。

    NAME            READY   STATUS    RESTARTS   AGE   LABELS
    rc-demo-9hjh6   1/1     Running   1          14h   app=myapp
    rc-demo-ddg8d   1/1     Running   1          14h   app=myapp
    rc-demo-qxsf4   1/1     Running   1          14h   app=myapp
    

    查看标签选择器

    Selector 字段表示这个是一个标签选择器,选择的标签是 app=myapp,和我们 Pod 的标签对应。
    通过标签,rc 就能知道当前有几个 Pod 在运行,还需要创建几个。

    [root@master kubernetes]# kubectl describe -f rc.yaml
    Name:         rc-demo
    Namespace:    default
    Selector:     app=myapp
    Labels:       app=myapp
    Annotations:  <none>
    Replicas:     3 current / 3 desired
    Pods Status:  3 Running / 0 Waiting / 0 Succeeded / 0 Failed
    Pod Template:
      Labels:  app=myapp
      Containers:
       pod-demo:
        Image:        jiangbo920827/spring-demo:actuator
        Port:         8080/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Events:
      Type    Reason            Age   From                    Message
      ----    ------            ----  ----                    -------
      Normal  SuccessfulCreate  14h   replication-controller  Created pod: rc-demo-qxsf4
      Normal  SuccessfulCreate  14h   replication-controller  Created pod: rc-demo-ddg8d
      Normal  SuccessfulCreate  14h   replication-controller  Created pod: rc-demo-9hjh6
    

    验证

    既然是通过标签选择器来统计的 Pod 数量,那么修改其中一个 Pod 的标签,应该会继续创建满足条件的标签。

    [root@master kubernetes]# kubectl get pod --show-labels
    NAME            READY   STATUS    RESTARTS   AGE   LABELS
    rc-demo-9hjh6   1/1     Running   1          14h   app=myapp
    rc-demo-ddg8d   1/1     Running   1          14h   app=myapp
    rc-demo-qxsf4   1/1     Running   1          14h   app=myapp
    [root@master kubernetes]# kubectl label pod rc-demo-9hjh6 app=yourapp --overwrite
    pod/rc-demo-9hjh6 labeled
    [root@master kubernetes]# kubectl get pod --show-labels
    NAME            READY   STATUS    RESTARTS   AGE   LABELS
    rc-demo-9hjh6   1/1     Running   1          14h   app=yourapp
    rc-demo-ddg8d   1/1     Running   1          14h   app=myapp
    rc-demo-h4vvc   1/1     Running   0          9s    app=myapp
    rc-demo-qxsf4   1/1     Running   1          14h   app=myapp
    

    总结

    介绍了副本控制器控制 Pod 数量的原理。

    附录

  • 相关阅读:
    zz 通过INFORMATION_SCHEMA.INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS 三个表获取事务与锁的信息
    binlog在并发状态下的记录
    关于mysql的metadata lock
    测试相关
    数组
    方法、递归算法
    顺序、选择、循环结构
    Scanner
    包机制、javadoc
    变量、常量
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/14349016.html
Copyright © 2011-2022 走看看