[K8S] 04 - Controller
一个loop,主要是 对Pod进行监控、巡视。比如Pod挂了,那就重新拉起。
常见“控制器”
控制器类型
- Deployment, 无状态;已包含 ReplicaSet 控制器。
- StatefulSet,有状态;
- Job,一次性任务;
- CronJob,周期性任务;
命令行模式
开启一个服务。
kubectl run nginx-app1 --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2
查看 deployment控制器,会看到如下结果:
查看启动后的状态。
kubectl get deployment
kubectl get deployment.apps
kubectl get replicaset
kubectl get pods
kubectl get pods -o wide
资源清单模式
创建 资源清单
[selector]
App 如何与 Pod关联?by selector。
"通过 标签选择器 selector,找到label,进一步地 找到template中的pod"。
03-create-deployment-nginx-app2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app2 【定义了这个应用的名字,spec开始定义应用的细节】
spec:
replicas: 1
selector:
matchLabels:
app: nginx # <-------------这里让App知道自己的pod到底是哪位
template: 【pod模板】
metadata: 【开始定义pod】
labels:
app: nginx 【pod的标签】
spec:
containers:
- name: nginxapp2-container
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
执行 清单文件
$ kubectl apply -f 03-create-deployment-nginx-app2.yaml
$ kubectl get deployment.apps 【查看app的列表】
$ kubectl get rs 【查看replicas】
$ kubectl get pods
$ kubectl get pods -o wide 【查看pod详情,包括节点、IP等】
删除 Deployment控制器类型应用
带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。
- However, 若是直接删除
无法最终删除,相当于重启,时间会被重置。
$ kubectl delete pods nginx-app1-57c7c9c89d-qp8h8 -n default
- So, 应当删除应用
$ kubectl delete deployment.apps nginx-app1
# 查看Pod还在么?
$ kubectl get rs
$ kubectl get pods
- Or 通过资源清单文件删除
$ kubectl delete -f 03-create-deployment-nginx-app2.yaml
End.