一、系统环境服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux 7 . 4 . 1708版(核心)Docker版本20 . 10 . 12v 1 . 21 . 9 x86 _ 64 Kubernetes集群架构:k8scloude1为主节点,k8scloude2和k8scloude3为工作节点。
服务器操作系统版本CPU架构进程功能描述K8 SCLOUDE 1/192 . 168 . 110 . 130 CentOS Linux 7 . 4 . 1708(核心)x86 _ 64 Docker、kube-apiserver、etcd、kube-scheduler、Kube-controller-manager、kubelet、kube-proxy、coredns、calicok8s主节点k 8 sloude 2/192 . 168 . 110 . 129 CentOS Linux 7.4
2.前言本文介绍的是静态Pod,由指定节点上的kubelet守护进程直接管理,不需要API服务器的监管。
创建静态pod的前提是有一组可以正常运行的Kubernetes集群。关于Kubernetes(k8s)集群的安装和部署,请参考博客centos 7 Kubernetes(k8s)集群的安装和部署,https://www.jb51.net/article/266741.htm.
三。静态吊舱
3.1什么是静态Pod?静态pod由指定节点上的kubelet守护进程直接管理,不需要API服务器的监督。与由控制平面管理的Pod(例如,部署)不同;Kubelet监控每个静态Pod(失败后重新启动)。静态Pod总是绑定到特定节点的Kubelet。
Kubelet将尝试通过Kubernetes API服务器为每个静态Pod自动创建一个镜像Pod。这意味着在节点上运行的静态Pod对API服务是可见的,但是不能由API服务器控制。Pod名称的后缀是以连字符开头的节点主机名。
解释:如果您正在运行一个Kubernetes集群,并且在每个节点上运行一个静态Pod,那么您可能需要考虑使用DaemonSet来代替这个方法。静态Pod的规范不能引用其他API对象(如ServiceAccount、ConfigMap、Secret等)。).
3.2创建静态pod的应用场景有:1。使主机正常启动;2.如果有一天我们的主崩溃了,怎么让别人知道我们的服务器在维护?此命名空间中当前没有正在运行的pod。
[root @ k 8 sloude 1 pod]# ku bectl get pod在pod命名空间中找不到资源。静态pod是通过编写一个yaml文件来创建的,然后将yaml文件放在指定的目录中,这将自动创建一个基于yaml文件的pod。有两种方法可以指定该目录:
--pod -manifest -路径
/etc/kubernetes/manifest
3.2.1使用--pod-manifest-path来指定静态pod目录,以检查kubelet的配置文件的位置。可以看到kubelet的配置文件在/usr/lib/systemd/system/kube let . service中。
注意:我们在K8s集群的worker节点k8sloude2上创建了静态pod。
[root @ k 8 scloude 2 ~]# system CTL status kube let●kube let . service -kube let:加载的Kubernetes节点代理:Loaded(/usr/lib/systemd/system/kube let . service;已启用;厂商预置:禁用)drop -in:/usr/lib/systemd/system/kube let . service . d└─10-kube ADM . conf active:active(正在运行)自六2022-01-15 12:27:34 CST;5h 30分钟前文档:https://kubernetes.io/docs/主PID:947(kube lett)内存:122.6m cgroup:/system . slice/kube lett . service └─947/usr/bin/kube lett --bootstrap -kube config =/etc/kubernetes/bootstrap -kube nett . conf --kube config =/etc/kubernetes/kube lett . conf --config =/var/lib/kube lett/config . YAML -network -plugin = CNI 4...修改Kubelet的配置文件/usr/lib/systemd/system/kube let . service,使用--pod -manifest -path =/etc/kubernetes/kube let . d指定静态pod目录。
[root @ k 8 sloude 2 ~]# vim/usr/lib/systemd/system/kube elet . service . d/10-kube EDM . conf # --pod -manifest -path =/etc/kubernetes/kube elet . d表示静态pod的目录是/etc。kubernetes/kube elet . d[root @ k8 scloude 2 ~]# cat/usr/lib/systemd/system/kube elet . Service . d/10-kubeadm . conf #注意:此dropin仅适用于kube ADM和kube elet v 1.1主机频道[Service]Environment = " kube elet _ kube CONFIG _ ARGS = --bootstrap -kube CONFIG =/etc/kubernetes/bootstrap -kube elet . conf -kube CONFIG =/etc用户最好在配置文件中使用# the . node registration . kubeletextargs对象。库伯莱_额外_ARGS应该来源于此文件。environment file = -/etc/sys config/kubeletexecstart = execstart =/usr/bin/kubelet $ kube let _ kube let _ args $ kube let _ config _ args $ kube let _ kube EDM _ args创建静态pod目录并使kube let配置文件生效。
[root @ k8 scloude 2 ~]# mkdir/etc/Kubernetes/kube let . d[root @ k8 scloude 2 ~]# system CTL daemon -reload[root @ k8 scloude 2 ~]# system CTL restart kube let[root @ k8 scloude 2 ~]# system CTL status kube let●kube let . service -kube let:Kubernetes节点代理加载:Loaded(//usr/lib/systemd/system/kube let . service;已启用;厂商预置:禁用)drop -in:/usr/lib/systemd/system/kube let . service . d└─10-kube ADM . conf active:active(正在运行)自六2022-01-15 18:02:15 CST;6s以前的文档:https://kubernetes.io/docs/主PID:108844(kube lett)内存:30.7m cgroup:/system . slice/kube lett . service ├─108844/usr/bin/kube nets -kube config =/etc/kubernetes/bootstrap -kube nett . conf --kube config =/etc/kubernetes/kube lett . conf --pod -manifest -path =/etc/kubernetes/kube lett . d -4...└─108999/usr/bin/kube elet --bootstrap -kube config =/etc/kubernetes/bootstrap -kube elet . conf --kube config =/etc/kubernetes/kube elet . conf --pod-manifest -path =/etc/kubernetes/kube elet . D-config =/var/lib/ku...进入静态pod的目录,然后创建pod yaml文件。
[root @ k8 scloude 2 ~]# CD/etc/kubernetes/kube let . d/[root @ k8 scloude 2 kube let . d]# ls[root @ k8 scloude 2 kube let . d]# vim pod . YAML[root @ k8 scloude 2 kube let . d]# cat pod . YAML API version:v1 kind:pod metadata:creation timestamp:null标签:run:pod name:pod spec:containers:-image:nginx image pull Policy:if not present name:pod你可以在主机上看到这个豆荚。因为在pod.yaml中没有指定名称空间,所以默认为default。您可以看到,pod名称(pod-k8scloude2)是以连字符开头的节点主机名的后缀。
[root @ k 8s cloud 1 pod]# ku bectl get pods -n默认-o wideNAME就绪状态重新启动AGE IP节点命名节点就绪GAT espod -k 8s cloud 2 1/1运行0 109s 10 . 244 . 112 . 153k 8s cloud 2 & lt;无& gt& lt无& gt当这个pod.yaml文件从静态pod目录中删除时,pod就会消失。
[root @ k 8 cloud e 2 kube let . d]# mv pod . yaml ~/[root @ k 8 cloud e 2 kube let . d]# ls #删除此YAML文件时,Pod消失[root @ k 8 sloude 1 Pod]# ku bectl getpods -NDE default -o wide在默认命名空间中找不到资源。现在静态pod的名称空间被指定为pod。
[root @ k 8 cloud e 2 ku delet . d]# vimpod . YAML # namespace:pod:指定pod的命名空间[root @ k 8 cloud e 2 ku delet . d]# cat pod . YAML API version:v1 kind:pod metadata:creation timestamp:null标签:run: pod名称:pod命名空间:pod spec:containers:-image:ng inx imagepull policy:ifnot present名称:pod资源:{}端口:-名称:http container port:80协议:TCP DNS策略:群集第一次重新启动
[root @ k8 scloude 1 pod]# ku bectl get pod -n pod name就绪状态重新启动AGEpod-k8scloude2 1/1运行0 6秒
3.2.2静态pod默认目录/etc/kubernetes/manifests注意:执行此步骤时,首先恢复kubelet配置文件/usr/lib/systemd/system/kube elet . service . d/10-kube EDM . conf。
查看配置文件,可以发现static pod的默认目录是/etc/kubernetes/manifests。
[root @ k8 scloude 2 kube lett . d]# cat/usr/lib/systemd/system/kube lett . Service . d/10-kubeadm . conf #注意:此dropin仅适用于kube ADM和kube lett v 1.1主机频道[Service]Environment = " kube lett _ kube CONFIG _ ARGS = --bootstrap -kube CONFIG =/etc/kubernetes/bootstrap -kube nett . conf --kube CONFIG =/etc/kubernetes/kube lete用户最好在配置文件中使用# the . node registration . kubeletextargs对象。库伯莱_额外_ARGS应该来源于此文件。environment file = -/etc/sys CONFIG/kubeletExecStart = ExecStart =/usr/bin/kube let $ kube let _ kube CONFIG _ ARGS $ kube let _ CONFIG _ ARGS $ kube let _ kube ADM _ ARGS $ kube let _ EXTRA _ ARGS[root @ k8 scloude 2 kube let . d]# LS/var/lib/kube let/CONFIG . YAML/var/lib/kube let/CONFIG . YAML[root @ k8 scloude 2 kube let . d]# cat/var/lib
#namespace: pod:指定pod的命名空间[root @ k 8 cloud e 2 kube let . d]# vim ~/pod . YAML[root @ k 8 cloud e 2 kube let . d]# cat ~/pod . YAML API version:v1kind:pod metadata:creation timestamp:null标签:run: pod名称:pod命名空间:pod spec:containers:-image:nginx imagepull policy:ifnot present name:pod resources:{ } ports:-name:http container port:80协议:TCP dnsPolicy
[root @ k 8 sloude 1 pod]# ku bectl getpods -n pod名称就绪状态重启agepod-k8sloude2 1/1running06s删除yaml文件,静态pod消失。
#删除yaml文件[root @ k 8 sloude 2 kube let . d]# rm-RF/etc/kubernetes/manifests/pod . YAML # Pod消失[root @ k 8 sloude 1 Pod]# Kuctl Get Pod -n Pod在Pod命名空间中找不到资源。前几步静态pod是在k8s集群的worker节点上做的,现在是在k8s集群的master节点上做的。
注意:如果添加--pod -manifest -path =/etc/Kubernetes/kube let . service . d/10-kube ADM . conf,那么/etc/kubernetes/manifests/下对应的yaml文件也要移到/etc/kubernetes/kubelet.d目录下,否则k8s集群的主节点不会启动。
可以看到k8s集群的主节点有很多静态pod。
[root @ k 8 sloude 1 pod]# ls/etc/kubernetes/manifests/etcd . YAML kube -API server . YAML kube -controller -manager . YAML kube -scheduler . YAML以上是静态pod创建和使用示例的详细内容。更多关于静态pod创建和使用的信息,请关注主机频道zhujipindao。com其他。
评论前必须登录!
注册