本文主要参考了以下几篇文章,将一些基础的概念整理了一下
# Kubernetes 架构
# Kubernetes 指南
# 不完美的 K8S 与阿里的解决之道
上一篇对 Kubernetes 的基础架构整理了一下,这篇主要讲 Pod,其他 Api Server、Controller Manager、Scheduler、Kubelet 的原理这里不提及:
- Pod 的介绍
- Pod 的相关命令
- Pod 的定义文件
- 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 中容器的运行方式
-
只运行一个单独的容器
即
one-container-per-Pod
模式,是最常用的模式,可以把这样的 Pod 看成单独的一个容器去管理。 -
运行多个强关联的容器
即
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:容器应用的配置管理
使用场景:
- 生成为容器内的环境变量。
- 设置容器启动命令的启动参数(需设置为环境变量)。
- 以 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
点到为止,不过度深入,想再了解可以看下开头提到的三篇文章
看到文章的最好进博客看文章哦,体验应该是最好的
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于