kubernetes的Pod
2020-12-19 14:35
标签:常用 tor http请求 replicas 容器 lin 使用命令 数据卷 需要 容器本身之间相互隔离的,一般是通过 namespace 和 group进行隔离,那么Pod里面的容器如何实现通信? 关于Pod实现原理,首先会在Pod会创建一个根容器: 而在 完整步骤如下 Pod持久化数据,专门存储到某个地方中 使用 Volumn数据卷进行共享存储,案例如下所示 我们以具体实例来说,拉取策略就是 拉取策略主要分为了以下几种 也就是我们Pod在进行调度的时候,可以对调度的资源进行限制,例如我们限制 Pod调度是使用的资源是 2c4g,那么在调度对应的node节点时,只会占用对应的资源,对于不满足资源的节点,将不会进行调度 我们在下面的地方进行资源的限制 这里分了两个部分 因为Pod中包含了很多个容器,假设某个容器初选问题了,那么就会触发Pod重启机制 重启策略主要分为以下三种 通过容器检查,原来我们使用下面的命令来检查 但是有的时候,程序可能出现了java堆内存溢出,程序还在运行,但是不能对外提供服务了,这个时候就不能通过 容器检查来判断服务是否可用了 这个时候就可以使用应用层面的检查 Probe支持以下三种检查方式 Pod资源限制对Pod的调度会有影响 关于节点选择器,其实就是有两个环境,然后环境之间所用的资源配置不同 我们可以通过以下命令,给我们的节点新增标签,然后节点选择器就会进行调度了 节点亲和性 nodeAffinity 和 之前nodeSelector 基本一样的,根据节点上标签约束来决定Pod调度到哪些节点上 支持常用操作符:in、NotIn、Exists、Gt、Lt、DoesNotExists 反亲和性:就是和亲和性刚刚相反,如 NotIn、DoesNotExists等 nodeSelector 和 NodeAffinity,都是Prod调度到某些节点上,属于Pod的属性,是在调度的时候实现的。 Taint 污点:节点不做普通分配调度,是节点属性 污点值有三个 举例: 我们现在创建多个Pod,查看最后分配到Node上的情况 首先我们创建一个 nginx 的pod 然后使用命令查看 我们可以非常明显的看到,这个Pod已经被分配到 k8snode1 节点上了 下面我们把pod复制5份,在查看情况pod情况 我们可以发现,因为master节点存在污点的情况,所以节点都被分配到了 node1 和 node2节点上 我们可以使用下面命令,把刚刚我们创建的pod都删除 现在给了更好的演示污点的用法,我们现在给 node1节点打上污点 然后我们查看污点是否成功添加 然后我们在创建一个 pod 然后我们在进行查看 我们能够看到现在所有的pod都被分配到了 k8snode2上,因为刚刚我们给node1节点设置了污点 最后我们可以删除刚刚添加的污点 污点容忍就是某个节点可能被调度,也可能不被调度 kubernetes的Pod 标签:常用 tor http请求 replicas 容器 lin 使用命令 数据卷 需要 原文地址:https://www.cnblogs.com/fat-girl-spring/p/14125246.html1、Pod基本概念
2、Pod存在意义
3、Pod实现机制
共享网络
pause容器
,然后我们在创建业务容器 【nginx,redis 等】,在我们创建业务容器的时候,会把它添加到 info容器
中info容器
中会独立出 ip地址,mac地址,port 等信息,然后实现网络的共享
共享存储
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: write
image: centos
command: ["bash","-c","for i in (1..100);do echo $i >> /data/hello;sleep 1;done"]
wolumeMounts:
- name: data
mountPath: /data
- name: read
image: centos
command: ["bash","-c","tail -f /data/hello"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
Pod镜像拉取策略
imagePullPolicy
Pod资源限制
示例
Pod重启机制
Pod健康检查
kubectl get pod
# 存活检查,如果检查失败,将杀死容器,根据Pod的restartPolicy【重启策略】来操作
livenessProbe
# 就绪检查,如果检查失败,Kubernetes会把Pod从Service endpoints中剔除
readinessProbe
Pod调度策略
创建Pod流程
kubelet -- apiserver
读取etcd 拿到分配在当前node节点上的pod,然后通过docker创建容器影响Pod调度的属性
根据request找到足够node节点进行调度
节点选择器标签影响Pod调度
kubectl label node node1 env_role=prod
节点亲和性
污点和污点容忍
概述
场景
查看污点情况
kubectl describe node k8smaster | grep Taint
未节点添加污点
kubectl taint node [node] key=value:污点的三个值
kubectl taint node k8snode1 env_role=yes:NoSchedule
删除污点
kubectl taint node k8snode1 env_role:NoSchedule-
演示
kubectl create deployment web --image=nginx
kubectl get pods -o wide
kubectl scale deployment web --replicas=5
kubectl delete deployment web
kubectl taint node k8snode1 env_role=yes:NoSchedule
kubectl describe node k8snode1 | grep Taint
# 创建nginx pod
kubectl create deployment web --image=nginx
# 复制五次
kubectl scale deployment web --replicas=5
kubectl get pods -o wide
kubectl taint node k8snode1 env_role:NoSchedule-
污点容忍