Kubernetes(k8s)控制器(二):DaemonSet
一.系统环境
| 服务器版本 | docker软件版本 | Kubernetes(k8s)集群版本 | CPU架构 |
|---|---|---|---|
| CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | v1.21.9 | x86_64 |
Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点
| 服务器 | 操作系统版本 | CPU架构 | 进程 | 功能描述 |
|---|---|---|---|---|
| k8scloude1/192.168.110.130 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master节点 |
| k8scloude2/192.168.110.129 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
| k8scloude3/192.168.110.128 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker节点 |
二.前言
使用DaemonSet 的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。
三.DaemonSet 概览
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的使用场景:
- 在每个节点上运行集群守护进程
- 在每个节点上运行日志收集守护进程
- 在每个节点上运行监控守护进程
一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。 一个稍微复杂的用法是为同一种守护进程部署多个 DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。
当我们在Kubernetes(k8s)集群部署软件的时候,经常就会用到DaemonSet 。
deployment控制器一般需要指定副本数,如果配置了daemonset(简称ds),则不需要设置副本数,ds会自适应节点数,会自动在每个节点上创建出来一个pod。关于deployment控制器的详细内容,请查看博客《Kubernetes(k8s)控制器(一):deployment》。
四.创建DaemonSet
4.1 创建daemonset 让其在k8s集群所有worker节点运行pod
创建存放daemonset yaml文件的目录和namespace
[root@k8scloude1 ~]# mkdir daemonset
[root@k8scloude1 ~]# cd daemonset/
[root@k8scloude1 daemonset]# pwd
/root/daemonset
[root@k8scloude1 daemonset]# kubectl create ns daemonset
namespace/daemonset created
切换命名空间
[root@k8scloude1 daemonset]# kubens daemonset
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "daemonset".
[root@k8scloude1 daemonset]# kubectl get pod
No resources found in daemonset namespace.
daemonset不能通过命令来创建,我们可以通过deployment的yaml文件来修改为daemonset。
生成deployment的yaml文件
[root@k8scloude1 daemonset]# kubectl create deployment ds --image=nginx --dry-run=client -o yaml >ds.yaml
[root@k8scloude1 daemonset]# cat ds.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: ds
name: ds
spec:
replicas: 1
selector:
matchLabels:
app: ds
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: ds
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
把deployment的yaml文件修改为daemonset的yaml文件的方法:
- kind类型需要更改;
- daemonset不需要副本数,所以replicas不需要;
- strategy一般设置的是滚动更新的策略,daemonset也不需要;
- status不需要。
下面进行修改生成daemonset的配置文件:
[root@k8scloude1 daemonset]# vim ds.yaml
[root@k8scloude1 daemonset]# cat ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
creationTimestamp: null
labels:
app: ds
name: ds
spec:
selector:
matchLabels:
app: ds
template:
metadata:
creationTimestamp: null
labels:
app: ds
spec:
terminationGracePeriodSeconds: 0
containers:
- image: nginx
name: nginx
#修改镜像下载策略:IfNotPresent表示本地有镜像就不下载
imagePullPolicy: IfNotPresent
resources: {}
创建daemonset
[root@k8scloude1 daemonset]# kubectl apply -f ds.yaml
daemonset.apps/ds created
查看daemonset,发现有2个pod
[root@k8scloude1 daemonset]# kubectl get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ds 2 2 2 2 2 <none> 20s
[root@k8scloude1 daemonset]# kubectl get ds -o wide
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
ds 2 2 2 2 2 <none> 24s nginx nginx app=ds
查看pod,daemonset在每个节点上都创建了一个pod,但是没有在master节点创建pod,因为master节点上有污点。
[root@k8scloude1 daemonset]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ds-hvn89 1/1 Running 0 47s 10.244.251.222 k8scloude3 <none> <none>
ds-qfq58 1/1 Running 0 47s 10.244.112.160 k8scloude2 <none> <none>
删除daemonset,pod随之被删除
[root@k8scloude1 daemonset]# kubectl delete ds ds
daemonset.apps "ds" deleted
[root@k8scloude1 daemonset]# kubectl get pod -o wide
No resources found in daemonset namespace.
4.2 创建daemonset让其仅在某些节点上运行 Pod
查看node节点的标签,--show-labels表示显示标签
[root@k8scloude1 daemonset]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8scloude1 Ready control-plane,master 17d v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8scloude1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8scloude2 Ready <none> 17d v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8scloude2,kubernetes.io/os=linux,taint=T
k8scloude3 Ready <none> 17d v1.21.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8scloude3,kubernetes.io/os=linux
满足标签为kubernetes.io/hostname=k8scloude3的只有k8scloude3节点
[root@k8scloude1 daemonset]# kubectl get node -l kubernetes.io/hostname=k8scloude3
NAME STATUS ROLES AGE VERSION
k8scloude3 Ready <none> 17d v1.21.0
配置daemonset,通过标签选择器,设置pod只在kubernetes.io/hostname=k8scloude3的节点运行
[root@k8scloude1 daemonset]# vim ds.yaml
#设置pod只在kubernetes.io/hostname=k8scloude3的节点运行
[root@k8scloude1 daemonset]# cat ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
creationTimestamp: null
labels:
app: ds
name: ds
spec:
selector:
matchLabels:
app: ds
template:
metadata:
creationTimestamp: null
labels:
app: ds
spec:
terminationGracePeriodSeconds: 0
#nodeSelector设置pod只在kubernetes.io/hostname=k8scloude3的节点运行
nodeSelector:
kubernetes.io/hostname: k8scloude3
containers:
- image: nginx
name: nginx
imagePullPolicy: IfNotPresent
resources: {}
创建daemonset
[root@k8scloude1 daemonset]# kubectl apply -f ds.yaml
daemonset.apps/ds configured
[root@k8scloude1 daemonset]# kubectl get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ds 1 1 1 1 1 kubernetes.io/hostname=k8scloude3 2m59s
pod只运行在k8scloude3节点
[root@k8scloude1 daemonset]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ds-2l5hr 1/1 Running 0 24s 10.244.251.230 k8scloude3 <none> <none>
删除daemonset
[root@k8scloude1 daemonset]# kubectl delete ds ds
daemonset.apps "ds" deleted
[root@k8scloude1 daemonset]# kubectl get ds
No resources found in daemonset namespace.
查看kube-system命名空间下的daemonset有哪些
[root@k8scloude1 daemonset]# kubectl get ds -n kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
calico-node 3 3 3 3 3 kubernetes.io/os=linux 17d
kube-proxy 3 3 3 3 3 kubernetes.io/os=linux 17d
可以查看kube-proxy 的Daemonset配置文件
[root@k8scloude1 daemonset]# kubectl get ds kube-proxy -n kube-system -o yaml > kube-proxy.yaml
[root@k8scloude1 daemonset]# vim kube-proxy.yaml
Kubernetes(k8s)控制器(二):DaemonSet的更多相关文章
- Kubernetes K8S之资源控制器Daemonset详解
Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...
- Kubernetes K8S之资源控制器RC、RS、Deployment详解
Kubernetes的资源控制器ReplicationController(RC).ReplicaSet(RS).Deployment(Deploy)详解与示例 主机配置规划 服务器名称(hostna ...
- Kubernetes K8S之资源控制器StatefulSets详解
Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- Kubernetes K8S之资源控制器Job和CronJob详解
Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...
- Kubernetes(k8s) docker集群搭建
原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇 •Kubernetes介绍 1.背 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- k8s控制器资源(五)
Pod pod在之前说过,pod是kubernetes集群中是最小的调度单元,pod中可以运行多个容器,而node又可以包含多个pod,关系如下图: 在对pod的用法进行说明之前,有必要先对docke ...
- Centos7 安装部署Kubernetes(k8s)集群
目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...
随机推荐
- day08-XML
XML 官方文档:https://www.w3school.com.cn/xml/index.asp 1.为什么需要xml? 需求1:两个程序间进行数据通信? 需求2:给一台服务器,做一个配置文件,当 ...
- 1分钟完成在线测试部署便捷收集班级同学文件的web管理系统
最近CSDN推出了一个新功能[云IDE],个人对这个新功能(比赛奖金 )挺感兴趣的,于是瞬速地拿之前自己搞的一个便捷收集班级同学文件的web管理系统(下面简称该项目为cfile)体验了一下,发现功能还 ...
- 部署grafana+telegraf+influxdb 及 配置 jmeter后端监听
搞性能测试,可以搭建Grafana+Telegraf+InfluxDB 监控平台,监控服务器资源使用率.jmeter性能测试结果等. telegraf: 是一个用 Go 编写的代理程序,可收集系统和服 ...
- Helm干货!速度围观!
最近个人学习Helm,感觉Helm的功能很强大!分享一些干货给大家吧,希望有所帮助! 基本概念 Chart 一个Helm包,包含在K8S集群内,运行一个应用,工具或者服务所需要的所有的资源定义,类似于 ...
- Karmada大规模测试报告发布:突破100倍集群规模
摘要:在本文中,我们将介绍用于测试的相关指标,如何进行大规模测试,以及我们如何实现大规模的集群接入. 本文分享自华为云社区<突破100倍集群规模!Karmada大规模测试报告发布>,作者: ...
- Ajax基础(中)
这节主要在上节的基础上学会如何使用Ajax 源码下载: 链接:https://pan.baidu.com/s/1kG-vACFxneAZqONdo97XrQ 提取码:k21y 在WebStorm中打开 ...
- Perl语言中一些内置变量等,$x、qw、cmp、eq、ne等
转载 Perl语言中一些内置变量等,$x.qw.cmp.eq.ne等 字母 符号 释义 eq = = equal(等于) ne != not equal(不等于) cmp 比较 qq " ...
- Kubernetes基础_Service暴露的两种方式
一.前言 kubernetes集群中,pod是多变的,可以被新建或删除,而且ip不稳定,不方便集群外部访问,所以提供了一种新的资源 Service ,就是就是 a set of Pod ,作用是提供一 ...
- pyinstaller 打包多个资源文件到一个可执行文件
前言 pyinstaller -w: 无终端状态 -F: 打包成一个可执行文件 开始 假设 main.py 脚本调用 test.mp4视频文件(main.py和test.mp4在同一级目录),那么将在 ...
- 第2-4-10章 规则引擎Drools实战(3)-保险产品准入规则
目录 9.3 保险产品准入规则 9.3.1 决策表 9.3.2 规则介绍 9.3.3 实现步骤 9.3 保险产品准入规则 全套代码及资料全部完整提供,点此处下载 9.3.1 决策表 前面我们编写的规则 ...