您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

K8s之Pod进阶

来源:网络整理 浏览:156次 时间:2020-08-09

注意此篇文章接上篇:K8s之Pod资源管理及创建Harbor私有镜像仓库
https://blog.51cto.com/14464303/2471369

一、资源限制:

pod和container的资源请求和限制:

spec.containers[].resources.limits.cpu #cpu上限

spec.containers[].resources.limits.memory #内存上限

spec.containers[].resources.requests.cpu #创建时分配的基本cpu资源

spec.containers[].resources.requests.memory #创建时分配的基本内存资源

示例(在master1上操作):
[root@master1 demo]# vim pod2.yamlapiVersion: v1kind: Podmetadata:  name: frontend        #Pod资源的名称spec:  containers:  - name: db        #容器1的名称    image: mysql    env:    - name: MYSQL_ROOT_PASSWORD      value: "password"    resources:      requests:        memory: "64Mi"        cpu: "250m"      limits:        memory: "128Mi"        cpu: "500m"  - name: wp        #容器2的名称    image: wordpress    resources:      requests:        memory: "64Mi"        cpu: "250m"      limits:        memory: "128Mi"        cpu: "500m"#插入完成后,按Esc退出插入模式,输入:wq保存退出`创建资源`[root@master1 demo]# kubectl apply -f pod2.yamlpod/frontend created`查看资源详细信息`[root@master1 demo]# kubectl describe pod frontendName:               frontendNamespace:          defaultPriority:           0PriorityClassName:  <none>Node:               192.168.18.148/192.168.18.148       #被分配到的节点为node1......此处省略多行Events:  Type    Reason     Age   From                     Message  ----    ------     ----  ----                     -------  Normal  Scheduled  89s   default-scheduler        Successfully assigned default/frontend to 192.168.18.148  Normal  Pulling    88s   kubelet, 192.168.18.148  pulling image "mysql"  Normal  Pulled     23s   kubelet, 192.168.18.148  Successfully pulled image "mysql"  Normal  Created    23s   kubelet, 192.168.18.148  Created container  Normal  Started    22s   kubelet, 192.168.18.148  Started container  Normal  Pulling    22s   kubelet, 192.168.18.148  pulling image "wordpress"       #处于镜像拉取wordpress状态[root@master1 demo]# kubectl get podsNAME                                READY   STATUS    RESTARTS   AGEfrontend                            2/2     Running   0          4m26s#此时两个容器就会处于Running运行状态`查看对应节点上Pod资源的占用情况`[root@master1 demo]# kubectl describe nodes 192.168.18.148Name:               192.168.18.148......此处省略多行Allocated resources:  (Total limits may be over 100 percent, i.e., overcommitted.)  Resource  Requests     Limits  --------  --------     ------  cpu       550m (55%)   1100m (110%)       #核心资源  memory    228Mi (13%)  556Mi (32%)        #上限资源`查看命名空间`[root@master1 demo]# kubectl get nsNAME          STATUS   AGEdefault       Active   13dkube-public   Active   13dkube-system   Active   13d#只要不用-n指定,出现的就是默认的这三个

二、重启策略:

1:Always:当容器终止推出后,总是重启容器,默认策略

2:Onfailure:当容器异常退出(退出码为非0)时,重启容器

3:Never:当容器终止退出,从不重启资源

注意:k8s中不支持重启pod资源,只有删除重建

