5 理解k8s中的pod

1 熟悉pod的配置字段

一个完整的Pod的资源清单肯定是很多的,但是我显然是记不住的,那么编写yaml文件的时候如果忘记了怎么办呢?使用如下命令:
kubectl explain pod
在这里插入图片描述
这样就能看到FIELDS里面所有可以编写的字段了,如果又不知道metadata里面的字段不清楚,那么继续使用这种格式去追踪即可:
kubectl explain pod.metadata
在这里插入图片描述

2 熟悉pod的配置

1、先创建一个pod-base.yaml文件,内容如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: test
  labels:
    user: heima
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  - name: busybox
    image: busybox:1.30

将这个pod运行起来
在这里插入图片描述
查看这个pod的实际情况:
kubectl get pod pod-base -n test
在这里插入图片描述
然而并没有启动起来:
在这里插入图片描述
提示我:Container image “busybox:1.30” already present on machine
我记得好像是因为busybox这个容器,如果没有加上command具体执行的命令的话,就会自动退出的。所以这里暂时不管吧。

再写一个pod,用于验证镜像拉取

apiVersion: v1
kind: Pod
metadata:
  name: pod-imagepullpolicy
  namespace: test
  labels:
    user: heima
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    imagePullPolicy: Never
  - name: busybox
    image: busybox:1.30

我这里设置的策略是Nerver,策略的三种含义:
在这里插入图片描述
创建完成
在这里插入图片描述
使用如下命令查看一下这个pod详情
kubectl describe pod pod-imagepullpolicy -n test
在这里插入图片描述
这里还给这个pod挂载了一个serviceaccount,具体后面再看

2、解决busybox为什么启动不来的问题
原因:busybox并不是一个程序,而是类似于一个工具类的集合,启动后会自动关闭,如果要让busybox一直运行,那么需要用到command配置:

apiVersion: v1
kind: Pod
metadata:
  name: pod-command
  namespace: test
  labels:
    user: heima
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","touch /tmp/hello.txt; while true; do /bin/echo $(date +%T) >> /tmp/hello.txt; sleep 3; done;"]

这个pod里面的busybox容器启动后,会创建/tmp/hello.txt文件,然后不断每隔3秒钟往里面打印日期。
启动看一下:
在这里插入图片描述
此时发现已经运行起来了。那么就进入这个pod里的busybox容器看一下吧,命令时
kubectl exec -it pod-command -n test -c busybox /bin/sh
在这里插入图片描述
这个命令相当重要,因为一个pod里面是可能有多个容器的,所以需要进入指定的一个容器。此时你可以看下/tmp/hello.txt文件中的内容:
在这里插入图片描述

4、环境变量
创建一个如下的Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-env
  namespace: test
  labels:
    user: heima
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","touch /tmp/hello.txt; while true; do /bin/echo $(date +%T) >> /tmp/hello.txt; sleep 3; done;"]
    env:
    - name: "username"
      value: "admin"
    - name: "password"
      value: "123456"

从yaml文件可以看到,我定义了两个环境变量,分别是username和password,那么先将pod运行起来。
在这里插入图片描述
同样进入到这个pod里面的busybox容器里面去看看
kubectl exec -it pod-env -n test -c busybox /bin/sh
在这里插入图片描述
然后执行如下命令,输出username和password
echo $username
echo $password
在这里插入图片描述
从这里大概可以知道了,env是为了给指定容器配置环境变量的。这样容器启动以后,就可以通过环境变量的方式来获取到对应的值了。这种方式就像docker启动容器的时候的-e参数。

5、端口设置
想想设置端口的作用,先看看上面启动的这个pod的情况:
kubectl describe pod pod-env -n test
在这里插入图片描述
从这里可以知道,这个容器启动的commint id是edae12e7ee97be3b6c039893cc94deabd9a8869f96a288ab3396b2b08db63662
那么既然现在k8s用的是docker,那么我应该可以在某个节点上找到这个容器才对。通过docker ps -a 的方式去找找:
在这里插入图片描述
果然是能找到这个容器的,但是也没有显示这个容器的虚拟ip和端口呀。该如何确认呢?
难道没有分配端口,意味着这个容器是无法对外提供服务的?
写一个 暴露了端口的pod来试试

