k8s 作为云原生时代的操作系统,学习它的必要性不言而喻! 在学习本教程前,需要注意本教程侧重于实战引导,以渐进式修改代码的方式,将从最基础的 container 容器的定义开始,经过 pod, deployment, service, ingress, configmap, secret 等资源直到用 helm 来打包部署一套完整服务。 所以如果你对容器和 k8s 的基础理论知识不甚了解的话,建议先从官网文档或者其它教程获取基础理论知识,再通过实战加深对知识的掌握!
在开始本教程之前,需要配置好本地环境,以下是需要安装的依赖和包。
我们的旅程从一段代码开始。新建一个 main.go 文件,一切从容器开始。
如果在生产环境中运行的都是独立的单体服务,那么 Container (容器) 也就够用了,那为什么还需要 Pod 呢?
在生产环境中,我们基本上不会直接管理 pod,我们需要 kubernetes 来帮助我们来完成一些自动化操作,例如自动扩容或者自动升级版本,而这就需要用到 deployment 资源。
kubernetes 提供了一种名叫 Service 的资源帮助 pod 提供一个稳定的 Endpoint。Service 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有 pod。
Ingress 可以“简单理解”为服务的网关 Gateway,它是所有流量的入口,经过配置的路由规则,将流量重定向到后端的服务。
在实际的开发当中,有时候我们需要不同的环境来做开发和测试,k8s 提供了名为 Namespace 的资源来帮助隔离资源。
K8S 使用 ConfigMap 来将你的配置数据和应用程序代码分开,将非机密性的数据保存到键值对中。
上面提到,我们会选择以 configmap 的方式挂载配置信息,但是当我们的配置信息需要加密的时候, configmap 就无法满足这个要求。
在实际的开发过程中,还有一类任务是之前的资源不能满足的,即一次性任务。例如常见的计算任务,只需要拿到相关数据计算后得出结果即可,无需一直运行。而处理这一类任务的资源就是 Job。
Helm 帮助您管理 Kubernetes 应用。
在本地 minikube 环境,可以直接通过下面命令开启 Dashboard。更多用法可以参考官网或者自行探索。