5-7 关于 kubectl apply -f calico.yaml 后续1
来源:5-7 网络插件-Calico_1

yl_testimooc3804939
2022-01-07
1、上一个问题:"https://coding.imooc.com/learn/questiondetail/vQW1lYEpBm7PyE9A.html"
证书我生成失败了,是忘记加"KUBERNETES_SVC_IP=10.233.0.1"变量,重新修改好了。
2、当执行"kubectl apply -f calico.yaml"时,发现状态依然不对:
[root@node-1 ~]# kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-558995777d-kh2l7 0/1 ContainerCreating 0 67m
calico-node-88lc4 0/1 CrashLoopBackOff 21 67m
calico-node-g4shr 0/1 CrashLoopBackOff 21 67m
nginx-proxy-node-3 1/1 Running 1 134m
解决方案:
通过执行
[root@node-1 ~]# kubectl logs pod/calico-node-g4shr -n kube-system --tail=100 calico-node
2022-01-06 20:53:20.010 [ERROR][9] startup/utils.go 179:
Unable to write to /var/lib/calico/nodename error=open /var/lib/calico/nodename: is a directory
发现这个文件变成了目录,因为在上面"1上一个问题"中列出的错误日志中,
打印/var/lib/calico/nodename不存在,我就给创建成目录了,
nodename这个应该是个calico自己生成的文件,现在当我删除/var/lib/calico/nodename目录,
重新创建/var/lib/calico,POD状态都正常了。
[root@node-1 ~]# kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-558995777d-27mk7 1/1 Running 0 7m12s
calico-node-56n6f 1/1 Running 0 7m16s
calico-node-jl5zt 1/1 Running 1 7m16s
nginx-proxy-node-3 1/1 Running 1 20h
--------------------------------------------------问题的前置内容--------------------------------------------
在"修改IP自动发现"章节中,
修改前:
- name: IP
value: "autodetect"
修改后:
- name: IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
您修改了这里的内容,在视频中您说
"
经过实践证明,autodetect这种发现方式经常会出现问题,
比如每一条机器的网卡不太一样,一些服务器可能配置了虚拟的网卡,
此时kubelet可能就将错误的网卡识别成真实的IP的地址,从而导致POD网络的不正常。
所以说直接添加真实的IP地址,status.hostIP,因为它是以host network模式启动的,肯定是能取到这个字段的。
这样的话,就不会取错IP了。
"
---------------------------问题1、1
host network模式下,除了127.0.0.1的网卡外,真实IP的网卡就一个,比如192.X.X.X,这样设置status.hostIP的话,是不是取得就是这个192的IP?其他虚拟网卡的就识别不到了?
如果能真正取到真实IP的话,那么有什么方式可以证明取到的IP对呢?
比如日志?我在journalctl -f下,看到node-2 和node-3节点,打印出了如下内容
“
node-2节点: Using node IP: “X.X.X.X”
node-3节点: Using node IP: “X.X.X.X”
”
这个是不是就能证明取到的真实IP?
---------------------------问题1、2
您解决的是在仅主机模式host network下,可是在我的虚拟机中,我使用的是NAT模式,有三张网卡,
网卡ifcfg-ens33: 10.0.0.X网段,为公网IP。
网卡ifcfg-ens37: 172.16.1…X网段,为内网IP。.
网卡ifcfg-lo: 默认127.0.0.1,略。
每个节点IP的最后,node-1为21结尾,node-2为22结尾,node-3为23结尾。
那么在这个NAT模式下,node-1节点,修改calico.yaml中
- name: IP
value: "autodetect"
#仅仅加入
#这个是根据这个问题"https://coding.imooc.com/learn/questiondetail/W48BaXRzEVQXALwG.html"找到的。
- name: IP_AUTODETECTION_METHOD
value: "can-reach=172.16.1.21"
#保持不变
- name: CALICO_IPV4POOL_CIDR
value: "10.200.0.0/16"
这样是否正确呢?还是说直接改成您在视频中教的内容?
- name: IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: CALICO_IPV4POOL_CIDR
value: "10.200.0.0/16"
无论我用上述哪种方式,当执行完"kubectl apply -f calico.yaml"时,所有POD的状态最终都是下述正常状态,这里我不确定到底怎么配,麻烦老师指导下,谢谢。
[root@node-1 ~]# kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-558995777d-27mk7 1/1 Running 0 7m12s
calico-node-56n6f 1/1 Running 0 7m16s
calico-node-jl5zt 1/1 Running 1 7m16s
nginx-proxy-node-3 1/1 Running 1 20h
老师您配置的"status.hostIP"在calico官网的哪个链接找到的,能否告知下,谢谢。
---------------------------问题1、3
在上述1、2中,那两种配置,当每次修改完执行"kubectl apply -f calico.yaml"时,node-1的journalctl -f后,日志会输出好长一串内容,中间省略一些:
Jan 07 05:43:51 node-1 kube-controller-manager[2030]: **E0107** 05:43:51.586641
2030 daemon_controller.go:320] kube-system/calico-node failed with : error storing status for daemon set
&v1.DaemonSet{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""},
ObjectMeta:v1.ObjectMeta{Name:"calico-node", GenerateName:"",
Namespace:"kube-system", SelfLink:"", UID:"8505fa1f-6c6e-4406-aa79-634daf85946d", ResourceVersion:"21380", Generation:16, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:63777093359,
loc:(*time.Location)(0x6f31360)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string{"k8s-app":"calico-node"},
略。。。。。。。。。。。。。。。。。。。。。。
CollisionCount:(*int32)(nil), Conditions:[]v1.DaemonSetCondition(nil)}}:
最后的内容
**Operation cannot be fulfilled on daemonsets.apps "calico-node": the object has been modified; please apply your changes to the latest version and try again**
这一大段输出的内容是否有影响呢?但最终的都是如下内容。
[root@node-1 ~]# kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-558995777d-27mk7 1/1 Running 0 7m12s
calico-node-56n6f 1/1 Running 0 7m16s
calico-node-jl5zt 1/1 Running 1 7m16s
nginx-proxy-node-3 1/1 Running 1 20h
1回答
-
刘果国
2022-01-07
1、calico容器启动日志有打印使用的ip地址
2、配置方法可以参考文章:https://www.imooc.com/article/298228
pod状态是没问题的,这里配置的ip影响的是pod间的通讯,最终需测试确认是否ok
3、跟2一样做一下测试 以结果为准(测试在课程中有)
00
相似问题