k8s部署-40-对POD进行重新认识(上)
Posted 公号运维家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s部署-40-对POD进行重新认识(上)相关的知识,希望对你有一定的参考价值。
“ 对POD进行深度认识,让我们再次进入pod的世界。”
1
POD回顾
一直使用的pod,我们再继续了解下,首先回顾下之前我们知道的。
1、POD是最小调度单位
2、POD本质上还是容器的隔离
3、Pause容器
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
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-volume 2/2 Running 0 17s 10.200.104.36 node2 <none> <none>
[root@node1 pod]#
可以看到运行在node2上,那么我们登录到node2上进行操作;
[root@node2 ~]# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
5ef0dd5143665 bba24acba395b 24 seconds ago Running redis 0 a9c6a4f87ffde
0123cd4068b28 8ad32427177e4 28 seconds ago Running web 0 a9c6a4f87ffde
8eb0924940884 f2f70adc5d89a About an hour ago Running my-nginx 34 a696725bc8d76
be92ec599aca8 67da37a9a360e About an hour ago Running coredns 33 0ea47c03f8a05
1b44a197f9c4e 7a71aca7b60fc About an hour ago Running calico-node 33 d4b02f3244df6
c7cf66853091b 90f9d984ec9a3 About an hour ago Running node-cache 33 a461065aec716
cfa1c7594c33b acac7d63e4060 About an hour ago Running nginx-ingress-controller 4 a3cdef0be2594
[root@node2 ~]#
我们先登录进redis容器中创建待验证文件;
[root@node2 ~]# crictl exec -it 5ef0dd5143665 /bin/bash
root@pod-volume:/data# cd /
root@pod-volume:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin shared-redis srv sys tmp usr var
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
bin boot dev etc home lib lib64 media mnt opt proc root run sbin shared-web springboot-web-demo.jar srv sys tmp usr var
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.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.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-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.104.36 pod-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
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-volume 2/2 Running 0 3m 10.200.104.54 node2 <none> <none>
[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-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.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-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.104.54 pod-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樱花映射
以上是关于k8s部署-40-对POD进行重新认识(上)的主要内容,如果未能解决你的问题,请参考以下文章