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

世事洞明皆学问,人情练达即文章。这篇文章主要讲述k8s部署-40-对POD进行重新认识(上)相关的知识,希望能为你提供帮助。
“  对POD进行深度认识,让我们再次进入pod的世界。”


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

文章图片





?
1
POD回顾
一直使用的pod,我们再继续了解下,首先回顾下之前我们知道的。
1、POD是最小调度单位
2、POD本质上还是容器的隔离
3、Pause容器





【k8s部署-40-对POD进行重新认识(上)】?
2
POD之Volume


  我们看下pod的文件是如何共享的。
[root@node1 ~]# cd namespace/
[root@node1 namespace]# mkdir pod
[root@node1 namespace]# cd pod
[root@node1 pod]#
[root@node1 pod]# vim pod-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-volume
spec:
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]# kubectl apply -f pod-volume.yaml -n dev
pod/pod-volume created
[root@node1 pod]#



然后我们查看下pod的运行情况;
[root@node1 pod]# kubectl get pod -n dev -o wide
NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES
pod-volume2/2Running017s10.200.104.36node2< none> < none>
[root@node1 pod]#



可以看到运行在node2上,那么我们登录到node2上进行操作;
[root@node2 ~]# crictl ps
CONTAINERIMAGECREATEDSTATENAMEATTEMPTPOD ID
5ef0dd5143665bba24acba395b24 seconds agoRunningredis0a9c6a4f87ffde
0123cd4068b288ad32427177e428 seconds agoRunningweb0a9c6a4f87ffde
8eb0924940884f2f70adc5d89aAbout an hour agoRunningmy-nginx34a696725bc8d76
be92ec599aca867da37a9a360eAbout an hour agoRunningcoredns330ea47c03f8a05
1b44a197f9c4e7a71aca7b60fcAbout an hour agoRunningcalico-node33d4b02f3244df6
c7cf66853091b90f9d984ec9a3About an hour agoRunningnode-cache33a461065aec716
cfa1c7594c33bacac7d63e4060About an hour agoRunningnginx-ingress-controller4a3cdef0be2594
[root@node2 ~]#



我们先登录进redis容器中创建待验证文件;
[root@node2 ~]# crictl exec -it 5ef0dd5143665 /bin/bash
root@pod-volume:/data# cd /
root@pod-volume:/# ls
binbootdatadevetchomeliblib64mediamntoptprocrootrunsbinshared-redissrvsystmpusrvar
root@pod-volume:/# cd shared-redis/
root@pod-volume:/shared-redis# ls
root@pod-volume:/shared-redis# echo "redis" > yunweijia.txt
root@pod-volume:/shared-redis# cat yunweijia.txt
redis
root@pod-volume:/shared-redis# exit
exit
[root@node2 ~]#



然后我们再登录进web容器中看下是否有该文件和对应内容;
[root@node2 ~]# crictl exec -it 0123cd4068b28 /bin/bash
root@pod-volume:/# ls
binbootdevetchomeliblib64mediamntoptprocrootrunsbinshared-webspringboot-web-demo.jarsrvsystmpusrvar
root@pod-volume:/# cd shared-web/
root@pod-volume:/shared-web# ls
yunweijia.txt
root@pod-volume:/shared-web# cat yunweijia.txt
redis
root@pod-volume:/shared-web# exit
exit
[root@node2 ~]#



我们可以发现,在redis上创建的文件,web容器中的确是存在的,并且对应node2节点上呢?那必然也是存在的,看看;
[root@node2 ~]# cat /shared-volume-data/yunweijia.txt
redis
[root@node2 ~]#





?
3
POD的Hosts文件


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


首先我们看下redis的hosts文件吧;
[root@node2 ~]# crictl exec -it 5ef0dd5143665 cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1localhost
::1localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.104.36pod-volume
[root@node2 ~]#



其次,我们再看下web的hosts文件;
[root@node2 ~]# crictl exec -it 0123cd4068b28 cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1localhost
::1localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.104.36pod-volume
[root@node2 ~]#



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


那么又有一个问题了,这种情况下我们如何配置他的host主机名呢?是应该配置在哪个容器下面呢?
# 先删除pod
[root@node1 pod]# kubectl delete -f pod-volume.yaml -n dev
pod "pod-volume" deleted
[root@node1 pod]#



修改yaml文件文件;
[root@node1 pod]# vim pod-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-volume
spec:
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 dev
pod/pod-volume created
[root@node1 pod]# kubectl get pod -n dev -o wide
NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES
pod-volume2/2Running03m10.200.104.54node2< none> < none>
[root@node1 pod]#



查看redis的hosts文件;
[root@node2 ~]# crictl exec -it de4805fe7b87c cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1localhost
::1localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.104.54pod-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.1localhost
::1localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.104.54pod-volume

# Entries added by HostAliases.
192.168.112.131 ceshi.volume.com
[root@node2 ~]#



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


4
POD和宿主机共享
那么pod还可以和宿主机共享网络和pid空间,下面看看;先停止原pod;
剩余内容请转至VX公众号 “运维家” ,回复 “147” 查看。
------ 以下内容为防伪内容,忽略即可 ------
------ 以下内容为防伪内容,忽略即可 ------
------ 以下内容为防伪内容,忽略即可 ------
linux切换shell手机linux模拟器linux下的中断使用linux内核模块Linux下c语言多线程开发linux输入法安装不了怎样在linux中下载安 装包mac装成Linuxlinux显示没有rz技嘉安装linuxregallinuxLInux怎么一个文件夹复制linux过滤的非linux内核版本号组成部分stm32装linuxlinux导入视频linux向用户发送消息linux下sim800驱动linux查看mq版本信息Linux樱花映射



    推荐阅读