前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pod 资源对象

pod 资源对象

作者头像
小手冰凉
发布2020-09-09 05:28:13
6030
发布2020-09-09 05:28:13
举报
文章被收录于专栏:小手冰凉小手冰凉

Deployment、Service、Pod是k8s最核心的3个资源对象。

Deployment: 最常见的无状态应用的控制器,支持应用的扩缩容、滚动 更新等操作 。 Servcie: 为弹性变动且存在生命周期的Pod对象提供了一个固定的访问接 口,用于服务发现和服务访问。

Pod: 是运行容器以及调度的最小单位。同一个Pod可以同时运行多个容 器,这些容器共享NET、UTS、IPC。除此之外还有 USER、PID、MOUNT。

ReplicationController: 用于确保每个Pod副本在任意时刻都能满足目标 数量,简单点来说,它用于保证每个容器或容器组总是运行并且可以访问的: 老一代无状态的Pod应用控制器。

ReplicaSet: 新一代的无状态的Pod应用控制器,它与RC的不同之处在于 支持的标签选择器不同,RC只支持等值选择器,RS还额外支持基于集合的选择器。

StatefulSet: 用于管理有状态的持久化应用,如database服务程序,它与 Deployment不同之处在于,它会为每一个Pod创建一个独有的持久性标识 符,并确保每个Pod之间的顺序性。

DaemonSet: 用于确保每一个节点都运行了某个Pod的一个副本,新增的 节点一样会被添加此类Pod,在节点移除时,此类Pod会被回收。

Job: 用于管理运行完成后即可终止的应用,例如批量处理作业任务。

1、Namespace:名称空间

默认的名称空间: Default

代码语言:javascript
复制
#查看名称空间
[root@docker-k8s01 ~]# kubectl get ns
代码语言:javascript
复制
#查看名称空间详细信息
[root@docker-k8s01 ~]# kubectl describe ns default 
代码语言:javascript
复制
#创建名称空间
[root@docker-k8s01 ~]# cat test1.yaml 

apiVersion: v1
kind: Namespace
metadata:
  name: test1

[root@docker-k8s01 ~]# kubectl create ns test1.yaml

注:Namespace资源对象仅用于资源对象的隔离,并不能隔绝不同名称空间的Pod之间的通信,那是网络策略资源的功能。

查看指定名称空间的资源可以使用--namespace 或者简写 -n 选项也可以

代码语言:javascript
复制
#删除名称空间
[root@docker-k8s01 ~]# kubectl delete ns test1 

2、Pod

代码语言:javascript
复制
#编写例子yaml文件
[root@docker-k8s01 pod]# cat test-pod.yaml 
kind: pod
apiVersion: v1
metadata: 
  name: test-pod
spec: 
  containers: 
  - name: test-pod
    image: httpd

Pod中镜像获取策略

代码语言:javascript
复制
//将上述Pod资源的镜像下载策略改为IfNotPresent
[root@docker-k8s01 pod]# cat test-pod.yaml 
kind: pod
apiVersion: v1
metadata: 
  name: test-pod
spec: 
  containers: 
  - name: test-pod
    image: httpd
    imagepullpolicy: IfNotPresent               # 添加此行

# imagepullpolicy后可选参数如下:
Always:镜像标签为"latest"或镜像标签不存在时,总是从指定的仓库中获取镜像。
IfNotPresent:仅当本地镜像不存在时才从目标仓库中下载。也就意味 着,如果本地存在,直接使用本地镜像,无需再联网下载。
Never: 禁止从仓库中下载镜像,即只使用本地镜像。

注: 上述语句中提到的"本地"是指: docker images命令能够给查看到的镜像。

容器重启策略

代码语言:javascript
复制
//将上述Pod资源添加重启策略为OnFailure
[root@docker-k8s01 pod]# cat test-pod.yaml 
kind: pod
apiVersion: v1
metadata: 
  name: test-pod
spec: 
  restartpolicy: OnFailure            # 添加此行
  containers: 
  - name: test-pod
    image: httpd
    imagepullpolicy: IfNotPresent

#可选参数如下:
Always: 但凡Pod对象终止就将其重启,此为默认设定;
OnFailure:仅在Pod对象出现错误时才将其重启;
Never:从不重启;

