2024年Go最全K8S Pod详解(1),Golang自学

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

9.创建Pod流程

master节点

  • 首先创建一个pod,会进入到API Server 进行创建,之后通过API Server 将pod信息存储在 Etcd中
  • 在Etcd存储完成后,Etcd将存储结果返回给API Server,告诉它,我已经存储成功
  • 然后是Scheduler,监控API Server是否有新的Pod,如果有的话,先是通过API server读取存储在Etcd的pod信息,之后会通过调度算法,把pod调度某个node上

node节点

  • 在node节点,会通过 kubelet – apiserver 读取etcd 拿到分配在当前node节点上的pod,然后通过docker创建容器
  • 创建成功后 ,会将创建结果返回给Kubectl ,通过Kubectl 更新API Server的Pod状态,之后通过API Server更新etc存储状态
  • 更新后,Etcd返回给API Server,之后通过API Server 返回给Kubectl
    在这里插入图片描述

10.影响Pod调度的属性

10.1.Pod资源限制对Pod的调度会有影响,这个之前已经提到,不再赘述
10.2.节点选择器标签影响Pod调度


关于节点选择器,其实就是有两个环境,然后环境之间所用的资源配置不同在这里插入图片描述

以通过以下命令,给我们的节点新增标签,然后节点选择器就会进行调度了

[root@localhost manifests]# kubectl get nodes k8s-node1 --show-labels
NAME        STATUS   ROLES    AGE    VERSION   LABELS
k8s-node1   Ready    <none>   6h6m   v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
[root@localhost manifests]# kubectl label node  k8s-node1 env_role=dev
node/k8s-node1 labeled
[root@localhost manifests]# kubectl get nodes k8s-node1 --show-labels
NAME        STATUS   ROLES    AGE    VERSION   LABELS
k8s-node1   Ready    <none>   6h8m   v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env_role=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux


10.3.节点亲和性

节点亲和性 nodeAffinity 和 之前nodeSelector 基本一样的,根据节点上标签约束来决定Pod调度到哪些节点上

  • 硬亲和性:约束条件必须满足
  • 软亲和性:尝试满足,不保证
    支持常用操作符:in、NotIn、Exists、Gt、Lt、DoesNotExists

反亲和性:就是和亲和性刚刚相反,如 NotIn、DoesNotExists等
在这里插入图片描述

10.4. 污点和污点容忍
  • nodeSelector 和 NodeAffinity,都是Prod调度到某些节点上,属于Pod的属性,是在调度的时候实现的。
  • Taint 污点:节点不做普通分配调度,是节点属性
场景
  • 专用节点【限制ip】
  • 配置特定硬件的节点【固态硬盘】
  • 基于Taint驱逐【在node1不放,在node2放】
污点相关命令

查看污点情况

kubectl describe node k8smaster | grep Taint

删除污点

kubectl taint node k8snode1 env_role:NoSchedule-

未节点添加污点
kubectl taint node [node] key=value:污点的三个值

kubectl taint node k8snode1 env\_role=yes:NoSchedule

污点值类型
  • NoSchedule:一定不被调度
  • PreferNoSchedule:尽量不被调度【也有被调度的几率】
  • NoExecute:不会调度,并且还会驱逐Node已有Pod
污点容忍

就是某个节点可能被调度,也可能不被调度
在这里插入图片描述

演示例子

正常情况下,node1,node2是都有的

[root@localhost ~]#  kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           6h3m
[root@localhost ~]# kubectl scale deployment nginx --replicas=5
deployment.apps/nginx scaled
[root@localhost ~]# kubectl get pod  -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP           NODE        NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-9gdz2   1/1     Running   0          14s    10.244.1.4   k8s-node1   <none>           <none>
nginx-6799fc88d8-ct4v9   1/1     Running   0          14s    10.244.2.4   k8s-node2   <none>           <none>
nginx-6799fc88d8-dfcrn   1/1     Running   0          14s    10.244.2.3   k8s-node2   <none>           <none>
nginx-6799fc88d8-n692z   1/1     Running   0          6h6m   10.244.1.3   k8s-node1   <none>           <none>
nginx-6799fc88d8-r6dp6   1/1     Running   0          14s    10.244.1.5   k8s-node1   <none>           <none>
[root@localhost ~]#


[root@localhost ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@localhost ~]# kubectl get deployment
No resources found in default namespace.

对node1添加污点,类型为一定不会调度NoSchedule,发现创建pod后,pod运行节点只有node2

