Pod资源对象+健康检查

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

Deployment:

最常见的无状态的控制器,支持应用的扩容缩容、滚动更新等操作

Service:

为弹性变动且存在生命周期的Pod对象提供了一个固定的访问接口,用户服务发现和服务访问

Pod:

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

ReplicationController:(rc)

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

ReplicaSet:(rs)

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

StatefulSet:

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

DamonSet:

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

Job:

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

volume:

PV PVC

ConfigMap:

 

Secret:

 

Role:

 

ClusterRole:

 

ClusterRoleBinding:

 

Service account:

 

Helm:


Namespace:名称空间

 


默认的名称空间:Default

//查看名称空间

 

[root@master ~]# kubectl  get  ns
NAME              STATUS   AGE
default           Active   6d22h
kube-node-lease   Active   6d22h
kube-public       Active   6d22h
kube-system       Active   6d22h

//查看名称空间详细信息

[root@master ~]# kubectl  describe  ns  default

//创建名称空间

[root@master ~]# kubectl create ns bdqn

//使用yaml创建名称空间

[root@master ~]# vim  test-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test
[root@master ~]# kubectl  apply  -f  test-ns.yaml

PS:

 

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

 

//删除名称空间:

 

[root@master ~]# kubectl  delete ns test
[root@master ~]# kubectl delete -f test-ns.yaml

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

[root@master ~]# kubectl get pod --namespace=bdqn 
[root@master ~]# kubectl get pod -n bdqn

Pod


//通过yaml文件手动创建pod

[root@master ~]# vim  pod.yaml
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace:  bdqn  //指定名称空间
spec:
  containers:
  - name: test-app
    image:  httpd:v1
[root@master ~]# kubectl apply -f  pod.yaml
[root@master ~]# kubectl get pod -n bdqn
NAME       READY   STATUS    RESTARTS   AGE
test-pod   1/1     Running   0          19s
//删除
[root@master ~]# kubectl delete pod -n bdqn test-pod

Pod中镜像获取策略:


Always:

镜像标签为“lastest”或镜像不存在时,总是从指定的仓库中获取镜像

IfNotPresent:

仅当本地镜像不存在时从目标仓库中下载

Never:

禁止从仓库下载镜像,即只是用本地镜像

PS:对于标签为“latest”或者不存在的时候,其默认镜像下载策略为“Always”,而对于其他标签的镜像,默认策略为“IfNotPresent”

kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace:  bdqn
  labels:
    app:  test-web
spec:
  containers:
  - name: test-app
    image:  httpd:v1
    imagePullPolicy:  IfNotPresent  //指定镜像获取策略
    ports:
    - protocol: TCP
      containerPort: 90  //手动创建的Pod,指定容器暴露的端口也不会生效

PS:

 

对于标签为“latest”或者这标签不存在,其默认镜像下载策略为“Always”,而对于其他标签的镜像,默认策略为“ifNotPresent”

 

容器的重启策略


Always:

但凡Pod对象终止就将其重启,此为默认设定

OnFailure:

仅在Pod对象出现错误时才将其重启

Never:

从不重启

 

Pod的默认健康检查


[root@master ~]# vim  healcheck.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: healcheck
  name: healcheck
spec:
  restartPolicy:  OnFailure
  containers:
  - name: healthcheck
    image:  busybox
    args:  //由镜像运行成容器的时候去做的事情
    - /bin/sh
    - -c
    - sleep 20; exit  1
[root@master ~]# vim healcheck.yaml
[root@master ~]# kubectl get pod -w  //实时查看它的状态
[root@master ~]# kubectl get pod
NAME          READY   STATUS   RESTARTS   AGE
healthcheck   0/1     Error    5          8m44s
//可以看到每过20s就会重启一次

LivenessProbe(活跃度探测)


[root@master ~]# vim  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秒探测一次

PS:

 

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

 

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

 


[root@master ~]# vim  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

PS:总结liveness和readiness探测

 

