读书笔记---kubernetes权威指南:从docker到kubernetes实践 第1章: Kubernetes入门

以下内容来自:
kubernetes权威指南:从dockerkubernetes实践纪念版

1 Kubernetes入门
含义:基于容器技术的分布式架构方案

Service:分布式集群架构核心
特点:唯一名字,虚机ip和端口号,远程服务,被映射到了
提供这种服务能力的一组容器应用上
含义:service由多哥相关服务近好层提igong服务
隔离:服务需要隔离,设计pod对象,将每个服务进程包装到相应Pod中,称为Pod中运行的容器
servicepod关系:pod贴上标签,给service定义标签选择器
实际上就是通过标签来建立连接

Pod:
特点:每个Pod运行着Pause的容器哦,其他容器则称为业务容器
业务容器共享Pause容器的网络栈和Volume挂载卷

Kubernetes集群
组成:Master姐和一群工作节点
Matser节点:kube-apiserver,实现整个集群的资源管理和pod调度
最小运行单元:Pod
解决的问题:
1 扩容:资源分配,哪个节点上扩容,部署,启动。 
       变成修改RC中副本数目即可
2 升级:为扩容Service关联的Pod创建RC副本控制器

RC(Replication Controller)
组成:Pod定义,运行副本数,标签

Kubernetes
作用:
1本身实现了分布式系统
2微服务架构

创建pod
kubectl create -f xxx.yaml
查看service
kubectl get svc
CLUSTER-IP(IP)PORT拼接即可让其他pod访问该Service
根据service唯一名字,容器可以从环境变量中获取Service对应的Cluster UP地址和端口
[root@node-1 qaadmin]# kubectl get svc -n openstack|grep ceilometer
ceilometer                          ExternalName   <none>          ingress.kube-system.svc.cluster.local   80/TCP               7d
ceilometer-api                      ClusterIP      10.233.10.160   <none>                                  8777/TCP             7d

例子讲解:
spec:
  type: NodePort
  ports:
    - port: 8777
      nodePort: 38777
  selector:
    app: myweb
type=NodePortnodePort=38777
表示Service开启了端口转换的外网访问模式
用户访问38777端口即可映射和跳转到真正的服务端口8777


KubernetestNode,Pod等是资源对象
etcd:可持久化存储资源对象
Master:集群控制节点,所有控制命令发给它
Master运行:
 Kubernetes API Server:HTTP服务
 Kubernetes Controller Manager:资源对象的自动化控制种新
 Kubernetes Scheduler:资源调度(Pod调度)
 etcd:存储资源对象数据
 
Node:
含义:工作负载节点
运行:
kubelet:Pod对应容器创建,停止
kube-proxy: service通信与负载均衡
Docker Engine(docker): 负责本机的容器创建和管理
注册机制:Node可以增加到Kubernetes集群,
某个Node超过指定时间不上报信息,就会认为失去联系,即Not Ready
随后Master会触发工作负载打转移

Pause容器:
引入原因:
解决描述容器组状态的问题
多个业务供其共享Pause容器的IP

Pod类型:
普通Pod:被创建后放入etcd中存储,调度到具体Node上运行
静态Pod:不存放在etcd中,存放在某个具体Node的文件中,只在该Node运行

Node,Pod,容器的关系:
Node包含多个Pod,一个Pod可以包含1个或多个容器
资源对象: 可以采用yamljson描述
Pod的名字标签等在元数据metadata
Pod的定义都在spec中即(specification指定)
endpoint: 实际上就是ip加端口组成的访问地址

Event:事件记录,事件时间,次数,导致事件的原因
kubectl describe pod xx来定位问题
资源配额:
Requests:资源最小申请量
Limits:资源最大允许使用量

1.4.4 Label(标签)
Label:
含义: key=value的键值对
特点:一个资源对象可定义任意数量的Label
表达式:等式和即和
name=openstack-compute:匹配具有标签的资源对象
env != production:匹配不具有标签env=production的资源对象
name in (openstack-compute, openstack-controller)
name not in(openstack-compute)
多个表达式用','分隔,是AND关系

关于pod和标签选择的实现
pod中定义
 labels:
   app: myweb

ReplicationController
 selector:
   app: myweb
   
