文章目录
- Controller
- ReplicationController
- ReplicaSet
- Deployments
- 创建 controllers-nginx-deployment.yaml 文件
- kubectl apply -f controllers-nginx-deployment.yaml [启动]
- kubectl get deployments [获取所有的deployments]
- kubectl get deployments -o wide [展示deployment的详情]
- kubectl rollout status deployment.v1.apps/{deployment_name} [查看deployment的推送状态]
- kubectl get rs [查看deployment的副本数量]
- kubectl get rs -o wide [查看deployment的副本数量详情]
- kubectl get pods --show-labels [查看pod 同时显示pod的label标签]
- kubectl describe deployments [查看deployments详情]
- kubectl set image deployment nginx-deployment nginx=nginx:1.9.1 [镜像版本更新]
- kubectl delete deployment {deployment-name} [删除deployment-name下的pod]
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 ~]#