第4章 Pod对象:应用目修复、初始奢器、静态Pod等

基本概念

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的

存在的意义

Pod为亲密性应用而存在。
亲密性应用场景

  • 两个应用之间发生文件交互
  • 两个应用需要通过127.0.0.1或者 socket通信(典型组合:nginx+php)
  • 两个应用需要发生频繁的调用

容器分类

  • Infrastructure Container:基础容器,维护整个Pod网络空间
  • InitContainers:初始化容器,先于业务容器开始执行
  • Containers:业务容器,并行启动

pod ip 绑定 instruction 容器

一般微服务一个pod 一个容器

容器的1号进程

应用自恢复(重启策略+健康检查)

重启策略

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

Always:例如nginx、mysql,长期运行应用


● OnFailure:当容器异常退出(退出状态码非0)时,才重启容器

OnFailure:定时任务


● Never:当容器终止退出,从不重启容器。

Nerver:适用临时任务

健康检查有以下两种类型

● liveness Probe(存活检查)
如果检查失败,将杀死容器,根据Pod的 】restartPolicy来操作。

initialDelaySeconds: 5   #第一次启动pod多少秒后执行健康检查
periodSeconds: 5     #健康检查周期

● readiness probe(就绪检查)
如果检查失败, Kubernetes会把Pod从 service endpoint中剔除


支持以下三种检查方法:
●httpget:发送HTTP请求,返回200-400范围状态码为成功。
●exec:执行Shel命令返回状态码是0为成功
● tcp Socket:发起 TCP Socke建立成功。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web-3
  name: web-3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-3
  template:
    metadata:
     labels:
       app: web-3
    spec:
      restartPolicy: Always
      containers:
      - image: lizhenliang/java-demo
        name: java-demo
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 2

 

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web-3
  name: web-3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-3
  template:
    metadata:
     labels:
       app: web-3
    spec:
      restartPolicy: Always
      containers:
      - image: lizhenliang/java-demo
        name: java-demo
        livenessProbe:
          exec:
            command: ['cat','/tmp/healthy']
View Code

Init container

Init container.

  • 基本支持所有普通容器特征
  • 优先普通容器执行

应用场景:
1.控制普通容器启动,初始容器完成后才会启动业务容器
2.初始化配置,例如下载应用配置文件、注册信息等

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: workdir
      mountPath: /usr/share/nginx/html
  initContainers:
  - name: install
    image: busybox
    command: ['wget','-O','/work-dir/index.html','http://kubernetes.io']
    volumeMounts:
    - name: workdir
      mountPath: "/work-dir"
  dnsPolicy: Default
  volumes:
  - name: workdir
    emptyDir: {}

 

[root@k8s-m1 chp4]# kubectl get pod
NAME                    READY   STATUS     RESTARTS   AGE
init-demo               0/1     Init:0/1   0          7s
nginx-f89759699-qjjjb   1/1     Running    2          7d21h
web-6b9c78c94f-m6q8j    1/1     Running    0          35h
web-6b9c78c94f-tqxvj    1/1     Running    0          35h
web-6b9c78c94f-zs9pk    1/1     Running    0          35h
web2-57b578c78c-kkh8p   1/1     Running    0          35h


[root@k8s-m1 chp4]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
init-demo               1/1     Running   0          5m30s   10.244.111.215   k8s-n2   <none>           <none>
nginx-f89759699-qjjjb   1/1     Running   2          7d21h   10.244.215.77    k8s-n1   <none>           <none>
web-6b9c78c94f-m6q8j    1/1     Running   0          36h     10.244.111.214   k8s-n2   <none>           <none>
web-6b9c78c94f-tqxvj    1/1     Running   0          35h     10.244.215.81    k8s-n1   <none>           <none>
web-6b9c78c94f-zs9pk    1/1     Running   0          35h     10.244.215.82    k8s-n1   <none>           <none>
web2-57b578c78c-kkh8p   1/1     Running   0          35h     10.244.215.83    k8s-n1   <none>           <none>
[root@k8s-m1 chp4]# curl 10.244.111.215:80
View Code

静态Pod

静态Pod:固定在某个Node上面,由 kubelet管理生成的一种Pod,无法使用控制器。
在 kubelet配置文件启用静态Pod

vi /var/lib/kubelet/config yaml
staticPodPath:/etc/kubernetes/manifests

将部署的 pod yam放到该目录会由 kubele自动创建。 

初始化容器怎么让配置文件放到业务容器?
答:数据卷共享

静态pod特点:
1、yaml只能是pod
2、pod是由kubelet拉起的,只管理当前节点上的yaml
3、kubelet会定期扫描静态pod目录,根据目录下yaml启动或者删除

 

 

posted @ 2020-08-11 10:43  元贞  阅读(212)  评论(0编辑  收藏  举报