matchLabels:定义一组Label
matchExpressions:定义一组基于即和的筛选日奥建
不仅仅可以针对name进行标签选择,也可以对其他部分进行标签选择


1.4.5 Replicatin Controller
含义:定义期望场景,声明pod副本数量维持的值
组成:
1 Pod副本数
2 Pod的标签选择器
3 Pod副本数量<期望,就创建PodPod模板

滚动升级:每次旧版本停止一个,然后创建一个新版本的Pod

RC(Replica Set)的作用:
1 副本控制
2 Pod定义模板
3 标签选择器
4 滚动升级

1.4.6 Deployment
作用:解决Pod编排问题,使用Replica Set实现,可认为是RC升级
RC的区别:可以知道Pod部署进度

kubectl get deployments -n openstack
[root@node-1 qaadmin]# kubectl get deployments -n openstack
NAME                            DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
aodh-api                        3         3         3            3           33d
aodh-evaluator                  1         1         1            1           33d
Desired:Pod副本数的期望值
CURRENT:Pod副本数的实际值
UP-TO-DATE:滚动升级中最新版本Pod副本数量
AVAILABLE:当前可用副本数量

kubectl get rs -n openstack
NAME                                      DESIRED   CURRENT   READY     AGE
aodh-api-6f89d6f967                       3         3         3         33d
aodh-evaluator-6d5d4b8674                 1         1         1         33d


1.4.7 Horizontal Pod Autoscaler
pod横向自动扩容
kubectl scale:实现Pod扩容或缩容
原理:分析RCpod的负载来调整pod的副本数
pod负载的指标:
CPU使用率百分比
应用程序自定义读量指标(例如每秒请求数)

CPU使用率:目标Pod所有副本自身CPU利用率的平均值
利用率=podCPU使用量/podRequest的值
CPU使用量:通常是1分钟平均值,通过查询
Heapster得到
如果Pod没有定义PodRequest值,则无法使用横向自动扩容能力


1.4.8 StatefulSet
含义:面向有状态服务
特点:
1 pod有唯一网络表示
2 例如StatefuleSet名字叫kafka,第一个Pod叫做kafka-0,kafka-1
3 Pod副本启停顺序受控
4 Pod采用持久化存储卷,通过PV/PVC实现

Headless Service与普通Service的区别:
没有Cluster IP
StatefulSet控制的每个Pod示例创建了DNS域名
$(podname).$(headless service name)


1.4.9 Service(服务)
服务就是之前提到的微服务,Pod,RC都是为了这个服务工作的
例子:
前端pod->service->label selector->pod, pod, pod
通信:服务自建通过TCP/IP通信

Kubernetes的三种IP
Node IP: Node节点的IP地址
Pod IP: PodIP地址
Cluster IP:service ip地址

1.4.10 Volume(存储卷)
含义:被多个容器访问的共享目录
步骤:先声明volume,然后挂载到容器的指定目录下
种类:
1 emptyDir:
Pod分配到Node创建的,初始内容为空
特性:PodNode上移除时,数据会被删除
使用:
1 临时空间
2 一个容器需要从另一个容器中获取数据

2 hostPath
含义:Pod上挂载宿主机文件
适用:
1 需要访问宿主机的目录

1.4.11 Persistent Volume
PV:
含义:网络存储中的一块存储
特点: 
1. PV只能是网络存储,不属于任何Node,可在每个Node上访问
2. PV并不是定义在Pod上的

Pod想申请某种pv,需要定义一个PersistentVolumeClaim(PVC)


1.4.12 Namespace(命名空间)
作用:多租户的资源隔离,将集群的资源对象分配到不同Namespace     逻辑分组,方便管理
默认:default
kubectl get namespaces
[root@node-1 qaadmin]# kubectl get namespace
NAME          STATUS    AGE
ceph          Active    34d
chartmuseum   Active    24d
default       Active    34d
kube-public   Active    34d
kube-system   Active    34d
openstack     Active    34d
openstackd    Active    27d

不特别指定Namespace,则都会进入到defaultNamespace
kubectl get pods将查看default的资源对象

1.4.13 Annotation(注解)
含义:适用key/value键值对形式定义,不同Label具有彦哥命名规则
    用于LabelSelector,附加信息,标记资源对象特殊信息。
适用:release信息,联系信息

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/80329384