DevOps那些事#关于kubernetes(k8s),这可能是讲的最通俗易懂的一次了

疫情快半年了,不少公司的招聘也已经Freeze了,但是不管招聘如何,技术的发展和对技术的升级渴望是一直存在。今天就讲讲DevOps里比较热门的k8s话题。坊间传说,搞懂k8s,可以赢取“白富美”。

 

想要了解k8S,我们先搞清楚Docker

 

回到2010年,几个搞IT的年轻人,在硅谷成立了一家名叫“dotCloud”的公司。这家公司主要提供基于PaaS的云计算技术服务。

具体来说,是和LXC有关的容器技术。后来,dotCloud公司把自己的容器技术并命名为——Docker。

 

 

 

Docker技术诞生之后,并没有引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。

 

也许出于市场考虑,2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。Docker在行业变得非常火爆,也有更多的大厂给予强力支持。Docker火了后,把公司改成了Docker,也就是这个小海豚。

 

 

 

为啥Docker这么火爆,就是因为它很“轻”,提高了硬件效率。记得我之前做Network Engineer的时候,还当时需要了解Virtual Machine也就是虚拟机,玩游戏的小朋友可能有所听过 VMWare

 

虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。

 

 

大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

 

想要搞懂Docker,其实看它的两句口号就行。

 

第一句,是“Build, Ship and Run”。

第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”

Docker把容器变得标准化了。要理解Docker,你需要明白三个最主要的概念:容器、镜像、仓库。

- 容器是运行在虚拟机上的进程。

- 镜像是一种存储形式,可以理解为数据或应用的副本。

- 仓库是用来存储镜像的。

Docker能够普遍使用起来,很大程度上个得益于Docker的仓库里汇集了很多已经标准化的镜像,大大提升了部署效率。

Docker大规模使用后,就发现了一些现实存在的问题:编排、管理和调度各方面,发现都不是很容易,于是迫于管理需求,需要更高级更灵活的管理,

就在这个时候,K8S出现了。

K8S,就是基于容器的集群管理平台,它的全称,是kubernetes

Kubernetes (简称k8s)近两年大火,如果你是一名云计算从业者,或者运维人员,还不了解kubernetes 的话那你已经OUT了。

Kubernetes是用于自动部署、扩展和容器化应用程序的开源系统。

当我们使用的容器服务多了,面临的访问量增大以后,我们就需要一种工具把这些容器统一的管理起来,需要实现对这些容器的自动部署、扩展和管理。也就是俗称的容器编排。

 

 

上图是Kubernetes的架构图。

从大的模块看,图中包含Master组件(APIs, scheduler, etc),Node节点和cloud端。

Master中,包含负责提供API服务的组件kube-apiserver;作为后台数据库的etcd,监听组件kube-scheduler;运行控制器的组件kube-controller-manager。

Node节点中包括运行在各个节点的客户端的kubelet,运行在各个节点的网络代理组件kube-proxy,支持运行容器底层环境的软件Container Runtime。

Cloud端作为集群外部的附加能力,通过与cloud-controller-manager组件对接,扩展k8s集群云上动态扩展的特性。

 

 

如何上手使用 kubernetes

Kubernetes的安装

Kubernetes有很多种安装方法,这里就不一一介绍了。推荐三种主要的安装方法,感兴趣的朋友可以通过关键词搜索相关教程,按步骤尝试安装。如果遇到问题,可以在匠人的社群提问。

常见的三种安装方法:

- Kuberspray

- Kubeadm

- 手动安装

Kubernetes有哪些优势

为什么我们要用Kubernetes?因为它更省钱,更快,更省力。

Kubernetes和Docker都是开源的,这意味着你不需要支付高昂的授权费用;容器服务从启动到关停,比传统的服务器、虚拟机都要快捷很多;管理方面,Kubernetes提供一整套架构,管理方便,节省了运维的人力。

容器技术是未来发展的必然趋势。如果你从事开发、运维、云计算相关工作,一定要多多关注容器技术的发展。

K8S的架构,略微有一点复杂,我们简单来看一下。

一个K8S系统,通常称为一个K8S集群(Cluster)。

这个集群主要包括两个部分:

  • 一个Master节点(主节点)

  • 一群Node节点(计算节点)

 

一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。

Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod. 

Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。

Kube-proxy,主要负责为Pod对象提供代理。

Fluentd,主要负责日志收集、存储与查询。

 

Pod 是一组紧密关联的容器集合,它们共享 PID、IPC、Network 和 UTS namespace,是 Kubernetes 调度的基本单位。Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。

几个与Kubernetes相关的产品/概念

在Kubernetes的生产实践中,有这几个产品/概念建议你去了解:

Openshift:OpenShift是由Red Hat开发的容器化软件解决方案。他们的主要产品是OpenShift容器平台,这是由Kubernetes管理的平台即服务(PaaS)。

Amazon EKS:Amazon Elastic Kubernetes Service (Amazon EKS) ,这是一项完全托管的 Kubernetes 服务。EKS拥有原生的kubernetes体验,并与AWS其他的云服务无缝的结合,为用户提供极佳的云端容器体验。下期直播我们会着重介绍这个产品。

微服务:由于容器技术的发展,微服务的理念也越来越被人们接受。按照微服务的理念,如果使用容器作为基础设施,能够实现快速部署,快速迭代。很多时候大家会将微服务和容器技术一起谈论,甚至有些公司直接将自己的新建的微服务应用部署在容器平台上。

而采用容器之后,很可能只需要一台服务器,创建十几个容器,用不同的容器,来分别运行不同网元的服务程序。

这些容器,随时可以创建,也可以随时销毁。还能够在不停机的情况下,随意变大,随意变小,随意变强,随意变弱,在性能和功耗之间动态平衡。

 

简直完美!

 

5G时代,核心网采用微服务架构,也是和容器完美搭配——单体式架构(Monolithic)变成微服务架构(Microservices),相当于一个全能型变成N个专能型。每个专能型,分配给一个隔离的容器,赋予了最大程度的灵活。

文 A家小哥

资料来源

1. 光环云

2. 小枣君

 

有想了解DevOps到底干嘛的,可以观看我们的Youtube和B站

 

有想了解谷歌云GCP的,可以观看我们的Youtube和B站

 

有想了解澳洲IT职场薪水的,可以观看我们的Youtube和B站

 

想加入社群讨论,可以扫描二维码加入社群

email

订阅匠人

youtubefacebookweibomeetup