k8s教程(pod篇)-总结(上)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: k8s教程(pod篇)-总结(上)

01 引言

至此,pod的相关知识已经讲解完了,下面是整理的脑图:

02 总结

下面是关于pod的文章详情总结:

2.1 定义与基本用法

详情参考: 《k8s教程(pod篇)-定义与基本用法》

pod定义的完整内容如下:

apiVersion: v1
kind: Pod
  metadata:
    name: string
    namespace: string
    labels:
    - name: string
    annotations:
    - name: string
spec:
  containers:
  - name: string
    image: string
    imagePullPolicy: [Always Never IfNotPresent] 
    command: [string]
    args: [string]
    workingDir: string
    volumeMounts: 
    - name: string
      mountPath: string
      readonly: boolean
    ports:
    - name: string
      containerPort: int
      hostPort: int
      protocol: string
    env:
    - name: string
    - value: string
    resources:
      limits:
        cpu: string
        memory: string
      requests:
        cpu: string
        memory: string
    livenessProbe:
      exec:
        command: [string]
      httpGet:
        path: string
      port: number
      host: string
      scheme: string
      httpHeaders:
      - name: string
      value: string
    tcpSocket:
      port: number
    initialDelaySeconds: 0 
    timeoutSeconds: 0
    periodSeconds: 0
    successThreshold: 0
    failureThreshold: 0
    securityContext:
    privileged: false
  restartPolicy: [Always | Never | OnFailure] 
  nodeselector: object
  imagePullSecrets:
  - name: string
  hostNetwork: false
  volumes:
  - name: string
    emptyDir: {}
    hostPath:
      path: string
    secret:
    secretName: string
    items:
      - key: string
        path: string
    configMap: 
    - name: string 
      items:
      - key: string
        path: string

属性含义:

2.2 容器共享volume

详情参考: 《k8s教程(pod篇)-容器共享volume》

容器共享volume同一个 Pod 中的多个容器能够共享Pod级别的存储卷 Volume

举例:在 Pod 内包含两个容器(tomcat 和 busybox),在 Pod 级别设置 Volume “app-logs”,用于 tomcat 容器向其中写日志文件,busybox 容器从中读日志文件。

apiversion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
  - name: tomcat
    image: tomcat
    ports:
    - containerPort: 8080
    volumeMounts: 
    - name: app-logs
      mountPath: /usr/local/tomcat/logs
  - name: busybox
    image: busybox
    command: ["sh","-c","tail-f /logs/catalina*.log"] 
    volumeMounts:
    - name: app-logs
      mountPath: /logs
  volumes:
  - name: app-logs
    emptyDir: {}

这里设置的 Volume 名称为 app-logs,类型为 emptyDir(也可以设置为其他类型),挂载到 tomcat容器内 的/usr/local/tomcat/logs目录下,同时挂载到busybox容器内的/logs目录下

tomcat容器在启动后会向/usr/local/tomcat/logs目录写文件,busybox 容器就可以读取其中的文件了。

2.3 配置管理

详情参考: 《k8s教程(pod篇)-配置管理》

Pod可以使用 ConfigMap进行配置管理,ConfigMap以一个或多个key:value的形式保存在Kubenetes系统中供应用使用,它既可以表示一个变量的值(例如: apploglevel=info),也可以用于表示一个完整的配置文件内容(例如:server.xml=<?xml...>)。

典型用法如下:

  • 生成容器的环境变量
  • 设置容器启动命令的启动参数(需要设置为环境变量)
  • 以Volume的形式挂载为容器内部的文件或目录

下面展示将两个配置文件(server.xmllogging.properties)定义为ConfigMap的用法,设置key为配置文件的别名,value则是配置文件的全部文本内容:

apiVersion: v1
kind: ConfigMap
metadata: 
name: cm-appconfigfiles 
data: 
  key-serverxml: |
    <?xml version='1.0'encoding='utf-8'?>
      .......此处省略内容
  key-loggingproperties: 
    "handlers=catalina.org.apache.juli ......此处省略内容"

