pod(二):创建包含多个容器的pod(sidecar)

服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64

一个pod里可以有一个容器,也可以有多个容器。

一般一个pod里运行一个容器,那一个pod里运行两个容器的意义何在?一个容器是主容器,一个是副容器sidecar,比如nginx容器用来提供服务,另外一个容器使用工具来进行日志分析,两个容器挂载同一个数 据卷,日志分析容器读取数据卷即可分析日志。

3.1 环境介绍

Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点

服务器 操作系统版本 CPU架构 进程 功能描述 k8scloude1/192.168.110.130 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico k8s master节点 k8scloude2/192.168.110.129 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点 k8scloude3/192.168.110.128 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点

3.2 在一个pod里创建多个容器

生成一个yaml文件,pod里面有2个容器n1,n2

[root@k8scloude1 pod]# vim pod2.yaml

#kind: Pod表示资源类型为Pod   labels指定pod标签   metadata下面的name指定pod名字   containers下面全是容器的定义
#image指定镜像名字  imagePullPolicy指定镜像下载策略   containers下面的name指定容器名
#resources指定容器资源(CPU,内存等)      dnsPolicy指定DNS策略    restartPolicy容器重启策略
[root@k8scloude1 pod]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1
  name: pod1
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: n1
    resources: {}
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: n2
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

创建pod

[root@k8scloude1 pod]# kubectl apply -f pod2.yaml
pod/pod1 created

查看pod,pod启动失败,原因为使用了同一个镜像,端口80冲突

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS             RESTARTS   AGE
pod1   1/2     CrashLoopBackOff   2          40s

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS   RESTARTS   AGE
pod1   1/2     Error    3          58s

删除pod

[root@k8scloude1 pod]# kubectl delete pod pod1 --force
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.

pod "pod1" force deleted

对于containers,如果没有指定command参数,则运行的进程为nginx镜像里指定的CMD那个进程,如果有command参数,则运行command指定的进程,不运行nginx镜像里CMD的进程。

command: [“sh”,”-c”,”sleep 1000″] 睡眠1000秒,时间到了就结束了,需要进行重启,继续sleep 1000

[root@k8scloude1 pod]# vim pod2.yaml

[root@k8scloude1 pod]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1
  name: pod1
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: n1
    resources: {}
  - image: nginx
    imagePullPolicy: IfNotPresent
    command: ["sh","-c","sleep 1000"]
    name: n2
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

创建pod并查看,READY:2/2表示pod里有两个容器,两个容器都启动起来了。

一般一个pod里运行一个容器,那一个pod里运行两个容器的意义何在?则一个容器是主容器,一个是副容器sidecar,比如nginx容器用来提供服务,另外一个容器使用工具来进行日志分析,两个容器挂载同一个数 据卷,日志分析容器读取数据卷即可分析日志。

[root@k8scloude1 pod]# kubectl apply -f pod2.yaml
pod/pod1 created

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod1   2/2     Running   0          5s

删除pod

[root@k8scloude1 pod]# kubectl delete pod pod1 --force
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.

pod "pod1" force deleted

[root@k8scloude1 pod]# kubectl get pod
No resources found in pod namespace.

command: [“sh”,”-c”,”sleep 10″] 修改睡眠时间为10秒

[root@k8scloude1 pod]# vim pod2.yaml

[root@k8scloude1 pod]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1
  name: pod1
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: n1
    resources: {}
  - image: nginx
    imagePullPolicy: IfNotPresent
    command: ["sh","-c","sleep 10"]
    name: n2
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

由于restartPolicy: Always,10秒到期之后,pod会自动进行重启

[root@k8scloude1 pod]# kubectl apply -f pod2.yaml
pod/pod1 created

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod1   2/2     Running   0          5s

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod1   2/2     Running   2          45s

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS             RESTARTS   AGE
pod1   1/2     CrashLoopBackOff   3          2m3s

[root@k8scloude1 pod]# kubectl get pod
NAME   READY   STATUS             RESTARTS   AGE
pod1   1/2     CrashLoopBackOff   5          4m55s

删除pod

[root@k8scloude1 pod]# kubectl delete -f pod2.yaml --force
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.

pod "pod1" force deleted

[root@k8scloude1 pod]# kubectl get pod
No resources found in pod namespace.

