CKA备考实验 - 静态pod

书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:CKA备考实验 | 汇总_热爱编程的通信人的博客-CSDN博客


正常情况下,pod在master上统一管理、指定、分配。所谓静态pod,是指不是由master创建启动,在node上只要启动kubelet,就会自动地创建pod。

比如使用kubeadm安装的kubernetes,里面像kube-apiserver、kube-scheduler等组件都是以pod的方式运行的。那么问题就来了,如果这些pod没有运行的话,则意味着master就没有运行,如果master没有运行的话,那么kube-apiserver、kube-scheduler这些pod又是如何运行起来的呢?这就是先有鸡还是先有蛋的问题了,所以需要一个突破口,这个突破口就是静态pod。

创建静态pod

本节讲解的是创建静态pod的具体过程,注意这里是在worker上操作的。

步骤1:查看kubelet运行的参数文件。

在某节点上(注意,这里是在worker上,不是master上操作的),假设在vms11这台机器上执行systemctl status kubelet。

##########实操验证##########
[root@vms11 ~]# systemctl status kubelet
  kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
            10-kubeadm.conf
   Active: active (running) since Thu 2023-05-04 18:36:27 CST; 4 days ago
     Docs: https://kubernetes.io/docs/
 Main PID: 1134 (kubelet)
   Memory: 113.8M
   CGroup: /system.slice/kubelet.service
            1134 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni...

May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.722 [INFO][50571] ipam.go 1068: Successfully claimed IPs: [10.244.81.75/26] block=10.244.81.64/26 handle="k8s-pod-netwo...ms11.rhce.cc"
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.722 [INFO][50571] ipam.go 722: Auto-assigned 1 out of 1 IPv4s: [10.244.81.75/26] handle="k8s-pod-network.2ce0cb429f4bf4...ms11.rhce.cc"
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: time="2023-05-09T10:07:27+08:00" level=info msg="Released host-wide IPAM lock." source="ipam_plugin.go:369"
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.722 [INFO][50571] ipam_plugin.go 276: Calico CNI IPAM assigned addresses IPv4=[10.244.81.75/26] IPv6=[] ContainerID="2ce0cb429f4bf47...
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.724 [INFO][50565] k8s.go 374: Populated endpoint ContainerID="2ce0cb429f4bf4713b1d903f6d85d8e574b37e2b15424a3e8cfd3d628...d:"WorkloadEn
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.724 [INFO][50565] k8s.go 375: Calico CNI using IPs: [10.244.81.75/32] ContainerID="2ce0cb429f4bf4713b1d903f6d85d8e574b3...8s-pod3-eth0"
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.724 [INFO][50565] dataplane_linux.go 66: Setting the host side veth name to cali49778cadcf1 ContainerID="2ce0cb429f4bf4...8s-pod3-eth0"
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.725 [INFO][50565] dataplane_linux.go 442: Disabling IPv4 forwarding ContainerID="2ce0cb429f4bf4713b1d903f6d85d8e574b37e...8s-pod3-eth0"
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.732 [INFO][50565] k8s.go 402: Added Mac, interface name, and active container ID to endpoint ContainerID="2ce0cb429f4bf...v3.WorkloadEn
May 09 10:07:27 vms11.rhce.cc kubelet[1134]: 2023-05-09 10:07:27.752 [INFO][50565] k8s.go 476: Wrote updated endpoint to datastore ContainerID="2ce0cb429f4bf4713b1d903f6d85d8e574b37e2b...8s-pod3-eth0"
Hint: Some lines were ellipsized, use -l to show in full.
[root@vms11 ~]# 

查看kubelet启动的参数文件为/usr/lib/systemd/system/kubelet.services.d/10-kubeadm.conf。

步骤2:编辑这个文件,在Environment最后添加--pod-manifest-path=/etc/kubernetes/kubelet.d,如下所示。

##########实操验证##########
[root@vms11 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/kubelet.d"
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
[root@vms11 ~]# 

步骤3:如果/etc/kubernetes/kubelet.d不存在,则把这个目录创建出来。

##########实操验证##########
[root@vms11 ~]# mkdir /etc/kubernetes/kubelet.d
[root@vms11 ~]# 

步骤4:重启kubelet服务。

##########实操验证##########
[root@vms11 ~]# systemctl restart kubelet
Warning: kubelet.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@vms11 ~]# 
[root@vms11 ~]# systemctl daemon-reload
[root@vms11 ~]# systemctl restart kubelet
[root@vms11 ~]# 

