k8s架构
kubernetes(下面简称k8s)是一个容器管理,调度的系统,是一个分布式架构,由管理节点和工作节点构成整个系统架构,管理节点,元数据存储节点(一般和管理节点是同一个节点)和工作节点分别安装不同的组件,组件之间进行协同工作,完成整个容器集群的部署,调度,负载均衡等。
1、管理节点
组件构成
- kube-apiserver
- kube-controller-manager
- kube-schedule
- kubelet
2、工作节点
组件构成
- kubelet
- kube-proxy
- docker或其他容器系统
3、元数据存储
- etcd
4、客户端工具
- kubectl
k8s集群搭建
k8s搭建有多种方案,可以自行编译,然后手动搭建,或者下载安装包自行搭建,也可以选择借助工具例如:kubeadm等协助搭建。这里介绍利用kubeadm进行搭建一个k8s集群系统。
k8s中的资源对象
在 Kubernetes 系统中,Kubernetes 对象 是持久化的条目。Kubernetes 使用这些条目去表示整个集群的状态。特别地,它们描述了如下信息:
- 什么容器化应用在运行(以及在哪个 Node 上)
- 可以被应用使用的资源
- 关于应用如何表现的策略,比如重启策略、升级策略,以及容错策略
Kubernetes 对象是 “目标性记录” —— 一旦创建对象,Kubernetes 系统将持续工作以确保对象存在。通过创建对象,可以有效地告知 Kubernetes 系统,所需要的集群工作负载看起来是什么样子的,这就是 Kubernetes 集群的 期望状态。
与 Kubernetes 对象工作 —— 是否创建、修改,或者删除 —— 需要使用 Kubernetes API。当使用 kubectl
命令行接口时,比如,CLI 会使用必要的 Kubernetes API 调用,也可以在程序中直接使用 Kubernetes API。为了实现该目标,Kubernetes 当前提供了一个 golang
客户端库 ,其它语言库(例如Python)也正在开发中。
- Pod
- Node
- Namespace
- Service
- Volume
- PersistentVolume
- Deployment
- Secret
- StatefulSet
- DaemonSet
- ServiceAccount
- ReplicationController
- ReplicaSet
- Job
- CronJob
- SecurityContext
- ResourceQuota
- LimitRange
- HorizontalPodAutoscaling
- Ingress
- ConfigMap
- Label
- CustomResourceDefinition
- Role
- ClusterRole
类别 | 名称 |
---|---|
资源对象 | Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling、Node、Namespace、Service、Ingress、Label、CustomResourceDefinition |
存储对象 | Volume、PersistentVolume、Secret、ConfigMap |
策略对象 | SecurityContext、ResourceQuota、LimitRange |
身份对象 | ServiceAccount、Role、ClusterRole |
描述K8S对象
当创建 Kubernetes 对象时,必须提供对象的 spec,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如,名称)。当使用 Kubernetes API 创建对象时(或者直接创建,或者基于kubectl
),API 请求必须在请求体中包含 JSON 格式的信息。更常用的是,需要在 .yaml 文件中为 kubectl 提供这些信息。 kubectl
在执行 API 请求时,将这些信息转换成 JSON 格式。
这里有一个 .yaml
示例文件,展示了 Kubernetes Deployment 的必需字段和对象 spec:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
一种创建 Deployment 的方式,类似上面使用 .yaml
文件,是使用 kubectl
命令行接口(CLI)中的 kubectl create
命令,传递 .yaml
作为参数。下面是一个示例:
$ kubectl create -f docs/user-guide/nginx-deployment.yaml --record
必需字段
在想要创建的 Kubernetes 对象对应的 .yaml
文件中,需要配置如下的字段:
apiVersion
- 创建该对象所使用的 Kubernetes API 的版本kind
- 想要创建的对象的类型metadata
- 帮助识别对象唯一性的数据,包括一个name
字符串、UID 和可选的namespace