示例(在master1上操作):
`默认的重启策略是Always`[root@master1 demo]# kubectl edit deploy#输入/restartPolicy查找restartPolicy: Always       #没有设定重启策略时默认为Always[root@master1 demo]# vim pod3.yamlapiVersion: v1kind: Podmetadata:  name: foospec:  containers:  - name: busybox    image: busybox    args:       #参数    - /bin/sh   #在shell环境中    - -c        #command命令    - sleep 30; exit 3      #容器启动后休眠30s,异常退出返回状态码为非0值#插入完成后,按Esc退出插入模式,输入:wq保存退出[root@master1 demo]# kubectl apply -f pod3.yamlpod/foo created[root@master1 demo]# kubectl get podsNAME                                READY   STATUS              RESTARTS   AGEfoo                                 0/1     ContainerCreating   0          18s#其中有RESTARTS重启值,此时为0[root@master1 demo]# kubectl get podsNAME                                READY   STATUS    RESTARTS   AGEfoo                                 0/1     Error     0          62s#此时出现Error报错,因为我i们刚刚设置的异常退出,一会再查看时RESTARTS重启值会变为1、`这个就是依照其中的重启策略去执行的`[root@master1 demo]# kubectl get podsNAME                                READY   STATUS    RESTARTS   AGEfoo                                 1/1     Running   1          3m13s`先删除之前创建的资源,因为会占用`[root@master1 demo]# kubectl delete -f pod3.yamlpod "foo" deleted[root@master1 demo]# kubectl delete -f pod2.yamlpod "frontend" deleted`添加重启策略Never`[root@master1 demo]# vim pod3.yamlapiVersion: v1kind: Podmetadata:  name: foospec:  containers:  - name: busybox    image: busybox    args:    - /bin/sh    - -c    - sleep 10              #修改休眠时间为10s  restartPolicy: Never      #添加重启策略#修改完成后,按Esc退出插入模式,输入:wq保存退出[root@master1 demo]# kubectl apply -f pod3.yamlpod/foo created[root@master1 demo]# kubectl get podsNAME                                READY   STATUS    RESTARTS   AGEfoo                                 1/1     Running   0          14s[root@master1 demo]# kubectl get podsNAME                                READY   STATUS      RESTARTS   AGEfoo                                 0/1     Completed   0          65s#此时资源创建完成,不需要使用的状态下会自动休眠,因为之间添加了重启策略,所以不会进行重启

三、健康检查:又称为探针(Probe)注意:规则可以同时定义

livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作

ReadinessProbe 如果检查失败,kubernetes会把Pod从service endpoints后端节点中中剔除

Probe支持三种检查方法:

httpGet 发送http请求,返回200-400范围状态码为成功

exec 执行Shell命令返回状态码是0为成功

tcpSocket 发起TCP Socket建立成功

示例exec方式(在master1上操作):
[root@master1 demo]# vim pod4.yamlapiVersion: v1kind: Podmetadata:  labels:    test: liveness  name: liveness-execspec:  containers:  - name: liveness    image: busybox    args:    - /bin/sh    - -c    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy     #创建一个空文件,休眠30s,删除这个空文件    livenessProbe:        exec:     #探测健康        command:    #command命令        - cat       #执行查看        - /tmp/healthy      #创建的空文件      initialDelaySeconds: 5    #容器创建完成5秒之后开始健康检查      periodSeconds: 5          #检查的间隔频率为5秒`休眠之前检查状态返回值为0,30秒休眠结束之后再检查,因为没有这个文件了就会返回非0值``刷新资源`[root@master1 demo]# kubectl apply -f pod4.yamlpod/liveness-exec created[root@master1 demo]# kubectl get podsNAME                                READY   STATUS      RESTARTS   AGEliveness-exec                       1/1     Running     0          24s[root@master1 demo]# kubectl get podsNAME                                READY   STATUS      RESTARTS   AGEliveness-exec                       0/1     Completed   0          53s[root@master1 demo]# kubectl get podsNAME                                READY   STATUS      RESTARTS   AGEliveness-exec                       1/1     Running     1          67s[root@master1 demo]# kubectl get podsNAME                                READY   STATUS             RESTARTS   AGEliveness-exec                       0/1     CrashLoopBackOff   1          109s[root@master1 demo]# kubectl get podsNAME                                READY   STATUS      RESTARTS   AGEliveness-exec                       1/1     Running     2          2m5s#当中状态不断改变,就代表它正在不断的进行检查,然后不断的执行重启策略,其中的RESTARTS重启值也会随之增加

推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com