一体化监控管理平台解决方案,一体化监控管理平台的应用范围
899
2022-11-04
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
查看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@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的端口号信息,我这里就不进入容器中查看了,因为我的容器中没有相关命令,无法查证。
发表评论
暂时没有评论,来抢沙发吧~