apiVersion: v1
kind: Pod
metadata:
  name: pod-ports
  namespace: test
  labels:
    user: heima
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 81
      protocol: TCP

我这里创建了一个名为pod-ports的pod,里面的容器只有一个nginx,然后我特意将端口设置为了81而不是80
创建好这个pod
在这里插入图片描述
此时查看当前的这个Pod的详细信息:
kubectl describe pod pod-ports -n test
在这里插入图片描述
此时pod的ip地址是100.97.125.12,然后nginx容器对外暴露的端口是81,访问100.97.125.12:81来试试,我的想法是这个应该是不通的,因为nginx容器启动,内部默认端口应该是80,而你现在对外暴露的端口又是81,所以其实访问不到这个nginx才对,访问试试:
在这里插入图片描述
果然, 将这个修改为80端口,然后重新试试:
在这里插入图片描述
那么现在访问试试:
curl 100.97.125.13:80
在这里插入图片描述
确实看到了nginx,那么说明此时是Ok的
那么回过头去看看刚才的问题,如果这个容器的端口设置为80,表示的是将容器里面的80端口对外暴露,那么应该意味着这个nginx容器里面已经启动了一个nginx服务,且占用了80端口,所以来验证一下:
找到之前创建的这个pod
在这里插入图片描述
显然这个Pod在编写的时候,是没有配置对应的端口的,先查看一下详细信息:
在这里插入图片描述
确认完毕,此时pod的VIP是100.97.125.11,不是说Pod里面的网络是共享的吗?那岂不是我直接访问100.97.125.11就可以访问到nginx了?试试
curl 100.97.125.11
果然如此:
在这里插入图片描述
进入到这个nginx容器里面看看
kubectl exec -it pod-env -n test -c nginx /bin/sh
为了能使用curl,所以执行如下命令
apt update
apt install curl
安装完成后,执行一下命令
curl 127.0.0.1
在这里插入图片描述
果然,容器里面是启动了80端的nginx服务的

6、资源配额
编写一个为Pod设置资源配额的yaml文件,内容如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: pod-resources
  namespace: test
  labels:
    user: heima
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
    resources:
      limits: 
        cpu: "2"
        memory: "10Gi"
      requests:
        cpu: "1"
        memory: "10Mi"

运行这个pod
在这里插入图片描述
在这里插入图片描述
查看服务是启动成功了的,那么如果我现在想申请100G内存呢?显然我的服务器是不足的,所以删掉这个pod,修改为100G,然后重新启动看看效果:
在这里插入图片描述
提示内存不足!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在KubernetesPod是一个逻辑概念,它是通过声明式定义的一个YAML文件来创建的。最终,Pod会被调度到Kubernetes节点上的kubelet服务调用Linux操作系统的namespace、cgroup、docker等底层原理来实现。\[1\] Pod是Kubernetes最小的可调度和管理的单位,它可以包含一个或多个容器。Pod的容器共享相同的网络命名空间、存储卷和IP地址,它们可以通过localhost进行通信。Pod还提供了一种共享资源的机制,使得容器之间可以共享文件和环境变量。 Pod的创建原理是通过Kubernetes的调度器将Pod调度到可用的节点上。调度器会根据节点的资源情况、调度策略和Pod的需求来选择最合适的节点。一旦Pod被调度到节点上,kubelet服务会负责创建和管理Pod的容器。 总结来说,KubernetesPod是通过声明式定义的YAML文件创建的,它通过调度器将Pod调度到节点上,并由kubelet服务负责创建和管理Pod的容器。\[1\]\[2\] #### 引用[.reference_title] - *1* [kubernetesPod网络的创建原理](https://blog.csdn.net/buppt/article/details/123288339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [2、k8s pod原理详解](https://blog.csdn.net/scjava/article/details/123292545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [k8s篇-理解POD本质(实现原理与设计模式)](https://blog.csdn.net/qq_19676401/article/details/119996434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值