【云原生】k8sPod基础概念
pod基础概念
k8sPod基础概念
一、Pod概述
1、pod概念
Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。
2、Pod资源限制
Pod 是 kubernetes 中最小的资源管理组件,Pod 也是最小化运行容器化应用的资源对象。一个 Pod 代表着集群中运行的一个进程。kubernetes 中其他大多数组件都是围绕着 Pod 来进行支撑和扩展 Pod 功能的,例如用于管理 Pod 运行的 StatefulSet 和 Deployment 等控制器对象,用于暴露 Pod 应用的 Service 和 Ingress 对象,为 Pod 提供存储的 PersistentVolume 存储资源对象等。
二、Pod的两种使用方式
-
一个 Pod 中运行一个容器:每个 Pod 中一个容器的模式是最常见的用法,在这种使用方式中,你可以把 Pod想象成是单个容器的封装,kubernetes 管理的是 Pod 而不是直接管理容器。
-
在一个 Pod 中同时运行多个容器:一个 Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个 Pod 中的容器可以互相协作成为一个 service单位,比如一个容器共享文件,另一个 sidecar 容器来更新这些文件。Pod 将这些容器的存储资源作为一个实体来管理。
三、资源共享
在Kubernetes中,Pod中的所有容器都运行在同一个网络命名空间中,它们可以通过localhost相互通信。此外,它们还可以共享相同的存储卷和配置。如果多个容器需要共享一些资源,可以将这些资源作为一个卷挂载到Pod中,然后在每个容器中使用相同的卷路径来访问这些资源。这样,每个容器都可以读取和写入这些共享资源。
1、创建Pod的方式
(1)自主式/静态pod:不被控制器管理的pod是没有自愈能力,一旦pod挂掉了不会被重新拉起,而且副本的数量也不会因为达不到期望值而在创建新的pod。
(2)控制管理器的pod:被控制器管理的pod有自愈能力,一旦挂掉了会被重新拉起而且副本的数量会因为达不到期望值而创建新的pod。
2、Pod功能
(1)给pod中的所有应用容器提供网络(共享IP 端口)和存储(共享存储)资源的共享。
(2)作为 pid=1的进程(init进程)来管理整个pod中容器组的生命周期。
四、底层容器Pause
1、Pause共享资源
网络:每个Pod都会被分配一个唯一的IP地址。Pod中的所有容器共享网络空间,包括IP地址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。
存储:Pod可以指定多个共享的Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。
小结:每个Pod都有一个特殊的被称为“基础容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户应用容器。
2、Pause主要功能
kubernetes 中的 pause 容器主要为每个容器提供以下功能:
(1)在 pod 中担任 Linux 命名空间(如网络命令空间)共享的基础。
(2)启用 PID 命名空间,开启 init 进程。
3、Pod与Pause结构设计用意
Kubernetes设计这样的Pod概念和特殊组成结构有什么用意?
●原因一:在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。比如,一个容器死亡了,此时是算整体挂了么?那么引入与业务无关的Pause容器作为Pod的基础容器,以它的状态代表着整个容器组的状态,这样就可以解决该问题。
●原因二:Pod里的多个应用容器共享Pause容器的IP,共享Pause容器挂载的Volume,这样简化了应用容器之间的通信问题,也解决了容器之间的文件共享问题。
五、镜像的拉取策略
1、Pod容器镜像拉取策略
(1)ifNotpresent:优先使用本地已存在的镜像,如本地没有则从仓库拉取镜像。
(2)Always:无论本地是否已经存在镜像,从仓库拉取镜像。
(3)Nerver:仅使用本地镜像,不从仓库拉取镜像。
例:
image:nginx:latest 镜像的标签为:latest或者无标签时,默认的镜像拉取策略Always
image:nginx: 1.14 镜像的标签为非latest时,默认的镜像拉取策略为ifNotPresent
2、Pod重启策略
当pod中的容器退出时通过节点上的kubelet重启容器,适用于pod中的所有容器。
(1)Always:当容器终止退出后,总是重启容器 默认策略 。
(2)OnFailure:当容器异常退出(退出状态码非0)时,重启容器,正常退出则不重启容器。
(3)Nerver:当容器终止退出,从不重启容器。
注:k8s中不支持重启pod资源,只有删除重建。
六、容器的分类
1、基础容器(infrastructure container)
给pod中的所有应用容器提供网络和存储资源的共享,进程init进程,来管理整个pod中容器组的生命周期。
- 维护整个 Pod 网络和存储空间
- node 节点中操作
- 启动一个容器时,k8s会自动启动一个基础容器
2、初始化容器(init container)
阻塞或者延迟应用容器的启动,可以为应用容器事先准备运行环境和工具,多个init是容器串行启动,每个init必须在下一个init容器启动前完成启动和退出。
- Init 容器总是运行到成功完成为止
- 每个 Init 容器都必须在下一个 Init 容器启动之前成功完成启动和退出
如果 Pod 的 init 容器失败,k8s 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的重启策略(restartPolicy)为 Never,它不会重新启动。
3、应用容器(main container)
在所有的init容器启动和退出后应用容器才会启动。并行启动的,提供应用程序的业务。
七、部署Harbor 创建私有项目
在 Docker harbor 节点操作
1、关闭防火墙 核心防护
[root@localhost ~]#systemctl disable --now firewalld
[root@localhost ~]#setenforce 0
2、安装Docker及依赖环境
[root@Harbor ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
[root@Harbor ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@Harbor ~]#yum install -y docker-ce docker-ce-cli containerd.io
[root@Harbor ~]#systemctl start docker.service
[root@Harbor ~]#systemctl enable docker.service
3、上传所需包到/opt目录下
[root@Harbor opt]#mv docker-compose /usr/local/bin/
[root@Harbor opt]#cd /usr/local/bin/
4、部署Harbor服务
[root@Harbor opt]#tar zxf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
[root@Harbor opt]#vim /usr/local/harbor/harbor.cfg
[root@Harbor opt]#cd /usr/local/harbor/
[root@Harbor harbor]#./install.sh
5、在浏览器进行登录创建项目
登录 Harbor WEB UI 界面,输入用户名和密码登录界面后可以创建一个新项目。点击 + 项目按钮
八、配置node节点连接私有仓库
1、修改配置文件
[root@node01 ~]# vim /etc/docker/daemon.json
[root@node01 ~]# systemctl daemon-reload
[root@node01 ~]# systemctl restart docker #将改好的node1配置远程输入给node2即可
[root@node02 ~]#systemctl daemon-reload
[root@node02 ~]#systemctl restart docker
2、在每个node节点登录harbor私有仓库
[root@node01 ~]# docker login -u admin -p Harbor12345 http://192.168.10.135
3、在一个node节点下载Tomcat镜像
[root@node02 ~]#docker pull tomcat:8.0.52
[root@node02 ~]#docker images
[root@node02 ~]#docker tag tomcat:8.0.52 192.168.10.135/my-project/tomcat:v1
[root@node02 ~]#docker images
[root@node02 ~]#docker push 192.168.10.135/my-project/tomcat:v1
4、查看登录凭据
[root@node02 ~]#cat /root/.docker/config.json | base64 -w 0
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEzNSI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0KfQ==
#base64 -w 0:进行 base64 加密并禁止自动换行
[root@node02 ~]#
5、创建 harbor 登录凭据资源清单
在master节点用于 K8S 访问 Harbor 私服拉取镜像所需要的密钥权限凭证 secret 资源
[root@master01 ~]#vim harbor-pull-secret.yaml
6、创建secret资源
[root@master01 ~]#kubectl create -f harbor-pull-secret.yaml
7、查看secret资源
[root@master01 ~]#kubectl get secret
九、创建资源从Harbor中下载镜像
1、切换到/opt目录进行配置
[root@master01]# cd /opt/demo
[root@master01 demo]#vim tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-tomcat
spec:
replicas: 2
selector:
matchLabels:
app: my-tomcat
template:
metadata:
labels:
app: my-tomcat
spec:
imagePullSecrets: #添加 K8S 访问 Harbor 私服拉取镜像所需要的 secret 资源选项
- name: harbor-pull-secret #指定 secret 资源名称
containers:
- name: my-tomcat
image: 192.168.10.135/my-project/tomcat:v1 #指定 harbor 中的镜像名
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-tomcat
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 31111
selector:
app: my-tomcat
#保存退出
2、删除之前在 node 节点下载的 Tomcat 镜像
[root@node01 ~]# docker rmi tomcat:8.0.52
[root@node01 ~]# docker rmi 192.168.10.135/my-project/tomcat:v1
3、创建tomcat资源
[root@master01 demo]#kubectl create -f tomcat-deployment.yaml
deployment.apps/my-tomcat created
service/my-tomcat created
[root@master01 demo]#kubectl get pods
[root@master01 demo]#kubectl describe pod my-tomcat-6f4dfdcb6-c4t98
4、查看Harbor网页,可以看到下载次数
更多推荐
所有评论(0)