接着使用kubectl命令创建该ConfigMap:

$ kubectl create -f cm-appconfigfiles.yaml 
configmap "cm-appconfigfiles" created

然在Pod “cm-test-app” 的定义中,将ConfigMap “cm-appconfigfiles”中的内容以文件的形式挂载到容器内部的/configfiles目录下,Pod配置文件cm-test-app.yaml的内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-app
spec:
  containers:
  - name: cm-test-app
    image: kubeguide/tomcat-app:v1
    ports:
    - containerPort: 8080
    volumeMounts: 
    - name: serverxml  #引用Volume的名称
      mountPath: /configfiles #挂载到容器内的目录
  volumes:
  - name: serverxml #定义Volume的名称
    configMap:
      name: cm-appconfigfiles #使用ConfigMap"cm-appconfigfiles"
      items:
      - key: key-serverxml  # key=key-serverxml
        path: server.xml  #value将server.ml文件名进行挂载
      - key: key-loggingproperties # key=key-loggingproperties
        path: logging.properties  #value将logging,properties文件名进行挂载

创建完该Pod之后,登录容器,查看到在**/configfiles目录下存在server.xmllogging.properties文件,他们的内容就是ConigMap “cm-appconfigfiles”** 中两个key定义的内容:

2.4 容器获取pod信息(Downward API)

详情参考:《k8s教程(pod篇)-容器获取pod信息(Downward API)》

Downward API可以通过以下两种方式将Pod和容器的元数据信息注入容器内部:

  • 环境变量:将Pod或Container信息设置为容器内的环境变量;
  • Volume挂载:将Pod或Container信息以文件的形式挂载到容器内部。

下面仅举例通过Downward API将Pod的 IP、名称和所在命名空间注入容器的环境变量中(通过Volume挂载的方式可以看原文):

apiVersion: v1
kind: Pod
metadata: 
  name: dapi-envars-fieldref
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["sh","-c"]
    args:
    - while true;do
      echo -en '\n';
      printenv MY NODE NAME MY POD NAME MY POD NAMESPACE; 
      printenv MY POD IP MY POD SERVICE ACCOUNT; 
      sleep 10; 
    done;
  env:
  - name: MY NODE NAME 
    valueFrom:
      fieldRef:
        fieldPath: spec.nodeName 
  - name: MY POD NAME 
    valueFrom:
      fieldRef:
        fieldPath: metadata.name 
  - name: MY POD NAMESPACE 
    valueFrom:
      fieldRef:
        fieldPath: metadata.namespace
  - name: MY POD IP 
    valueFrom:
      fieldRef:
        fieldPath: status.podIP 
  - name: MY POD SERVICE ACCOUNT 
    valueFrom:
      fieldRef:
        fieldPath: spec.serviceAccountName
  restartPolicy: Never

yaml设置的环境变量有:

  • spec.nodeName:Pod所在Node的名称;
  • metadata.name:Pod名称;
  • metadata.namespace:Pod所在命名空间的名称;
  • status.podIP:Pod的IP地址;
  • spec.serviceAccountName:Pod使用的ServiceAccount名称。

使用命令创建pod之后,进入容器,可以看到环境变量的配置了:

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
JSON Kubernetes Shell
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
|
2月前
|
Kubernetes Shell Perl
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
|
8天前
|
Kubernetes Docker Python
dockercompose与k8s的pod文件的爱恨情仇
dockercompose与k8s的pod文件的爱恨情仇
|
2月前
|
Kubernetes Docker Perl
在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
|
2月前
|
Kubernetes 安全 Docker
在K8S中,在服务上线的时候Pod起不来怎么进行排查?
在K8S中,在服务上线的时候Pod起不来怎么进行排查?
|
2月前
|
存储 Kubernetes 调度
在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
|
2月前
|
消息中间件 Kubernetes 容器
在K8S中,同⼀个Pod的不同容器互相可以访问是怎么做到的?
在K8S中,同⼀个Pod的不同容器互相可以访问是怎么做到的?
|
2天前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
6天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
1月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
181 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
下一篇
无影云桌面