K8S学习总结(一)

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动化扩缩容、维护等功能。

Master组件

Master组件可以再集群中任何节点上运行,通常将所有master组件运行于一台服务器上,并且不会在该服务器上运行任何用户容器。

  • kube-apiserver

kube-apiserver用于提供资源请求/调用接口

  • ETCD

etcd是Kubernetes提供的默认存储系统,保存所有集群数据,使用时需要为etcd数据提供备份;

  • kube-controller-manager

kube-controller-manager运行管理控制器,是集群中处理常规任务的后台线程;它们被编译成单个二进制文件,在单个进程中运行。

控制器包含:

  1. 节点控制器(Node)
  2. 副本控制器(Replication):负责维护系统中每个副本中的pod。
  3. 端点控制器(Endpoints):填充Endpoints对象(即连接Services&Pods)
  4. Service Account和Token控制器:为新的Namespace创建默认账户访问API Token
  • cloud-controller-manager

云控制管理器负责与底层云提供商的平台交互。

cloud-controller-manager包括:

  1. 节点控制器(Node)
  2. 路由控制器(Route)
  3. Service控制器
  4. 卷控制器(Volume)
  • kube-scheduler

kube-scheduler监视新创建没有分配到Node的Pod,为Pod选择一个Node;

  • 插件addons

插件(addon)是实现集群pod和Services功能的;

  • DNS

Kubernetes集群都需要配置集群DNS,集群DNS是一个DNS服务器,为Kubernetes Services提供DNS记录。

  • 用户界面

kube-ui提供集群状态基础信息查看。

  • 容器资源监测

容器资源监控提供一个UI浏览监控数据。

  • Cluster-level Logging

Cluster-level Logging负责保存容器日志,搜索/查看日志。

 

Node组件

节点组件运行在Node上,提供Kubernetes运行时环境,以及维护Pod。

  • kubelet

kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能如下:

  1. 安装pod所需的volume
  2. 下载pod的Secrets
  3. Pod中运行的docker/expermentally/rkt容器
  4. 定期执行容器健康检查
  5. 报告pod的状态给系统其余部分,如有必要创建pod镜像
  6. 将节点的状态报给系统其余部分
  • kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象

  • docker

docker用于运行容器

  • RKT

rkt运行容器,作为docker的替代方案

  • supervisord

supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行状态;

  • fluentd

fluentd是一个守护进程,可提供cluster-level logging.

 

kubernetes object

Kubernetes object包含object spec和object status两个字段,Spec描述对象所需的状态,Status描述对象的实际状态。

Kubernetes对象的yaml文件,需要设置以下必填字段:

  1. apiVersion - 创建对象的Kubernetes API版本
  2. kind - 要创建什么类型的对象
  3. metadata - 具有唯一标识对象的数据,包括name、UID、Namespace(可选)
  4. Spec字段

Kubernetes Names

Kubernetes中所有对象都用name和UID来明确地标识。对于非唯一用户提供的属性,kubernetes提供labels和annotations.

UID是Kubernetes生成的,在Kubernetes集群的整个生命周期中创建的每个对象都有不同的UID。

Namespaces

namespace为名称提供一个范围,将集群资源划分为多个用途,默认情况下,同一个namespace中的对象将具有相同的访问控制策略。

创建namespace后在namespace基础上创建pod。创建namespace命令如下:

kubectl create namespace new-namespace

通过yaml文件创建,namespace.yaml内容如下:

apiVersion: v1
kind: Namespace
metadata:
    name: new-namesapce

执行kubectl create -f ./namesapce.yaml

删除namespace会自动删除所有属于该namespace的资源。

kubectl delete namespaces new-namespace

查看namespace

kubectl get namespaces

Volume

Kubernetes Volume具有明确的生命周期,与pod相同,当pod被删除时,Volume也将消失。

kubernetes支持的Volume类型有:

emptyDir
hostPath
gcePersistentDisk
awsElasticBlockStore
nfs
iscsi
fc (fibre channel)
flocker
glusterfs
rbd
cephfs
gitRepo
secret
persistentVolumeClaim
downwardAPI
projected
azureFileVolume
azureDisk
vsphereVolume
Quobyte
PortworxVolume
ScaleIO
StorageOS
local

Node

node可以是VM或物理机,每个node具有运行pod的一些必要条件,并由master组件进行管理,node节点上运行的服务包括Docker、kubelet和kube-proxy

node status:

Addresses
Condition
Capacity
Info

 

秘钥和证书保存在secret中,configmap是保存一些非敏感信息。

 

 

 

 

你可能感兴趣的:(云开发)