手记

Kubernetes容器编排入门

最初是FreeBSD,之后是Linux,都相继有了"chroot jail"。为程序指定它的根目录,比如:/home/sam/jail,程序将不会意识到在/home/sam或者更上层目录还有文件的存在。jail目录是程序的根目录,在程序中被标记为/。这样程序便可以像在其自己的主机上运行一样执行命令,而不会意识到其严重的根目录并非是真实主机上的根目录(而只是/home/sam/jail,程序实际是在/home/sam/jail这个”牢笼“下运行),提升了安全性。

之后诞生了Linux容器项目(LXC和LXD),这些项目为程序的网络和存储添加了”jail(现在称为容器)“,以在适当隔离和优化的环境中运行程序。

然后是DockerDocker容器简化了容器操作,从而多个容器可以有效共享使用的软件资源。他们还添加了由大量软件工具组成的在线公共存储库。但是Docker的真正价值在于它使部署可靠且可预测的应用程序环境变得多么容易。

Kubernetes带来了什么

然后,在时间的迷雾中出现了Kubernetes。Kubernetes最初是在Google内部开发的,后来在Cloud Native Computing Foundation的控制下作为开源软件发布。

本质上,Kubernetes就像Docker一样管理容器。但是Kubernetes增加了扩展,负载均衡,网络代理和多节点管理工具等广阔的生态系统。Docker自己的Swarm附带了一套类似的工具,但是至少到目前为止,Kubernetes已经被证明更受欢迎。

与Docker Swarm相比,Kubernetes更是一种原生企业级工具。并不是说Docker Swarm不能在企业中使用-它肯定可以-而是Kubernetes不一定非常适合快速而肮脏的本地开发环境。主要原因是,无论如何在这一点上都需要一个现有的集群,然后其他任何事情才能进行下去。而创建本地集群则需要一个运行中或另一种虚拟机管理程序(hypervisor)。因此,拥有像AWS这样的公共云,您可以在不担心基础架构的情况下自由地配置进入集群的所有零碎零碎,对于Kubernetes而言,其重要性远大于对Docker而言。

令人印象深刻的集成可以抵消Kubernetes更大的资源占用和更陡峭的学习曲线:使用持久性存储卷非常简单。强大的部署监控解决方案也很容易获得。

快速了解Kubernetes集群

基于我的慕课实战课程《Kubernetes实战:高可用集群搭建,配置,运维与应用》的内容,你可以快速了解到Kubernetes的工作方式。集群由工作负载将使用的网络,存储和计算资源组成。集群的物理或虚拟计算机(称为节点)充当主服务器或从服务器。主服务器运行管理所有集群操作的服务。主机本身通过kube-apiserver服务进行管理,该服务响应您使用kubectl客户端软件发送给它的指令。主服务器还负责:

•使用etcd的集群配置数据库
•kube-controller-manager,用于根据集群的期望状态并与测量出的集群的当前状态做比较
•kube-scheduler,用于在配置说明与可用资源之间做平衡

节点由称为kubelet的软件代理控制,并通过kube-proxy服务维护可靠和安全的网络连接。重要的事情-您实际的应用程序工作负荷-发生在节点上的Pod内部,这些Pod正在组织运行应用程序容器本身的结构。多个容器可以在一个Pod上运行,一个Pod内的所有容器共享一个IP地址和计算资源,共同提供应用程序的单个实例。


图:典型的Kubernetes环境的组件

好消息是,kubectl软件足够智能,可以简单地阅读您的YAML配置文档,并在不需要您帮助的情况下使用它来使所有详细信息栩栩如生。如果您想成为一名成功的Kubernetes管理员,那么您真的应该了解所有这些细节。但是同时您对此有所放松可以原谅:大多数动作是不可见的,被我们很快就会看到的相对简单的命令集所隐藏。

快速安装Kubernetes

为了让您不能说我在这里没有给您看任何实用的东西,让我们在Linux机器上安装一个轻量级的Kubernetes版本MicroK8s。这项练习所需的全部就是Snaps软件包管理器。下面这个命令将安装小型概念验证演示所需的所有核心服务,库和二进制文件。

snap install microk8s --classic

为了证明安装成功,要求这个服务列出当前正在运行的所有节点。当然,目前这些还没有。

$ sudo microk8s.kubectl get nodes
No resources found.

但是,有一个具有与之关联的专用IP地址的单一服务

$ sudo microk8s.kubectl get services
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   80s

最后,您可以使用此microk8s.enable命令启用基于浏览器的Kubernetes管理仪表板。您将获得的输出将包括显示和使用您需要连接的身份验证令牌的其他说明。

$ sudo microk8s.enable dns dashboard
Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
[...]
If RBAC is not enabled access the dashboard using the default token retrieved with:

token=$(microk8s.kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s.kubectl -n kube-system describe secret $token

在启用RBAC的设置(microk8s.enable RBAC)中,您需要创建具有受限权限的用户,如https://github.com/kubernetes/dashboard/wiki/Creating-sample-user中所示。

更多有关Kubernetes集群创建、配置、原理和应用的信息,可以参考下面我的课程。


0人推荐
随时随地看视频
慕课网APP