Kubernetes核心-DaemonSet部署守护进程
1. DaemonSet-部署守护进程
1.1. DaemonSet介绍
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。使用 DaemonSet 的一些典型用法:
- 运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph。
- 在每个 Node 上运行日志收集 daemon,例如fluentd、logstash。
- 在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter。
1.2. 模板
apiVersion: apps/v1
kind: DaemonSet
metadata
name <string> # 在一个名称空间不能重复
namespace <string> # 指定名称空间,默认defalut
labels <map[string]string> # 标签
annotations <map[string]string> # 注释
spec
selector <Object> # 标签选择器
matchExpressions <[]Object> # 标签选择器的一种形式,多个条件使用AND连接
key <string> -required- # 标签中的Key
operator <string> -required- # 操作符,支持 In, NotIn, Exists, DoesNotExist
values <[]string> # value的数组集合,当操作符为In或NotIn时不能为空
matchLabels <map[string]string> # 使用key/value的格式做筛选
updateStrategy <Object> # 更新策略
type <string> # 更新类型,支持 Recreate, RollingUpdate。默认RollingUpdate
rollingUpdate <Object> # 滚动更新策略,仅在type为RollingUpdate时使用
maxUnavailable <string> # 最大缺失Pod数,即滚动更新时最多可少于期望值出几个pod。支持数字和百分比格式
template <Object> -required- # Pod模板,和Pod管理器yaml几乎格式一致
metadata <Object> # Pod的metadata
spec <Object> # Pod的spec
1.3. 案例
1. 创建daemonset
[root@hdss7-200 base_resource]# cat /data/k8s-yaml/base_resource/daemonset/proxy-v1.12.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: proxy-daemonset
namespace: app
labels:
app: nginx
release: stable
partition: CRM
spec:
selector:
matchLabels:
app: nginx
release: stable
tier: proxy
partition: CRM
updateStrategy:
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
app: nginx
release: stable
tier: proxy
partition: CRM
version: v1.12
spec:
containers:
- name: nginx-proxy
image: harbor.od.com/public/nginx:v1.12
ports:
- name: http
containerPort: 80
hostPort: 10080
lifecycle:
postStart:
exec:
command:
- /bin/bash
- -c
- "echo 'health check ok!' > /usr/share/nginx/html/health.html"
readinessProbe:
initialDelaySeconds: 5
httpGet:
port: 80
path: /health.html
livenessProbe:
initialDelaySeconds: 10
periodSeconds: 5
httpGet:
port: 80
path: /health.html
[root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/base_resource/daemonset/proxy-v1.12.yaml --record
[root@hdss7-21 ~]# kubectl get daemonset -n app
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
proxy-daemonset 2 2 2 2 2 <none> 56s
[root@hdss7-21 ~]# kubectl get pod -n app -l tier=proxy -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
proxy-daemonset-7stgs 1/1 Running 0 8m31s 172.7.22.9 hdss7-22.host.com <none> <none>
proxy-daemonset-dxgdp 1/1 Running 0 8m31s 172.7.21.10 hdss7-21.host.com <none> <none>
[root@hdss7-21 ~]# curl -s 10.4.7.22:10080/info # 通过宿主机的端口访问
2020-01-22T13:15:58+00:00|172.7.22.9|nginx:v1.12
[root@hdss7-21 ~]# curl -s 10.4.7.21:10080/info
2020-01-22T13:16:05+00:00|172.7.21.10|nginx:v1.12
2. 升级daemonset
daemonset的升级方式和deployment一致
[root@hdss7-21 ~]# kubectl rollout history daemonset proxy-daemonset -n app
REVISION CHANGE-CAUSE
1 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/daemonset/proxy-v1.12.yaml --record=true
[root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/base_resource/daemonset/proxy-v1.13.yaml --record
[root@hdss7-21 ~]# kubectl rollout history daemonset proxy-daemonset -n app
daemonset.extensions/proxy-daemonset
REVISION CHANGE-CAUSE
1 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/daemonset/proxy-v1.12.yaml --record=true
2 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/daemonset/proxy-v1.13.yaml --record=true
[root@hdss7-21 ~]# kubectl get pod -n app -l tier=proxy -L version
NAME READY STATUS RESTARTS AGE VERSION
proxy-daemonset-7wr4f 1/1 Running 0 119s v1.13
proxy-daemonset-clhqk 1/1 Running 0 2m11s v1.13