Linux——pod的控制器
- deployment
- 无状态服务进行部署
- 滚动更新,支持回滚
- 按照25%的比例进行更新
- 水平扩展和收缩
- 指定pod副本数量 ---- replicaset
- statefulset
- 有状态服务的部署
- 固定pod的网络ID 和 持久卷的挂载
- pod将拥有固定的pod-name
-
eg: 以24 号实验为例:
创建了一个名为web的statefulset,设置副本数为2,启动两个pod。pod的名字是固定的 web-0/web-1,后续更新pod的镜像。新启动的pod也会继续使用相同的pod名称。
通过pvc 实现数据的持久化。根据副本数创建pvc。pvc的命令规则为statefulset的名称-podtemplate 字段中规定的名称 - 编号,编号相等的pvc和pod 进行一一对应的挂载。
-
-
同样支持滚动更新、回滚、pod的水平扩展和收缩
-
pod 在创建、删除、更新时,会根据编号实现pod的有序控制
- 有状态服务的部署
- daemonset
[root@control ~]# vim daemon-set.yml
apiVersion: apps/v1 // 前7行是所有资源在配置时,应该规定的基本信息
kind: DaemonSet // 确定资源的种类
metadata: // 当前资源的元数据
name: fluentd-elasticsearch // 资源的名称
namespace: kube-system // 资源属于哪个名称空间,未做规定的情况下
// 就是default名称空间
labels: // 对资源本身设定的标签
k8s-app: fluentd-logging // 标签的值
spec: // 针对资源的声明
selector: // 设置标签
matchLabels: // 匹配的标签
name: fluentd-elasticsearch
template: // pod的模板
metadata: // 每一个pod的元数据
labels: // pod的标签
name: fluentd-elasticsearch
spec: // pod的配置声明
tolerations: // pod的容忍度,通过容忍度可以让pod在一些资源不
//足或者节点不适合运行pod的情况下,启动pod
# 这些容忍度设置是为了让该守护进程集在控制平面节点上运行
# 如果你不希望自己的控制平面节点运行 Pod,可以删除它们
- key: node-role.kubernetes.io/control-plane // 这三行配置的效果的允许控制器
//在控制节点启动pod
operator: Exists // 操作符,即上一行的键存在
effect: NoSchedule // 第一行的键的值
- key: node-role.kubernetes.io/master // 和上面三行的作用一样,允许在master
// 节点上调度pod
operator: Exists
effect: NoSchedule
containers: // pod中容器的设置
- name: fluentd-elasticsearch // 指定容器的名字
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 // 容器镜像
resources: // 设定容器的资源获取
limits: // 限制容器对于所在节点的资源使用
memory: 200Mi // 内存不超过200m
requests: // 容器资源的软限制
cpu: 100m // cpu 使用率不超过100m
// 一个cpu核心对应1000m
// 容器的cpu使用率不超过10%
memory: 200Mi // 内存使用不超过200m
volumeMounts: // 容器内卷的挂载
- name: varlog // 卷的名字
mountPath: /var/log // 挂载点
# 可能需要设置较高的优先级类以确保 DaemonSet Pod 可以抢占正在运行的 Pod
# priorityClassName: important
terminationGracePeriodSeconds: 30 // 结束pod时,会等待30S
volumes: // 将容器需要挂载的卷创建完成
- name: varlog // 卷的名称
hostPath: // 存储卷的驱动:宿主机目录
path: /var/log // 宿主机的目录的路径
[root@control ~]# kubectl create -f daemon-set.yml
daemonset.apps/fluentd-elasticsearch created
因为实际有三个节点是符合pod的调度要求,在三个节点上各启动一个pod
[root@control ~]# kubectl get pod -n kube-system --watch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-fcd6c9c4-cvcvt 1/1 Running 3 (6h34m ago) 5d4h 10.244.1.28 node1 <none> <none>
coredns-fcd6c9c4-m9kxk 1/1 Running 3 (6h34m ago) 5d4h 10.244.1.27 node1 <none> <none>
etcd-control 1/1 Running 3 (6h34m ago) 5d4h 192.168.110.10 control <none> <none>
fluentd-elasticsearch-jd922 1/1 Running 0 35s 10.244.2.33 node2 <none> <none>
fluentd-elasticsearch-l4962 1/1 Running 0 35s 10.244.0.3 control <none> <none>
fluentd-elasticsearch-rn64j 1/1 Running 0 35s 10.244.1.30 node1 <none> <none>
kube-apiserver-control 1/1 Running 3 (6h34m ago) 5d4h 192.168.110.10 control <none> <none>
kube-controller-manager-control 1/1 Running 3 (6h34m ago) 5d4h 192.168.110.10 control <none> <none>
kube-proxy-54j4f 1/1 Running 3 (6h34m ago) 5d4h 192.168.110.11 node1 <none> <none>
kube-proxy-c8cdj 1/1 Running 3 (6h34m ago) 5d4h 192.168.110.10 control <none> <none>
kube-proxy-v7td8 1/1 Running 3 (6h34m ago) 5d4h 192.168.110.22 node2 <none> <none>
kube-scheduler-control 1/1 Running 0 4h38m 192.168.110.10 control <none> <none>
metrics-server-86c648b4bf-tfhjp 1/1 Running 2 (6h34m ago) 47h 10.244.2.27 node2 <none> <none>
^C[root@control ~]#
[root@control ~]# kubectl get daemonsets.apps/fluentd-elasticsearch -n kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
fluentd-elasticsearch 3 3 3 3 3 <none> 3m45s
[root@control ~]# kubectl edit daemonsets.apps/fluentd-elasticsearch -n kube-system
daemonset.apps/fluentd-elasticsearch edited
找到toleration,将设置的容忍度键删除,一共需要删除7行。删除后,保存退出,变更自动生效
[root@control ~]# kubectl edit daemonsets.apps/fluentd-elasticsearch -n kube-system
Edit cancelled, no changes made.
[root@control ~]# kubectl get pod -n kube-system --watch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-fcd6c9c4-cvcvt 1/1 Running 3 (6h38m ago) 5d4h 10.244.1.28 node1 <none> <none>
coredns-fcd6c9c4-m9kxk 1/1 Running 3 (6h38m ago) 5d4h 10.244.1.27 node1 <none> <none>
etcd-control 1/1 Running 3 (6h38m ago) 5d4h 192.168.110.10 control <none> <none>
fluentd-elasticsearch-2vkk8 1/1 Running 0 17s 10.244.1.31 node1 <none> <none>
fluentd-elasticsearch-xsbcc 1/1 Running 0 21s 10.244.2.34 node2 <none> <none>
kube-apiserver-control 1/1 Running 3 (6h38m ago) 5d4h 192.168.110.10 control <none> <none>
kube-controller-manager-control 1/1 Running 3 (6h38m ago) 5d4h 192.168.110.10 control <none> <none>
kube-proxy-54j4f 1/1 Running 3 (6h38m ago) 5d4h 192.168.110.11 node1 <none> <none>
kube-proxy-c8cdj 1/1 Running 3 (6h38m ago) 5d4h 192.168.110.10 control <none> <none>
kube-proxy-v7td8 1/1 Running 3 (6h38m ago) 5d4h 192.168.110.22 node2 <none> <none>
kube-scheduler-control 1/1 Running 0 4h43m 192.168.110.10 control <none> <none>
metrics-server-86c648b4bf-tfhjp 1/1 Running 2 (6h38m ago) 47h 10.244.2.27 node2 <none> <non
可以观察到pod 数量由3个降低为2个。因为能够调度pod的节点数由三个变成2。
在第一次创建后,pod状态出现镜像拉取失败,如图:
可以去报错的节点上,手动拉取一下。
[root@node1 ~]# crictl -r unix:///var/run/containerd/containerd.sock pull quay.io/fluentd_elasticsearch/fluentd:v2.5.2