一、控制器
1、介绍
k8s内拥有许多的控制器类型,用来控制pod的状态、行为、副本数量等等,控制器通过pod的标签来控制pod。
Pod通过控制器实现应用的运维,如伸缩、升级等,控制器决定了创建pod资源的方式和类型,在集群上管理和运行容器的对象通过label-selector 相关联。
2、控制器常见类型
1、Deployment:一般用来部署长期运行的、无状态的应用
特点:集群之中,随机部署
2、DaemonSet:每一个节点上部署一个Pod,删除节点自动删除对应的POD(zabbix-agent)
特点:每一台上有且只有一台
3、StatudfluSet: 部署有状态应用
特点:有启动顺序
3、Deployment
在Deployment对象中描述所需的状态,然后Deployment控制器将实际状态以受控的速率更改为所需的状态。
部署无状态应用
1)创建Depoyment资源
[root@k8s-master-01 ~]# vim test1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 1
selector:
matchLabels:
release: stable
template:
metadata:
name: test-tag
labels:
release: stable
spec:
containers:
- name: nginx
image: nginx
参数示意
nginx-deployment:Deployment的名称。
replicas:创建Pod的副本数。
selector:定义Deployment如何找到要管理的Pod,与template的label(标签)对应。
template字段包含以下字段:
app:nginx使用label(标签)标记Pod
spec:表示Pod运行一个名字为nginx的容器。
image:运行此Pod使用的镜像
Port:容器用于发送和接收流量的端口
2)执行创建命令
[root@k8s-master-01 ~]# kubectl apply -f test1.yaml
[root@k8s-master-01 ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
deployment 1/1 1 1 14h
3)注意
将kubectl标志设置–record为true允许您将当前命令记录在正在创建或更新的资源的注释中。这对于将来的检查很有用。
[root@k8s-master-01 ~]# kubectl apply -f test1.yaml --record
deployment.apps/deployment configured
[root@k8s-master-01 ~]# kubectl rollout history deployment deployment
deployment.apps/deployment
REVISION CHANGE-CAUSE
1 kubectl apply --filename=test1.yaml --record=true
4)查看部署状态
[root@k8s-master-01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
deployment-5849786498-4dnsb 1/1 Running 1 17h
5)查看部署详情
[root@k8s-master-01 ~]# kubectl describe deployments.apps deployment
Name: deployment
Namespace: default
CreationTimestamp: Wed, 31 Mar 2021 21:17:14 +0800
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
kubernetes.io/change-cause: kubectl apply --filename=test1.yaml --record=true
Selector: release=stable
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: release=stable
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: deployment-5849786498 (1/1 replicas created)
Events: <none>
6)弹性扩容
①修改配置清单
[root@k8s-master-01 ~]# kubectl edit deployments.apps deployment
...
spec:
progressDeadlineSeconds: 600
replicas: 3
...
#查看
[root@k8s-master-01 ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
deployment-5849786498-4dnsb 1/1 Running 1 17h
deployment-5849786498-ddndh 1/1 Running 0 66s
deployment-5849786498-n64hn 1/1 Running 0 67s
②scale
[root@k8s-master-01 ~]# kubectl scale deployment/deployment --replicas=1
deployment.apps/deployment scaled
③打标签
[root@k8s-master-01 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"replicas":10}}'
deployment.apps/deployment patched
#查看
[root@k8s-master-01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
deployment-5849786498-4dnsb 1/1 Running 1 17h
deployment-5849786498-4lpjm 1/1 Running 0 47s
deployment-5849786498-4qjx2 0/1 ContainerCreating 0 47s
deployment-5849786498-ddndh 1/1 Running 0 3m56s
deployment-5849786498-jrg9r 1/1 Running 0 47s
deployment-5849786498-n64hn 1/1 Running 0 3m57s
deployment-5849786498-nhdf4 1/1 Running 0 47s
deployment-5849786498-rkhqd 1/1 Running 0 47s
deployment-5849786498-wxs7t 1/1 Running 0 47s
deployment-5849786498-xbwnd 1/1 Running 0 47s
④修改配置清单
[root@k8s-master-01 ~]# vim test1.yaml
...
spec:
replicas: 3
...
[root@k8s-master-01 ~]# kubectl apply -f test1.yaml
#查看
[root@k8s-master-01 ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
deployment-58f6fd8cd7-m6wvh 1/1 Running 0 2m48s
deployment-58f6fd8cd7-txknt 1/1 Running 0 2m48s
deployment-58f6fd8cd7-vhfdr 1/1 Running 0 6m2s
7)更新镜像
①修改主机清单
[root@k8s-master-01 ~]# kubectl edit deployments.apps deployment
...
spec:
containers:
- image: nginx:1.18.0
...
#查看
[root@k8s-master-01 ~]# kubectl describe pod -n default deployment-75d785f89b-sv4vq |grep Image:
Image: nginx:1.18.0
②打标签
[root@k8s-master-01 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"template":{"spec":{"containers":[{"image":"nginx:1.16.0","name":"nginx"}]}}}}'
deployment.apps/deployment patched
#查看
[root@k8s-master-01 ~]# kubectl describe pod -n default deployment-75d785f89b-sv4vq |grep Image:
Image: nginx:1.16.0
③修改配置清单
[root@k8s-master-01 ~]# vim test1.yaml
...
spec:
containers:
- name: nginx
image: nginx:1.17.0
...
[root@k8s-master-01 ~]# kubectl apply -f test1.yaml
deployment.apps/deployment configured
[root@k8s-master-01 ~]# kubectl describe pod -n default deployment-58f6fd8cd7-vhfdr |grep Image:
Image: nginx:1.17.0
④设置镜像
[root@k8s-master-01 ~]# kubectl set image deployment/deployment nginx=nginx:1.19.0
deployment.apps/deployment image updated
[root@k8s-master-01 ~]# kubectl describe pod -n default deployment-854c7cd5d9-zccw5 |grep Image:
Image: nginx:1.19.0