kubernetes 概念初识

快速索引命令行,对k8s的概念的快速了解


基础概念

  • Master: 集群控制节点,其中的资源存储在etcd中
    • kube-apiserver: CRUD 所有资源的唯一入口
    • kube-controller-manager: 资源的自动化控制中心
    • kube-scheduler: 负责资源调度的进程
  • Node: 工作负载节点
    • kubelet: 负责 Pod 对应的容器的创建,启停,实现集群管理的基本功能
    • kube-proxy: 实现 Kubernetes Service 的通信与负载均衡机制的重要组件
    • Docker Engine: 负责本机的容器管理工作
  • Pod: 基本的业务单元,每个Pod中都有一个特殊的“根容器”- Pause 容器。 1. 通过 Pause 容器代表整个 Pod 的状态。2. 多个业务容器共享 Pause 容器的 IP 和 Volume,简化业务容器间的通讯和文件共享。 静态 Pod存在于某个具体 Node 的文件中;普通 Pod存储于etcd中,由 Master 进行调度。
    • Endpoint: Pod IP + 容器 Port 的形式存在, 1个 Pod 存在0到多个。
    • 资源配额限制: Requests 是最小申请量, Limis 是最大允许使用量,尝试超出则进行重启。
      • CPU: 100~300m 等价于 0.1 ~ 0.3 个 CPU。绝对值配额。
      • Memory: 单位是内存字节数。
  • Label: key=value 的键值对,可以附加于各种资源对象上,实现分组管理功能。查询筛选需要使用 Label Selector 表达式来实现对象查询。
  • Selector: matchLabels 和 matchExpressions 同时设置时条件为 AND,则需要两者同时满足才能命中。
    • matchLabels: 匹配定义的一组 label
    • matchExpressions: 基于集合的筛选条件
  • Replication Controller: 简称 RC,定义期望的场景。 注意:删除 RC 不会影响已经创建的Pod,可以设置 replicas=0 来删除 Pod。也可以使用 stop 和 delete 命令一次性删除 RC 和其控制的所有 Pod。 Rolling Update 是每停止一个旧的Pod,同时创建一个新的 Pod的形式进行替换升级。 下一代的RC: Replica Set,区别是可以支持集合的 Label Selector。
    • Pod 期望的副本数量
    • 用于筛选目标 Pod 的 Label Selector
    • 创建新的 Pod 的 Pod 模版
  • Deployment: 使用 Replica Set 来实现,可以认为是 RC 的一次升级。
  • HorizontalPodAutoscaler:
  • StatefulSet:
  • Service: 指代微服务架构中的一个微服务。
  • Job:
  • Volume:
    • emptyDir: 生命周期和pod的生命周期相同,用于临时空间
    • hostPath: 为Pod挂载宿主机的文件或目录,注意k8s无法管理宿主机的资源
    • gcePersistentDisk: google 的永久磁盘
    • awsElasticBlockStore:
    • nfs:
  • Persistent Volume:
  • Namespace:
  • Annotation:
  • ConfigMap: 配置集中化

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 常用命令
docker ps
docker inspect
docker rmi -f $(docker images -qa)

# trouble shooting
# 查看系统 event
kubectl get pods
# 查看容器日志
kubectl logs <pod-name> [-c <container-name>]
# 查看 k8s 服务日志
systemctl status kube-controller-manager -l
# 复制pod上的文件到本地
kubectl cp <pod-name>:<path> <local-path>

# 安装插件 <插件库: https://github.com/kubernetes/sample-cli-plugin >
# 新建可执行文件,以 kubectl-<name> 开头,拷贝到可执行文件PATH中,即可以通过
kubectl <name>
# 查看安装的插件
kubectl plugin list

# Node 操作
kubectl get nodes
kubectl describe node <node-name>

# Pod 操作
kubectl get pods
kubectl describe pod <pod-name>

# RC 操作
kubectl create -f mysql-rc.yaml
kubectl get rc
kubectl scale rc <rc-name> --replicas=4 #动态扩容
# Deployment 操作类似于RC
kubectl get rs # replica set
kubectl get deployments

# Service 操作
kubectl create -f mysql-svc.yaml
kubectl get svc
kubectl get endpoints
kubectl get svc <service-name> -o yaml # 查看 Cluster IP