步骤5:在vms11上,于/etc/kubernetes/kubelet.d下创建一个pod的yaml文件test.yaml。

##########实操验证##########
[root@vms11 ~]# cat /etc/kubernetes/kubelet.d/test.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: static-web 
  namespace: default 
  labels:
    role: myrole 
spec:
  containers:
  - name: web
    image: nginx
    imagePullPolicy: IfNotPresent
[root@vms11 ~]# 

上述yaml文件是在default命名空间里创建一个名字为static-web的pod。

步骤6:在master上进行查看。

##########实操验证##########
[root@vms10 pod]#    kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
static-web-vms11.rhce.cc   1/1     Running   0          40s
[root@vms10 pod]# 

可以看到此pod正常运行了。

步骤7:如果在vms11上删除此yaml文件的话,则这个静态pod会被自动地删除。

##########实操验证##########
[root@vms11 ~]# rm -rf /etc/kubernetes/kubelet.d/test.yaml 
[root@vms11 ~]# systemctl restart kubelet
[root@vms11 ~]# 

步骤8:到master再次进行查看。

##########实操验证##########
[root@vms10 pod]# kubectl get pods
No resources found in default namespace.
[root@vms10 pod]# 

可以看到pod已经被删除了。

master上静态pod的指定方式

除了这种指定静态pod的方式之外,还有另外一种方式也可以指定静态pod。

步骤1:在master上打开/etc/systemd/system/kubelet.services.d/10-kubeadm.conf之后,看到里面有一行Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml",此文件里也定义了静态pod所在路径。

##########实操验证##########
[root@vms10 pod]# grep static /var/lib/kubelet/config.yaml 
staticPodPath: /etc/kubernetes/manifests
[root@vms10 pod]# 

其实,master组件,比如apiserver、kube-proxy等静态配置文件都是放在此目录里的。

##########实操验证##########
[root@vms10 pod]# ls -l /etc/kubernetes/manifests/
total 16
-rw------- 1 root root 2226 May  4 17:57 etcd.yaml
-rw------- 1 root root 3330 May  4 18:05 kube-apiserver.yaml
-rw------- 1 root root 2827 May  4 18:05 kube-controller-manager.yaml
-rw------- 1 root root 1413 May  4 18:05 kube-scheduler.yaml
[root@vms10 pod]# 

如果这个路径修改错误的话,则读取不到这些静态pod的yaml文件,就会导致k8s启动失败。

步骤2:修改静态pod路径并重启kubelet。

##########实操验证##########
[root@vms10 pod]# grep static /var/lib/kubelet/config.yaml 
staticPodPath: /etc/kubernetes/manifestsxxx
[root@vms10 pod]# 
[root@vms10 pod]# ls /etc/kubernetes/manifestxxx
ls: cannot access /etc/kubernetes/manifestxxx: No such file or directory
[root@vms10 pod]# 

步骤3:重启kubelet。

##########实操验证##########
[root@vms10 pod]# systemctl restart kubelet
[root@vms10 pod]# 

启动kubelet的时候,kubelet会到/etc/kubernetes/manifestsxxx加载各种yaml文件,但是此目录根本就不存在,所以加载失败,则kube-apiserver、kube-scheduler等pod就启动不起来,master也就没有运行,所以执行kubectl命令的时候就会报错。

##########实操验证##########
[root@vms10 pod]# kubectl get nodes
The connection to the server 192.168.1.110:6443 was refused - did you specify the right host or port?
[root@vms10 pod]# 

步骤4:我们需要指定正确的静态pod地址才可以运行。

##########实操验证##########
[root@vms10 pod]# grep static /var/lib/kubelet/config.yaml 
staticPodPath: /etc/kubernetes/manifests
[root@vms10 pod]# systemctl restart kubelet
[root@vms10 pod]# 

所以一开始的实验在worker上做没问题,如果在master通过--pod-manifest-path指定静态pod的路径为/etc/kubernetes/kubelet.d的话,则覆盖了默认的路径/etc/kubernetes/manifests,也会导致k8s启动不了。

展开阅读全文

页面更新:2024-03-04

标签:静态   突破口   路径   组件   步骤   加载   参数   方式   文件   目录

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top