Pod--1

26 篇文章 0 订阅

主要内容

  1. 创建pod
  2. 修改pod
  3. Init类型容器

预备知识

Pod由一个或多个紧密耦合的容器组成它们之间共享网络、存储等资源,它是Kubernetes中的最小部署单位,它是一组容器的集合,共享网络和存储资源。以下是有关Pod的详细解释:

1. 定义:Pod是Kubernetes中的一个抽象概念,它代表了一组容器的运行实例。Pod可以包含一个或多个容器,这些容器共享相同的网络命名空间和存储卷。Pod是Kubernetes中最小的可部署单元,是构建和扩展应用程序的基本单位。

2. 特点:

  • 容器共享:Pod中的容器共享相同的网络和存储资源,它们可以通过localhost进行通信,并且可以访问Pod级别的共享存储卷。
  • 生命周期:Pod具有自己的生命周期,可以被创建、启动、停止、销毁等。当Pod被销毁时,其中的容器也会被终止。
  • 一致性:Pod中的容器总是同时运行,它们具有相同的生命周期和调度机制。它们可以共享资源,共同处理请求和响应。
  1. 用途:Pod通常用于运行一组紧密相关的容器,这些容器需要共享网络和存储资源。例如,一个Web应用程序可能需要一个容器来运行前端服务器,另一个容器来运行后端数据库。通过将它们放在同一个Pod中,可以方便地管理它们之间的通信和共享资源。

  2. Pod模板:Pod可以使用Pod模板来定义其规范。Pod模板包含了容器的定义,包括容器的镜像、环境变量、端口映射等。Pod模板还可以指定Pod的资源需求和限制,如CPU和内存。

  3. Pod控制器:Pod通常由一个Pod控制器来管理,以确保Pod的可用性和弹性。常见的Pod控制器包括Deployment、ReplicaSet和StatefulSet。Pod控制器可以根据需要创建、更新和删除Pod,以实现应用程序的部署和扩展。

总之,Pod是Kubernetes中用于组织和管理容器的基本单位。它提供了容器的共享资源和一致性,并通过Pod控制器来实现应用程序的部署和管理。通过使用Pod,可以更好地管理容器化应用程序,并提供弹性和可伸缩性。


一.创建pod

  1. 一个Pod中只有一个业务容器
  2. 一个Pod中有多个业务容器

1.一个Pod中只有一个业务容器

代码如下(示例):
cat > pod.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: hello
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo "Hello, Pod!" && sleep 3600']
  restartPolicy: OnFailure
EOF

kubectl create -f pod.yml 
kubectl get pod 
kubectl logs mypod 

在这里插入图片描述

(示例):
上述命令是使用kubectl命令行工具创建一个名为"mypod"的Pod,并将其配置保存在pod.yml文件中。下面是对每个命令的详细解释:

1. `cat > pod.yml <<EOF`: 这个命令将输入重定向到pod.yml文件,并使用EOF作为结束标记。接下来的输入将被写入pod.yml文件中。

2. `apiVersion: v1`: 这是Pod配置文件的API版本,指定了使用的Kubernetes API的版本。

3. `kind: Pod`: 这个字段指定了资源对象的类型,这里是一个Pod。

4. `metadata: name: mypod`: 这是Pod的元数据部分,包含了Pod的名称。

5. `spec: containers: - name: hello`: 这是Pod的规范部分,包含了容器的配置信息。这里定义了一个名为"hello"的容器。

6. `image: busybox`: 这是容器使用的镜像名称,这里使用的是busybox镜像。

7. `imagePullPolicy: IfNotPresent`: 这个字段指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。

8. `command: ['sh', '-c', 'echo "Hello, Pod!" && sleep 3600']`: 这是容器的启动命令,这里使用的是一个简单的shell命令,输出"Hello, Pod!"并休眠3600秒。

9. `restartPolicy: OnFailure`: 这个字段指定了Pod的重启策略,在容器失败时重新启动Pod。

10. `kubectl create -f pod.yml`: 这个命令使用kubectl工具,根据pod.yml文件中的配置创建一个Pod。

11. `kubectl get pod`: 这个命令使用kubectl工具,列出当前集群中的所有Pod。

12. `kubectl logs mypod`: 这个命令使用kubectl工具,获取Pod名称为"mypod"的容器的日志。

总之,上述命令使用kubectl命令行工具创建一个Pod,并通过指定的配置文件定义了Pod的名称、容器的配置和重启策略。然后,使用kubectl工具查看集群中的Pod列表,并获取指定Pod容器的日志。