[root@localhost ~]# kubectl taint node k8s-node1 env_role=yes:NoSchedule
node/k8s-node1 tainted
[root@localhost ~]# kubectl create deployment web --image=nginx
deployment.apps/web created
[root@localhost ~]# kubectl get pod  -o wide
NAME                  READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
web-96d5df5c8-276vj   1/1     Running   0          8s    10.244.2.5   k8s-node2   <none>           <none>
[root@localhost ~]# kubectl scale deployment nginx --replicas=5
Error from server (NotFound): deployments.apps "nginx" not found
[root@localhost ~]# kubectl scale deployment web --replicas=5
deployment.apps/web scaled
[root@localhost ~]# kubectl get pod  -o wide
NAME                  READY   STATUS              RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
web-96d5df5c8-276vj   1/1     Running             0          30s   10.244.2.5   k8s-node2   <none>           <none>
web-96d5df5c8-8b4gz   0/1     ContainerCreating   0          3s    <none>       k8s-node2   <none>           <none>
web-96d5df5c8-n5cg2   1/1     Running             0          3s    10.244.2.7   k8s-node2   <none>           <none>
web-96d5df5c8-qpb2q   1/1     Running             0          3s    10.244.2.6   k8s-node2   <none>           <none>
web-96d5df5c8-xdvkt   0/1     ContainerCreating   0          3s    <none>       k8s-node2   <none>           <none>


查看污点是否添加

[root@localhost ~]# kubectl describe node k8s-node1 | grep Taint
Taints:             env_role=yes:NoSchedule

删除污点,之后扩容发现可以调度到节点node1了

[root@localhost ~]# kubectl taint node k8s-node1 env_role:NoSchedule-
node/k8s-node1 untainted
[root@localhost ~]# kubectl describe node k8s-node1 | grep Taint
Taints:             <none>
[root@localhost ~]# kubectl get pod  -o wide
NAME                  READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
web-96d5df5c8-276vj   1/1     Running   0          9m13s   10.244.2.5   k8s-node2   <none>           <none>
web-96d5df5c8-8b4gz   1/1     Running   0          8m46s   10.244.2.8   k8s-node2   <none>           <none>
web-96d5df5c8-n5cg2   1/1     Running   0          8m46s   10.244.2.7   k8s-node2   <none>           <none>
web-96d5df5c8-qpb2q   1/1     Running   0          8m46s   10.244.2.6   k8s-node2   <none>           <none>
web-96d5df5c8-xdvkt   1/1     Running   0          8m46s   10.244.2.9   k8s-node2   <none>           <none>
[root@localhost ~]# kubectl get pod  -o wide
NAME                  READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
web-96d5df5c8-276vj   1/1     Running   0          9m17s   10.244.2.5   k8s-node2   <none>           <none>
web-96d5df5c8-8b4gz   1/1     Running   0          8m50s   10.244.2.8   k8s-node2   <none>           <none>
web-96d5df5c8-n5cg2   1/1     Running   0          8m50s   10.244.2.7   k8s-node2   <none>           <none>
web-96d5df5c8-qpb2q   1/1     Running   0          8m50s   10.244.2.6   k8s-node2   <none>           <none>
web-96d5df5c8-xdvkt   1/1     Running   0          8m50s   10.244.2.9   k8s-node2   <none>           <none>
[root@localhost ~]# kubectl scale deployment web --replicas=7
deployment.apps/web scaled
[root@localhost ~]# kubectl get pod  -o wide
NAME                  READY   STATUS              RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
web-96d5df5c8-276vj   1/1     Running             0          9m33s   10.244.2.5   k8s-node2   <none>           <none>
web-96d5df5c8-8b4gz   1/1     Running             0          9m6s    10.244.2.8   k8s-node2   <none>           <none>
web-96d5df5c8-9zm59   0/1     ContainerCreating   0          3s      <none>       k8s-node1   <none>           <none>
web-96d5df5c8-b6mbj   0/1     ContainerCreating   0          3s      <none>       k8s-node1   <none>           <none>
web-96d5df5c8-n5cg2   1/1     Running             0          9m6s    10.244.2.7   k8s-node2   <none>           <none>
web-96d5df5c8-qpb2q   1/1     Running             0          9m6s    10.244.2.6   k8s-node2   <none>           <none>
web-96d5df5c8-xdvkt   1/1     Running             0          9m6s    10.244.2.9   k8s-node2   <none>           <none>



![img](https://img-blog.csdnimg.cn/img_convert/3756de1fc34a76bfd76609fd472168aa.png)
![img](https://img-blog.csdnimg.cn/img_convert/765139efc61d647afb54d947566b683d.png)
![img](https://img-blog.csdnimg.cn/img_convert/4333b0bf413584ecf54a4f8cd04811d9.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**


[外链图片转存中...(img-EI6QNSh0-1715704775631)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值