Kubernetes入门

什么是Kubernetes

Kubernetes,又称为k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 "kube",是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,可以将运行 Linux 容器的多组主机聚集在一起,由Kubernetes帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助 Apache Kafka 进行的实时数据流处理),Kubernetes是理想的托管平台。

Kubernetes最初由Google的工程师开发和设计。Google是最早研发Linux 容器技术的企业之一(组建了cgroups)曾公开分享介绍Google如何将一切都运行于容器之中(这是Google云服务背后的技术)。Google每周会启用超过 20 亿个容器——全都由内部平台Borg支撑。Borg是Kubernetes的前身,多年来开发Borg的经验教训成了影响Kubernetes中许多技术的主要因素。 --RedHatarrow-up-right

相关术语

和其它技术一样,Kubernetes 也会采用一些专用的词汇,这可能会对初学者理解和掌握这项技术造成一定的障碍。为了帮助您了解 Kubernetes,我们在下面来解释一些常用术语。

  • 主机(Master) :用于控制 Kubernetes 节点的计算机。所有任务分配都来自于此。

  • 节点(Node):负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。

  • 容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。

  • **复制控制器(Replication controller):**用于控制应在集群某处运行的完全相同的容器集副本数量。

  • 服务(Service):将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。

  • Kubelet:运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。

  • kubectl: Kubernetes 的命令行配置工具。

系统架构

plantform

关于组件的介绍请参考:https://kubernetes.io/zh/docs/concepts/overview/components/arrow-up-right

部署kubernetes

minikube

Minikube是一种轻量化的Kubernetes集群,是Kubernetes社区为了帮助开发者和学习者能够更好学习和体验k8s功能而推出的,借助个人PC的虚拟化环境就可以实现Kubernetes的快速构建启动。目前已支持在macOS、Linux、Windows平台上利用各类本地虚拟化环境作为驱动运行。

https://minikube.sigs.k8s.io/docs/arrow-up-right

环境要求:

  • 2 CPUs or more

  • 2GB of free memory

  • 20GB of free disk space

  • Internet connection

  • Container or virtual machine manager, such as: Docker, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation

  1. 安装minikube

安装流程可能需要访问404网站,掌握访问404网站和相关规避手段是学习Kubernetes的必备技能。(提示:minikube start --help | grep mirror)

  1. 安装kubectl

思考:

  • 安装kubectl后,在并未配置Kubernetes集群信息的情况下,kubectl是如何集群的信息并与api-server成功通信?(提示:查看~/.kube目录)

  • minikube支持dashboard命令,如何从外部(虚拟机外部)访问dashboard url?

  1. 部署hello-world

提示:请替换yaml文件中image字段为Docker小结中的容器

思考:

  • hello-world.yaml部署了哪些资源?作用分别是什么?

  • 上述文件中共部署了几个hello-world pod,如何在不删除资源的情况增加hello-world pod数量?

  • Service中包含了port、targetPort、nodePort,分别定义什么?含义的是什么?

  1. 验证hello-world

思考:是否有其他方式可以访问hello-world服务?他们的区别是什么?(minikube tunnel、kubectl port-forward等不少于3种)

  1. 使能metrics server

对比使能metrics-server前后kubectl top node返回的结果

提示:metrics-server对应的镜像为k8s.gcr.io/metrics-server/metrics-server:v0.4.2@sha256:[Hash-id],如何解决该问题?(--images)

思考:

Last updated