一、Pod 概念了解
- 最小部署单元
- 一组容器的集合
- 一个 Pod 中的容器共享网络命名空间
- Pod 是短暂的
二、Pod 存在的意义
Pod 为亲密性应用而存在
亲密性应用场景;
- 两个应用之间发生文件交互
- 两个应用需要通过 127.0.0.1 或者 socket 通信(典型组合:nginx+php)
- 两个应用需要发生频繁的调用
三、容器的分类
- Infrastructure Container:基础容器:维护整个 Pod 网络空间
- InitContainers:初始化容器:先于业务容器开始执行
- Containers:业务容器:并行启动
四、Init Container
- 基本支持所有普通容器特征
- 优先普通容器执行
应用场景:
- 控制普通容器启动(例如检测 db 是否启动来控制 web 的启动)
- 初始化配置:
a. 生成主应用程序配置文件
b. 从 git 拉取代码让主业务容器使用
c. 根据指定环境修改应用配置文件,例如连接的数据库
init 产生的初始化配置,也是需要借助 网络命名空间
或者 文件系统
让主业务容器去使用
yaml 示例:
apiVersion: v1
kind: Pod
metadata:
name: init-demo
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
initContainers:
- name: install
image: busybox
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://kubernetes.io
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
可以在空卷的挂载目录下查看到 index.html 内容。
五、静态 Pod
静态 Pod 指的是固定在某个 Node 上,有 kubelet 管理生成的一种 Pod
静态 Pod 的工作目录:/etc/kubernetes/manifests/
,里面默认有 etcd.yaml
, kube-apiserver.yaml
,kube-controller-manager.yaml
,kube-scheduler.yaml
这几个 pod,若想在某个节点上跑静态 pod,只需要在该 node 节点上的静态 pod 工作目录下放 yaml 文件即可,若想删除该静态 pod,则需要删除静态 pod 工作目录下的 yaml 即可。静态 pod 运行的名称后面就会跟有节点名称:
若想更改工作目录,则需要去 /var/lib/kubelet/config.yaml
修改配置,将 staticPodPath
后面的路径改为其他,重启 kubelet 服务即可生效
静态 pod 特点:
- 由特定节点上 kubelet 管理
- 没有任何控制器
- pod 挂了,kubelet 自动拉起
- kubelet 定期检查 staticPodPath 状态
yaml 示例:
apiVersion: v1
kind: Pod
metadata:
name: static-pod
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于