kubernetes & docker 问题整理

2020-03-31  本文已影响0人  街上太拥挤

1. 宿主机如何与容器通信

2. pod创建流程

  1. 客户端提交创建请求,API ServerRESTful APIkubectl
  2. API Server处理用户请求,存储pod数据到etcd
  3. kube-scheduler通过API Server watch API一直监听未绑定的pod,尝试为pod分配主机
  1. 目标节点上的kubelet通过API Server watch API定期获取boundpod对象,发现需要创建pod了,则调用Docker API创建并启动pod
  2. kubelet通过CRI(Container Runtime Interface)获取pod状态,传给API Server,数据被更新到etcd中

3. etcd存储的是什么数据

etcd是一个高可用的分布式键值(key-value)数据库
etcd内部采用raft协议作为一致性算法
etcd至于go实现
服务注册和服务发现

保存了集群所有的网络配置和API Server对象的状态信息

4. 怎么查看etcd数据

exec进到pod,使用etcdctl命令

$ ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
get / --prefix --keys-only

5. etcd怎么做数据备份和数据恢复

// 备份
$ etcdctl --endpoints=127.0.0.1:2380,ip:port snapshot save backupName.db
// 恢复
$ etcdctl snapshot restore backupName.db --data-dir=/var/lib/etcd

6. pod的状态是怎么监控的,怎么做到改变pod状态的

可能是CRI(Container Runtime Interface)

7.怎么修改docker容器资源?修改后容器重启吗?那修改pod呢?

// 修改容器不重启
$ docker update -c xxx -m xxx [container_id]

修改pod重启,因为kubelet会去同步etcd的数据syncPod

8. 资源隔离的具体实现

使用Linux的namespace实现,提供六种隔离机制:

与namespace相关的三个系统调用:

9. 资源限制的具体实现

使用Linux的Cgroup实现,简单说是把进程放到一个组里面统一加以控制。
作用:可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、Memory、IO 等),为容器实现虚拟化提供了基本保证。
原理:将一组进程放在放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。

// 可以指定cpu和内存分配大小
$ docker run -c xxx -m xxx image:tag

10. docker现有运行时缺陷

  1. 基于Linux 64bit,无法在32bit的Linux/Windows/Unix环境下运行
  2. 网络管理相对简单,主要是基于namespace隔离
  3. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base
  4. container随着用户进程的停止而销毁,container中的log等用户数据不便收集
  5. 太依赖namespace

11. k8s资源预留是怎么做的

// 通过该参数
kubelet --system-reserved=memory=4Gi

12. Sandbox作用

sandbox : 沙盒
是一种安全机制,为运行中的容器提供隔离的环境

13. 自定义k8s controller怎么选主

**etcd锁**

tryLock模式,每次lock都是尝试lock,已被lock就无法锁住,同时也用了租约,过期了自动释放

  1. 利用租约在etcd集群中创建一个key,这个key有两种形态,存在和不存在,而这两种形态就是互斥量。
  2. 如果这个key不存在,那么线程创建key,成功则获取到锁,该key就为存在状态。
  3. 如果该key已经存在,那么线程就不能创建key,则获取锁失败。

14. 二层网络,四层网络,overlay network

15. 创建pod怎么实现sidecar注入

使用init-container 配置iptables规则来做流量劫持转发

16. 怎么查看iptables规则

$ iptables -L

17. Pod terminating时候,ip还在吗,还通吗

ip在,ping不通

18. pause容器的作用,可不可以不要?pause容器的进程树是怎样的?

pause容器作为pod里其他所有容器的parent container,主要有两个职责

进程树由pause容器开始,往下是业务容器

19. docker daemon挂了,容器是什么状态?继续运行还是也挂了?

容器会挂

上一篇下一篇

猜你喜欢

热点阅读