Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
Pod 是一组紧密关联的容器集合,它们共享IPC、Network和UTS namespace,是 Kubernetes 调度的基本单元。Pod 的设计理念是支持多个容器在一个 Pod 中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

一、Pod的定义

这里还是以我们之前做的webapp为例定义一个Pod,这是一个最简单的Pod定义

apiVersion: v1
kind: Pod
metadata:name: webapplabels:app: webapp
spec:containers:- name: webappimage: 172.16.194.135:5000/webapp:latestports:- containerPort: 5000

关于Pod的定义比较重要的就是kind、spec.containers,kind就是定义资源类型、在spec.containers中主要定义容器所使用的镜像,这里可以定义多个容器。

二、Pod的基本使用

在使用Pod前我们需要注意,在Kubernetes中对于长时间运行的容器的要求是:其主程序需要一直在前台运行。如果主程序运行在后台,则Kubernetes会认为Pod执行结束,将会销毁Pod。以webapp镜像为例,它的Dockerfile如下:

FROM java:8
WORKDIR /opt/soft/
EXPOSE 4567
COPY webapp-1.0-SNAPSHOT.jar /opt/soft/webapp.jar
ENTRYPOINT ["java", "-jar", "/opt/soft/webapp.jar"]

接下来,我们尝试一下Pod中多容器的场景,我们的Pod包含两个容器:webapp和busybox,Pod定义如下:

apiVersion: v1
kind: Pod
metadata:name: webapplabels:app: webapp
spec:containers:- name: webappimage: 172.16.194.135:5000/webapp:1.0ports:- containerPort: 5000- name: busyboximage: busyboxcommand: ["sh", "-c", "top"]

注意:busybox容器中我们定义了启动命令top,这样做就是为了确保busybox容器始终在前台运行top命令,避免容器直接被销毁。

我们创建Pod,并通过describe可以清楚看到这两个容器的创建过程:

$ sudo kubectl create -f webapp\_pod.yaml
pod/webapp created
$ sudo kubectl describe pod webapp
Name: webapp
Namespace: default
Priority: 0
Node: ayato/172.16.194.135
Start Time: Sat, 08 Jan 2022 05:49:38 +0000
Labels: app=webapp
Annotations:
Status: Running
IP: 172.17.0.6
IPs:IP: 172.17.0.6
Containers:webapp:Container ID: docker://9c68ef7019126b65e2feba5d4d69e55997a9e573ce585b0bbb6a7cfe2fe20b31Image: 172.16.194.135:5000/webapp:1.0Image ID: docker-pullable://172.16.194.135:5000/webapp@sha256:df3a447a013ada0642dec67bb31976f42f1a0699a68873d0452f514fa24e5c77Port: 5000/TCPHost Port: 0/TCPState: RunningStarted: Sat, 08 Jan 2022 05:49:40 +0000Ready: TrueRestart Count: 0Environment: Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-pcr2h (ro)busybox:Container ID: docker://0dfd00b5fa8e419bfe0b4a43595c83cb1d4986980914865ae3371e1724c7f568Image: busyboxImage ID: docker-pullable://busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678Port: Host Port: Command:sh-ctopState: RunningStarted: Sat, 08 Jan 2022 05:49:45 +0000Ready: TrueRestart Count: 0Environment: Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-pcr2h (ro)
Conditions:Type StatusInitialized TrueReady TrueContainersReady TruePodScheduled True
Volumes:default-token-pcr2h:Type: Secret (a volume populated by a Secret)SecretName: default-token-pcr2hOptional: false
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 3m50s default-scheduler Successfully assigned default/webapp to ayatoNormal Pulled 3m49s kubelet Container image "172.16.194.135:5000/webapp:1.0" already present on machineNormal Created 3m48s kubelet Created container webappNormal Started 3m48s kubelet Started container webappNormal Pulling 3m48s kubelet Pulling image "busybox"Normal Pulled 3m44s kubelet Successfully pulled image "busybox" in 4.516692787sNormal Created 3m44s kubelet Created container busyboxNormal Started 3m43s kubelet Started container busybox

