准备:

概念

  • Docker 为代表的容器引擎将软件的发布流程从分发二进制安装包转变为直接分发虚拟化后的整个运行环境,令应用得以实现跨机器的绿色部署;
  • Kubernetes 为代表的容器编排框架,就是把大型软件系统运行所依赖的集群环境也进行了虚拟化,令集群得以实现跨数据中心的绿色部署,并能够根据实际情况自动扩缩。
Kubernetes 前身是 Google 内部已运行多年的集群管理系统 Borg,2014 年 6 月使用 Golang 完全重写后开源。

安装

安装 K8s 的方法非常多,有生产级的安装方法,也有以测试为目标的安装方法。为了方便测试,这里我推荐一种在本地安装 K8s 集群的办法:Kind 首先,你需要根据官方步骤安装 Kind,它是一个命令行工具,使用非常简单。
  1. choco install kind

创建 K8s

新建 config.yaml
  1. kind: Cluster
  2. apiVersion: kind.x-k8s.io/v1alpha4
  3. nodes:
  4. - role: control-plane
  5. kubeadmConfigPatches:
  6. - |
  7. kind: InitConfiguration
  8. nodeRegistration:
  9. kubeletExtraArgs:
  10. node-labels: "ingress-ready=true"
  11. extraPortMappings:
  12. - containerPort: 80
  13. hostPort: 80
  14. protocol: TCP
  15. - containerPort: 443
  16. hostPort: 443
  17. protocol: TCP
执行 kind create 命令,创建 K8s 集群:
  1. kind create cluster --config config.yaml
  2. Creating cluster "kind" ...
  3. Ensuring node image (kindest/node:v1.23.4) 🖼
  4. Preparing nodes 📦
  5. Writing configuration 📜
  6. Starting control-plane 🕹️
  7. Installing CNI 🔌
  8. Installing StorageClass 💾
  9. Set kubectl context to "kind-kind"
  10. You can now use your cluster with:
  11. kubectl cluster-info --context kind-kind

初识K8S

:::color2

K8s 的独特之处在于,它为我们抽象了诸如“启动 10 个容器镜像”这样的过程式的命令,你只需要向 K8s 描述“我需要 10 个容器”。10 个容器是我期望的最终状态,我不管怎么执行命令,执行了多少次命令等过程,我想要的就是这个结果。

:::

用来向 K8s 描述“期望最终状态”的文件,就叫做 K8s Manifest,也可以称之为清单文件。

  • Manifest: 是用来描述如何将容器镜像部署到集群中的。Manifest 的概念非常重要,它会贯穿整个 K8s 的生态系统。
现在,假设我们有了一个 Manifest,我要如何告诉 K8s 呢?换句话说,我们怎么和 K8s 交流?这时候我们需要引入一个工具:Kubectl。 Kubectl 是一个与 K8s 集群交互的工具,通过 Kubectl,我们可以非常方便地以 Manifest 为媒介操作 K8s 集群的对象。就像操作数据库一样,我们可以对 Manifest 所描述的对象进行创建、删除、修改、查找等操作。

部署容器镜像到 K8s

编写 Manifest, flask-pod.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: hello-world-flask
  5. spec:
  6. containers:
  7. - name: flask
  8. image: lyzhang1999/hello-world-flask:latest
  9. ports:
  10. - containerPort: 5000

业务进程、容器镜像和工作负载之间的关系

k8s 基础知识 - 图1

最内层是我们的业务应用进程,外层通过 Docker 镜像以容器化的形式运行,再往外是 K8s 的最小调度单位 Pod。