Kubernetes 初步理解

容器:
实际上是一个由Linux Namespace,Linux Cgroups 和rootfs三种技术构建出来的进程的隔离环境。
一个正在运行的linux容器:
1.一组联合挂载在/var/lib/docker/aufs/mnt上的rootfs,这一部分我们成为“容器镜像”
2.一个由namespace+cgroups构成的隔离环境,这个部分我们称为容器运行时。

kubernetes项目架构
在这里插入图片描述
1.由Master 和Node节点组成。
2.Master组成:
kube-apiserver:负责api服务,处理集群的持久化数据,保存到etcd上面。
kube-scheduler: 负责调度。
kube-controller-manager:负责容器编排。

Kubelet:
1.主要负责和容器运行时打交道(如docker项目)。这个交互所依赖的,是一个称为CRI的远程接口调用。这个接口定义了容器运行时的各项核心操作。比如:启动一个容器需要的所有参数;具体的容器运行时,比如docker项目,通过OCI规范,把CRI请求翻译成对Linux操作系统的调用(如操作namespace和cgroup等)。
2.通过grpc协议同一个叫做Device Plugin 的插件进行交互。
3.调用网络插件和存储插件为容器配置网络和持久化存储。
这个两个插件和kubelet进行交互的接口,分别是CNI和CSI.

各种任务间存在各种个样的关系:
1.如何把一个镜像,用一个集群启动起来
2.一个web应用和数据库之间的访问关系
3.一个负载均衡器和它的后端服务之间的代理关系
4.一个门户应用与授权组件之间的调用关系
5.一个分布式集群如cassandra之间主从关系等
kubernets项目定义容器间关系和形态的主要方法:
1.首先,通过一个“编排对象”,比如pod,job,cronjob等,来描述你试图管理的应用;
2.然后,再为它定义一些服务对象,比如Service,Secret,Horizontal Pod Autoscaler(自动水平拓展器)等,这些对象,会负责具体的平台级功能。
这种使用方法就是所谓的“申明式API”。这种API对应的“编排对象”和“服务对象”,都是Kubernets项目中的API对象(API Object).
kubernetes项目如何启动一个容器化任务呢?
比如我要运行两个完全相同的Nginx副本,以负载均衡的方式对外提供服务。
1.如果是自己DIY的话,可能需要启动两台虚拟机,分别安装两个nginx,然后使用keepalived为这两个虚拟机做一个虚拟ip。
2.如果是kubernetes项目呢?

apiVersion: apps/v1
kind: Deployment
metadata:
	name: nginx-deployment
	labels:
		app: nginx
spec:
	replicas: 2
	selector:
		matchLabels:
			app: nginx
	template:
		metadata:
			labels:
				app: nginx
		spec:
			containers:
			- name: nginx
			  image: nginx:1.7.9
			  ports:
			  -	containerPort: 80
```bash
$ kubectl create -f nginx-deployment.yaml
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值