我们之前说过同一个Pod中的容器共享网络,也就是说我们在busybox容器中可以通过localhost访问webapp的接口,我们尝试一下:

$ sudo kubectl exec -it webapp -c busybox /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # wget http://localhost:4567/api/hello
Connecting to localhost:4567 (127.0.0.1:4567)
saving to 'hello'
hello 100% |******************************************************************************************|    15  0:00:00 ETA
'hello' saved
/ # cat hello
Hello my friend/ #

三、Pod容器共享Volume

同一个Pod中的容器能够共享Pod级别的Volume,Volume可以被定义为各种类型,多个容器分别进行挂载操作。我们还是以webapp和busybox为例,webapp向volume中写log,busybox通过tail命令读log,Pod定义如下:

apiVersion: v1
kind: Pod
metadata:name: webapplabels:app: webapp
spec:containers:- name: webappimage: 172.16.194.135:5000/webapp:1.0ports:- containerPort: 5000volumeMounts:- name: webapp-logsmountPath: /tmp- name: busyboximage: busyboxcommand: ["sh", "-c", "tail -f /logs/log.out"]volumeMounts:- name: webapp-logsmountPath: /logsvolumes:- name: webapp-logsemptyDir: {}

我们通过Pod定义中可以看到:我们设置了一个Volume,名称为webapp-logs,type为emptyDir。容器webapp将Volume挂载到/tmp目录,因为webapp配置了logback并会向/tmp中写日志。容器busybox将Volume挂载到/logs目录,并通过tail命令持续读日志。我们启动Pod,并使用kubectl logs命令从busybox中读取tail的输出:

$ sudo kubectl create -f webapp\_pod.yaml
pod/webapp created
$ sudo kubectl logs webapp -c busybox
06:30:27.810 [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] Starting TodoListApplication v1.0-SNAPSHOT using Java 1.8.0\_111 on webapp with PID 1 (/opt/soft/webapp.jar started by root in /opt/soft)
06:30:27.821 [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] No active profile set, falling back to default profiles: default
06:30:30.060 [INFO ] [main] [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat initialized with port(s): 4567 (http)
06:30:30.079 [INFO ] [main] [org.apache.coyote.http11.Http11NioProtocol] Initializing ProtocolHandler ["http-nio-4567"]
06:30:30.088 [INFO ] [main] [org.apache.catalina.core.StandardService] Starting service [Tomcat]
06:30:30.089 [INFO ] [main] [org.apache.catalina.core.StandardEngine] Starting Servlet engine: [Apache Tomcat/9.0.41]
06:30:30.359 [INFO ] [main] [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]] Initializing Spring embedded WebApplicationContext
06:30:30.359 [INFO ] [main] [org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext] Root WebApplicationContext: initialization completed in 2407 ms
06:30:30.913 [INFO ] [main] [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] Initializing ExecutorService 'applicationTaskExecutor'
06:30:32.634 [WARN ] [main] [org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration] Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
06:30:32.956 [INFO ] [main] [org.apache.coyote.http11.Http11NioProtocol] Starting ProtocolHandler ["http-nio-4567"]
06:30:33.096 [INFO ] [main] [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat started on port(s): 4567 (http) with context path ''
06:30:33.131 [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] Started TodoListApplication in 6.387 seconds (JVM running for 7.205)

关于Volume的类型,有如下几种:

1)emptyDir:emptyDir是在Pod分配到Node时创建的,它的初始内容为空,并且无须指定host上对应的目录文件,它是由Kubernetes自动分配的目录,当Pod销毁后,emptyDir中的数据也会被删除。一般可用作临时空间,存放应用程序临时数据。

2)hostPath:将宿主机中的文件或目录挂载到Pod中。通常用于应用永久数据的存储。

