- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
服务器版本 | 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 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod.
DaemonSet 的使用场景:
一种 简单的用法 是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。 一个 稍微复杂的用法 是为同一种守护进程部署多个 DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求.
当我们在Kubernetes(k8s)集群部署软件的时候,经常就会用到DaemonSet .
deployment控制器一般需要指定副本数,如果配置了daemonset(简称ds),则不需要设置副本数,ds会自适应节点数,会自动在每个节点上创建出来一个pod。关于deployment控制器的详细内容,请查看博客《 Kubernetes(k8s)控制器(一):deployment 》.
创建存放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文件的方法 :
下面进行修改生成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.
查看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的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正尝试按照此文档在 Kubernetes 集群上运行 Cadvisor https://kubernetes.io/docs/concepts/workloads/controllers/daemo
我想在任何节点上运行一个应用程序。每个节点应该始终至少有一个实例,但允许更多实例,主要是在更新期间以防止该 pod(和节点)停机。 Kubernetes 部署更新通常通过启动新的 pod 来工作,一旦
我正在考虑将我的 Kubernetes 集群划分为专用节点区域,供专用用户组独占使用,如所讨论的 here .我想知道污染节点将如何影响 DaemonSets,包括那些对集群操作至关重要的节点(例如
有什么方法可以避免在主服务器上执行作为DaemonSet部署的应用程序? 我已经看到这是预期的行为,但是我想避免以某种方式执行。 常规容器不会在主容器上调度,但DaemonSet容器可以。 如果是,是
我想知道 kubernetes 中的守护进程是否会始终部署到所有节点。 我的困惑来自以下对 daemonset 的描述 A DaemonSet makes sure that all or some
我有一个正在运行的DaemonSet,它正在所有节点上运行。我想将其从节点中删除以完全耗尽它,因为 kubectl dance 不会删除它们。在不删除我的 DaemonSet 的情况下,暂时从节点中删
我的情况是,目前,我正在将我的应用程序作为 Daemon 集运行,并希望将 Datadog 集成到我的基础架构中。 据我了解,守护进程集的目的是确保每个集的一个 pod 在每个节点上运行。 在这里,我
我正在尝试通过服务访问监听端口 18081 的 DaemonSet,但到目前为止未成功。 由 DaemonSet 启动的 pod 工作正常。我可以将端口转发到 pod 和端口 18081,并与端口上公
我正在尝试使用 Kubernetes DaemonSets 并且一点运气都没有。我已经搜索了一个解决方案无济于事。我希望这里有人可以帮忙。 首先,我见过this ticket .重新启动 Contro
我有一个 DaemonSet它创建了 flink 任务管理器 pod,每个节点一个。 节点 假设我有两个节点 节点-A 节点-B pod daemonSet 将创建 节点 A 上的 pod-A 节点
如何在 kubernetes 集群(包括主节点)的所有节点上运行守护进程而不覆盖任何节点的污点? 最佳答案 如果你想运行一个 daemonset 并确保它将被调度到集群中的所有节点上而不管污点。例如,
我的集群中运行着 Consul,每个节点都运行一个 consul-agent 作为 DaemonSet。我还有其他与 Consul 交互的 DaemonSet,因此需要运行一个 consul-agen
我不确定 DaemonSet 中是否存在就绪条件。我的意思是,该 DaemonSet 拥有的所有 pod 都已准备就绪。 我知道 kubectl wait ,不过好像不能检查 DaemonSet 的准
目录 一.系统环境 二.前言 三.DaemonSet 概览 四.创建DaemonSet 4
问题 fluentd 守护进程 list 在 Kubernetes Logging with Fluentd如果启用 RBAC,将导致授权错误。 $ kubectl logs fluentd-4nzv
我一直在尝试使用以下方法在我的 kubernetes 集群上运行 glusterfs 集群: glusterfs-service.json { "kind": "Service", "apiV
我有一个包含 21 个节点的 Google 容器引擎集群,特别是有一个 pod,我需要始终在具有静态 IP 地址的节点上运行(用于出站目的)。 Kubernetes 支持 DaemonSets 这是一
这是我目前的解决方案: LoadBalancer Instance with cloud -> Cluster NodePort Service -> Ingress Controller Servi
DaemonSets确保所有(或部分)节点运行 Pod 的副本。当节点添加到集群时,Pod 也会添加到它们。 kubernetes kubelet 在每个节点上运行,并保持节点上的其他 pod 运行。
当 pod 被 daemonset 控制时,pod 会出现一些错误,状态会是 CrashLoopBackOff ,我想删除这些 Pod 但不想删除 DaemonSet。 所以我想把daemonset缩
我是一名优秀的程序员,十分优秀!