一 静态Pod
--- '静体现在哪?' ---
之前:前面Pod的'生命周期管理'都是通过像DaemonSet、StatefulSet、Deployment'上层'这种方式创建管理的
静态Pod是由kubelet进行管理'仅存在于特定Node上'的Pod -->'可以理解为定向调度' -->'如何定向调度涉及到创建方式'
它们'不能通过API Server'进行管理,无法与'ReplicationController'、'Deployment'或'DaemonSet'进行'关联'-->'就是一个Pod',并且kubelet也无法对其'健康检查'
总结: 静态Pod总是'由kubelet进行创建',并且总是'在kubelet所在的Node上'运行的
二 创建静态Pod
(1)配置文件
'原理':kubelet 启动时由 '--pod-manifest-path' 指定的目录'默认/etc/kubernetes/manifests',kubelet会'定期扫描-->时间?'这个目录,并根据这个目录下的'.yaml 或 .json 文件'进行创建和更新操作
'kubeadm创建'集群时,几个核心的组件就是'以静态Pod的方式'部署的
后续体验:可以通过kubelet'命令行参数' '进行覆盖'
'kubeadm安装的k8s集群',配置文件路径:/var/lib/kubelet/config.yaml
'二进制文件安装的k8s集群',配置文件路径:'/usr/lib/systemd/system/kubelet.service',在文件中添加一行--pod-manifest-path= 或者'放到 kubeadm-flags.env环境变量里面'
注意: 'node是没有--pod-manifest-path参数的',需要'手动指定'
kubelet'不通过apiserver',启动一个静态pod!
master上有'静态pod的路径'
作用机理
1)如果把'pod的yaml描述文件放到'这个目录中,等kubelet扫描到文件,会'自动在本机-->文件所在node的kubelet'创建出来 pod
2)如果把 pod的yaml'文件更改'了,kubelet'也会识别'到,会'自动更新'pod
3)如果把 pod的'yaml文件删除'了,kubelet会'自动删除掉pod'
4)因为静态pod '不能被 api-server 直接管理',所以它的更新删除操作不能由 kubectl 来执行,'只能直接修改或删除文本'文件
备注:但是在etcd数据库'会进行记录'
案例演示
'静态pod的名字':mysql-${hostanme}
静态Pod不受Apiserver的管理
备注:少个过渡状态,'尝试删除静态Pod',有一个状态量'变成Pending',且'不会删除'
原因:k8s现在'使用的是etcd v3',必须提供'ca、key、cert',否则会出现'Error: context deadline exceeded'
备注:不加–endpoint参数时,'默认访问'的127.0.0.1:2379,而使用–endpoint参数时,'必须提供ca,key,cert'
'k8s采用的是https',在pod内,没有相关认证机制,所以'无法查看'
wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz
tar -zxf etcd-v3.4.3-linux-amd64.tar.gz
cp etcd-v3.4.3-linux-amd64/etcdctl /usr/local/bin
chmod a+x /usr/local/bin/etcdctl
rm -fr etcd-v3.4.3-linux-amd64
写个别名
alias etcdctl="ETCDCTL_API=3 /usr/local/bin/etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key"
注意:考虑到'权限和安全问题',只有root可以'查看相关'的数据,所以'root用户指定'
(2)HTTP方式
操作: 在'url放置了'一个pod创建的'描述文件'
'工作原理':通过设置kubelet的启动参数"--manifest-url=<URL>",kubelet将会'定期从该URL地址下载Pod的定义文件',并且'转换成' JSON/YAML格式的'Pod定义文件',然后'创建Pod'
备注:'文件系统'上的'清单文件'使用方式类似,kubelet 调度'获取清单文件',如果静态Pod的清单文件'有改变',kubelet 会应用这些改变
vim /etc/nginx/conf.d/yaml.conf
###### '配置文件' ######
'以这个为案例'
/usr/share/nginx/html/index.yaml
'修改' --> vim /etc/sysconfig/kubelet
备注:这里没有在'/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf'中进行修改
重启看是否生效
注意: 修改'系统组件'需要知道路径
三 静态Pod的作用
由于静态Pod只受所在节点的kubelet控制,可以'有效预防通过kubectl、或管理工具操作的误删除',可以用来'部署核心组件'应用,保障应用服务总是'运行稳定数量'和提供'稳定服务'
'可以用来定向调度' --> '在指定的位置放置静态pod的配置文件'
四 参考文档
(1)官方文档
(2)个人博客
(3)权威指南4