Original: https://www.cnblogs.com/renshengdezheli/p/16701447.html
Author: 人生的哲理
Title: pod(二):创建包含多个容器的pod(sidecar)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582021/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Docker安装 Ubuntu Centos

    Ubuntu 安装Dokcer 1. 删除旧版本Docker安装包和依赖项 sudo apt-get remove docker docker-engine docker.io c…

    Linux 2023年6月13日
    088
  • shell中的段落注释

    摘自: 感叹号可以用任意的串和字符替代,比如 注意!和BLOCK之前不能有空格,但是可以用Tab Original: https://www.cnblogs.com/LiuYanY…

    Linux 2023年5月28日
    086
  • Java基础系列–05_面向对象

    1、概述:(1)面向过程:将问题一步一步的解决的过程(详细步骤),在C语言中所有的代码都是基于过程化的代码。(2)面向对象:面向对象是基于面向过程的编程思想,所有的事情都交由创建出…

    Linux 2023年6月7日
    0113
  • SSO之CAS

    单点登录SSO ​ 单点登录的主要原理就是在每次登录成功以后生成一个唯一不可重复的令牌 token,我们就简单的用了一个随 机的 UUID 来生成 token。当用户登录成功后用生…

    Linux 2023年6月7日
    081
  • 计算机网络学习任务

    自学分析题 请分析,一个5KHz的无噪声信道能够达到的最大数据传输率是多少? 为什么? 假设你使用的宽带是100Mbps,你要把一个0.5GB的文件发送出去, 理论上要花多长时间?…

    Linux 2023年6月6日
    0140
  • 在RestController中获取各种信息的方法

    内容 获取方法 URL中路径的一部分 首先需要在RequestMapping做映射, 之后在方法中可以通过注解使用映射的变量@GetMapping(“/{id}&#82…

    Linux 2023年6月14日
    0126
  • 面试题汇总

    JAVA 基础 1.java 性能优化 ①尽量指定类、方法的final 修饰符 ②尽量重用对象 ③尽可能使用局部变量 ④及时关闭流 ⑤尽量减少对变量的重复计算 ⑥尽量采用懒加载的策…

    Linux 2023年6月7日
    094
  • ToneGenerator Init failed Crash 崩溃

    需求需要在扫码时产生一个短促的提示音, 搜了下像这样实现。测试时发现多次扫码后,会触发程序崩溃问题。 异常如下 代码如下: 一番搜索, 以下为最佳答案, 加上以后,循环测试, 不再…

    Linux 2023年6月13日
    0111
  • 【填空题】考研数据结构填空题整理

    数据结构填空题 题源来自《算法与数据结构考研试题精析》、《王道数据结构》在Liang’s Blog所著的文章上补充考点,仅供参考学习 一、概论 数据元素 是数据的基本单…

    Linux 2023年6月13日
    0129
  • Fastadmin引入Layui模块

    Fastadmin,PHP,Fastadmin引入layui模块,Fastadmin使用layui。 ​ Fastadmin基于 RequireJS进行JS模块的管理,因此如果我们…

    Linux 2023年6月6日
    098
  • Python之面向对象-反射

    一、什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问,检测和修改它本省状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反…

    Linux 2023年6月14日
    0113
  • 【MQTT】cJSON协议的安装和使用

    cJSON的使用 * – cJSON的简介 – + JSON 名称/值对 + JSON 数字 + JSON 对象 + JSON 数组 – cJS…

    Linux 2023年6月13日
    0115
  • 【docker】python: can’t open file ‘helloworld.py’: [Errno 13] Permission denied

    运行容器提示权限问题 docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python hel…

    Linux 2023年6月7日
    0112
  • ELK时间戳

    ELK时间戳 在我们使用ELK过程中,总会遇到时间戳的问题。首先 logstash如果没有加以处理的话,那么它默认使用的是采集的时间戳,然后存入 ES。那么这样的话时间显示的是错误…

    Linux 2023年6月8日
    0106
  • 保姆教程系列一、Linux搭建Nacos

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心…

    Linux 2023年6月14日
    096
  • mycat2 读写分离配置(详解)

    mycat2相对mycat1来说升级还挺多的,但是全网资料太少了,这里尽可能详细的将读写分离说清楚,目前这套配置已经在我司生产环境应用,日UV6W左右,暂时没发现问题。 1.1下载…

    Linux 2023年6月6日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球