k8s之pod详解

参考书籍:《Kubernetes权威指南第4版从Docker到Kubernetes实践全接触》

文章目录

      • 参考书籍:《Kubernetes权威指南第4版从Docker到Kubernetes实践全接触》
  • 一、Pod概念
  • 二、定义一个Pod
    • `2.1. YAML文件tomcat.yaml`
    • `2.2. 相关解释`
    • `2.3. 验证`
  • 三、静态Pod


一、Pod概念

Pod是k8s的最小单位,里面包含一组容器,其中一个为Pause容器,也称为“根容器”。

Pod里面的多个业务容器共享Pause容器的网络和Volume卷。

Pod是短暂的。

每个Pod都有一个唯一的IP地址,称之为Pod IP。在K8S集群中,一个Pod里的容器与另外主机上的Pod容器能够直接通信

二、定义一个Pod

2.1. YAML文件tomcat.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
  labels:
    name: tomcat
  namespace: cka
spec:
  containers:
  - name: tomcat
    image: kubeguide/tomcat-app:v1
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
    - containerPort: 8080
    env:
    - name: MYSQL_SERVICE_HOST
      value: 'mysql'

2.2. 相关解释

apiVersion: v1					#核心API
kind							#指明资源类型,此处为Pod
metadata						#元数据,用于描述当前资源类型。
metadata.name					#Pod的名称为tomcat
metadata.labels.name			#定义该Pod有一个名为name=tomcat的标签
metadata.namespace				#指定该Pod属于哪个命名空间
spec							#定义Pod里面的容器组
spec.containers					#定义容器组
containers.name					#容器的名字为tomcat
containers.image				#容器使用的镜像为kubeguide/tomcat-app:v1
containers.imagePullPolicy		#IfNotPresent表示如果本地存在就不去镜像仓库拉取,不存在则拉取
containers.resources			#定义容器的资源配额
resources.requests				#定义请求的资源,现只支持CPU和内存,此处申请0.25个CPU和64MiB内存
resources.limits				#资源最多申请0.5个CPU和128MiB内存
containers.ports				#定义端口
ports.containerPort				#容器应用监听的端口为8080
containers.env					#往容器注入环境变量,以KV键值对的形式。此处注入了MYSQL_SERVICE_HOST='mysql'的环境变量

kubectl apply -f tomcat.yaml #创建Pod

2.3. 验证

kubectl get pod --show-labels

Pod的名字为tomcat,且有一个name=tomcat的标签
k8s之pod详解_第1张图片

kubectl describe pod tomcat

容器名为tomcat,使用的镜像为kubeguide/tomcat-app:v1,监听的端口为8080
k8s之pod详解_第2张图片
资源限额及环境变量
k8s之pod详解_第3张图片
表示该镜像已经在本地有了
在这里插入图片描述

kubectl exec -it tomcat  bash			#登陆到Pod的第一个容器,由于这里只有一个业务容器,默认就是tomcat容器

环境变量已成功注入
在这里插入图片描述

kubectl get pod -o wide

Pod IP为10.244.1.9
在这里插入图片描述
在集群任意主机通过curl 10.244.1.9:8080可以访问
k8s之pod详解_第4张图片

三、静态Pod

静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。不能通过API Server进行管理,无法与RC、Deployment或者DaemonSet进行关联,并且kubelet无法对它们进行健康检查。

静态Pod总是由kubelet创建,并且总在kubelet所在的Node上运行。

你可能感兴趣的:(K8S,kubernetes)