编辑
2022-11-22
kubernetes
00

准备工作

在开始本教程之前,需要配置好本地环境,以下是需要安装的依赖和包。

安装 docker

首先我们需要安装 docker 来打包镜像,如果你本地已经安装了 docker,那么你可以选择跳过这一小节。

推荐安装方法

目前使用 Docker Desktop 来安装 docker 还是最简单的方案,打开官网下载对应你电脑操作系统的包即可 (https://www.docker.com/products/docker-desktop/),

当安装完成后,可以通过 docker run hello-world 来快速校验是否安装成功!

其它安装方法

目前 Docker 公司宣布 Docker Desktop 只对个人开发者或者小型团体免费 (2021年起对大型公司不再免费),所以如果你不能通过 Docker Desktop 的方式下载安装 docker,可以参考 这篇文章 只安装 Docker CLI

安装 minikube

我们还需要搭建一套 k8s 本地集群 (使用云厂商或者其它 k8s 集群都可) 。本地搭建 k8s 集群的方式推荐使用 minikube

可以根据 minikube 快速安装 来进行下载安装,这里简单列举 MacOS 的安装方式,Linux & Windows 操作系统可以参考官方文档 快速安装。

shell
brew install minikube
编辑
2022-11-24
kubernetes
00

Container

我们的旅程从一段代码开始。新建一个 main.go 文件,复制下面的代码到文件中。

go
package main import ( "io" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "[v1] Hello, Kubernetes!") } func main() { http.HandleFunc("/", hello) http.ListenAndServe(":3000", nil) }

上面是一串用 Go 写的代码,代码逻辑非常的简单,首先启动 HTTP 服务器,监听 3000 端口,当访问路由 /的时候 返回字符串 [v1] Hello, Kubernetes!

编辑
2022-11-25
kubernetes
00

Pod

如果在生产环境中运行的都是独立的单体服务,那么 Container (容器) 也就够用了,但是在实际的生产环境中,维护着大规模的集群和各种不同的服务,服务之间往往存在着各种各样的关系。而这些关系的处理,才是手动管理最困难的地方。

Pod 是我们将要创建的第一个 k8s 资源,也是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。在了解 podcontainer 的区别之前,我们可以先创建一个简单的 pod 试试,

我们先创建 nginx.yaml 文件,编写一个可以创建 nginx 的 Pod。

yaml
# nginx.yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx
编辑
2022-11-26
kubernetes
00

Deployment

在生产环境中,我们基本上不会直接管理 pod,我们需要 kubernetes 来帮助我们来完成一些自动化操作,例如自动扩容或者自动升级版本。可以想象在生产环境中,我们手动部署了 10 个 hellok8s:v1 的 pod,这个时候我们需要升级成 hellok8s:v2 版本,我们难道需要一个一个的将 hellok8s:v1 的 pod 手动升级吗?

这个时候就需要我们来看 kubeates 的另外一个资源 deployment,来帮助我们管理 pod。

扩容

首先可以创建一个 deployment.yaml 的文件。来管理 hellok8s pod。

yaml
apiVersion: apps/v1 kind: Deployment metadata: name: hellok8s-deployment spec: replicas: 1 selector: matchLabels: app: hellok8s template: metadata: labels: app: hellok8s spec: containers: - image: guangzhengli/hellok8s:v1 name: hellok8s-container
编辑
2022-11-27
kubernetes
00

Service

经过前面几节的练习,可能你会有一些疑惑:

  • 为什么 pod 不就绪 (Ready) 的话,kubernetes 不会将流量重定向到该 pod,这是怎么做到的?
  • 前面访问服务的方式是通过 port-forword 将 pod 的端口暴露到本地,不仅需要写对 pod 的名字,一旦 deployment 重新创建新的 pod,pod 名字和 IP 地址也会随之变化,如何保证稳定的访问地址呢?。
  • 如果使用 deployment 部署了多个 Pod 副本,如何做负载均衡呢?

kubernetes 提供了一种名叫 Service 的资源帮助解决这些问题,它为 pod 提供一个稳定的 Endpoint。Servie 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。