此文为学习《Kubernetes权威指南》的相关笔记
个人思路:
静态Pod不同于普通Pod的灵活应用,他仅仅只能在需要部署的Node上创建和删除,不能通过API Server进行管理,也无法被RC、RS、Deployment、Job等数据对象关联起来,与此同时,也不会被进行健康检查。
关于静态Pod的使用场景,暂时理解为:Node上需要的应当持续运行的长期设施,比如在环境部署时使用静态Pod实现一部分组件。
下面尝试运行一个静态Pod
1、使用配置文件方式,新建配置文件
默认的配置文件目录为/etc/kubernetes/manifests,kubelet启动后定期扫描该目录,一旦有新的配置文件创建,就尝试根据该文件建立静态Pod,
进入该文件夹下:
# cd /etc/kubernetes/manifests
创建配置文件static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
name: static-web
spec:
containers:
- name: static-web
image: nginx
ports:
- name: web
containerPort: 80
2、查看容器列表,可以看到该配置文件已经被快速部署:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2673d4e8e706 nginx "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes k8s_static-web_static-web-xu.node1_default_fb1096b8e2ddd18472557b2732ffa399_0
3、在Master结点查看Pod,可以看到这个节点存在
# kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-php 2/2 Running 2 10h
static-web-xu.node1 1/1 Running 0 10m
4、尝试在Master节点删除该Pod,只能将状态改变为pending
# kubectl delete pod static-web-xu.node1
pod "static-web-xu.node1" deleted
# kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-xu.node1 0/1 Pending 0 3s
5、需要在Node节点的配置文件夹中删除配置文件,才能真正删除该Pod
# rm /etc/kubernetes/manifests/static-web.yaml
rm: remove regular file ‘static-web.yaml’? y
6、修改启动参数,改变配置文件目录的方法
由于本k8s集群使用kubeadm部署,应当能找到Node节点上Kubelet服务的启动参数,位置为:
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
修改Environment参数内容,添加配置: --pod-manifest-path=<your path>
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --pod-manifest-path=/etc/kubelet.d --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS$KUBELET_EXTRA_ARGS
重载服务:
# systemctl daemon-reload
# systemctl restart kubelet
在自定义配置文件夹中新建配置文件,可以看到该配置文件成功被扫描并建立静态Pod!
7、HTTP方式部署静态Pod
k8s支持通过HTTP协议访问远程URL中的配置文件,设置启动参数为“--manifest-url”,设置方法与6相同,通过这种方式,在Node配置时制定集群同一功能身份的节点相同的URL,可以统一给节点部署静态Pod,实现了大规模的实时配置,也扩宽了静态Pod的应用场景。