附:同一个yaml文件内,可以同时存在多种资源对象,但最好是同一个服务相关的资源。并且在写的时候,不同的资源需要用“---” 将资源隔离。其实默认是一个资源的yaml,最上方也有“---"不过是通常会省略不写。

代码语言:javascript
复制
---
apiVersion: v1
kind: Namespace
metadata:
  name: test1
---
kind: pod
apiVersion: v1
metadata:
  name: test-pod
spec:
  restartpolicy: OnFailure
  containers:
  - name: test-pod
    image: httpd
    imagepullpolicy: IfNotPresent

3、Pod的默认健康检查

LivenessProbe(活跃度)

代码语言:javascript
复制
[root@docker-k8s01 liveness]# cat test-liveness.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: liveness
  labels:
    test: liveness
spec:
  restartPolicy: OnFailure
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/test; sleep 60; rm -rf /tmp/test; sleep 300
    livenessProbe:
        exec:
            command:
            - cat
            - /tmp/test
        initialDelaySeconds: 10              // pod运行10秒后开始探测
        periodSeconds: 5               // 每5秒探测一次

注: Liveness活跃度探测,根据探测某个文件是否存在,来确认某个服务 是否正常运行,如果存在则正常,否则,它会根据你设置的Pod的重启策略操作Pod。

Readiness(敏捷探测、就绪性探测)

代码语言:javascript
复制
[root@docker-k8s01 readiness]# cat test-readiness.yaml 
kind: Pod
apiVersion: v1
metadata: 
  name: readiness
  labels: 
    test: readiness
spec: 
  restartPolicy: OnFailure
  containers: 
  - name: readiness
    image: busybox 
    args: 
    - /bin/sh
    - -c
    - touch /tmp/test;  sleep 60; rm -rf /tmp/test; sleep 300
    readinessProbe: 
      exec: 
        command: 
        - cat 
        - /tmp/test
      initialDelaySeconds: 10
      periodSeconds: 5

总结liveness和 readiness探测 1、liveness和readiness是两种健康检查机制,如果不特意配置,k8s将两 种探测采取相同的默认行为,即通过判断容器启动进程的返回值是否为零,来判断探测是否成功。 2、两种探测配置方法完全一样,不同之处在于探测失败后的行为:liveness探测是根据Pod重启策略操作容器,大多数是重启容器。 readiness则是将容器设置为不可用,不接收Service转发的请求。 3、两种探测方法可以独立存在,也可以同时使用。用liveness判断容器是 否需要重启实现自愈;用readiness判断容器是否已经准备好对外提供服务。

4、健康检测的应用

在扩容中的应用:

代码语言:javascript
复制
[root@docker-k8s01 web]# cat test-web.yaml 
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: web
spec: 
  replicas: 3
  template: 
    metadata: 
      labels: 
        run: web
    spec: 
      containers: 
      - name: web 
        image: httpd
        ports:
        - containerPort: 80
        readinessProbe: 
          httpGet: 
            scheme: HTTP
            path: /healthy
            port: 80
          initialDelaySeconds: 10
          periodSeconds: 5
---
kind: Service
apiVersion: v1
metadata: 
  name: web-svc
spec: 
  type: NodePort
  selector: 
    run: web
  ports: 
  - protocol: TCP
    port: 90
    targetPort: 80
    nodePort: 30321

在更新过程中的使用

代码语言:javascript
复制
[root@docker-k8s01 web]# cat app-v1.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: app
spec: 
  replicas: 10
  template: 
    metadata: 
      labels: 
        run: app
    spec: 
      containers: 
      - name: app
        image: busybox
        args: 
        - /bin/sh
        - -c 
        - sleep 10; touch /tmp/healthy; sleep 3000
        readinessProbe:
          exec: 
            command: 
            - cat
            - /tmp/healthy
          initialDelaySeconds: 10
          periodSeconds: 5

maxSurge: 此参数控制滚动更新过程中,副本总数超过预期数的值。可以是整数,也可以是百分比,默认是1 maxUnavailable: 不可用Pod的值。默认为1.可以是整数,也可以是百分比。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档