3)iscsi:将iSCSI存储设备上的目录挂载到Pod中。

4)nfs:将NFS上的目录挂载到Pod中。

5)glusterfs:将GlusterFS网络文件系统的目录挂载到Pod中。

6)rbd:将Ceph块设备共享存储挂载到Pod中。

7)gitRepo:通过挂载一个空目录,并从Git中克隆一个git仓库供Pod使用。

8)configmap:将配置数据挂载为容器中的文件。

9)secret:将Secret数据挂载为容器中的文件。

Docker 与 K8S学习笔记(十八)—— Pod的使用相关推荐

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置 Download JetBrains Python IDE :: PyCharm http://ww ...

  2. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  3. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  4. 学习笔记(十八):MoRe-Fi用深度学习网络从非线性信号中恢复呼吸波形

    <MoRe-Fi: Motion-robust and Fine-grained Respiration Monitoring via Deep-Learning UWB Radar>学习 ...

  5. 【D3D11游戏编程】学习笔记十八:模板缓冲区的使用、镜子的实现

    (注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 模板缓冲区(Stencil Buffe ...

  6. three.js学习笔记(十八)——调整材质

    介绍 到现在为止,我们都在创建新的着色器材质,但是如果我们想要修改一个Three.js内置的材质呢?或许我们对MeshStandardMaterial的处理结果感到满意,但是希望往里边添加顶点动画. ...

  7. 【theano-windows】学习笔记十八——混合蒙特卡洛采样

    #前言 继续之前的Theano学习,本次主要学习混合蒙特卡洛(Hybrid Monte-Carlo Sampling)采样算法. 国际惯例,参考网址 Hybrid Monte-Carlo Sampli ...

  8. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)...

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  9. JSTL标签引入(web基础学习笔记十八)

    一.JSTL包下载和引入 1.0.简介 JSTL全名为JavaServer Pages Standard Tag Library 1.1.下载包 下载地址:http://archive.apache. ...

最新文章

  1. Spring系列之Spring常用注解总结
  2. 第十三届全国大学生智能汽车竞赛 裁判系统使用说明
  3. .NET自动化测试工具链:Selenium+NUnit+ExtentReport
  4. 致盗窃,抄袭有三AI内容以及不可理喻的读者
  5. Oracle数据库完全卸载
  6. Android使用init.rc触发脚本实现隐藏内置应用
  7. FFmpeg API 变更记录
  8. 如何获得学生版本的免费eviews9
  9. 小学计算机说课稿模板,获奖小学信息技术说课稿模板
  10. 计算机组成原理A原是什么,计算机组成原理(A).doc
  11. infor wms 中英文对照_视听盛宴 I纸牌屋揭露美国政治权力运作(16中英、纯英、无字幕可切换视频+中英文全剧本+全季音频)...
  12. 网络上的罗刚·心灵之约
  13. Simulink代码生成: MinMax模块及其代码
  14. 腾讯云图地图使用介绍
  15. 内网环境下的横向移动总结
  16. 致童年,那些年我们逝去的岁月
  17. MaxEnt生态位模型课程大纲
  18. Android应用开发获取手机电池电量的简单方法
  19. 详解AUTOSAR:Green Hills Software(GHS)编译下载瑞萨RH850程序(环境配置篇—2)
  20. PyCharm 中的 ___jb_bak___ 和 ___jb_old___ 文件的处理方法

热门文章

  1. zip文件加密的几种破解方法
  2. 2. Python 简介
  3. 【视频分类】3D-ResNets-PyTorch复现
  4. 14大品质管理手法介绍
  5. RoadFlow开源工作流源码-项目架构分析
  6. 新版kali如何配置IP地址?
  7. iOS自动化测试-使用真机进行自动化测试
  8. 将chrome中的收藏夹导入edge
  9. 犬夜叉手游觉醒服务器维护,《犬夜叉-觉醒》最详细最容易入门新手指导
  10. 信息检索(IR)—链接分析