前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes框架概览

Kubernetes框架概览

作者头像
小小科
发布2018-05-02 17:19:03
1.2K0
发布2018-05-02 17:19:03
举报
文章被收录于专栏:北京马哥教育

Kubernetes是什么

Kubernetes是互联网巨头Google推出的一款开源的容器集群管理工具。下面分别对这里面提到的概念做点解释:

  • 容器 容器技术类似于虚拟机但又不同于虚拟机。容器可以提供近似于虚拟机的功能,但是又没有虚拟机那么大的资源占用。容器与虚拟机底层的实现也是不同的。 虚拟机是在宿主机上完全通过虚拟化技术来创建一个无异于真实物理环境的运行环境。而容器技术是通过使用例如Linux Namespace 和 Cgroup技术来创建一个与其它进程运行环境高度隔离的环境。这样在这里面运行的进程就具有轻量、易用、高效的特性,环境本身也如“沙箱”一样安全。
  • 集群 一些计算机在一起同时同时完成一项任务,就说这些计算机构成了一个集群。咬文嚼字来说,集群跟分布式环境还是有些差别的,主要表现在:集群的每个节 点完成的任务都是类似的,某个节点挂了其它的节点还可以顶上来继续工作,而分布式则不同。集群是通过提高单位时间内任务数来提高效率,而分布式是通过缩短 单个任务的执行时间来提高效率的。集群一般具有高可用性和可扩展性。 戳这里

关于Kubernetes,这里及下文提到的容器都是Docker容器。Docker容器集群管理工具除了Kubernetes以外还有Swarm等。

Kubernetes的几个特性

上图给出了Kubernetes的结构简化示意图。从中可以看到:

首先,Kubernetes集群是一个主从(Master-Slave)结构,每个集群拥有一个Master节点和多个Minion节点。管理员通过将控制命令发给Master来对集群进行操作。而用户通过Internet访问到的是多个Minion提供的服务。

其次,每个Minion部署在一个物理机上。换句话说,Minion是一个抽象概念,并不是说要在物理机上安装一个叫做Minion的软件等等。每 一个Minion上可以运行多个Pod,至于到底是多少个取决于Minion的性能。Minion上面除了运行Pod之外,还有两个关键组件,一个叫 Kubelet,一个叫Proxy。

  • Pod 是Kubernetes集群部署、调度和管理的基本单位。每个Pod里面包含多个容器。对于规模比较小的服务,将它的依赖都配置在Pod里面的容器上,一个Pod就足够负载,而另外一些规模大一点的服务,可能要使用多个Pod,甚至是跨Minion的Pod。
  • Kubelet 是用来监管Pod里面容器运行情况的。一旦某个Pod里面的容器发生意外挂掉了,就由Kubelet来完成对其的重建。
  • Proxy 是代理,简单来说,就是通过它提供一个统一的访问地址。

Kubernetes的一些概念

  • Clusters 这个内容在Kubernetes的官方文档里面主要列出了Kubernetes支持的操作系统环境和对应的IaaS平台,常见的列出如下图:
  • Pods 前面也介绍过Pod的作用。Pod是由Linux的一些基本的命名空间组合而成。这里的命名空间有: 同一个Pod里面的容器是共享这些命名空间的(目前使用了Docker容器的Pod没有实现对Pid命名空间的共享)。 引入Pod的动机是: 优点:实现了Pod和Controller的解耦、软件依赖解耦和Controller Service的解耦。
    • 资源共享和通信,Pod里面的容器共享这些命名空间为资源共享和通信提供了便利。
    • 简化管理,使用Pod简化了应用部署的过程
    • 集成, Pods帮助主机垂直集成了应用栈,应用的各个依赖可以分别位于不同的容器。
    • Pid Namespace
    • UTS Namespace
    • networkd Namespace
    • IPC Namespace
  • Replication Controller Replication Controller的作用是保证某时刻的Pods数量与期望一致,多了就删除Pod,少了就添加。 工作方式是: 作用:
    • 重调度(Rescheduling):不管是有1个还是多个Pod,都必须有对应数量的replicas. Replication Controller来保证这个确定的数量
    • 伸缩(scaling): 通过更新replicas域或者手动增加、减少replicas的数量来实现伸缩性。
    • 更新(Rolling Update):通过一个接一个的方式来实现滚动更新。
    • 多版本跟踪(Multi Realease Tracks)
    • 使用Pod 模板(template)来创建Pod, 并且它认为这样创建出来的Pod是独立的,且可以相互替换的。
    • 使用Label来管理Pods,Label Selector来定义Label。
    • 删除一个Pod第一步就是改变其Label
  • Services Services是从逻辑上抽象了一组Pods集合的概念。访问这些Pods的策略称作是微服务。 通俗来说,就是对于一群Pods,给每个Pod打上标签,同一个标签的Pods属于同一个服务,也由它们来提供同一个服务。 例如,一个应用它拥有某个pod作为后端,那么就是由services来确定是哪一个pod来提供服务。 Services标定的Pods集合也是被Label Selector来决定的。 每一个services都被做成是RESTful API。 必须保证没有哪两个services的端口号会碰撞,所以采用的方法是给每个services分配独立的虚拟IP-Portal IP。对于构成一个services的Pods,它们每个也都是具有自己的IP地址的,用户不需要记住这些Pod的地址,所以引入了前面提到的 Proxy,用户访问一个地址及端口,而由Proxy来将访问流量转发到各个Pod。
  • Label labels是键值对,它附着到类似于pods的对象上。它用来指定对于相关用户具有特殊意义的特殊属性。但是不给核心系统表明语义。 这样做的好处是:使用户可以映射他们自己的组织结构到系统对象。 有效的label key包含两段:可选的前缀和名字,使用/分割。name不能超过63字符。[a-z0-9A-Z]或-或_或.来起始和终止。prefix必须是一个DNS subdomain。 Label Selector: 多个对象可能拥有同样的label。通过Label selector,客户可以区分一组对象。 API现在支持两种类型的selector,equality-based 和 set-based。

