Kubernetes 核心原理 --- Pod

本贴最后更新于 1736 天前,其中的信息可能已经天翻地覆

本文主要参考了以下几篇文章,将一些基础的概念整理了一下

# Kubernetes 架构
# Kubernetes 指南
# 不完美的 K8S 与阿里的解决之道

上一篇对 Kubernetes 的基础架构整理了一下,这篇主要讲 Pod,其他 Api Server、Controller Manager、Scheduler、Kubelet 的原理这里不提及:

  1. Pod 的介绍
  2. Pod 的相关命令
  3. Pod 的定义文件
  4. Pod 的配置管理

1. Pod 的介绍:

1.1. Pod 的概念

  • Pod 是 kubernetes 集群中最小的部署和管理的 基本单元,协同寻址,协同调度。
  • Pod 是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合。
  • Pod 中可以共享网络和存储(可以简单理解为一个逻辑上的虚拟机,但并不是虚拟机)。
  • Pod 被创建后用一个 UID 来唯一标识,当 Pod 生命周期结束,被一个等价 Pod 替代,UID 将重新生成。

1.2. Pod 的概念

  • Docker 是目前 Pod 最常用的容器环境,但仍支持其他容器环境。
  • Pod 是一组被模块化的拥有共享命名空间和共享存储卷的容器,但并没有共享 PID 命名空间(即同个 Pod 的不同容器中进程的 PID 是独立的,互相看不到非自己容器的进程)。

1.3 . Pod 中容器的运行方式

  1. 只运行一个单独的容器

    one-container-per-Pod 模式,是最常用的模式,可以把这样的 Pod 看成单独的一个容器去管理。

  2. 运行多个强关联的容器

    sidecar 模式,Pod 封装了一组紧耦合、共享资源、协同寻址的容器,将这组容器作为一个管理单元。

2. Pod 的相关命令:

操作 命令
创建 kubectl create -f frontend-localredis-pod.yaml
查询 Pod 运行状态 kubectl get pods -n <NAMESPACE>
查询 Pod 详情 kebectl describe pod <POD_NAME> -n <NAMESPACE>
删除 kubectl delete pod <POD_NAME> 、kubectl delete pod --all
更新 kubectl replace pod.yaml

3. Pod 的定义文件:

apiVersion: v1
kind: Pod
metadata:
  name: string
  namaspace: string
  labels:
  - name: string
      annotations:
  - name: string
  spec:
    containers:
  - name: string
    images: string
    imagePullPolice: [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: int
        host: string
        scheme: string
        httpHeaders:
        - name: string
          value: string
          tcpSocket:
            port: int
          initialDelaySeconds: number
          timeoutSeconds: number
          periodSeconds: number
          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

4. Pod 的配置管理

4.1. ConfigMap:容器应用的配置管理

使用场景:

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

4.2. 创建 ConfigMap

cm-appvars.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appvars
data:
  apploglevel: info
  appdatadir: /var/data

常用命令

kubectl create -f cm-appvars.yaml

kubectl get configmap

kubectl describe configmap cm-appvars

kubectl get configmap cm-appvars -o yaml

可以通过yaml配置文件或者使用kubectl create configmap命令的方式创建ConfigMap。

4.3. ConfigMap 和 Pod 关联

ConfigMap 的 yaml 文件:cm-appvars.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appvars
data:
  apploglevel: info
  appdatadir: /var/data

Pod 的 yaml 文件:cm-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cm-test
    image: busybox
    command: ["/bin/sh","-c","env|grep APP"]
    env:
    - name: APPLOGLEVEL
      valueFrom:
        configMapKeyRef:
          name: cm-appvars
          key: apploglevel
    - name: APPDATADIR
      valueFrom:
        configMapKeyRef:
          name: cm-appvars
          key: appdatadir

创建命令:

kubectl create -f cm-test-pod.yaml

kubectl get pods --show-all

kubectl logs cm-test-pod

点到为止,不过度深入,想再了解可以看下开头提到的三篇文章

看到文章的最好进博客看文章哦,体验应该是最好的

  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...