jk's notes
  • 来自 B 站上的一小时入门

来自 B 站上的一小时入门

教程不错, 没废话. 直接了当.

b站视频

语雀文档

1. 导读

Kubernetes 为什么困难?

  1. 本身比较复杂, 组件多, 安装过程比较复杂.
  2. 本课程使用 K3s 来讲解学习. 从而避免将时间经历放在环境搭建上.

网络问题, 许多库用不了.

  • 配置阿里云镜像加速.
  • 手动拉取镜像, 导入导出.

K 的版本更新迭代比较快, 改动也会比较大, 官网文档也有问题.

  • 教程采用 1.25 版本 (从 1.24 开始, 移除了对 Docker 的支持, 1.25 使用 containerd 作为容器运行时)

官方文档的坑.

课程最后有一个实战案例.

2. 课程目录

整体分为三个部分:

  1. 第一部分:
    1. 课程导读
    2. K 简介
    3. K 架构
    4. 安装 Minikube
    5. 使用 K3s 快速搭建集群
  2. 常用对象的讲解
    1. Pod (容器集)
    2. Deployment (部署) 与 ReplicaSet (副本集)
    3. Service (服务)
    4. Namespace (命名空间)
  3. 使用配置文件
    1. 声明对象配置
    2. 金丝雀发布

3. Kubernetes 简介

Docker 可以快速部署, 搭建开发, 测试环境. 但是需要大规模部署和管理容器, 就需要使用 Kubernetes 了.

Kubernetes 是:

  • 开源的容器编排引擎, 容器集群管理工具
  • 对容器化应用进行自动化部署, 扩缩和管理

k 的 logo 是舵手, 即管理者. 简称 K8s. Google 在 2014 年开源 K8s.

K8s 可以提供:

  • 服务发现和负载均衡. 管理对外的容器, 与负载均衡各个容器.
  • 存储编排.
  • 自动部署和回滚.
  • 自动装箱计算. 根据配置自动的为容器分配资源 (CPU 和内存).
  • 自我修复. 如哨兵的作用.
  • 秘钥与配置管理. 维护敏感信息.

云原生: CNCF 云原生基金会, Cloud Native Computing Foundation.

Google 牵头的一系列公司, 一起提出.

简单解释, 运行在 K8s 上的应用即云原生应用.

  • 原生应用, 用 Java, Go, Php, ... 开发的应用.
  • 云原生应用, 跑在 K8s 上.

使其具有弹性扩展能力.

可以简单解释为, 采用容器技术为载体, 基于微服务架构思想的一套技术体系和方法论.

K8s 语言无关.

4. K8s 架构

K8s 是一个集群环境 (本质决定), 至少包含一个控制平面 (control panel), 以及一个或多个工作节点 (worker node).

  • Control Panel: 管理工作节点, 维护集群状态. 所有任务分配都来自于此.
  • Worker Node: 负责执行由控制平面分配的请求任务. 运行实际的应用和工作负载.

4.1 控制平面

一般包括:

  • kube-apiserver, K8s 的前端, 与 K8s 集群通信就需要 API, apiserver 就是处理内部与外部请求的.
  • kube-scheduler, 是调度程序, 并用于维护集群状态的好坏.
  • kube-controller-manager, 负责实际运行集群. 它集合了多个控制器.
    • 节点控制器 (Node Controller), 节点故障时进行通知与响应.
    • 任务控制器 (Job Controller), 检测一次性任务的 Job 对象, 然后创建 Pod 来运行任务.
    • 端点控制器 (Endpoint Controller), 填充端点对象 (加入服务与 pod)
    • 服务账户与令牌控制器 (Service Account & Token Controller), 为新命名空间创建默认账户和 API 访问令牌.
  • etcd, 是键值对数据库, 用于存储配置与集群状态数据.

4.2 Node 组件

会运行在每一个节点上, 负责维护运行的 Pod, 并提供 K8s 环境.

一般包括:

  • kubelet, 它会运行在每一个节点上, 保证容器都跑在 Pod 中. 控制平面要在节点中执行什么操作时, kubelet 就会执行该操作.
  • kube-proxy
  • 容器运行时, 其中包括 Pod. Pod 中跑的就是容器.

4.2 逻辑关系

Components of Kubernetes

5. Minikube

官方给的一个工具, 在于简单体验.

  • 单机版 K8s, 用于学习和调试程序.
  • 安装 Minikube 需要 Docker 或虚拟机.
  • 运行环境:
    • 2 Core+
    • 2G+ 内存
    • 20GB+ 硬盘
    • 联网环境
    • Docker (或虚拟机, 推荐 Docker)

安装 Docker (在 VBox 中, Ubuntu22 环境)

curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
sudo usermod -aG docker USER_NAME # 将当前用户加入到 Docker 用户组

配置加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装 Minikube

网站: https://minikube.sigs.k8s.io/docs/

在 Win 下直接使用 exe 安装包即可. 下载后安装, 安装完成后在命令行中即可使用 minikube 命令了.

Ubuntu 下安装使用命令:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

运行使用命令:

minikube

无论是 WIn 还是 Linux 只要可以运行即表示安装成功.

但是按照官方文档介绍的 minikube start 是无法运行的, 需要一个配置:

minikube start --image-mirror-country='cn' --container-runtime=contained

说明:

  • --image-mirror-country='cn' 设置使用国内阿里云镜像
  • --container-runtime=containerd 主要看 minikube 是安装的 k8s 的哪一个版本, 如果是 1.25 因不在使用 docker 可能会有问题.

image-20230720162731963

镜像拉取完成后会创建一个 Docker 容器.'

如果安装失败, 注意要使用 minikube delete 删除清空已下载的残余文件.

image-20230720174633236

会提示在阿里云上下载镜像.

教程视频采用的是 Kubernetes 1.25.0, 今天的版本已经到达 1.27.3, 一直安装失败, 切换到视频中对应的版本即可:

minikube start \
		--image-mirror-country='cn' \
		--container-runtime=containerd \
		--kubernetes-version='v1.25.0'

image-20230721004041607

Kubectl

kubectl 是 k8s 的命令行工具.

  • 实现 K8s API 与控制面板的通信可以使用该工具.
  • 部署程序, 检查和管理集群资源, 以及查看日志使用该工具.

image-20230720175819309

kubectl 不同于其他程序, 它不运行与容器中, 而是直接运行在系统进程中.

可以使用 kubectl get node 来查看节点. 可以查看 minikube 的状态.

image-20230721004223503

可以使用 kubectl get pod -A 查看 K8s 组件的运行状态.

image-20230721004245583

使用 minikube ssh 进入容器.

image-20230721004331803

查看 Kubelet 状态: systemctl status kubelet

不知道为什么, 无该命令, 不知是否与版本等有关系.

image-20230721092342518

启用 Dashboard

执行命令:

minikube dashboard --url --port=63373

image-20230721093005618

然后可以在浏览器中访问:

image-20230721093154208

关掉命令行就无法访问了.

Last Updated:
Contributors: jk