Kubernetes之Controller组件深入

Controller

ReplicationController

概念

https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

1.保证pod在任何时间内运行并可用的副本数量;

创建 controllers-replication.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

备注:配置文件说明

1.kind: ReplicationController :组件类型为 ReplicationController
2.replicas: 3 副本数量,保持几个pod运行并可用
3.template: 模板,下面所有的属性都是基于创建的pod以及内部容器的模板
4.template通过labels 去管理 pod
5.selector这里要注意下:app的值:nginx,必须在下面的labels之中app有定义的值nginx

在这里插入图片描述

kubectl apply -f controllers-replication.yaml [启动]

[root@manager-node demo]# kubectl apply -f controllers-replication.yaml 
replicationcontroller/nginx created

kubectl get pods -o wide [查看pod状态变化]

[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP       NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   0/1     ContainerCreating   0          12s   <none>   worker01-node   <none>           <none>
nginx-764f2   0/1     ContainerCreating   0          12s   <none>   worker01-node   <none>           <none>
nginx-l25wp   0/1     ContainerCreating   0          12s   <none>   worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP              NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   0/1     ContainerCreating   0          15s   <none>          worker01-node   <none>           <none>
nginx-764f2   0/1     ContainerCreating   0          15s   <none>          worker01-node   <none>           <none>
nginx-l25wp   1/1     Running             0          15s   192.168.38.75   worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   0/1     ContainerCreating   0          17s   <none>           worker01-node   <none>           <none>
nginx-764f2   1/1     Running             0          17s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running             0          17s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   0/1     ContainerCreating   0          18s   <none>           worker01-node   <none>           <none>
nginx-764f2   1/1     Running             0          18s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running             0          18s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   0/1     ContainerCreating   0          19s   <none>           worker01-node   <none>           <none>
nginx-764f2   1/1     Running             0          19s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running             0          19s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   0/1     ContainerCreating   0          20s   <none>           worker01-node   <none>           <none>
nginx-764f2   1/1     Running             0          20s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running             0          20s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   1/1     Running   0          22s   192.168.101.14   worker01-node   <none>           <none>
nginx-764f2   1/1     Running   0          22s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running   0          22s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   1/1     Running   0          23s   192.168.101.14   worker01-node   <none>           <none>
nginx-764f2   1/1     Running   0          23s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running   0          23s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# 

备注说明

1.我们可以看到 三个pod已经被创建,
2.下面做一个试验,加入我删除一个pod,看一下会有什么变化

kubectl delete pod {pod_name} [删除pod]

试验说明

1.因为我们在上面ReplicationController的介绍中已经提到过,它可以维护固定的几个运行并可用的pod
  那是不是意味着:一旦我删除一个pod,也会自动的创建一个新的pod呢?
2.我们在主节点上打开两个客户端,一个客户端用于实时查看当前所有pod的变换
  另外一个客户端,我们去执行删除某一个pod的命令;
客户端:执行删除某一个pod的命令
[root@manager-node demo]# kubectl get pod -o wide
NAME          READY   STATUS    RESTARTS   AGE     IP               NODE            NOMINATED NODE   READINESS GATES
nginx-2pfcs   1/1     Running   0          5m45s   192.168.101.14   worker01-node   <none>           <none>
nginx-764f2   1/1     Running   0          5m45s   192.168.101.13   worker01-node   <none>           <none>
nginx-l25wp   1/1     Running   0          5m45s   192.168.38.75    worker02-node   <none>           <none>
[root@manager-node demo]# kubectl delete pod nginx-2pfcs
pod "nginx-2pfcs" deleted
[root@manager-node demo]# 
客户端:实时查看当前所有pod的变换
[root@manager-node ~]# kubectl get pod -w
NAME          READY   STATUS    RESTARTS   AGE
nginx-2pfcs   1/1     Running   0          5m26s
nginx-764f2   1/1     Running   0          5m26s
nginx-l25wp   1/1     Running   0          5m26s
nginx-2pfcs   1/1     Terminating   0          6m6s
nginx-r8t77   0/1     Pending       0          0s
nginx-r8t77   0/1     Pending       0          0s
nginx-r8t77   0/1     ContainerCreating   0          0s
nginx-2pfcs   0/1     Terminating         0          6m7s
nginx-r8t77   0/1     ContainerCreating   0          1s
nginx-2pfcs   0/1     Terminating         0          6m13s
nginx-2pfcs   0/1     Terminating         0          6m13s
nginx-r8t77   1/1     Running             0          7s

说明

1.在我们执行上面的删除pod:nginx-2pfcs的命令之后,同时Pod:nginx-r8t77 也同时被创建出来了;
2.也就证明了ReplicationController 通过Replica属性 可以维护固定的运行并可用的Pod的数量;

kubectl scale rc nginx --replicas=5 [修改replicas副本数量]

[root@manager-node demo]# kubectl scale rc nginx --replicas=5
replicationcontroller/nginx scaled
[root@manager-node demo]# kubectl get pods -w
NAME          READY   STATUS              RESTARTS   AGE
nginx-764f2   1/1     Running             0          18m
nginx-l25wp   1/1     Running             0          18m
nginx-pcb7t   0/1     ContainerCreating   0          5s
nginx-r8t77   1/1     Running             0          12m
nginx-xfwqv   0/1     ContainerCreating   0          5s
nginx-pcb7t   1/1     Running             0          6s
nginx-xfwqv   1/1     Running             0          6s

备注说明

1.很明显,新增了两个pod

ReplicaSet

概述

1.ReplicaSet 实际上包含ReplicationController的所有功能;
  ReplicationController 这个是逐渐的被摒弃的一个组件;
2.ReplicaSet 在selector选择器的使用方面更加灵活;
  ReplicationController 只支持一个选择器的选择(等于)
  ReplicaSet 可以支持多个选择器,类似in某个选择,或者not in 某个选择器
3.因为我们知道Deployment可以进行管理ReplicaSet
  所以ReplicaSet一般与Deployment一起使用;
  具体可以参考Deployment的讲解;

在这里插入图片描述

Deployments

创建 controllers-nginx-deployment.yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

kubectl apply -f controllers-nginx-deployment.yaml [启动]

[root@manager-node demo]# kubectl apply -f controllers-nginx-deployment.yaml 
deployment.apps/nginx-deployment created
[root@manager-node demo]# 

查看

[root@manager-node demo]# kubectl get pods
NAME                               READY   STATUS        RESTARTS   AGE
nginx-deployment-6dd86d77d-962t6   0/1     Pending       0          2m18s
nginx-deployment-6dd86d77d-jmj9v   0/1     Pending       0          2m18s
nginx-deployment-6dd86d77d-vh8pl   0/1     Pending       0          2m18s
[root@manager-node demo]#
1.这里大家注意下,如果是Pending(待定)状态,有可能是你集群中的子节点服务器没有正常运行,导致待分配
[root@manager-node demo]# kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-6dd86d77d-962t6   1/1     Running   0          4m11s
nginx-deployment-6dd86d77d-jmj9v   1/1     Running   0          4m11s
nginx-deployment-6dd86d77d-vh8pl   1/1     Running   0          4m11s
[root@manager-node demo]# 

kubectl get deployments [获取所有的deployments]

[root@manager-node demo]# kubectl get deployments
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           5m21s
[root@manager-node demo]# 

字段描述
在这里插入图片描述

kubectl get deployments -o wide [展示deployment的详情]

[root@manager-node demo]# kubectl get deployments -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES        SELECTOR
nginx-deployment   3/3     3            3           7m38s   nginx        nginx:1.7.9   app=nginx
[root@manager-node demo]# 

kubectl rollout status deployment.v1.apps/{deployment_name} [查看deployment的推送状态]

[root@manager-node demo]# kubectl rollout status deployment.v1.apps/nginx-deployment
deployment "nginx-deployment" successfully rolled out
[root@manager-node demo]# 

kubectl get rs [查看deployment的副本数量]

[root@manager-node demo]# kubectl get rs
NAME                         DESIRED   CURRENT   READY   AGE
nginx-deployment-6dd86d77d   3         3         3       14m
[root@manager-node demo]# 

kubectl get rs -o wide [查看deployment的副本数量详情]

[root@manager-node demo]# kubectl get rs -o wide
NAME                         DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES        SELECTOR
nginx-deployment-6dd86d77d   3         3         3       56m   nginx        nginx:1.7.9   app=nginx,pod-template-hash=6dd86d77d
[root@manager-node demo]# 

kubectl get pods --show-labels [查看pod 同时显示pod的label标签]

[root@manager-node demo]# kubectl get pods --show-labels
NAME                               READY   STATUS    RESTARTS   AGE   LABELS
nginx-deployment-6dd86d77d-962t6   1/1     Running   0          46m   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-jmj9v   1/1     Running   0          46m   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-vh8pl   1/1     Running   0          46m   app=nginx,pod-template-hash=6dd86d77d
[root@manager-node demo]# 

kubectl describe deployments [查看deployments详情]

[root@manager-node demo]# kubectl describe deployments
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Mon, 06 Jan 2020 03:34:51 +0000
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx-deployment","namespace":"d...
Selector:               app=nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.7.9
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-6dd86d77d (3/3 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  59m   deployment-controller  Scaled up replica set nginx-deployment-6dd86d77d to 3
[root@manager-node demo]# 

kubectl set image deployment nginx-deployment nginx=nginx:1.9.1 [镜像版本更新]

[root@manager-node demo]# kubectl set image deployment nginx-deployment nginx=nginx:1.9.1 
deployment.extensions/nginx-deployment image updated
[root@manager-node demo]# 

备注

1.nginx-deployment这里是deployments的名字,nginx=nginx:1.9.1 镜像版本设置为1.9.1
[root@manager-node demo]# kubectl get rs -o wide
NAME                          DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES        SELECTOR
nginx-deployment-6dd86d77d    0         0         0       123m   nginx        nginx:1.7.9   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-784b7cc96d   3         3         3       53m    nginx        nginx:1.9.1   app=nginx,pod-template-hash=784b7cc96d
[root@manager-node demo]# 

kubectl delete deployment {deployment-name} [删除deployment-name下的pod]

[root@manager-node ~]# kubectl get pods
NAME                                 READY   STATUS        RESTARTS   AGE
whoami-deployment-678b64444d-2htx6   1/1     Running       0          143m
whoami-deployment-678b64444d-6bgrm   1/1     Running       3          13h
whoami-deployment-678b64444d-7h2lm   1/1     Running       0          143m
whoami-deployment-678b64444d-nsh2r   1/1     Running       0          143m
whoami-deployment-678b64444d-sxwfl   1/1     Running       3          13h
[root@manager-node ~]# 
发布了261 篇原创文章 · 获赞 37 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/u014636209/article/details/103939337