2.一个Pod中有多个业务容器

代码如下(示例):
cat > multicontainer.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: pod
spec:
  containers:
  - name: hello
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo "Hello, Pods!" && sleep 3600']
  - name: httpd
    image: httpd
    ports:
      - name: web
        containerPort: 80
  restartPolicy: OnFailure
EOF

kubectl create -f multicontainer.yml 
kubectl get pod 
kubectl get -f multicontainer.yml -o wide

在这里插入图片描述

上述命令是使用kubectl命令行工具创建一个名为"pod"的多容器Pod,并将其配置保存在multicontainer.yml文件中。下面是对每个命令的详细解释:

1. `cat > multicontainer.yml <<EOF`: 这个命令将输入重定向到multicontainer.yml文件,并使用EOF作为结束标记。接下来的输入将被写入multicontainer.yml文件中。

2. `apiVersion: v1`: 这是Pod配置文件的API版本,指定了使用的Kubernetes API的版本。

3. `kind: Pod`: 这个字段指定了资源对象的类型,这里是一个Pod。

4. `metadata: name: pod`: 这是Pod的元数据部分,包含了Pod的名称。

5. `spec: containers: - name: hello`: 这是Pod的规范部分,包含了容器的配置信息。这里定义了两个容器。

6. `image: busybox`: 这是第一个容器使用的镜像名称,这里使用的是busybox镜像。

7. `imagePullPolicy: IfNotPresent`: 这个字段指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。

8. `command: ['sh', '-c', 'echo "Hello, Pods!" && sleep 3600']`: 这是第一个容器的启动命令,这里使用的是一个简单的shell命令,输出"Hello, Pods!"并休眠3600秒。

9. `- name: httpd`: 这是第二个容器的名称。

10. `image: httpd`: 这是第二个容器使用的镜像名称,这里使用的是httpd镜像。

11. `ports: - name: web containerPort: 80`: 这个字段定义了第二个容器的端口配置,将容器的80端口映射到主机上。

12. `restartPolicy: OnFailure`: 这个字段指定了Pod的重启策略,在容器失败时重新启动Pod。

13. `kubectl create -f multicontainer.yml`: 这个命令使用kubectl工具,根据multicontainer.yml文件中的配置创建一个多容器Pod。

14. `kubectl get pod`: 这个命令使用kubectl工具,列出当前集群中的所有Pod。

15. `kubectl get -f multicontainer.yml -o wide`: 这个命令使用kubectl工具,获取multicontainer.yml文件中定义的Pod的详细信息,并显示更多的列。

总之,上述命令使用kubectl命令行工具创建一个多容器Pod,并通过指定的配置文件定义了Pod的名称、容器的配置和重启策略。然后,使用kubectl工具查看集群中的Pod列表,并获取指定Pod的详细信息。

二.修改pod

  1. 进入容器并修改其内容

1.修改Pod

代码如下(示例):
kubectl exec -it pod -c httpd -- /bin/bash
root@pod:/usr/local/apache2# echo podmodtest. > htdocs/index.html 
root@pod:/usr/local/apache2# exit
curl http:// 172.16.245.1

在这里插入图片描述

上述命令是使用kubectl命令行工具在名为"pod"的多容器Pod中的"httpd"容器中执行一系列命令。下面是对每个命令的详细解释:

1. `kubectl exec -it pod -c httpd -- /bin/bash`: 这个命令使用kubectl工具,在名为"pod"的Pod中的"httpd"容器中执行一个交互式的bash shell。-it选项允许与容器进行交互,-c选项指定要执行命令的容器。

2. `root@pod:/usr/local/apache2# echo podmodtest. > htdocs/index.html`: 这个命令在容器中执行,将字符串"podmodtest."写入到容器中的htdocs目录下的index.html文件中。这个命令用于在httpd容器中创建一个简单的HTML文件。

3. `root@pod:/usr/local/apache2# exit`: 这个命令用于退出容器的bash shell。

4. `curl http://172.16.245.1`: 这个命令在本地机器上执行,使用curl工具向指定的IP地址发送HTTP请求。这里的IP地址是172.16.245.1,用于访问Pod中的httpd容器。这个命令用于测试是否能够通过HTTP请求获取到之前在容器中创建的HTML文件。

总之,上述命令使用kubectl工具在多容器Pod中的指定容器中执行一系列命令,包括创建一个简单的HTML文件,并使用curl工具测试是否能够通过HTTP请求获取到该文件。

三.Init类型容器