1)leveness和readiness是两种健康检查机制,如果不特意配置,k8s两种探测采取相同的默认行为,即通过判断容器启动进程的返回是否为零,来判断探测是否成功

 

2)两种探测配置方法完全一样,不同之处在于探测失败后的行为:

liveness探测是根据Pod重启策略操作容器,大多数是重启容器

readinesss则是将容器设置为不可用,不接收Service转发的请求

 

3)两种探测方法可以独立存在,也可以同时使用,用liveness判断容器是否需要实现自愈;用readiness判断容器是否已经准备好对外提供服务

 

监控检测应用

 


在scale(扩容、缩容)中的应用

 

[root@master ~]# vim hcscal.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
[root@master ~]# kubectl  exec  web-69d659f974-ktqbz  touch  /usr/local/apache2/htdocs/healthy
[root@master ~]# kubectl  describe  svc
Endpoints:                10.244.1.4:80

在更新过程中的使用


[root@master ~]# vim  app.v1.yaml
kind: Deployment
apiVersion: extensions/v1beta1
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

 

 

//第一次升级

[root@master ~]# kubectl  apply  -f  app.v1.yaml  --record
[root@master ~]# cp  app.v1.yaml app.v2.yaml 
[root@master ~]# vim  app.v2.yaml
//修改
        args:
        - /bin/sh
        - -c
        - sleep 3000

//第二次升级

[root@master ~]# cp  app.v1.yaml  app.v3.yaml 
[root@master ~]# vim  app.v3.yaml
//删除探测机制
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: app
spec:
  replicas: 10
  template:
    metadata:
      labels:
        run:  app
    spec:
      containers:
      - name: app
        image:  busybox
        args:
        - /bin/sh
        - -c
        - sleep 3000

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

 

maxUnavilable:不可用Pod的值,默认为1

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kubernetes(k8s)是一个强大的容器编排平台,提供了丰富的资源对象来定义和管理应用程序的各个方面。以下是一些常见的Kubernetes资源对象及其功能: 1. Pod:是最小的可调度和可管理的单位,用于包含一个或多个容器的组。Pod提供了一个独立的网络和存储空间,并共享同一个主机。 2. Deployment:用于定义应用程序的部署方式,管理Pod副本集的创建、升级和回滚。Deployment支持滚动更新、健康检查和自愈能力。 3. Service:用于定义一组Pod的访问方式和网络策略。Service提供了负载均衡、服务发现和连接池等功能,使得应用程序可以通过统一的入口点进行访问。 4. ReplicaSet:用于确保指定数量的Pod副本正在运行。ReplicaSet可以根据定义的副本数自动进行水平扩展或收缩,并保持指定数量的副本。 5. StatefulSet:与ReplicaSet类似,但适用于有状态应用程序。StatefulSet为每个Pod副本分配唯一标识符和稳定的网络标识,确保有状态应用程序的稳定性和顺序性。 6. DaemonSet:用于在每个节点上运行一个Pod副本,确保在整个集群中的每个节点上都有一个Pod在运行。 7. Job和CronJob:用于执行一次性任务或定期任务。Job保证一个或多个Pod成功完成任务,而CronJob允许定期执行任务。 8. ConfigMap:用于存储非敏感的配置数据,如环境变量、配置文件等。ConfigMap可以被挂载到Pod中,供应用程序读取。 9. Secret:用于存储敏感的配置数据,如密码、密钥等。Secret以安全的方式存储,并提供了在Pod中使用的方法。 10. Ingress:用于暴露HTTP和HTTPS服务到集群外部。Ingress提供了路由规则和负载均衡配置,将外部请求转发到内部的Service。 这只是一小部分Kubernetes资源对象的功能介绍。Kubernetes还提供了许多其他的资源对象,如Namespace、PersistentVolume、PersistentVolumeClaim等,用于满足不同场景下的需求。通过合理使用这些资源对象,可以更好地管理和运行容器化应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值