最后再通过下图对Kubernetes的构成及功能有一个一目了然的认识:

搭建Kubernetes

几经折腾,总算配置好了一个简单的kubernetes集群。在实验的时候,我总共实验了两种环境,一种是etcd与master 安装到同一台机器,一种是分开安装。这两种本质和方法都一样。主要参考资料是kubernetes的官方文档。下面简单介绍一下环境的搭建过程。

实验环境是一台ubuntu 14.04 64位的laptop。kubernetes搭建在虚拟机上,虚拟机使用的是cetnos7,virtualbox,使用vagrant来配置虚拟机。 Vagrantfile的书写就暂时不提了。后面会上传相关文件到github。

正题开始:

  • 配置计划: 节点 | ip | 依赖 master | 10.100.199.165 | kubernetesminion1 | 10.100.199.201 | kubernetes dockeretcd | 10.100.199.10 | etcd 在每个机器上修改其 1 在master上,添加: ```c 10.100.199.10 etcdSer 10.100.199.201 minion1在minion1上,添加: 1 210.100.199.10 etcdSer 10.100.199.165 master在etcdSer上,添加: 1 210.100.199.165 master 10.100.199.201 minion1虚拟机建立好后,首先要保证三台机器能够互相连同,使用 1 * master节点配置: 在 ```etc/yum.repo.d/``` 路径下新建仓库文件,文件名为```virt7-testing```,内容如下: ```c [virt7-testing] name=virt7-testing baseurl=http://cbs.centos.org/repos/virt7-testing/x86_64/os/ enable=1 gpgcheck=0保存文件后,就可以安装kubernetes 了,命令如下:

1

yum -y install kubernetes

安装成功后,进行命令:

1

kubectl version

会得到如下图的提示:

遇到这个呢,说明还没配置完全,接下来对master节点的关键组件进行配置。

master节点执行的服务是apiserver、scheduler 和 controller manager。当然,首先要对config进行配置。

1

```c # Comma separated list of nodes in the etcd cluser KUBE_ETCD_SERVICES="--etcd_servers=http://etcdSer:4001"

接着是apiserver

12345678

# The address on the local server to listen toKUBE_API_ADDRESS="--address=0.0.0.0"# How the replication controller and the scheduler find the kube-apiserverKUBE_MASTER="--master=http://master:8080"# Comma separated list of nodes in the etcd clusterKUBE_ETCD_SERVERS="--etcd_servers=http://etcdSer:4001"

然后是controller-manager

12

# Comma separated list of minionsKUBELET_ADDRESSES="--machines=minion1"

最后是scheduler, 就目前这个是不需要配置的。

在开启服务之前,最好先将所有的防火墙都关闭,如下:

12

systemctl disable iptables-services firewalldsystemctl stop iptables-servcies firewalld

然后开启服务:

1234

for SERVICES in kube-apiserver kube-controller-manager kube-scheduler;do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICSE

  • minion1节点配置: 跟前面类似,也是先添加virt7-testing仓库并安装kubernetes,注意这个时候docker已经自动安装了,无需另外安装。 对于minion1节点,只需要配置相关组件kubelet,同样在 1 ```c # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces) KUBELET_ADDRESS="--address=0.0.0.0" # You may leave this blank to use the actual hostname KUBELET_HOSTNAME="--hostname_override=minion1"接着也是关闭所有的防火墙如上,然后开启服务:

1234

for SERVICES in kubelet kube-proxy docker;do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICSE

  • etcdSer节点配置: 要给该节点安装etcd,在上面的仓库安装高版本的是可以的,但是后面要修改监听IP,这里使用的是另一个仓库的etcd 0.4.6版本。

1

yum -y install http://cbs.centos.org/kojifiles/packages/etcd/0.4.6/7.el7.centos/x86_64/etcd-0.4.6-7.el7.centos.x86_64.rpm

然后同样关闭防火墙。

至此,三台机器基本配置完毕,接下来在master主机上进行测试,如下

1

kubectl version

提示下图:

然后:

1

kubectl get minions

提示下图:

表示环境配置成功。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubernetes是什么
  • Kubernetes的几个特性
  • Kubernetes的一些概念
  • 搭建Kubernetes
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档