k8s部署-40-对POD进行重新认识(上)

网友投稿 899 2022-11-04

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

k8s部署-40-对POD进行重新认识(上)

3POD的Hosts文件

在volume的基础上,我们来看看一个pod中运行多个容器的时候,它们的hosts文件是怎样的吧。

首先我们看下redis的hosts文件吧;

[root@node2 ~]# crictl exec -it 5ef0dd5143665 cat etc/hosts# Kubernetes-managed hosts file.127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetfe00::0 ip6-mcastprefixfe00::1 ip6-allnodesfe00::2 ip6-allrouters10.200.104.36 pod-volume[root@node2 ~]#

其次,我们再看下web的hosts文件;

[root@node2 ~]# crictl exec -it 0123cd4068b28 cat etc/hosts# Kubernetes-managed hosts file.127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetfe00::0 ip6-mcastprefixfe00::1 ip6-allnodesfe00::2 ip6-allrouters10.200.104.36 pod-volume[root@node2 ~]#

可以看到同一个pod中不同容器的hosts文件是一致的,且是同一个IP地址,那么就能看出来,在同一个pod中,不同容器的端口号必须保持不同,否则会造成端口号冲突,从而无法正常启动该容器。

那么又有一个问题了,这种情况下我们如何配置他的host主机名呢?是应该配置在哪个容器下面呢?

# 先删除pod[root@node1 pod]# kubectl delete -f pod-volume.yaml -n devpod "pod-volume" deleted[root@node1 pod]#

修改yaml文件文件;

[root@node1 pod]# vim pod-volume.yaml apiVersion: v1kind: Podmetadata: name: pod-volumespec: hostAliases: - ip: "192.168.112.131" hostnames: - "ceshi.volume.com" containers: - name: web image: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1 ports: - containerPort: 8080 volumeMounts: - name: shared-volume mountPath: shared-web - name: redis env: - name: REDIS_PORT value: "6379" image: redis volumeMounts: - name: shared-volume mountPath: shared-redis volumes: - name: shared-volume hostPath: path: shared-volume-data[root@node1 pod]#

使其生效;

[root@node1 pod]# kubectl apply -f pod-volume.yaml -n devpod/pod-volume created[root@node1 pod]# kubectl get pod -n dev -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod-volume 2/2 Running 0 3m 10.200.104.54 node2 [root@node1 pod]#

查看redis的hosts文件;

[root@node2 ~]# crictl exec -it de4805fe7b87c cat etc/hosts# Kubernetes-managed hosts file.127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetfe00::0 ip6-mcastprefixfe00::1 ip6-allnodesfe00::2 ip6-allrouters10.200.104.54 pod-volume# Entries added by HostAliases.192.168.112.131 ceshi.volume.com[root@node2 ~]#

查看web的hosts文件;

[root@node2 ~]# crictl exec -it ffe81fd533bcd cat etc/hosts# Kubernetes-managed hosts file.127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetfe00::0 ip6-mcastprefixfe00::1 ip6-allnodesfe00::2 ip6-allrouters10.200.104.54 pod-volume# Entries added by HostAliases.192.168.112.131 ceshi.volume.com[root@node2 ~]#

可以看到redis和web的hosts文件都添加成功了。

4POD和宿主机共享

那么pod还可以和宿主机共享网络和pid空间,下面看看;

先停止原pod;

[root@node1 pod]# kubectl delete -f pod-volume.yaml -n devpod "pod-volume" deleted[root@node1 pod]#

修改yaml文件如下;

[root@node1 pod]# vim pod-volume.yaml apiVersion: v1kind: Podmetadata: name: pod-volumespec: hostNetwork: true  hostPID: true hostAliases: - ip: "192.168.112.131" hostnames: - "ceshi.volume.com" containers: - name: web image: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1 ports: - containerPort: 8080 volumeMounts: - name: shared-volume mountPath: shared-web - name: redis env: - name: REDIS_PORT value: "6379" image: redis volumeMounts: - name: shared-volume mountPath: shared-redis volumes: - name: shared-volume hostPath: path: shared-volume-data[root@node1 pod]#

让yaml文件生效;

[root@node1 pod]# kubectl apply -f pod-volume.yaml -n devpod/pod-volume created[root@node1 pod]# kubectl get pod -n dev -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod-volume 2/2 Running 0 17s 192.168.112.131 node2 [root@node1 pod]#

验证下:

[root@node2 ~]# netstat -tunlp | grep 6379tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 71405/redis-server tcp6 0 0 :::6379 :::* LISTEN 71405/redis-server [root@node2 ~]# netstat -tunlp | grep 8080tcp 0 0 0.0.0.0:18080 0.0.0.0:* LISTEN 2337/nginx: master tcp6 0 0 :::8080 :::* LISTEN 71290/java tcp6 0 0 :::18080 :::* LISTEN 2337/nginx: master [root@node2 ~]#

可以看到我们可以从宿主机上查到pod的端口号信息,我这里就不进入容器中查看了,因为我的容器中没有相关命令,无法查证。

上一篇:软件测试培训之白盒测试
下一篇:软件测试培训之黑盒白盒灰盒测试之间的区别
相关文章

 发表评论

暂时没有评论,来抢沙发吧~