hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 容器技术

    • docker

    • k8s

      • rke包管理工具
        • 前期准备
          • 手动修改
          • 代码自动修改
          • 关闭防火墙和selinux
          • sed用法
          • 关闭swap
          • 时间同步
        • install docker
          • 配置docker yum源
          • install docker
          • 配置docker容器镜像加速器
        • install docker compose
        • add rancher user
        • 生成ssh证书用于部署集群
          • 验证ssh证书是否可用
        • install rke
        • init rke config.yaml
        • 集群部署
        • install kubectl
          • 让kubectl 访问到集群
        • 部署rancher管理k8s集群
          • 将本地集群添加到rancher
        • 集群节点更新
          • 添加worker节点
          • 添加/删除etcd节点
        • 部署nginx
        • 部署nginx-ingress
      • api对象
        • 创建对象的yaml文件
        • 通过yaml创建/更新对象
        • 更新yaml文件来更新对象
        • 给对象声明 volume
      • deployment
      • pod
        • pod 组成
        • 开发容器网络插件的注意点
        • 如何共享volume
      • service
        • 实战:如何用yaml编写service,kube-proxy
      • ingress集群的流量出入口
        • 为什么要有ingress
          • 路由访问角度
          • 负载角度
          • 小结
        • 为什么要有ingress controller
        • 为什么要有 ingress class
        • 如何用yaml编写ingress,ingress class
          • ingress.yml
          • 创建模板yaml
          • ingress-class.yml
        • 在k8s中使用ingress,ingress class
        • 在k8s中使用ingress controller
      • ingress controller实战
      • yml文件
        • pod
        • job/cronjob
          • job
          • cronjob
        • ConfigMap/Secret
          • ConfigMap
          • Secret
          • 如何使用/注入配置信息对象
          • Env
          • Volume
          • 总结
        • deployment
          • 应用伸缩,弹性扩容
        • DaemonSet
          • taint 污点
          • toleration 容忍度
          • 静态pod
        • service
          • 小改造
          • service的负载均衡方式
        • ingress
          • ingress controller
          • ingress yaml
          • ingress class
    • helm

    • rancher

    • prometheus

    • grafana

    • containerd

    • jenkins

  • 命令集合

  • 软路由

  • 容量保障技术

  • 运维
  • 容器技术
  • k8s
hincky
2022-10-12
目录

pod

# pod

是 Kubernetes 项目的原子调度单位,如果k8s是操作系统,那pod就是虚拟机。

下图是由pod发散的k8s重要 API 对象,比如配置信息 ConfigMap、离线作业 Job、多实例部署 Deployment 等等,它们都分别对应到现实中的各种实际运维需求

下面这个是更直观的pod为中心的k8s对象关系图

# pod 组成

pod里能运行多个容器,多个容器共享同一个网络,还可以声明共享同一个volume。

每个pod都运行一个Pause的基础容器,用作共享网络和挂载卷;其他容器都以业务容器,共享pause容器的网络和挂载。

# 开发容器网络插件的注意点

如果要为 Kubernetes 开发一个网络插件时,不是关注每一个用户容器如何使用你的网络配置,这是没有意义的。

应该重点考虑的是如何配置这个 Pod 的 Network Namespace。

如果你的网络插件需要在容器里安装某些包或者配置才能完成的话,是不可取的:Infra 容器镜像的 rootfs 里几乎什么都没有,没有你随意发挥的空间。

当然,这同时也意味着你的网络插件完全不必关心用户容器的启动与否,而只需要关注如何配置 Pod,也就是 Infra 容器的 Network Namespace 即可。

# 如何共享volume

Kubernetes 项目只要把所有 Volume 的定义都设计在 Pod 层级即可。

在Pod里面,定义所有的volume

一个 Volume 对应的宿主机目录对于 Pod 来说就只有一个,Pod 里的容器只要声明挂载这个 Volume,就一定可以共享这个 Volume 对应的宿主机目录

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:
  restartPolicy: Never
  volumes:
  - name: shared-data
    hostPath:      
      path: /data
  containers:
  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

这个pod里面有两个容器 debian-container 和 nginx-container

pod声明挂载了 shared-data 这个 hostPath 类型的Volume,hostPath对应在宿主机上的目录就是:/data

而两个容器都绑定挂载了 shared-data ,即nginx-container 的/usr/share/nginx/html 和debian-container 的/pod-data 实际是同一个目录

因此,nginx-container 可以从它的 /usr/share/nginx/html 目录中,读取到 debian-container 生成的 index.html 文件

编辑 (opens new window)
#k8s
deployment
service

← deployment service→

最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式