好长时间没写文章了,昨天刚倒霉一天,今天写篇文章安慰的自己,废话不多说直接看题。

 

kubernetes核心技术详解

1.概述

模块化,可插拔化

公有云,私有云,混合云部署

可挂载

可组合

自动恢复

自动复制

自动重启

使用

使用命令 kubectl 进行交互

kubectl  create -f    name.yaml 创建pod

kubectl   get  pods   查看创建的pods

READY是1 表明是成功的服务正常

kubectl   delete  pods  nameserver   删除创建的的pods

kubectl   get  pods     nginx -o yaml       以yaml形式查看创建的服务的pods

Pods

创建,调度以及管理的最小单元

共存的一组容器的集合

容器共享PID,网络,IPC以及UTS的命名空间

容器共享存储卷

短暂存在

Volumes

解决数据卷持久化

Pad中容器共享数据

生命周期和定义pods生命周期一样的

支持多种类型的数据卷

emptyDir 本地创建数据卷其初始是一个空文件夹可以读写

hostpatch 本机自定义数据卷,映射存储路径进行存储

gcePersistentDisk 云端

awkElasticBlockStore 云存储

nfs 网络磁盘

iscsi 网络磁盘

gluserfs 网络磁盘

secrets 用来保存一些敏感的数据,一般用来保存用户加密的密码

labels

用以标示对象(如Pod)的key/value对

组织并选择对象的子集

范例

kubectl  create -f    labels.yaml

格式  labels:

app: nginx

kubectl  get   pods   -l  app=nginx 查看对应的lables值

Replication Controllers

当某个节点出现故障,如何确保新的节点进行替补

确保在任意时刻运行指定的数据的Pod

容器重新调度

规模调整简单

在线升级

多个版本的跟踪

特别的注意️:使用新版本的RC和旧版本的RC需要至少有一处不同的labels以标记版本的Pods

范例如下

kubectl    create  -f  rc.yaml 创建一个rc

apiVersion: v1     版本是v1

kind: ReplicationController  对象是rc

metadata:

name: my-nginx  命名是 my-nginx

spec:

replicas: 2       定义任何时刻确保有2个nginx运行

template:        运行时pods的定义

metadata:

labels:

app: nginx

spec:              定义container一样

containers:

- name: nginx

image: nginx

ports:

- containerPort: 80

kubectl    get  rc 查看创建的rc

kubectl    get  pods  -l  app=nginx  查看lables的数目

Services

抽象一系列Pod并定义其访问规则

固定IP地址和DNS域名

通过环境变量和DNS发现服务

负载均衡

外部服务访问方式

ClusterIP 当前的集群内访问

NodePort 在集群内暴露某一个端口,通过集群的某一工作节点IP和端口来访问这个服务

LoadBalancer 云服务商提供外部负载均衡可以使用这种类型

范例:

kubectl    create  -f  services.yaml 创建一个service.yaml

apiVersion: v1     版本是v1

kind: Service 对象是Service 类型

metadata:

name: nginx-service  命名是 nginx-service

spec:

ports:  定义端口

- containerPort: 8000 内网

targetPort:80  映射外网端口80

Protocol:tcp

Selector:   定义选择器为那些pod提供服务

app:nginx

kubectl    get  services   查看创建的services

Names

Namespaces

Annotations

实战部署

数据持久化  volumes

保密数据管理  secrets

kubectl    create  -f  secrets.yaml 创建一个secrets.yaml

apiVersion: v1     版本是v1

kind: Secret 对象是Secret 类型

metadata:

name: mySecret 命名是 mySecret

type: Opaque—表式是随机用户数据—

date:

Password:      sdfsdfsdfsdfsddfok

Username:     sdfsdfsdfsdfsddfok

kubectl    get  secret 查看创建 my  secret

资源管理  resources

健康检测  liveness/readinessprobes

生命周期钩子函数和退出警告

组织资源配置

kubectl批量处理

有效的利用label

在线应用升级以及回退

实时更新资源

kubectl   describe   pod  查看某个节点状态

kubectl   logs   pod  《container》 查看某个节点日志状态

kubectl   exec  container  command  查看某个节点执行命令

核心模块

master上的模块

etcd模块

高可用的key/Value存储

只有apiserver有读写权限

使用etcd集群确保数据可靠性

apiserver模块

作为kubernetes的系统入口,REST 提供增,减,改,查等

认证

授权

hosts.deny

hosts.allow

访问控制

服务账号

资源限制

kube-controller-manager执行各种控制器模块

Replication Controller 确保定义的复制数量和实际运行数量的总和是一致的。

Endpoint      Controller定期关联server和pod关联信息保证server关联到pods总是最新的

Namespace    Controller 控制命名空间

Serviceaccount    Controller 控制服务账号

kube-scheduler资源调度模块

资源需求

服务需求

硬件/软件/策略限制

关联性和非关联性

数据本地化

work上的模块

kubele 管理控制dockert模块

节点管理器

确保调度到本节点的Pod的运行和健康

kube-proxy代理模块

Pod网络代理

tcp/udp 请求转发

负载均衡(Round Robin插件形式存在的)

服务发现

环境变量

DNS-kube2sky,etcd,skydns  DNS查询

每周五定期分享docker 相关核心技术

dockercore

网络

容器间的通信

节点和容器间互相通信

每个Pod使用一个全剧唯一的IP

高可用

kubelet保证每一个master节点的

服务正常运行

系统监控程序确保kubelet正常运行

Etcd 集群

Master选举确保kube-scheduler和kube-contrller-manager高可用