Init 容器是一种特殊容器,它在 Pod 内的应用容器启动之前运行,如果 Pod 的 Init 容器
失败,则 kubelet 会不断地重启该 Init 容器直到成功为止。 但如果 Pod 对应的
restartPolicy 值为 “Never”,同时 Pod 的 Init 容器启动失败, 则 Kubernetes 会
将整个 Pod 状态设置为失败。
Init 容器与普通的容器非常类似,除了如下两点:
1 正常情况下,它们最终都会处于 completed 状态。
2 它们都必须在下一个容器启动之前成功完成。

Init容器是一种特殊类型的容器,它在主容器启动之前运行,并且主要用于执行初始化任务或者预处理任务。Init容器与主容器共享同一个Pod的网络和存储空间,但是它们是顺序执行的,只有在Init容器成功完成后,主容器才会启动。

以下是Init容器的一些特点和用途:

  1. 顺序执行:Init容器按照在Pod配置中定义的顺序依次执行,每个Init容器完成后才会启动下一个Init容器,最后才会启动主容器。

  2. 初始化任务:Init容器通常用于执行一些初始化任务,例如配置文件的加载、数据库的初始化、网络的配置等。

  3. 依赖关系:Init容器可以定义依赖关系,即后续的Init容器或主容器可以依赖前面的Init容器完成的任务或生成的数据。

  4. 共享资源:Init容器与主容器共享同一个Pod的网络和存储空间,它们可以通过共享的卷(Volume)进行数据交换。

  5. 生命周期:Init容器的生命周期与主容器的生命周期是独立的,它们可以有不同的重启策略和资源限制。

  6. 日志记录:Init容器的日志记录与主容器的日志记录是分开的,可以通过kubectl命令获取Init容器的日志。

总之,Init容器是在主容器启动之前运行的特殊类型的容器,用于执行初始化任务或者预处理任务。它们按照顺序执行,共享资源,并可以定义依赖关系。

1.

代码如下(示例):
cat > init.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: initpd
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "sleep 20"]
  - name: init-mydb
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "sleep 20"]
EOF

kubectl create -f init.yml 
kubectl get pod -w

在这里插入图片描述

上述命令使用kubectl命令行工具创建一个包含初始化容器的Pod,并查看Pod的状态。下面是对每个命令的详细解释:

1. `cat > init.yml <<EOF`: 这个命令用于将下面的内容输入到名为"init.yml"的文件中。

2. `apiVersion: v1`: 这是Pod配置文件的API版本。

3. `kind: Pod`: 这是要创建的资源类型,这里是一个Pod。

4. `metadata: name: initpd`: 这里指定了Pod的名称为"initpd"5. `labels: app: myapp`: 这里定义了一个标签,用于标识这个Pod属于"myapp"应用。

6. `spec: containers: - name: myapp-container`: 这里定义了一个容器,名称为"myapp-container"7. `image: busybox`: 这是容器使用的镜像名称,这里使用的是busybox镜像。

8. `imagePullPolicy: IfNotPresent`: 这个字段指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。

9. `command: ['sh', '-c', 'echo The app is running! && sleep 3600']`: 这是容器的启动命令,这里使用的是一个简单的shell命令,输出"The app is running!"并休眠3600秒。

10. `initContainers:`: 这个字段定义了初始化容器的配置。

11. `- name: init-myservice`: 这是第一个初始化容器的名称。

12. `image: busybox`: 这是第一个初始化容器使用的镜像名称,这里使用的是busybox镜像。

13. `command: ['sh', '-c', "sleep 20"]`: 这是第一个初始化容器的启动命令,这里使用的是一个简单的shell命令,休眠20秒。

14. `- name: init-mydb`: 这是第二个初始化容器的名称。

15. `image: busybox`: 这是第二个初始化容器使用的镜像名称,这里使用的是busybox镜像。

16. `command: ['sh', '-c', "sleep 20"]`: 这是第二个初始化容器的启动命令,这里使用的是一个简单的shell命令,休眠20秒。

17. `kubectl create -f init.yml`: 这个命令使用kubectl工具,根据init.yml文件中的配置创建一个带有初始化容器的Pod。

18. `kubectl get pod -w`: 这个命令使用kubectl工具,列出当前集群中的所有Pod,并使用-w选项持续监视Pod的状态变化。

总之,上述命令使用kubectl命令行工具创建一个带有初始化容器的Pod,并通过指定的配置文件定义了Pod的名称、容器的配置和初始化容器的配置。然后,使用kubectl工具持续监视Pod的状态变化。

总结

以上是今天要讲的内容,学到了创建pod;修改pod;Init类型容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值